C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >>
■5841  ファイル操作のエラー処理などはこんなんでどうでしょう
□投稿者/ iwaiwa -(2006/08/23(Wed) 01:39:10)

    分類:[C#] 


    分類:[C#] 

    中@管理人
    タイトルが意味がわかりませんでしたので変更しました。
    ================================
    こんにちは。

    ファイル保存に関するプログラムを書いていて気になったことがあります。
    以下のような書き方をしていたとして、何か問題があるとすれば、
    どんな点ですか?エラー処理の観点などから、ご指摘頂ければと思っています。

    非常に曖昧な質問で恐縮ですが、ご指摘ください。
    よろしくお願い致します。

    ---------------------------

    private void SaveFile(string fileName, RichTextBox richTextBox, ToolStripStatusLabel statusLabel)
    {
    SaveFileDialog saveFileDialog = new SaveFileDialog();

    saveFileDialog.Filter = "テキストファイル (*.txt)|*.txt|"
    + "Word 文書 (*.doc)|*.doc|"
    + "リッチ テキスト形式 (*.rtf)|*.rtf";

    // デフォルトファイル名
    saveFileDialog.FileName = fileName;

    // ダイアログを開く
    DialogResult result = saveFileDialog.ShowDialog();

    if (result == DialogResult.OK)
    {
    StreamWriter writer = new StreamWriter(saveFileDialog.FileName, false, Encoding.GetEncoding("Shift_JIS"));

    try
    {
    statusLabel.Text = "ファイルを保存しています...";

    if (saveFileDialog.FilterIndex > 1)
    {
    // リッチテキスト
    writer.Write(richTextBox.Rtf);
    }
    else
    {
    // テキスト形式
    writer.Write(richTextBox.Text);
    }
    }
    catch (Exception ex)
    {
    // エラーメッセージを表示
    MessageBox.Show(ex.Message,
    "エラー",
    MessageBoxButtons.OK,
    MessageBoxIcon.Error);
    }
    finally
    {
    writer.Close();
    statusLabel.Text = String.Empty;
    }
    }
    }

親記事 /0過去ログ5より / 関連記事表示
削除チェック/

■5869  ストアドを用いたデータ取得について
□投稿者/ Saitou -(2006/08/23(Wed) 11:40:33)

    分類:[C#] 


    分類:[C#] 

    はじめまして。
    C#初心者で、社内に詳しい人がいなくて困っています。
    どなたか、アドバイスお願いいたします。

    WEBアプリで入力値をストアドに渡して、
    戻り値をOracleRefCursorで取得後、テキストに書き込み、ダウンロードするシステムです。

    「cmd.ExecuteNonQuery();」の後が、実行されません。
    デバッグを実行したところ、引数のセットもされていました。
    戻り値の定義もされていました。
    Oracleのエラーはcatch文で捕まえるようになっていますが、通過しました。

    -----------抜粋---------------------------------
    string CmdTxt = "";
    OracleCommand cmd = new OracleCommand(CmdTxt,con);

    CmdTxt = "「パッケージ名」.「プロシージャ名」";

    cmd.CommandText = CmdTxt;
    cmd.CommandType = CommandType.StoredProcedure;

    〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
    (中略)
    ストアドに渡す引数のセットと、戻り値の定義
    〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

    cmd.ExecuteNonQuery();

    OracleRefCursor cur1 = (OracleRefCursor)cmd.Parameters[10].Value;

    OracleDataReader rdr1 ;

    rdr1 = cur1.GetDataReader();

親記事 /0過去ログ5より / 関連記事表示
削除チェック/

■5205  Re[2]: FtpWebRequestでFTPプロキシ経由のFTP接続
□投稿者/ さすけ -(2006/07/31(Mon) 12:48:17)

    分類:[C#] 

    Hongliangさん、回答ありがとうございます

    No5204に返信(Hongliangさんの記事)
    > http://msdn2.microsoft.com/ja-jp/library/system.net.ftpwebrequest.aspx
    > 解説に全ての答えが載っているように見えますが?

    済みません、見落としておりました。
    proxyに設定して試してみます。

    ありがとうございました。

    ---- ページの抜粋 ----

    Proxy プロパティが、直接または構成ファイルのいずれかで設定された場合、FTP サーバーとの通信は、指定したプロキシを経由して行われます。指定したプロキシが HTTP プロキシの場合は、DownloadFile、ListDirectory、および ListDirectoryDetails の各コマンドだけがサポートされます。

記事No.5203 のレス /0過去ログ5より / 関連記事表示
削除チェック/

■5407  Re[1]: 他のフォームからの呼び出し
□投稿者/ 魔界の仮面弁士 -(2006/08/10(Thu) 15:34:32)

    分類:[C#] 

    > 1.フォームA(ラベルとボタンを設置)とフォームB(ボタンを設置)を用意する。
    > 2.フォームAに設置したボタンを押すとフォームBが呼び出される。
    > 3.フォームBのボタンを押すと、フォームAの関数を呼び出す。

    ★案 1 ★ イベントを公開する。

    //-------- Form1 (呼び出す側) --------
    public partial class Form1 : Form
    {
    public Form1() { InitializeComponent(); }

    private void button1_Click(object sender, EventArgs e)
    {
    using (Form2 dialog = new Form2())
    {
    dialog.ButtonClicked += new EventHandler(dialog_ButtonClicked);
    dialog.ShowDialog();
    }
    }

    void dialog_ButtonClicked(object sender, EventArgs e)
    {
    MessageBox.Show("Form1 内のメソッド");
    }
    }


    //-------- Form2 (呼び出される側) --------
    public partial class Form2 : Form
    {
    public Form2() { InitializeComponent(); }

    public event EventHandler ButtonClicked;
    private void button1_Click(object sender, EventArgs e)
    {
    if (ButtonClicked != null)
    ButtonClicked(sender, e);
    }
    }



    ★案 2 ★ デリゲートを渡す。

    //-------- Form1 (呼び出す側) --------
    public partial class Form1 : Form
    {
    public Form1() { InitializeComponent(); }
    private void OnButtonClicked()
    {
    MessageBox.Show("Form1 内のメソッド");
    }
    private void button1_Click(object sender, EventArgs e)
    {
    using (Form2 dialog = new Form2())
    {
    dialog.ShowDialog(OnButtonClicked);
    }
    }
    }


    //-------- Form2 (呼び出される側) --------
    public partial class Form2 : Form
    {
    public Form2() { InitializeComponent(); }

    public delegate void ButtonClicked();
    private ButtonClicked OnButtonClicked;
    public DialogResult ShowDialog(ButtonClicked function)
    {
    OnButtonClicked = function;
    return base.ShowDialog();
    }
    private void button1_Click(object sender, EventArgs e)
    {
    if (OnButtonClicked != null)
    OnButtonClicked();
    }
    }

記事No.5404 のレス /0過去ログ5より / 関連記事表示
削除チェック/

■5361  Re[7]: マウスの左クリックを押した状態かそうでないかを判断したい
□投稿者/ らん -(2006/08/08(Tue) 13:36:21)

    分類:[C#] 

    ぽぴ王子さん、Sourceをありがとうございます。
    説明が下手ですみません。

    > if ((e.Button & MouseButtons.Right) == MouseButtons.Right)
    > {
    > Console.WriteLine("右押された");  <<------@
         Aこの時左ボタンも押されていた場合の処理を実行
    > }
    > if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
    > {
    > Console.WriteLine("左押された");
    > }

    上記で、たとえば右クリックしたら、@で「右押された」が出力されますが、
    その後に、左ボタンを押している状態ならAの処理にはいりたいわけなのです。
    ボタンは同時に押せるわけですから、右ボタンクリック時の、左ボタンの状態
    をとりたいのです。

    できますでしょうか?

    度々すみませんが、よろしくお願い致します。


記事No.5336 のレス /0過去ログ5より / 関連記事表示
削除チェック/

■5157  動的バインドDropDownListの値設定
□投稿者/ Glen -(2006/07/28(Fri) 11:46:37)

    分類:[VB.NET] 


    分類:[VB.NET] 

    はじめてこちらにたどりついたものです。

    いろいろ調べてもどうしても解決できず書き込みさせていただきます。

    VB.NET(Framework2.0)で開発しています。IDEはVWD2005Expressです。

    DetailsViewがEditモードになった時に
    DetailsView上に二つのDropDownListを配置しています。

    一つ目のDropDownListは静的ObjectDataSourceでリストを設定しています。
    SelectedValueはDetailsViewのDataSourceよりEvalでとってます。

    --------source----------
    一つ目
    <EditItemTemplate>
    <asp:DropDownList
    ID="ddlCategory"
    runat="server"
    DataSourceID="CategoryListDataSource"
    DataTextField="Category Name"
    DataValueField="Category ID"
    SelectedValue='<%# Eval("[Category ID]")%>'
    AutoPostBack="True"
    OnSelectedIndexChanged="ddlCategory_SelectedIndexChanged"
    >
    </asp:DropDownList>
    </EditItemTemplate>
    二つ目
    <EditItemTemplate>
    <asp:DropDownList
    ID="ddlProduct"
    runat="server"
    DataTextField="Product Name"
    DataValueField="Product ID"
    AutoPostBack="True"
    OnSelectedIndexChanged="ddlProduct_SelectedIndexChanged"
    >
    </asp:DropDownList>
    </EditItemTemplate>


    二つ目のDropDownListの初期リストはDetailsViewのOnDataBoundメソッドの中で
    一つ目のDropDownListの値を使って動的にObjectDataSourceをバインドして設定してます。
    SelectedValueは退避させておいたラベルより同じOnDataBoundメソッドの最後に設定してます。

    --------source----------
    Protected Sub detailsView_DataBound(ByVal sender As Object, ByVal e As System.EventArgs)

    If detailsView.CurrentMode = DetailsViewMode.Edit Then

    ProductListDataSource.SelectParameters.Clear()
    ProductListDataSource.SelectParameters.Add(New Parameter("categoryID"), TypeCode.String, CType(detailsView.FindControl("ddlCategory"), DropDownList).SelectedValue))

    CType(detailsView.FindControl("ddlProduct"), DropDownList).DataSource = "ProductListDataSource"
    CType(detailsView.FindControl("ddlProduct"), DropDownList).DataBind()
    CType(detailsView.FindControl("ddlProduct"), DropDownList).SelectedValue = CType(detailsView.FindControl("lblProduct"), Label).Text

    End If
    End Sub

    EditモードでDetailsViewが表示された後、一つ目のDropDownListを変更するとSelectedIndexChangedメソッドが発生し、そのメソッドの中で二つ目のDropDownListのリストを動的に書き直します。

    --------source----------
    Protected Sub ddlCategory_SelectedIndexChanged(ByVal sender As Object, Byval e As System.EventArgs)

    CType(detailsView.FindControl("ddlProduct"), DropDownList).Items.Clear()
    CType(detailsView.FindControl("ddlProduct"), DropDownList).ClearSelection()
    ProductListDataSource.SelectParameters.Clear()
    ProductListDataSource.SelectParameters.Add(New Parameter("categoryID",TypeCode.String, CType(detailsView.FindControl("ddlCategory"),DropDownList).SelectedValue))
    CType(detailsView.FindControl("ddlProduct"),DropDownList).SelectedValue = Nothing
    CType(detailsView.FindControl("ddlProduct"),DropDownList).DataSource = ProductListDataSource
    CType(detailsView.FindControl("ddlProduct"),DropDownList).DataBind()

    End Sub

    ここまでは思ったとおりに動いてくれてます。

    ところがその後二つ目のDropDownListの選択ができません。
    一つ目のDropDownListを初期値に選択しなおすと二つ目のDropDownListが変更可能になりますが、一つ目のDropDownListを変更すると二つ目のDropDownListのリストは書き直されますがいつも一番上が選択された状態になってしまいす。

    debugすると一つ目のDropDownListが変更された後に、二つ目のDropDownListをッ変更すると、なぜか一つ目のDropDownListのSelectedIndexChangedメソッドが呼ばれてSelectedValue=Nothingを通っているようなのですが、一つ目のDropDownListが初期値の場合は二つ目のDropDowList変更時に一つ目のSelectedIndexChangedメソッドが呼ばれていません。

    説明がわかりづらくてすいません。
    要は一つ目のDropDownList変更→二つ目のDropDownListのリスト書き直し→二つ目のDropDownList選択、という処理ができればいいんですが・・・。

    どなたかお知恵をお貸しいただければ幸いです。
    よろしくお願いいたします。




親記事 /0過去ログ5より / 関連記事表示
削除チェック/

■5110  DataGridにノード記号を出さないように実装して、MainテーブルとSubテーブルのレコードを削除するには?
□投稿者/ ねっとかふぇ常連 -(2006/07/25(Tue) 19:19:50)

    分類:[VB.NET] 


    分類:[VB.NET] 

    DataGridにノード記号を出さないように実装して、MainテーブルとSubテーブルのレコードを削除するには?


    vb.net 2003

    どうかよろしければ、私の質問に答えてやってください。
    (頑張って表現したつもりではありますが、この文章でうまく伝わるか不安・・)


    次のような構造の2つのテーブルを使います。(KEY)は主キーです。
    [TMAIN] ------ メインテーブル
    CODE_MAIN(KEY)
    F1
    F2

    [TDETAIL] ---- 詳細テーブル
    CODE_MAIN(KEY)
    CODE_SUB(KEY)
    F1
    F2

    フォームにデータグリッド[dgMain]を置いて、そこにはメインテーブル[TMAIN]を表示させます。
    DataSource = DsMain1
    DataMember = TMAIN

    表示はうまく出来ました。

    このときにグリッドの選択された行を削除するボタンを作ることが目的です。
    ただし、
    ・メインテーブルに関連して詳細テーブルのレコードも削除されること。
    ・DataGridにノード記号[+]を出さないように実装すること。
    この2つことを同時に満たしたいのです。


    いろいろ考えた末、以下のようなコードが出来上がりました。
    txtDetailCodeMain を隠しているのですが、もっと良い方法は無いものでしょうか?

    よろしくお願いします。

    ----------------------------------
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    odaMain.Fill(DsMain1, "TMAIN")
    odaDetail.Fill(DsDetail1, "TDETAIL") '
    'odaDetail.Fill(DsMain1, "TDETAIL")

    txtDetailCodeMain.Width = 0
    dgMain.ReadOnly = True
    End Sub

    Private Sub dgMain_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles dgMain.Paint
    '行選択
    If Me.BindingContext(DsMain1, "TMAIN").Count > 0 Then
    dgMain.Select(dgMain.CurrentCell.RowNumber)
    End If
    End Sub

    Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
    Dim i As Integer
    Dim mList1 As New ArrayList

    Dim mList2 As New ArrayList

    '選択されたデータグリッドのレコード番号をコレクションに保持
    With dgMain
    Dim mCount As Integer = .BindingContext(.DataSource, .DataMember).Count
    '逆順に入れる
    For i = mCount - 1 To 0 Step -1
    If .IsSelected(i) = True Then
    mList1.Add(i) 'グリッドのレコード番号
    mList2.Add(.Item(i, 0)) 'CODE_MAIN
    End If
    Next i
    End With

    If mList1.Count = 0 Then
    '//削除しない
    Exit Sub
    ElseIf MessageBox.Show("選択した " & mList1.Count.ToString & " 行を削除してもよろしいですか?" & vbCrLf & vbCrLf & _
    "※注意)次のテーブルで該当するレコードが全て削除されます。   " & vbCrLf & vbCrLf & _
    "メインテーブル" & vbTab & "[TMAIN]" & vbCrLf & _
    "詳細テーブル" & vbTab & "[TDETAIL]" & vbCrLf & _
    "" _
    , "削除" _
    , MessageBoxButtons.OKCancel _
    , MessageBoxIcon.Question _
    , MessageBoxDefaultButton.Button2) <> DialogResult.OK Then
    '//削除しない
    Exit Sub
    Else

    '//削除処理
    Do While mList1.Count
    '--------------------------------------------------------------------------------------------
    'メインテーブルポジション移動
    Me.BindingContext(DsMain1, "TMAIN").Position = mList1(0)

    '''--------------------------------------------------------------------------------------------
    '''詳細テーブル削除(メインテーブル削除より先に実行する)
    ''Do While Me.BindingContext(DsMain1, "TMAIN.subMainDetail").Count > 0
    '' Me.BindingContext(DsMain1, "TMAIN.subMainDetail").RemoveAt(0)
    ''Loop


    'DsMain1の中にリレーションシップで、[TDETAIL] を入れると上記のコードでうまく削除できました。
    'が、グリッド[dgMain]の左端に、[+]プラス記号が現れてしまいます。
    '
    'これが嫌なので、もう一つのデータセット[DsDetail1]を作って下記のコードにしてみたら、
    'うまく削除されました。
    'でも、txtDetailCodeMain は、TDETAIL の CODE_MAIN を Bindingして隠したものです。
    'もっと良い方法は無いものでしょうか?

    '--------------------------------------------------------------------------------------------
    '詳細テーブル削除
    i = 0
    Do While i < Me.BindingContext(DsDetail1, "TDETAIL").Count
    Me.BindingContext(DsDetail1, "TDETAIL").Position = i

    If Not (mList2(0) = txtDetailCodeMain.Text) Then
    i += 1
    Else
    Me.BindingContext(DsDetail1, "TDETAIL").RemoveAt(Me.BindingContext(DsDetail1, "TDETAIL").Position)
    End If
    Loop

    '--------------------------------------------------------------------------------------------
    'メインテーブル削除
    Me.BindingContext(DsMain1, "TMAIN").RemoveAt(Me.BindingContext(DsMain1, "TMAIN").Position)
    'Me.BindingContext(DsMain1, "TMAIN").RemoveAt(mList1(0))


    '--------------------------------------------------------------------------------------------
    'コレクションを削除
    mList1.RemoveAt(0)
    mList2.RemoveAt(0)
    Loop

    '再表示
    odaMain.Update(DsMain1, "TMAIN")
    odaDetail.Update(DsDetail1, "TDETAIL") '
    'odaDetail.Update(DsMain1, "TDETAIL")

    DsMain1.Clear()
    odaMain.Fill(DsMain1, "TMAIN")
    DsDetail1.Clear() '
    odaDetail.Fill(DsDetail1, "TDETAIL") '
    'odaDetail.Fill(DsMain1, "TDETAIL")
    End If
    End Sub

親記事 /0過去ログ5より / 関連記事表示
削除チェック/

■4963  PictureBoxに文字列を表示したい
□投稿者/ さすけ -(2006/07/13(Thu) 17:40:26)

    分類:[C#] 


    分類:[C#] 

    さすけです。

    お世話になります。

    PictureBoxに文字列を表示するために、下記のコーディングを行いました。

    ※Visual C# 2005 Express Edition
    ※PictureBox(pictureBox1)はFormに貼り付けたのみ。
    ※PictureBoxにはイメージを設定しておりません。
    ※PictureBoxのプロパティはサイズを変更した程度です。

    ---------------------------------------------------------------------------
    using (Font font = new Font("MS Pゴシック", 15))
    using (Graphics graphics = pictureBox1.CreateGraphics())
    {
    graphics.DrawString("描画テスト",
    font,
    new SolidBrush(Color.Black),
    new Point(10, 10),
    new StringFormat()
    );
    }
    ---------------------------------------------------------------------------

    が、文字列が表示されません・・・orz
    コーディング(引数など)で問題、抜け等がありますでしょうか?

    よろしくお願いいたします。

親記事 /0過去ログ5より / 関連記事表示
削除チェック/

■7102  Re[8]: Excelのバージョンの違いをカプセル化する方法について
□投稿者/ 魔界の仮面弁士 -(2006/10/03(Tue) 14:18:51)

    分類:[C#] 

    2006/10/03(Tue) 14:50:59 編集(投稿者)

    > ただ一つ気になるのは、2003しか入っていない環境にも関わらずRangeのValueプロパティが使えたり

    2003 であろうとなかろうと、Range オブジェクトは、Value プロパティを持っているのでは。
    以下、Excel 8(Excel 97) と Excel 11(Excel 2003) のタイプライブラリの比較。


     [uuid(00020846-0000-0000-C000-000000000046)]
     dispinterface Range
     {
      (…略…)
      #if EXCEL8
       [id(0x00000006), propget]
       VARIANT Value();

       [id(0x00000006), propput]
       void Value([in] VARIANT rhs);
      #elseif EXCEL11
       [id(0x00000006), propget]
       VARIANT Value([in, optional] VARIANT RangeValueDataType);

       [id(0x00000006), propput]
       void Value([in, optional] VARIANT RangeValueDataType, [in] VARIANT rhs);
      #endif
      (…略…)
     };


     [uuid(00020846-0001-0000-C000-000000000046)]
     interface IRange : IDispatch
     {
      (…略…)
      #if EXCEL8
       [propget]
       HRESULT _stdcall Value([in, lcid] long lcid, [out, retval] VARIANT* RHS);

       [propput]
       HRESULT _stdcall Value([in, lcid] long lcid, [in] VARIANT RHS);
      #elseif EXCEL11
       [propget]
       HRESULT _stdcall Value([in, optional] VARIANT RangeValueDataType,
                  [in, lcid] long lcid, [out, retval] VARIANT* RHS);
       [propput]
       HRESULT _stdcall Value([in, optional] VARIANT RangeValueDataType,
                  [in, lcid] long lcid, [in] VARIANT RHS);
      #endif
      (…略…)
     };


    > WorkBookのOpenメソッドの引数がファイルパスのみだったりと、
    Workbook.Open というメソッドは、定義されていないと思います。(Open イベントの事では無いですよね?)

    Workbooks.Opens というメソッドならば定義されていますけれども、それにしても
    「引数がファイルパスのみ」という定義では無く、『[in, optional] VARIANT ReadOnly』などの
    省略可能な引数が十数個ほど用意されているはずです。

    ------------

    <Excel97>
     [id(0x000002aa)]
     HRESULT Open([in] BSTR Filename, /* 12個のoptional引数 */, [in, lcid] long lcid, [out, retval] Workbook** RHS);
    </Excel97>

    <Excel2003>
     [id(0x000002aa)]
     HRESULT _Open([in] BSTR Filename, /* 12個のoptional引数 */, [in, lcid] long lcid, [out, retval] Workbook** RHS);

     [id(0x00000783)]
     HRESULT Open([in] BSTR Filename, /* 14個のoptional引数 */, [in, lcid] long lcid, [out, retval] Workbook** RHS);
    </Excel2003>
記事No.7041 のレス / END /過去ログ6より / 関連記事表示
削除チェック/

■6984  共通変数の設定方法について
□投稿者/ みぃみ -(2006/09/29(Fri) 16:33:32)

    分類:[VB.NET] 


    分類:[VB.NET] 

    いつもお世話になっております。
    VB2005・XP Professionalを使用しております。
    どう説明するのが一番いいのか手探りの状態で、
    説明が長くなること、ご容赦ください。

    ODP.NETを使用して、データベースに接続し、
    btn1を押下すると、ListBox1にテーブル一覧が表示されます。
    ListBox1からテーブルを1つ選択した状態で、
    btn2を押下すると、DataGridView1に選択したテーブルの内容が
    表示されます。

    ところが、下記コードでは、btn2押下時に、
    共通変数のところでエラーが発生します。

    ****以下コード******
    /////共通変数.vb/////
    Imports Oracle.DataAccess.Client
    Imports Oracle.DataAccess.Types

    '---- Oracle 接続 ----
    Public pConnectionStr As String = "***"
    Public pUserId As String = "***"
    Public pPassWord As String = "***"

    Public mCON As New OracleConnection 'データベースコネクション
    Public Sub DBConnect()

    'DB接続
    mCON.ConnectionString = "User Id=" & pUserId & _     ’ここにエラーがでます
    "; PassWord=" & pPassWord & _  ’ここにエラーがでます
    "; Data Source=" & pConnectionStr ’ここにエラーがでます

    mCON.Open()
    End Sub

    Public Sub DBNonConnect()

    'DB切断
    mCON.Close()
    mCON = Nothing

    End Sub
    End Module


    /////btn2クリック時///////
    Private Sub btn2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDate.Click

    Dim mCON As New Oracle.DataAccess.Client.OracleConnection
    Dim da As New Oracle.DataAccess.Client.OracleDataAdapter("SELECT * FROM " & txtTableName.Text, mCON)
    Dim ds As New DataSet

    Call DBConnect()
    da.Fill(ds, txtTableName.Text)

    Me.DataGridView1.DataSource = ds
    Me.DataGridView1.DataSource = ds.Tables(txtTableName.Text)

    mCON.Close()
    End If
    End Sub

    ******コード終わり******

    エラー内容は、NullReferenceExceptioはハンドルされませんでした。
           オブジェクト参照がオブジェクトインスタンスに設定されていません。
    です。


    btn1押下時は、共通変数を問題なくもってくることが出来ます。

    ****btn1のコード******
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim LSQL As String
    Dim mCMD As New Oracle.DataAccess.Client.OracleCommand
    Dim LRst As Oracle.DataAccess.Client.OracleDataReader

    Call DBConnect()
    LSQL = "select * from **** order by TABLE_NAME"

    mCMD.Connection = mCON
    mCMD.CommandText = LSQL
    LRst = mCMD.ExecuteReader

    Do While LRst.Read
    'テーブル名を出力()
    ListBox1.Items.Add(LRst("TABLE_NAME"))
    Loop
    ' 終了処理
    LRst.Close()
    Call DBNonConnect()

    End Sub
    ******************

    btn2で、共通変数が上手く持ってこれていないと思うのですが、
    どこに問題があるのでしょうか。
    ためしに、共通変数を使わずに、btn2のところに直接コードを
    記入すると、上手く表示はできました。(砂時計が動いたままですが・・)

親記事 /0過去ログ6より / 関連記事表示
削除チェック/

■6876  datagridの列名
□投稿者/ 悶々 -(2006/09/27(Wed) 10:36:36)

    分類:[VB.NET] 


    分類:[VB.NET] 

    毎度お世話になっております。
    ↓のプログラムはCSVファイルを読込み、グリッドに表示させるものなんですが、この場合列名は何になるんでしょうか?
    というのも、ソートさせたり抽出させたりするコード
    'dataTable.DefaultView.Sort = "○○○ ASC"

    を追加したいのですが、その時に「列○○○が存在しません」となってしまうのです。
    お願いします。
    --------------------------------------------------------------------------------------------------------------
    Imports System.Data.OleDb
    Public Class Form1
    Inherits System.Windows.Forms.Form
    --------------------------------------------
    -----略-------------------------------------
    --------------------------------------------

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim oConn As New OleDbConnection
    Dim oCommand As New OleDbCommand
    Dim oDataAdapter As New OleDbDataAdapter
    Dim oDataSet As New DataSet
    Dim dataTable As DataTable

    Try
    Dim ts As New DataGridTableStyle 'テーブルスタイル
    Dim cs1 As New DataGridTextBoxColumn 'カラムスタイル1列目
    Dim cs2 As New DataGridTextBoxColumn 'カラムスタイル2列目
    Dim cs3 As New DataGridTextBoxColumn 'カラムスタイル3列目

    'テーブルの作成
    dataTable = oDataSet.Tables.Add("t_Data")

    'DB接続文字列の設定
    oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + _
    "Data Source=" + Application.StartupPath + "\;" + _
    "Extended Properties=""Text;HDR=NO;FMT=Delimited"""

    'コネクションの設定
    oCommand.Connection = oConn

    'SQL文の設定
    Const strSelectSyain As String = _
    "SELECT * FROM vb.csv "
    oCommand.CommandText = strSelectSyain

    'データを取得する
    oDataAdapter.SelectCommand = oCommand
    oDataSet.Clear()
    oDataAdapter.Fill(oDataSet, "t_Data")

    'テーブルスタイルの作成
    ts.MappingName = dataTable.TableName

    'カラムスタイルの作成
    cs1.MappingName = dataTable.Columns(0).ColumnName 'カラム名のセット
    cs1.HeaderText = "製造番号" '列名の見出しのセット

    cs2.MappingName = dataTable.Columns(1).ColumnName 'カラム名のセット
    cs2.HeaderText = "納期" '列名の見出しのセット

    cs3.MappingName = dataTable.Columns(2).ColumnName 'カラム名のセット
    cs3.HeaderText = "受注先" '列名の見出しのセット

    'テーブルスタイル/カラムスタイルの適用
    DataGrid1.TableStyles.Add(ts)
    ts.GridColumnStyles.Add(cs1)
    ts.GridColumnStyles.Add(cs2)
    ts.GridColumnStyles.Add(cs3)

    'DataGridに設定を反映
    DataGrid1.SetDataBinding(oDataSet, dataTable.TableName)

    Catch oExcept As Exception
    '例外が発生した時の処理
    MessageBox.Show(oExcept.ToString, "エラー")

    End Try
    End Sub
    End Class
    -------------------------------------------------------------------------------------------------------------------
親記事 /0過去ログ6より / 関連記事表示
削除チェック/

■6796  DataGridでIndexOutOfRangeExceptionが発生する
□投稿者/ もんもん -(2006/09/25(Mon) 14:36:14)

    分類:[VB.NET] 


    分類:[VB.NET] 

    あるHPを参考にしてデータグリッドを行選択モードにしよう思い以下のプログラムをつけたしたのですが
    「'System.IndexOutOfRangeException' のハンドルされていない例外が system.windows.forms.dll で発生しました。
    追加情報 : インデックスが配列の境界外です。」
    となってしまいます。
    csv形式のデータを読み取ってデータグリッドに表示させていますので、おそらく読み始める時は行が0行なので例外が発生するものと思うのですが、これをどうやって解決したらいいでしょうか。



    -----------------------------------------------------------------------------------
    Private Sub datagrid1_Paint(ByVal sender As Object, ByVal e As System. _
    Windows.Forms.PaintEventArgs) Handles dbgShohin.Paint
    datagrid1.Select(dbgShohin.CurrentCell.RowNumber)
    End Sub
    ----------------------------------------------------------------------------------



    --
    タイトルを編集しました
    中@管理人
親記事 /0過去ログ6より / 関連記事表示
削除チェック/

■6823  Re[3]: ウェブブラウザもどきを作成中
□投稿者/ 魔界の仮面弁士 -(2006/09/25(Mon) 22:20:53)

    分類:[VB.NET] 

    > 1番の方法でお願いします

    うーむ。提示した3種の中では、もっとも一番難易度が高い気も。(^^;
    とりあえず、こんな感じとか。

    -------------------------
    Option Strict Off
    Imports System.Runtime.InteropServices

    <ComImport(), Guid("64AB4BB7-111E-11D1-8F79-00C04FC2FBE1")> _
    Public Class ShellUIHelper
    End Class

    Module Module1

    Sub Main()
    Dim url As String = "http://www.google.co.jp/webhp?complete=1&hl=ja"
    Dim title As String = "サジェスト"

    Dim helper As Object = Nothing
    Try
    helper = New ShellUIHelper()

    MsgBox("お気に入りの整理")
    helper.ShowBrowserUI("OrganizeFavorites", 0)

    MsgBox("お気に入りの追加")
    helper.AddFavorite(url, CObj(title))
    Finally
    If helper IsNot Nothing AndAlso Marshal.IsComObject(helper) Then
    Marshal.ReleaseComObject(helper)
    End If
    End Try
    End Sub

    End Module
    -------------------------

    でもって、取り出しについては……
    Dim Path As String = Environment.GetFolderPath(Environment.SpecialFolder.Favorites)
    で示されるパスの内容を列挙して、ショートカットを調べるとか。


    > ラベルか何かを追加してと検討違いな事を考えていました。
    VB2005 で、ApplicationSettings のプロパティ連結機能を使えば、
    コントロールの内容を自動セーブ/自動ロードさせる事が可能なので、
    その方法でも不可能ではなかったりします。
    http://www.microsoft.com/japan/msdn/vs05/vbasic/vbmysettings.aspx


    > 3番のファイル入出力の方法について魔界の仮面弁士さんがお勧めの参照ページがありましたら教えて頂けませんか?

    ファイル入出力の方法はいろいろありますが、たとえば、XmlSerializer や
    BinaryFormatter を使うという方法があります。下記を参照してみてください。

    [オブジェクトの内容をXMLファイルに保存、復元する]
    http://dobon.net/vb/dotnet/file/xmlserializer.html

    [オブジェクトをXMLでシリアライズ]
    http://www.atmarkit.co.jp/fdotnet/easyxml/index/index.html

    [XML シリアル化の概要]
    http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpguide/html/cpconintroducingxmlserialization.asp
    http://msdn2.microsoft.com/ja-jp/library/182eeyhh.aspx

記事No.6815 のレス /0過去ログ6より / 関連記事表示
削除チェック/

■6776  Re[6]: グリッドにデータを入れる関数?
□投稿者/ miyuki -(2006/09/24(Sun) 22:45:23)

    分類:[C#] 

    > つまりこの、テーブル上でのフィールド名とそれに対応するグリッド上の位置を対応表にしておいて、グリッドに配置するときにその対応表に基づけ、と。
    返信ありがとうございます。
    その対応表を作るというのは分かるのですが、
    具体的に対応表ってどのようにプログラムで作成するのでしょうか?
    よろしくお願いします。
    ----------------------------------
    だくさんのやり方はかなり良い感じで成功しました。
    (自分で投稿したプログラムも少し間違っていて、年数毎に行を作成しないといけないのに、毎回データ毎に行を作るという変なプログラムになっていました・・・もう一度しっかりと整理します)
    やってみて少し問題が出たのですが、1期〜4期のデータは絶対に入っている事はないというのが問題です。
    全てデータが入っていたらOKなのですが、
    データが、
    "2006","1","4/1"
    "2006","2","7/1"
    "2006","4","1/1"
    という感じで3期のデータが入っていない場合は、
    データ無しと表示しなくてはならないのです。
    データ無し表示はどうしようか迷っています。
    何か簡単な良いアイディアないでしょうか?
記事No.6737 のレス /0過去ログ6より / 関連記事表示
削除チェック/

■6737  グリッドにデータを入れる関数?
□投稿者/ miyuki -(2006/09/22(Fri) 23:28:25)

    分類:[C#] 


    分類:[C#] 

    2006/09/22(Fri) 23:34:36 編集(投稿者)

    C#で、グリッドにデータを表示したい時に、グリッドの表が

    ----------------------
    | 年 | 1 | 2 | 3 | 4 |   ←項目名
    ----------------------
    年|期にあった日付|日付|日付|日付| ←データ
    ----------------------
    年|期にあった日付|日付|日付|日付|
    ----------------------


    のような感じでデータが表示される時に、データベースは、

    フィールド名
    年(2001年とか2002年などの4桁の西暦)、期(1,2,3,4しか入っていない)、日付

    という3つのフィールドで構成されている時は、
    グリッドにデータを表示させたい場合、みなさんはどのように行っているのでしょうか?

    foreach (Info info in list)
    {
    DataRow dataRow = dataTable.NewRow();
    dataRow["年"] = info.year;
    if(info.ki.Equals("1"))
    {
    dataRow["1"] = info.date;
    }
    else if(info.ki.Equals("2"))
    {
    dataRow["2"] = info.date;
    }
    else if(info.ki.Equals("3"))
    {
    dataRow["3"] = info.date
    }
    else if(info.ki.Equals("4"))
    {
    dataRow["4"] = info.date
    }
    dataTable.Rows.Add(dataRow);
    }
    grid.DataSource = dataTable;


    今はこのような感じで、if文を使用し、ループでデータ毎に振り分けを行い、datasetに入れています。
    ちゃんとorder句でデータを並べておかないとめちゃくちゃになります。
    infoは、テーブル構成と同じフィールドを持ったgetter,setterになっています。
    テーブル構成が、

    フィールド名
    年、1期の日付、2期の日付、3期の日付、4期の日付

    というようなデータベースの構成なら、
    foreach (Info info in list)
    {

    dataRow["年"] = info.year;
    dataRow["1"] = info.1kiDate;
    dataRow["2"] = info.2kiDate;
    dataRow["3"] = info.3kiDate;
    dataRow["4"] = info.4kiDate;
    }

    で楽なのにと思っているのですが、テーブル構成とグリッドの構成が違う場合、
    ベテランの玄人の方ならどのように書いているのでしょうか?
    汎用的な関数とかinfoをいじったりとか、dataRowをうまく利用したりしているのでしょうか?
    私は、デザインパターンとかあまりよく分かっていないので、汚いロジックになってしまっています。
    良いアドバイスなどありましたらお願いします。

親記事 /0過去ログ6より / 関連記事表示
削除チェック/

■6603  Re[1]: C# から VB6.0のDLLのメッソドを起動
□投稿者/ 魔界の仮面弁士 -(2006/09/19(Tue) 23:59:50)

    分類:[C#] 

    # 「メソッド」表現と
    # 「メッソド」表現が混在しているのが気になりますが、
    # それはとりあえず置いといて……。


    > DLL 側の引数が byref の object型になっていて、
    > 各メソッド内で、object.hoge = "" 等
    > DLL 側で値をセットしています。
    VB6製DLLにオブジェクトを渡す場合、そのデータ型は、COM として
    レジストリに登録されている型である必要があります。指定したクラスが、
    COMとして公開されているかどうかを確認してみてください。


    > object hoge = new clsHoge();
    > vbdll.vbhoge( ref hoge );

    こんな感じでどうでしょう。


    ---------- VB6製DLL (ProgID = "VB6SampleDLL.SampleClass") ----------
    Option Explicit
    Public Sub vbhoge(ByRef object As Object)
    object.hoge = Format(Now, "yyyy-mm-dd hh:nn:ss")
    End Sub

    '以下は、Marshal.ReleaseComObject の解放が行われたかのチェック用
    Private Sub Class_Initialize()
    Debug.Print "-->"; ObjPtr(Me)
    End Sub
    Private Sub Class_Terminate()
    Debug.Print "<--"; ObjPtr(Me)
    End Sub


    ---------- C#2.0製コンソールアプリ ----------
    using System;
    using System.Runtime.InteropServices;

    namespace ConsoleApplication1
    {
    class Program
    {
    static void Main(string[] args)
    {
    VB6SampleDLL.SampleClass vbdll = null;
    try
    {
    object clsHoge = new Hoge();
    vbdll = new VB6SampleDLL.SampleClassClass();
    vbdll.vbhoge(ref clsHoge);
    Console.WriteLine(((Hoge)clsHoge).hoge);
    }
    catch (Exception ex)
    {
    Console.WriteLine(ex.Message);
    }
    finally
    {
    if ((vbdll != null) && Marshal.IsComObject(vbdll))
    {
    Marshal.ReleaseComObject(vbdll);
    }
    }
    Console.ReadLine();
    }
    }

    [ComVisible(true)]
    //[Guid("{1F4F835B-1702-4df9-8AF8-A782713FD1EC}")]
    //[ClassInterfaceAttribute(ClassInterfaceType.AutoDual)]
    public class Hoge
    {
    public string hoge = String.Empty;
    }
    }

記事No.6581 のレス /0過去ログ6より / 関連記事表示
削除チェック/

■6503  DataGridのRowの設定について
□投稿者/ ど素人 -(2006/09/14(Thu) 12:05:06)

    分類:[ASP.NET] 


    分類:[ASP.NET] 

    ASP.NET初心者です。

    言語はVBで、統合環境はVS2005です。

    ASP.NETの画面にDataGridを貼り付けて
    PageのLoad時にそのDataGridにデータを吐き出す処理を作成しています。
    PageのLoad時に下記のメソッドを呼び出しています。

    DataGridの[チェック]列にチェックボックスを作成したいのですが、
    方法がわかりません。

    いろいろ調べたのですが下記の方法で作成できると思うのですが、
    ???の箇所になにを設定すればいいのかわかりません。

    どのようにすれば[チェック]列にチェックボックスを作成できますか??
    下記の方法以外でもわかる方教えてください。よろしくお願いします。


    ------------------------------------------------------------------------
    Dim dtTable As DataTable
    Dim dtRow As DataRow
    Dim ret As ICollection

    'DataTable作成
    dtTable = New DataTable
    dtTable.Columns.Add(New DataColumn("チェック", GetType(CheckBox)))
    dtTable.Columns.Add(New DataColumn("No.", GetType(Integer)))
    dtTable.Columns.Add(New DataColumn("処理日時", GetType(DateTime)))
    dtTable.Columns.Add(New DataColumn("処理番号", GetType(Integer)))
    dtTable.Columns.Add(New DataColumn("名称", GetType(String)))

    'Rowの作成
    For i As Integer = 1 To 5
    dtRow = dtTable.NewRow()
    dtRow(0) = ???
    dtRow(1) = i

    'DataTableにRow追加
    dtTable.Rows.Add(dtRow)
    Next i

    ret = New DataView(dtTable)
    ------------------------------------------------------------------------
親記事 /0過去ログ6より / 関連記事表示
削除チェック/

■6357  TCP/IPの監視
□投稿者/ sabeep -(2006/09/08(Fri) 10:46:36)

    分類:[その他の質問] 


    分類:[その他の質問] 

    はじめましてsabeepです。
    いつも見せていただいてるのですが、
    今回は少し自分が行っているプログラムで問題が出てきたので
    .NETとはちょっと違うのですが、質問させてください

    現在動いているシステムがありまして

    クライアント <-------> サーバー
    通信部分については、非公開となっている
    TCP/IPによる電文通信であることは追跡済み

    という既存のシステムの通信部分を乗っ取りたいのですが
    ミドルウェアということで、こちらからは手が出せません。
    ですので、TCP/IPでの通信をトレースすることがが取得できれば

    #たとえば、クライアント側からサーバーに送られるIPやポートなどの情報

    なんとか、その部分を作り直せば、使えると思っているのですが
    何かその部分を追跡できる方法はないでしょうか?

    コーディング的でもいいですし、
    何かツールでトレースする方法でもいいので
    何かご存知の方はご教授お願いできませんでしょうか
    よろしくおねがいします。

親記事 /0過去ログ6より / 関連記事表示
削除チェック/

■6374  Re[1]: エスケープ・シーケンスの記述法
□投稿者/ 魔界の仮面弁士 -(2006/09/08(Fri) 15:28:09)

    分類:[VC++(C++/CLI)] 

    # 回答にあらず

    > VS2002 VC++ Managed C++アプリケーションで学習しています。
    > xp ではどのような記述(コードの書き方)になるのでしょうか?

    Managed C++ なら、コンソールへの色づけはエスケープシーケンスではなく、
    Console クラスにて行えます。ただし、(2002 ではなく)2005 が必要ですが。

    //-------------------
    #include "stdafx.h"
    using namespace System;
    void main()
    {
    Console::BackgroundColor = ConsoleColor::Green;
    Console::ForegroundColor = ConsoleColor::Red;
    Console::WriteLine(L"Enterキーを押してください。");

    Console::ResetColor();
    Console::ReadLine();
    }

記事No.6348 のレス /0過去ログ6より / 関連記事表示
削除チェック/

■6266  Re[1]: System.Diagnostics.Process.Startについて
□投稿者/ ダッチ -(2006/09/04(Mon) 22:28:39)

    分類:[VB.NET] 

    ダッチです。

    > ログファイルを指定したエディタで開きたい場合に
    > 以下のようなコードを記述しました。
    > System.Diagnostics.Process.Start("Notepad",ファイル名)

    ヘルプを読むと Process.Start の引数が二つの場合は

    MSDNより引用-----------------------
    fileName
    プロセスで実行するアプリケーション ファイルの名前。

    arguments
    プロセスを起動するときに渡すコマンド ライン引数。
    -----------------------------------
    となっています。
    第一引数が fileName
    第二引数が arguments

    桜さんのコードですと、
    fileName に ini ファイルで設定したエディタ
    arguments に関連して開きたいファイルパス
    ということですよね。

    であれば、ini ファイルで設定したエディタのパスが有効かどうかを
    検証してみるとシステムエラーにならないと思います。
    ついでに arguments のファイルも検証するといいと思います。

    検証する方法は
    System.IO.File.Exists("ファイルパス")
    でファイルの存在確認をするといいと思います。


記事No.6263 のレス /0過去ログ6より / 関連記事表示
削除チェック/

<前の20件 | 次の20件>

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >>

ヒット件数が多いので過去ログ1〜18 までの検索結果 / 過去ログ19からさらに検索→

パスワード/

- Child Tree -