Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 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
                    ;DS_db1.db.Rows.Add(anyRow)
                End If
                Calendar.Value = Calendar.Value.AddDays(1)
                ;DA_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-сайт: dwindex.com
 Профиль | | #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).


































Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам