2017-05-24 1 views
-1

Ich habe diese Funktion, um Mitarbeiterdetails in meiner Employees-Tabelle abzurufen. Ich verwende vb.net 2012 und MS Access für meine Datenbank. Mein Problem ist, wie man Mitarbeiterdetails unter Verwendung ihrer IDs mit einer Auto-Nummer und Primärschlüssel-Attributen/-Datentyp abruft? hier ist mein Code:Abrufen eines Auto-Nummer-Primärschlüsselfelds

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 

es gibt System.Data.OleDb.Exception: Syntaxfehler (fehlender Operator) in Abfrageausdruck 'tblEmployees.ID ='

+0

Verwenden Sie Parameter und dieses Problem würde nicht passieren ... Auch Ihre Mitarbeiter-ID sollte ein Integer-Typ sein, keine Zeichenfolge ... und entfernen Sie das Semikolon. – Codexer

+0

Auch ... verwende & für String-Verkettung, nicht den mathematischen Operator + ... und versuche, deine Spalten und Tabellen in Klammern zu setzen '[]' ... – Codexer

+0

wow! Ich habe versucht, mit Parametern Fehler waren weg, aber es gibt keine Zeilen – emman

Antwort

0

Verwendung einfache Anführungszeichen wie folgt aus:

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

Zusätzliche Sie können dies sogar versuchen Sie nicht wollen, verwenden:

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 

Dieses Beispiel Here

+0

Es gibt "Datatype Mismatch in Kriterien Ausdruck", wenn ich einzelne qoutes – emman

+0

ist der Datentyp Ihrer ID ist Integer? Es ist kein Lager, auch wenn Sie einzelne qoute –

+0

ja seinen Integer-Datentyp setzen. Ich habe versucht, txtDTRidnum.text in Integer zu konvertieren, aber es gibt einen anderen Fehler nicht im richtigen Format – emman

0

Dieser Fehler tritt auf, weil das Textfeld txtDTRidnum.Text leer ist.