Конференция "Базы" » Delphi 7 + Access + ADO Query [D7, MSSQL]
 
  • bobby © (08.04.12 07:49) [0]
    Здравствуйте!
    Пишу программу в которой необходимо конструировать запрос по временному интервалу. В БД ячейка типа Дата\Время с полным форматом даты (дд.мм.гггг чч:мм:сс)
    Пытаюсь подставить SQL запрос (сгенерированный в Access) в компонент ADO Query.

    SELECT Zakazi.*, Operators.OpFIO
    FROM Operators INNER JOIN Zakazi ON Operators.ID = Zakazi.Operator
    WHERE (((Zakazi.DateFin)>#9/2/2012 12:00:01#))
    ORDER BY Zakazi.DateBeg DESC;



    В Access запрос работает отлично, но когда подставляешь его в  ADO Query - выдаёт ошибку "Неправильно определён объект Parametr. Предоставлены несогласованные или неполные сведения".
    Если убираю время из запроса - всё работает. Помогите организовать запрос пожалуйста!
    Всё прекрасно получается когда убираешь время из запроса
  • bobby © (08.04.12 08:10) [1]
    Помогите пожалуйста! всю ночь просидел проэксперементировал. Не могу понят в чём тут ошибка!
  • Anatoly Podgoretsky © (08.04.12 08:13) [2]
    > bobby  (08.04.2012 07:49:00)  [0]

    #9/2/2012 12:00:01# это строка
  • bobby © (08.04.12 08:23) [3]
    Ну как тогда указать ему что это дата и время?
    Акцес сгенерировал а делфи - не понимает :(
  • Anatoly Podgoretsky © (08.04.12 09:11) [4]
    Вообще то строки они в кавычках должны быть.
    А использовать TDateTime + параметры
  • sniknik © (08.04.12 11:51) [5]
    > в компонент ADO Query.
    отстой. ADODataSet клево.
    (может хоть так понятно будет ;)

    > выдаёт ошибку "Неправильно определён объект Parametr. Предоставлены несогласованные или неполные сведения".
    в дельфи параметры определяются по : (если не отключить дефаулт), а ## это чисто access "фишка", дельфи про нее не знает. т.е. экранирования не происходит...

    > Ну как тогда указать ему что это дата и время?
    не только дататайм, любые внешние данные, только через параметры... по разным причинам, но прописывание прямо в запросе должно быть исключением.
  • bobby © (08.04.12 11:53) [6]
    TDateTime я итак использую и форматирую дату под SQL (а именно разделитель с точки на слэш).
    А сюда
    #9/2/2012 12:00:01#

    пробывал ставить от ковычек до квадратных скобок - всёравно добавляет автоматом параметры и на них ругается.
    Буду разбираться в них раз нету другого способа :(

    Огромное спасибо что не прошли мимо!
  • Inovet © (08.04.12 12:08) [7]
    > [6] bobby ©   (08.04.12 11:53)

    Ты ответы не читаешь? Или слова знакомые, а смыл в их сочетании нет?
    Тебе про параметры говорят, вот и пользуйся ими. Прочитай сначала, что это. И про клёвый датасет тоже не забудь.
  • sniknik © (08.04.12 12:14) [8]
    > TDateTime я итак использую и форматирую дату под SQL (а именно разделитель с точки на слэш).
    т.е. переводишь всем понятный формат в абракадабру, а после почему то жалуешься -  не работает.

    > Огромное спасибо что не прошли мимо!
    не надолго, будешь "тупить" терпение быстро кончится...
  • bobby © (09.04.12 00:22) [9]
    У MS Acces SQL такой формат даты в запросах (Если вы не в курсе)!
    Вот сгенерированный Access запрос через конструктор:

    SELECT Zakazi.*, Zakazi.DateFin, Zakazi.Address, Zakazi.Operator2
    FROM Zakazi
    WHERE (((Zakazi.DateFin)=#3/21/2012 1:30:31#) AND ((Zakazi.Address)="asdads") AND ((Zakazi.Operator2)=12));



    где в
    #тип данных дата/время#
    "Тип данных строка"
    Без ковычек это простое число!

    Такчто перевожу я не просто так, а для того чтоб понял Access!
  • sniknik © (09.04.12 00:29) [10]
    > Такчто перевожу я не просто так, а для того чтоб понял Access!
    тогда чего плакаишь? смотрим [0]  -
    > В Access запрос работает отлично
    значит все хорошо, он понимает!!!, и понятно почему на советы пюваишь нафиг.
  • Германн © (09.04.12 00:30) [11]

    > Такчто перевожу я не просто так, а для того чтоб понял Access!

    Боюсь после этого терпение у sniknik © кончится :)
  • bobby © (09.04.12 00:52) [12]
    Access понимает, а ADO Query не пропускает такой запрос!
    Совет видел только по поводу параметров. Я щас в них и разбираюсь.
    Просто может проще путь есть!
  • bobby © (09.04.12 02:02) [13]
    Реализовал через параметры!
  • Плохиш © (09.04.12 02:08) [14]

    > bobby ©   (09.04.12 00:52) [12]
    > Access понимает, а ADO Query не пропускает такой запрос!
    >

    Access писали программисты, ADODataSet есть инструмент для программистов, следовательно тебе надо нанять программиста.
  • Германн © (09.04.12 02:39) [15]

    > bobby ©   (09.04.12 02:02) [13]
    >
    > Реализовал через параметры!
    >

    Ну наконец-то!
    Может код покажешь?
  • bobby © (09.04.12 03:55) [16]
    Вот SQL запрос
    SELECT Tbl.ID, Tbl.Name, Tbl.Date
    FROM Tbl

    ;



    Вот Код

    QMain.Active:=False;
    QMain.SQL.Strings[2]:='WHERE (((Tbl.Date)>:Date))';
    QMain.Parameters.ParamByName('date').Value:=StrToDateTime('07.04.2012 12:00:00');
    QMain.Active:=true;



    2 Плохиш - Ты как-раз на форуме для программистов!
  • Cobalt © (09.04.12 08:47) [17]
    Я надеюсь, что  
    StrToDateTime('07.04.2012 12:00:00');


    - исключительно для примера, а на самом деле ты берешь из какого-нить DateTimePicker'a?
  • Anatoly Podgoretsky © (09.04.12 09:32) [18]

    > bobby ©   (09.04.12 00:52) [12]
    > Access понимает, а ADO Query не пропускает такой запрос!

    Тебе не кажется, что это разные вещи.
  • Inovet © (09.04.12 09:55) [19]
    > [12] bobby ©   (09.04.12 00:52)
    > Access понимает, а ADO Query не пропускает такой запрос!

    Это ты не понимаешь, что Аксес - это приложение, которое пользуется Jet, как и то, что ты пишешь - тоже приложение,.которое пользуется Jet.

    И ты забыл про клёвый датасет.
  • Ega23 © (09.04.12 12:41) [20]
    const
     aSQL = 'SELECT Zakazi.*, Zakazi.DateFin, Zakazi.Address, Zakazi.Operator2 ' +
                'FROM Zakazi '
                'WHERE Zakazi.DateFin=:DateFin AND ' +
                'Zakazi.Address=:address AND ' +
                'Zakazi.Operator2=:operator2';
    var
     ds: TADODataSet;
    begin
     ds := TADODataSet.Create(nil);
     try
       ds.Connection := ...;
       ds.CommandText := aSQL;
       ds.ParamByName('DateFin').Value := Now;
       ds.ParamByName('address').Value := 'bla-bla-bla';
       ds.ParamByName('operator2').Value := Random(20);
       ds.Open;

       while not ds.Eof do
       begin
         ......
         ds.Next;
       end;
     finally
       ds.Free;
     end;
    end;

  • Kirimey (19.03.13 12:08) [21]
    подскажите как вместо определенной даты "WHERE (((Zakazi.DateFin)>#9/2/2012 12:00:01#))" прописать текущую
  • Kirimey (19.03.13 12:08) [22]
    подскажите как вместо определенной даты "WHERE (((Zakazi.DateFin)>#9/2/2012 12:00:01#))" прописать текущую
  • Медвежонок Пятачок © (19.03.13 12:16) [23]
    надо подождать когда определенная дата станет текущей.
    а если уже стала, то поможет машина времени.
  • Inovet © (19.03.13 12:43) [24]
    Год ветке.
    С датой клиента - Now() и параметры.
    С датой сервера - смотреть анагогичную функцию на сервере.
  • Дмитрий (16.04.13 20:24) [25]
    year(now())
    year(date())
    не?
 
Конференция "Базы" » Delphi 7 + Access + ADO Query [D7, MSSQL]
Есть новые Нет новых   [134430   +3][b:0][p:0.003]