VB6 mySQL更新问题

VB6 mySQL更新问题,vb6,mysql,Vb6,Mysql,嘿,大家好,我在尝试使用VB6更新mySQL 5数据库中的记录时遇到了一个奇怪的问题 这是我登录时的代码: connDB Set rst = New ADODB.Recordset strSQL = "SELECT id, fName, lName, theCode, theDate, clockin FROM clockinout WHERE theCode = '" & theUsersUniqueID & "' AND theDate = '" & Format(

嘿,大家好,我在尝试使用VB6更新mySQL 5数据库中的记录时遇到了一个奇怪的问题

这是我登录时的代码:

connDB
Set rst = New ADODB.Recordset

strSQL = "SELECT id, fName, lName, theCode, theDate, clockin FROM clockinout WHERE theCode = '" & theUsersUniqueID & "' AND theDate = '" & Format(Now, "YYYY/MM/DD") & "'"
          rst.Open strSQL, conn, adOpenDynamic, adLockOptimistic

If rst.EOF Then
    rst.AddNew
    rst!FName = userFNmae
    rst!LName = userLName
    rst!theCode = theUsersUniqueID
    rst!theDate = Format(Now, "YYYY/MM/DD")
    rst!clockin = Format(Now, "YYYY/MM/DD HH:MM:SS")
Else
    rst!clockin = Format(Now, "YYYY/MM/DD HH:MM:SS")
End If

rst.Update
rst.Close
Set rst = Nothing
conn.Close
这工作正常,没有任何错误。但是,当我使用此代码注销时:

 connDB
 Set rst = New ADODB.Recordset

 strSQL = "SELECT id, fName, lName, theCode, theDate, clockout FROM clockinout WHERE theCode = '" & theUsersUniqueID & "' AND theDate = '" & Format(Now, "YYYY/MM/DD") & "'"
 rst.Open strSQL, conn, adOpenDynamic, adLockOptimistic

 If Not rst.EOF Then
     rst!clockout = Format(Now, "YYYY/MM/DD HH:MM:SS")
 End If

 rst.Update
 rst.Close
 Set rst = Nothing
 conn.Close
它出现了一个错误,说它的EOF,因为它无法找到由于某种原因的记录。。。它在那里,因为它在第一次登录时工作。奇怪的是,当我取出clockout并将其替换为clockin时,它会找到记录,但自rst以来无法更新它!打卡不在查询中!!!!但是当我把它放回查询中代替clockin时,它给出了EOF错误

我的数据库记录如下所示:

 ID | fName | lName  | theCode | theDate    | clockin             | clockout         |
 26  Bob     Barker   5810      2010/08/02   2010-08-02 02:44:28   0000-00-00 00:00:00
任何帮助都将是伟大的,因为我不知道为什么这个简单的更新会给我如此困难的时间

大卫

我还测试了mysql查询浏览器中的查询,一切正常


选择id、fName、lName、代码、日期、时钟输入、时钟输出,其中代码='5810'和日期='2010/08/02'

我相信您只需要在原始查询中添加clockout,但它不应该取代clockin。在到达注销部分之前,您不必使用clockout执行任何操作,但它确实需要从一开始就位于查询中

编辑:根据您在评论中给出的错误,问题似乎出在数据库中现有的clockout值上。我认为0000-00-00:00:00可能是问题的根源;请尝试使用其他日期,或者改用NULL


id是一个保留字,sql浏览器帮助用户使用语法,当列命名与保留字冲突时,始终在代码中使用括号[id]。

在第一个示例中,如果没有行,则填充所有列,然后使用UPDATE。此更新是否创建了一行?我不确定它会不会;如果没有,它可能看起来成功了,但没有更新任何行。但是我对ADO的了解主要是从这两位优秀的导师,Mr Copy和Mr Paste那里收集的,所以请认真考虑这个建议。当我在原始查询中添加clockin和clockout时,我在尝试登录数据提供程序或其他服务时得到这个结果,返回了E_失败状态,但当我在查询中取消clockout时,它在登录时起作用…@StealthRT-刚刚根据您的错误消息在我的答案中添加了一些信息-我想这会有所帮助。