VB6 MySQL обновление проблемы - PullRequest
1 голос
/ 02 августа 2010

Привет всем, у меня странная проблема с попыткой обновить запись в моей базе данных MySQL 5 с использованием VB6.

Это мой код при входе в систему:

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 it НАХОДИТ ЗАПИСЬ , но не может обновить его, так как rst! Clockout не было в запросе !!!!Но когда я do помещаю его обратно в запрос вместо 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 браузер запросов и все работает нормально ...

SELECT id, fName, lName, theCode, theDate, clockin, clockout FROM clockinout WHERE theCode = '5810' AND theDate = '2010/08/02«;

Ответы [ 2 ]

0 голосов
/ 20 июня 2017

id - зарезервированное слово, браузер sql «помогает» с синтаксисом от пользователя, всегда используйте скобки [id] в коде, когда именование столбца противоречит зарезервированным словам

0 голосов
/ 02 августа 2010

Я считаю, что все, что вам нужно, это добавить clockout в исходный запрос, но он не должен заменять clockin.Вам не нужно ничего делать с clockout, пока не дойдете до секции выхода из системы, но это должно быть в запросе с самого начала.

РЕДАКТИРОВАТЬ: На основеошибка, которую вы дали в своем комментарии, похоже, проблема заключается в существующем значении для таймаута в вашей базе данных.Я думаю, что 0000-00-00 00:00:00 может быть источником проблемы;попробуйте использовать другую дату или вместо NULL.

http://forums.mysql.com/read.php?37,49727,54030#msg-54030

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...