Погода: -12°C
  • Срочно нужен хелп. Вопрос состоит в том чтобы правильно написать следующее выражение:
    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

  • 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

    who | grep -i blonde | date; cd ~; unzip; touch;
    strip; finger; mount; gasp; yes; uptime; umount;

    Исправлено пользователем Well (11.07.03 08:56)

  • Так тоже было, я просто не стал перечислять все испробованные варианты. Дело в том что SQl запрос в Акцессе воспринимает даты в формате
    #01/01/2003#, а VB в таком формате даты не воспринимает - не понимает он "#"
    to Well
    Если вы предложили это исходя из имеющейся работоспособной БД, с подобным требованием, то можно ли ее бросить мне на почту - может я просто что-то не так понимаю.
    ferrarium@yandex.ru

  • 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

    who | grep -i blonde | date; cd ~; unzip; touch;
    strip; finger; mount; gasp; yes; uptime; umount;

  • Спасибо за помощь!

Записей на странице:

Перейти в форум

Модератор: