2010-08-02 2 views
1

Привет всем, у меня возникла странная проблема с попыткой обновить запись в моей базе данных mySQL 5 с помощью VB6.Проблема с обновлением mySQL 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 не было в запросе !!!! Но когда я сделать положить его обратно в запросе вместо 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 Query Browser, и все работает отлично ...

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

+0

В ваш первый пример, когда у вас нет строки, вы заполняете все столбцы, а затем используете 'UPDATE'. Создает ли это обновление строку? Я не уверен, что это так; и если это не так, оно может показаться успешным, но не обновило строки. Но мои знания об ADO были в основном почерпнуты от этих двух превосходных преподавателей, мистера Кости и г-на Паста, поэтому возьмите это предложение за все, что стоит. –

ответ

0

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

EDIT: Основываясь на ошибке, которую вы указали в своем комментарии, похоже, что проблема заключается в существующем значении для часов в вашей базе данных. Я думаю, что 0000-00-00 00:00:00 может быть источником проблемы; попробуйте использовать другую дату или вместо этого используйте NULL.

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

+0

Когда я добавляю как clockin, так и clockout к исходному запросу, я получаю это при попытке входа в систему ** Поставщик данных или другая служба возвратили статус E_FAIL ** Но когда я вынимаю время в запросе, он работает на login ... – StealthRT

+0

@StealthRT - просто добавила некоторую информацию в мой ответ на основе вашего сообщения об ошибке - я думаю, это поможет. – derekerdmann

0

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

Смежные вопросы