Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Кто работал в SQL с датой. Добавлено: 10.04.05 20:07  

Автор вопроса:  Aston
Я незнаю как задать в SQL запросе чтоб он мне отображал данные искомые по дате, а дату пишу в текстовом поле. В запросе я написал Select*from baza where поле = '" & text1.text"' . Японял что он определяет как текст а не как дату, но как сделать чтоб он опредилял как дату.

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #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
    ;Date2Num = lngResult

    Exit Function
err_hndl:
    ;Date2Num = 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-сайт: www.hypertech.ru
 Профиль | | #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-сайт: www.hypertech.ru
 Профиль | | #5
Добавлено: 19.04.05 10:13
"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#"

Вместо апострофа (') надо ставить решетку (#).
Формат даты такой же как и 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
'Предполагается, что mainconnection - это уже открытый adodb.connection
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,,[любой тип],[любая блокировка]

.....


А в базе сохранён такой запрос (синтаксис, хаваемый даже Аксессом):
PARAMETERS Дата DATETIME;
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 могут. Так что вообще не проверяй :)

Ответить

Страница: 1 |

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



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