Страница: 1 |
Страница: 1 |
Вопрос: SQL и дата
Добавлено: 08.02.05 15:54
Автор вопроса: Andrey999 | Web-сайт:
Подскажите как подставляется в SQL запрос дата, а то он уменя на запрос (danie.dateyzi)=#dast#) пишет "Несоответствие типа данных в выражении условия отбора. (Ошибка 3464)"
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
AlexF
Вопросов: 20
Ответов: 113
Профиль | | #1
Добавлено: 08.02.05 16:41
Работа с датой - есть небольшое неудобство.( какая БД? SQL посылаешь из под ВБ? Лучше используй функции преобразования, если ВБ
Номер ответа: 2
Автор ответа:
AlexF
Вопросов: 20
Ответов: 113
Профиль | | #2
Добавлено: 08.02.05 16:48
Если ВБ :
"danie.dateyzi)=" & Num2Date(dast)
А это куда-нибудь в модуль:
Public Function Date2Num(strDate As String) As Long
'*******************************************************************
'Purpose : Stores date as long integer
'Inputs : String implementation of date value
'Returnes : Long integer representing provided date
'********************************************************************
On Error GoTo err_hndl
 im lngResult As Long
lngResult = CDate(strDate) - 29220
MinMaxLong lngResult, -(2 ^ 15 - 2), 2 ^ 15 - 1
 ate2Num = lngResult
Exit Function
err_hndl:
 ate2Num = 0
MsgBox Err.Number, "mdlFuncs", "ate2Num", Err.Description
End Function
Public Function Num2Date(lngDate) As String
'*******************************************************************
'Purpose : Converts Long into string representing date
'Inputs : Long integer implementing date value
'Returnes : String in format dd/mm/yyyy
'********************************************************************
On Error GoTo err_hndl
Num2Date$ = Format(lngDate + 29220, "dd/MM/yyyy"
Exit Function
err_hndl:
MsgBox Err.Number, "mdlFuncs", "Num2Date", Err.Description
Num2Date = ""
End Function
Номер ответа: 3
Автор ответа:
AlexF
Вопросов: 20
Ответов: 113
Профиль | | #3
Добавлено: 08.02.05 16:50
Sorri, zabil. Eto toje v modul:
Private Sub MinMaxLong(lngVal1 As Long, lngVal2 As Long, lngVal3 As Long)
'*******************************************************************
'Purpose : Limits value inside provided ranks
'Inputs : Long integers of value and its ranks
'Returnes : Long integer
'********************************************************************
If lngVal1 < lngVal2 Then lngVal1 = lngVal2
If lngVal1 > lngVal3 Then lngVal1 = lngVal3
End Sub
Номер ответа: 4
Автор ответа:
Andrey999
ICQ: 30852361
Вопросов: 73
Ответов: 168
Web-сайт:
Профиль | | #4
Добавлено: 08.02.05 17:36
Все равно не работает теперь пишет "<Сообщение> в выражении запроса <выражение>. (Ошибка 3075)". База данных Access, поле из которого я выбираю в формате дата/время mm.dd.yyyy , что еще можно попробовать? Пишу на VB6
Номер ответа: 5
Автор ответа:
AlexF
Вопросов: 20
Ответов: 113
Профиль | | #5
Добавлено: 08.02.05 19:25
Конечно, сделаы тип поля - Long. Так будет работать четко, сортировка быстрее и выборка.
еше попробуй :
"SELECT * FROM tblDates WHERE fldDate= " & format(yourdate, "mm.dd.yyyy"
Nio eto glyuchit
Номер ответа: 6
Автор ответа:
Andrey999
ICQ: 30852361
Вопросов: 73
Ответов: 168
Web-сайт:
Профиль | | #6
Добавлено: 08.02.05 19:48
Я так и сделал вот смотри
Private Sub Command2_Click()
Dim strSQL As String, SQL As String
Dim dast As Date
dast = DTPicker1
'Создаем SQL-запрос
strSQL = "SELECT DISTINCT client.idFam, client.pol, danie.vidyzi, danie.dateyzi FROM client INNER JOIN danie ON client.idFam = danie.idFam WHERE (danie.idFam LIKE '*" & Text1.Text & "*') AND (client.pol = '" & Combo1 & "') OR (danie.vidyzi = '" & DBCombo1 & "') OR (danie.dateyzi)='" & Format$(dast, "dd.mm.yyyy" & "')"
Data1.RecordSource = strSQL
Data1.Refresh
End Sub
После этого выводится ошибка ""<Сообщение> в выражении запроса <выражение>. (Ошибка 3075)". И в сообщении об ошибке выводится запрос там все данные верны и все же он глючит почему-то.
Номер ответа: 7
Автор ответа:
AlexF
Вопросов: 20
Ответов: 113
Профиль | | #7
Добавлено: 08.02.05 20:29
Это работает, но дата - очень капризная вещь. На разных компах будет по разному работать. Поэтому, советую переделать тип поля в номер и использовать функции. Это, если пишешь серьезную программу. А этот пример работает.
только в базе данных в формате поля дата установи : dd\.mm\.yyyy
Private Sub Command2_Click()
Dim strSQL As String, SQL As String
Dim dast As String
dast = Format(DTPicker1, "dd/mm/yyyy"
'Создаем SQL-запрос
strSQL = "SELECT DISTINCT client.idFam, client.pol, danie.vidyzi, danie.dateyzi FROM client INNER JOIN danie ON client.idFam = danie.idFam WHERE (danie.idFam LIKE '*" & Text1.Text & "*') AND (client.pol = '" & Combo1 & "') OR (danie.vidyzi = '" & DBCombo1 & "') OR (danie.dateyzi)=#" & dast &"#)"
Data1.RecordSource = strSQL
Data1.Refresh
End Sub
Номер ответа: 8
Автор ответа:
Andrey999
ICQ: 30852361
Вопросов: 73
Ответов: 168
Web-сайт:
Профиль | | #8
Добавлено: 08.02.05 22:19
Большое спасибо все сделал