Нужна помощь по Microsoft VB
2172
6
Срочно нужен хелп. Вопрос состоит в том чтобы правильно написать следующее выражение:
D3.Open "select * from [R] where [Podrazd]='" + CStr(Pod) + "' and [Date]>=#10/06/03# and [Date]"+cstr(x1)+" and [Date]
D3.Open "select * from [R] where [Podrazd]='" + CStr(Pod) + "' and [Date]>=#10/06/03# and [Date]"+cstr(x1)+" and [Date]
x1, x2 - в каком формате? И в какой формат переводит их cstr()? Не раз натыкался на проблему строкового форматата даты: dd/mm/yy, mm/dd/yy, dd.mm.yy, mm-dd-yy...
x1и х2 в кратком формате даты, в таблице они записаны как 12.03.2003, в строковые значения пытался перевести по разному и "12.03.2003" и #12.03.2003# и #12/03/03# и "12/03/03" не понимает, в принципе строковый формат можно сделать любой это не проблема но просто у меня уже фантазии не хватает выдумывать в каком виде еще можно представить дату. В принципе VB частенько проглатывает написание, т.е. не выдает ошибки но и не выполняет это условие.
Кстати забыл добавить для пущей ясности что D3 позиционируется как
Private D3 As New ADODB.Recordset
Кстати забыл добавить для пущей ясности что D3 позиционируется как
Private D3 As New ADODB.Recordset
Well
guru
x1и х2 в кратком формате даты, в таблице они записаны как 12.03.2003, в строковые значения пытался перевести по разному и "12.03.2003" и #12.03.2003# и #12/03/03# и "12/03/03" не понимает
Даты в SQL запросах должны быть в американском формате: mm/dd/yyyy, т.е. 12.03.2003 будет 03/12/2003
Даты в SQL запросах должны быть в американском формате: mm/dd/yyyy, т.е. 12.03.2003 будет 03/12/2003
Так тоже было, я просто не стал перечислять все испробованные варианты. Дело в том что SQl запрос в Акцессе воспринимает даты в формате
#01/01/2003#, а VB в таком формате даты не воспринимает - не понимает он "#"
to Well
Если вы предложили это исходя из имеющейся работоспособной БД, с подобным требованием, то можно ли ее бросить мне на почту - может я просто что-то не так понимаю.
ferrarium@yandex.ru
#01/01/2003#, а VB в таком формате даты не воспринимает - не понимает он "#"
to Well
Если вы предложили это исходя из имеющейся работоспособной БД, с подобным требованием, то можно ли ее бросить мне на почту - может я просто что-то не так понимаю.
ferrarium@yandex.ru
Well
guru
VB в таком формате даты не воспринимает - не понимает он "#"
Причем тут VB? Запросы воспринимает Jet, и ему все равно, на чем написан клиент - VBA,VB или Delphi, например. Так что # будет работать везде, если вы работаете с базой Access.
Следующий код на VB.Net выбрает даты между 1.12.2003 и 31.12.2003. Запрос также проверен на Delphi, работает.
Dim con As New ADODB.Connection()
Dim rst As New ADODB.Recordset()
con.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\...\test.mdb;Persist Security Info=False", "Admin")
' Таблица: create table a(id int not null primary key, d date not null)
rst.Open("select * from a where d between #12/01/2003# and #12/31/2003#", con)
If Not rst.EOF Then rst.MoveFirst()
While Not rst.EOF
' ....
rst.MoveNext()
End While
Если даты периода требуется подставлять самому, то надо в запрос их вставлять в формате #mm/dd/yyyy#. Естественно, что CStr тут не подходит, надо написать свою функцию что-то типа(схематично):
Function DateToSQL(ByVal d As Date) As String
Dim mm As Long, dd As Long, yyyy As Long
mm = Month(d)
dd = Day(d)
yyyy = Year(d)
DateToSQL = "#" & mm & "/" & dd & "/" & yyyy & "#"
End Function
Причем тут VB? Запросы воспринимает Jet, и ему все равно, на чем написан клиент - VBA,VB или Delphi, например. Так что # будет работать везде, если вы работаете с базой Access.
Следующий код на VB.Net выбрает даты между 1.12.2003 и 31.12.2003. Запрос также проверен на Delphi, работает.
Dim con As New ADODB.Connection()
Dim rst As New ADODB.Recordset()
con.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\...\test.mdb;Persist Security Info=False", "Admin")
' Таблица: create table a(id int not null primary key, d date not null)
rst.Open("select * from a where d between #12/01/2003# and #12/31/2003#", con)
If Not rst.EOF Then rst.MoveFirst()
While Not rst.EOF
' ....
rst.MoveNext()
End While
Если даты периода требуется подставлять самому, то надо в запрос их вставлять в формате #mm/dd/yyyy#. Естественно, что CStr тут не подходит, надо написать свою функцию что-то типа(схематично):
Function DateToSQL(ByVal d As Date) As String
Dim mm As Long, dd As Long, yyyy As Long
mm = Month(d)
dd = Day(d)
yyyy = Year(d)
DateToSQL = "#" & mm & "/" & dd & "/" & yyyy & "#"
End Function
ТОП 5
2
3
4