2017-05-24 2 views
-1

私はこの機能を使用して、社員テーブルの従業員の詳細を取得します。私はデータベース用にvb.net 2012とMS Accessを使用しています。私の問題は、autonumberと主キーの属性/データ型を持つIDを使用して従業員の詳細を取得する方法です。ここに私のコードは次のとおりです。自動番号主キーフィールドを取得する

Public Sub DisplayEmployeeDetail() 

    Try 
     sqlEmployeeInfo = "SELECT * FROM tblEmployees WHERE tblEmployees.ID = " + txtDTRidnum.Text + ";" 
     Dim da As OleDb.OleDbDataAdapter = New OleDbDataAdapter(sqlEmployeeInfo, con) 
     Dim ds As New DataSet 
     da.Fill(ds, "tblEmployees") 
     Dim temp = ds.Tables("tblEmployees").Rows.Count 
     For i = 0 To temp - 1 
      lblFname.Text = CStr(ds.Tables("tblEmployees").Rows(i).Item("FirstName")) 
      lblLname.Text = CStr(ds.Tables("tblEmployees").Rows(i).Item("LastName")) 
      lblMname.Text = CStr(ds.Tables("tblEmployees").Rows(i).Item("MiddleName")) 
      lblAddress.Text = CStr(ds.Tables("tblEmployees").Rows(i).Item("Address")) 
      lblPosition.Text = CStr(ds.Tables("tblEmployees").Rows(i).Item("Position")) 
     Next 
    Catch ex As Exception 
     MessageBox.Show("Error in load: " & ex.ToString, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    End Try 

End Sub 

それはSystem.Data.OleDb.Exceptionを与える:構文エラー(演算子がありません)クエリ式で 'tblEmployees.ID ='

+0

パラメータを使用すると、この問題は発生しません...また、employeeidは文字列ではなく整数型で、セミコロンを削除する必要があります。 – Codexer

+0

...文字列連結ではなく&演算子演算子+を使用し、カッコと[]で囲んだテーブルを折り返してください。 – Codexer

+0

うわー!私はパラメータを使用しようとしましたが、エラーはなくなりましたが、行が返されませんでした。 – emman

答えて

0

は、このような単一引用符を使用します。

sqlEmployeeInfo = "SELECT * FROM tblEmployees WHERE tblEmployees.ID = '" + txtDTRidnum.Text + "';" 

追加あなたは使用しないでも、これを試すことができます。

Private Sub getData() 
     Dim empDA As OleDbDataAdapter = New OleDbDataAdapter() 
     Dim empDS As DataSet = New DataSet 
     Dim empTable As DataTable = New DataTable("EMPLOYEES") 
     Dim adoConn As ADODB.Connection = New ADODB.Connection() 
     Dim adoRS As ADODB.Recordset = New ADODB.Recordset() 

     Try 
      empTable.Columns.Add("FirstName", Type.GetType("System.String")) 
      empTable.Columns.Add("LastName", Type.GetType("System.String")) 
      empTable.Columns.Add("MiddleName", Type.GetType("System.String")) 
      empTable.Columns.Add("Address", Type.GetType("System.String")) 
      empTable.Columns.Add("Position", Type.GetType("System.String")) 
      empDS.Tables.Add(empTable) 

      'Use ADO objects from ADO library (msado15.dll) imported 
      ' as .NET library ADODB.dll using TlbImp.exe 

      'Specify your connection string here 
      adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1) 
      adoRS.Open("SELECT * FROM tblEmployees WHERE tblEmployees.ID = " + txtDTRidnum.Text + ";", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1) 
      empDA.Fill(empTable, adoRS) 

      Dim temp = empTable.Rows.Count 
      For i = 0 To temp - 1 
       lblFname.Text = CStr(empTable.Rows(i).Item("FirstName")) 
       lblLname.Text = CStr(empTable.Rows(i).Item("LastName")) 
       lblMname.Text = CStr(empTable.Rows(i).Item("MiddleName")) 
       lblAddress.Text = CStr(empTable.Rows(i).Item("Address")) 
       lblPosition.Text = CStr(empTable.Rows(i).Item("Position")) 
      Next 

      adoRS.Close() 
      adoConn.Close() 
     Catch ex As Exception 
      MessageBox.Show("Error in load: " & ex.ToString, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
      adoRS.Close() 
      adoConn.Close() 
     End Try 
    End Sub 

この例Here

+0

単一のqoutを使用すると "条件式のデータ型の不一致"が発生します – emman

+0

IDのデータ型は整数ですか?それは単一のqoute –

+0

はいのIntegerデータ型を入れても支障はありません。私はtxtDTRidnum.textを整数に変換しようとしましたが、正しい形式ではない別のエラーが返されます – emman

0

このエラーは、テキストフィールドtxtDTRidnum.Textが空であるために発生します。

関連する問題