Страница: 1 |
Страница: 1 |
Вопрос: Кто работал в SQL с датой.
Добавлено: 10.04.05 20:07
Автор вопроса: Aston
Я незнаю как задать в SQL запросе чтоб он мне отображал данные искомые по дате, а дату пишу в текстовом поле. В запросе я написал Select*from baza where поле = '" & text1.text"' . Японял что он определяет как текст а не как дату, но как сделать чтоб он опредилял как дату.
Ответы
Всего ответов: 11
Номер ответа: 1
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #1
Добавлено: 10.04.05 21:30
Ограничивай #, а не '
Номер ответа: 2
Автор ответа:
AlexF
Вопросов: 20
Ответов: 113
Профиль | | #2
Добавлено: 11.04.05 02:19
А еще лучше преобразуй дату в Long. корректно будет работать всегда и на любом компе.
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
Dim lngResult As Long
lngResult = CDate(strDate) - 29220
MinMaxLong lngResult, -(2 ^ 15 - 2), 2 ^ 15 - 1
 ate2Num = lngResult
Exit Function
err_hndl:
 ate2Num = 0
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:
End Function
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
Номер ответа: 3
Автор ответа:
boevik
Хранитель чата
ICQ: 137392264
Вопросов: 8
Ответов: 557
Web-сайт:
Профиль | | #3
Добавлено: 12.04.05 08:38
Всё зависит от базы данных,
если Access то использовать #,
если MSSQL, то '.
И ещё, не зыбывай переобразовывать дату в формат mm/dd/yyyy
Номер ответа: 4
Автор ответа:
Марк
Вопросов: 0
Ответов: 3
Профиль | | #4
Добавлено: 19.04.05 09:10
Пример для SQL Server:
"SELECT * FROM List WHERE DateFlight>='" & Format(dtpDateBegin.Value,"MM/dd/yyyy" & " 00:00:00' AND DateFlight <='" & Format(dtpDateEnd.Value,"MM/dd/yyyy" & " 23:59:59'"
Для Access:
Может кто подскажет как правильно написать тоже самое?
Мои догадки (для Access), возможно, неверные:
1. Формат даты нужен тот который настроен в Windows (dd.MM.yy, MM/dd/yy и т.д.)
2. Формат даты нужен как в Windows, но разделитель всегда "/".
Номер ответа: 5
Автор ответа:
boevik
Хранитель чата
ICQ: 137392264
Вопросов: 8
Ответов: 557
Web-сайт:
Профиль | | #5
Добавлено: 19.04.05 10:13
Вместо апострофа (') надо ставить решетку (#).
Формат даты такой же как и MSSQL, т.е. mm/dd/yyyy
Номер ответа: 6
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #6
Добавлено: 19.04.05 11:40
А если использовать ADODB.Command, то проблем с решётками и апострофами не будет вообще, ввиду типизированности оного. Но почему-то упорно не хотят этого делать...
Номер ответа: 7
Автор ответа:
Марк
Вопросов: 0
Ответов: 3
Профиль | | #7
Добавлено: 19.04.05 12:25
Для boevik
У меня почему-то для Access надо формировать дату как dd/MM/yyyy. Не могу понять, то-ли от-того, что Access - русский, толи из-за тго, что Windows - русский, толи из-за настройки даты в Windows, то-ли от того, что ADO из состава русского Office 2000.
Для GSerg
Соглашусь и даже более, но нигде толком не описана передача параметров. Причём, т.к. я работаю сразу с двумя СУБД (SQLServer и Access), то, если есть отличия, хотелось бы их знать.
GSerg поделись примерчиком!
Номер ответа: 8
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #8
Добавлено: 19.04.05 12:47
dim c as adodb.command, r as adodb.recordset
set c=new adodb.command
set c.activeconnection=mainconnection
c.commandtype=adcmdstoredproc 'под эту категорию подпадают и просто параметрические запросы
c.commandtext="Запрос1" 'сохранённый в базе параметрический запрос
c.parameters.append c.createparameter("Дата",addate,adparaminput)
c.parameters("Дата".value=now
set r=new adodb.recordset
r.open c,,[любой тип],[любая блокировка]
.....
А в базе сохранён такой запрос (синтаксис, хаваемый даже Аксессом):
SELECT * FROM Table1 WHERE SomeDate=Дата
Номер ответа: 9
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #9
Добавлено: 19.04.05 12:50
А, да, нужно учитывать, что параметры Аксесс различает не по именам, а по порядку. Так что в коллекцию Parameters их надо добавлять в том порядке, в котором они описаны в запросе.
Номер ответа: 10
Автор ответа:
Марк
Вопросов: 0
Ответов: 3
Профиль | | #10
Добавлено: 19.04.05 13:21
Спасибо GSerg!
Мне это надо не для одновременной работы с SQLServer и Access, а либо с SQLServer, либо с Access в зависимости от указанного Connection. Т.е. для пользователей не в локалке, ставим ту же задачу, но с СУБД Access.
Поэтому и остро стоит вопрос о том, что бы меньше IF-ов в программе где проверяется SQLServer или Access.
Ещё раз спасибо!
Номер ответа: 11
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #11
Добавлено: 19.04.05 15:11
А это везде работает, где параметрические запросы могут быть. В аксессе могут, в SQLServer могут. Так что вообще не проверяй