Страница: 1 |
Страница: 1 |
Вопрос: СРОЧНО - ошибка посика по уникальному ключу
Добавлено: 04.08.05 13:39
Автор вопроса: Alik
имеется таблица:
id int(4)
date_id smalldatetime(4)
sum1 moneykop
sum2 moneykop
первичный ключ - id, date_id
выполняю код:
Dim rowFoundRow As DataRow
Dim search(1) As Object
search(0) = "456"
search(1) = "04.08.2005"
rowFoundRow = DS_db1.db.Rows.Find(search)
If Not (rowFoundRow Is Nothing) Then
MessageBox.Show("Найдено")
Else
MessageBox.Show("Не найдено")
End If
выдает ошибку:
Specified cast is not valid
Код взял из MSDN
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #1
Добавлено: 04.08.05 14:00
Что такое smalldatetime(4)?
просто smalldatetime знаю..
Номер ответа: 2
Автор ответа:
Alik
Вопросов: 13
Ответов: 16
Профиль | | #2
Добавлено: 04.08.05 14:25
Это Lenght, можно задать desing table
Номер ответа: 3
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #3
Добавлено: 04.08.05 14:31
Так или иначе у меня предчуствие, что ошибка именно в формате даты...
Номер ответа: 4
Автор ответа:
Alik
Вопросов: 13
Ответов: 16
Профиль | | #4
Добавлено: 04.08.05 16:54
исправил date_id на int(4) все заработало
как можно сделать с датой
очень надо
Номер ответа: 5
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #5
Добавлено: 04.08.05 17:55
Просто datetime попробуй...
Номер ответа: 6
Автор ответа:
Alik
Вопросов: 13
Ответов: 16
Профиль | | #6
Добавлено: 04.08.05 19:18
Пробовал
то же самое
но возможно же это как то сделать????
Номер ответа: 7
Автор ответа:
Alik
Вопросов: 13
Ответов: 16
Профиль | | #7
Добавлено: 05.08.05 08:29
Вот код:
For Each DRclients In TBLclients.Rows
Calendar.Value = Current_date
'следующее 2 строки, выставляем значение календаря на первое число, предв. полсчит. кол-во дней с начала месяца - 1
start_day = Calendar.Value.Day - 1
Calendar.Value = Calendar.Value.AddDays(-start_day)
For c_day = 1 To Count_day
search(0) = DRclients("code"
search(1) = Calendar.Value.ToShortDateString
rowFoundRow = DS_db1.db.Rows.Find(search)
If Not (rowFoundRow Is Nothing) Then
Exit For
Else
anyRow("id" = DRclients("code"
anyRow("date_id" = Calendar.Value.ToShortDateString
 S_db1.db.Rows.Add(anyRow)
End If
Calendar.Value = Calendar.Value.AddDays(1)
 A_db.Update(DS_db1)
Next
Next
Что заметил первое условие он пропускает, то есть добавляет запись с 1 числом, а вот уже на втором выдает привеленную выше ошибку
Номер ответа: 8
Автор ответа:
Alik
Вопросов: 13
Ответов: 16
Профиль | | #8
Добавлено: 05.08.05 09:17
Причем если написать:
d = Calendar.Value
search(0) = DRclients("code"
search(1) = d
rowFoundRow = DS_db1.db.Rows.Find(search)
то пишет что записи с таким id и датой нет, хотя есть
если написать:
d = Calendar.Value
search(0) = DRclients("code"
search(1) = d.ToShortDateString
rowFoundRow = DS_db1.db.Rows.Find(search)
то выдает ошибку:
An unhandled exception of type 'System.InvalidCastException' occurred in system.data.dll
Additional information: Specified cast is not valid.
Номер ответа: 9
Автор ответа:
Alik
Вопросов: 13
Ответов: 16
Профиль | | #9
Добавлено: 05.08.05 11:38
пообщаюсь еще сам с собой ))
возможно в первом случае не находит так как sql хранит в формате - 2005-08-01 00:00:00
а calendar.value выглядит как 01.08.2005 13:13:00
сравнивает и определяет что разного формата????????
или я не прав
если прав то как сравнить их
может есть тип данных в sql не datetime, а просто date )
Номер ответа: 10
Автор ответа:
Денис
ICQ: 109593029
Вопросов: 15
Ответов: 32
Профиль | | #10
Добавлено: 05.08.05 16:08
А почему бы не попробывать запросами "Select * from таблица where date='search(1)' and id=search(0)"?
Номер ответа: 11
Автор ответа:
popovius
ICQ: 225692610
Вопросов: 9
Ответов: 15
Web-сайт:
Профиль | | #11
Добавлено: 08.08.05 10:57
да там дохрена спецификаций у sql date/time
посмотри ради интереса.
Номер ответа: 12
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #12
Добавлено: 11.08.05 10:14
Dim sSQL As String
sSQL = "SELECT * FROM sometable WHERE somedate = #" & Format(CDate("01.08.2005 13:13:00", "yyyy-mm-dd hh:nn:ss" & "# ORDER BY id DESC"
Если это MSAccess (возможно и в mssql также), то дата заключается в # (знак номера). Если же это MySQL, то дата записывается в одинарные кавычки.
А сравнить две даты можно по DateDiff (если в VB6).