Версии базы данных VFP более поздние, чем 6.x, не имеют официального драйвера ODBC от Microsoft.Если вы ДОЛЖНЫ использовать ODBC, вы можете найти альтернативные драйверы из таких источников, как Sybase ADS.Вместо этого я успешно использую OLEDB.
Хотя ваш код может работать с MySQL, вы не должны писать его.Кроме того, это специфично для MySQL, оно не будет работать, скажем, в MS SQL Server или postgreSQL.Вы должны прочитать документацию на используемый вами бэкэнд.В VFP (или MS SQL Server, postgreSQL ...) вы не используете обратные тики в качестве идентификаторов имен таблиц и полей.В VFP, если необходимо, чтобы использовать идентификаторы имен, вы можете использовать одинарные, двойные кавычки или квадратные скобки, но вам нужно будет заключать в скобки (и использовать только для имени таблицы в запросе SQL).В любом случае, простой способ - просто вообще не использовать идентификаторы.
Кроме того, вам нужно использовать запрос ODBC или OLEDB?в качестве параметра-заполнителя.Использование @staffID обычно не работает в MySQL ... тоже, но производители драйверов решили поддержать их для этих бэкэндов.
Судя по сообщениям MessageBox, вы ожидаете получить одну строку для этого запроса (я не знаю, почему вы используете и staffId, и staffName, если staffId является первичным ключом).В любом случае вот ваш запрос в VB.Net:
Imports System.Data.OleDb
Public Class login
Private Sub btnEnter_Click(sender As Object, e As EventArgs) Handles btnEnter.Click
Dim strConn As String = "Provider=VFPOLEDB;Data source=c:\MyDataFolder\"
Dim strQuery As String = <sql>SELECT *
FROM login
WHERE staffID=? AND staffName=?
</sql>
Using cn As New OleDbConnection(strConn)
Using cmd As New OleDbCommand(strQuery, cn)
cmd.Parameters.Add("@staffid", OleDbType.VarChar).Value = txtStaffID.Text;
cmd.Parameters.Add("@staffname", OleDbType.VarChar).Value = txtStaffName.Text;
cn.Open()
Dim rdr As OleDbDataReader = cmd.ExecuteReader()
If rdr.Read()
MessageBox.Show("Welcome " & txtStaffName.Text)
Dim form As New formLeave
form.PassStaffid = txtStaffID.Text
form.PassStaffName = txtStaffName.Text
form.Show()
Me.Hide()
Else
MessageBox.Show("Staff ID or Staff Name not available")
End If
cn.Close()
End Using
End Using
End Sub
End Class