2016-03-21 18 views
0

ボタンを1回クリックするとcustomersIDを入力する必要があり、その行全体のデータを入力するとテキストボックス、チェックボックスなどに読み込まれますが、それは何かのIDを見つけることができないので、私は自分のエラーで私にプロンプ​​トを私は顧客が見つかりませんでしたを作成しましたか?どんな助けにも感謝!入力ボックスで入力した特定の行からデータを取得

私の意見では、* IDがどこから*(すべて)をロードするときに、その顧客IDでその特定の行のすべてのデータをロードしているだけなので、行を使用できると思っています。私の必要な情報にロードする項目などこれは正しいですか?一般的に、私はちょうどデータを取得し、それを私のテキストボックスなどに入れるのに助けが必要です。

コード:

Private Sub Client(ByVal ans As String) 
    If con.State = ConnectionState.Closed Then con.Open() 

    cmd = New OleDbCommand 
    cmd.Connection = con 
    cmd.CommandText = "Select * FROM tbl WHERE ID = ?" 
    cmd.Parameters.Add("?", OleDbType.VarChar).Value = ans 
    If cmd.ExecuteNonQuery() = 0 Then 
     MsgBox("Does not exist!", MsgBoxStyle.Critical, "Enter new ID!") 
    Else 
     MessageBox.Show("Now loaded.", "Search Complete!", MessageBoxButtons.OK, MessageBoxIcon.Information) 
     If con.State = ConnectionState.Closed Then con.Open() 
     'create data adapters 
     sql = "Select * from tbl" 
     da = New OleDbDataAdapter(sql, con) 
     da.Fill(ds, "tbl") 
     RecCnt = ds.Tables("tbl").Rows.Count 'how many records in ds 
     'assign data to lables 

     TxtCI.Text = ds.Tables("tbl").Rows(0).Item(0) 

     con.Close() 
    End If 
    cmd.ExecuteNonQuery() 
    con.Close() 
End Sub 

発信者(検索ボタン): クライアント(お客様ID)

+1

は実際にはテキストですld? – Plutonix

+0

データベースにデータ型は自動番号ですが、テキストボックスを使用しようとしています.10を入力すると、データがロードされます。行10 :) –

+0

はい、 'cmd.Parameters.Add("? "、OleDbType.VarChar).Value = ans'はテキスト/文字列としてDBに渡しています。 Option Strictを有効にする必要があります。そのコードには暗黙的な変換がいくつかあります。 – Plutonix

答えて

1

のExecuteNonQueryは、SELECT文で正しく動作することはできません。戻り値は影響を受けた行の数ですが、SELECT文は変更されず、行が挿入または削除されるため、常にゼロになります。

あなたはのExecuteReaderを使用する必要があります(これはまた、データセット/テーブル/行/列の階層

If con.State = ConnectionState.Closed Then con.Open() 
cmd = New OleDbCommand 
cmd.Connection = con 
cmd.CommandText = "Select * FROM tblcustomer WHERE CustomerID = ?" 
cmd.Parameters.Add("?", OleDbType.VarChar).Value = ans 
Dim reader As OleDbDataReader = cmd.ExecuteReader() 
if reader.Read() Then 
    TxtCI.Text = reader(0).ToString() 
    TxtName.Text = reader(1).ToString() 
    ... and so on ... 
Else 
    MsgBox("Customer Does not exist!", ....) 

から値を取得するために、OleDbDataAdapterおよ、DataTableの/データセットと長ったらしい文のラインを使用する必要がなくなります列インデックス(0,1,2など)を列名( "CI"、 "名前"など)で置き換えることができます。これは順序に依存しないため、やや優れていますSELECT *クエリによって返されます(もちろん、カラム名を変更しても同じ問題が発生しますが、少なくとも変更について知っておく必要があります)

+0

OleDbDataReaderリーダーが宣言されていないとします。あなたの代わりにこれはミスタイプですか?ありがとう! –

+1

@ irishwill2008彼はそこにいくつかのC#の構文を持っていた...もう一度チェック – Plutonix

+2

@Plutonixは今眠るために時間を捧げる – Steve

関連する問題