Конференция "Базы" » Почему не срабатывает составной запрос [D7, Access]
 
  • Alex_C (27.12.11 18:34) [40]

    > ADODataSet1.Parameters.ParamByName('DateTimeQSO').DataType:
    > =ftDateTime;


    Вот где собака порылась! Теперь все работает. Большое спасибо!
    Остался только один для меня непонятный момент:
    когда я создавал параметр DateTimeQSO в ObjectInspector'е - я там его тип как ftDateTime указывал. Получается нужно еще и руками прописывать?
    Кстати если и так делать
    ADODataSet1.Parameters.CreateParameter('DateTimeQSO', ftDateTime, pdInput, 0, NULL);
    все равно нужно явно указывать тип параметра перед его использованием.
    Странно, но нигде об этом не написано.
  • stas © (27.12.11 18:40) [41]
    >когда я создавал параметр DateTimeQSO в ObjectInspector'е - я там его тип >как ftDateTime указывал.

    Ты же Sql заменил потом.
  • Alex_C (27.12.11 18:46) [42]

    > Ты же Sql заменил потом.


    Имеется ввиду изменил из-за DateQSO+TimeQSO - тип результата не определен?
  • sniknik © (27.12.11 19:43) [43]
    не из-за, а потому-что. заменил запрос, значит должен определить его переменные (или задать так чтобы самоопределилось), как локальные переменные в процедуре... то что относится к предыдущей для этой значения не имеет.
  • stas © (27.12.11 20:35) [44]
    Alex_C   (27.12.11 18:46) [42]
    Ты SQL же меняешь в рантайм, у тебя уничтожаются все параметры и пересоздаются когда присваиваешь commandtext.
  • Alex_C (27.12.11 22:50) [45]

    > пересоздаются когда присваиваешь commandtext.


    Ну так они же должны пересоздаваться с изначальным типом? Причем это только для типа DateTime актуально - для остальных типов их снова указывать не надо.


    > заменил запрос


    Делал Prepared := True;
    Все тоже самое.

    Сейчас порылся в инете - по ходу это "фича" именно для Access+DateTime field type. В нескольких местах нашел, что для типа DateTime нужно делать как в [49].
    Еще раз спасибо за подсказку!!!
  • Alex_C (27.12.11 22:51) [46]

    > как в [49].

    как в [39] :)
  • sniknik © (27.12.11 23:07) [47]
    > Ну так они же должны пересоздаваться с изначальным типом?
    кому должны? тебе? борланд перед тобой отчитыватся?
    и не передергивай, было
    > у тебя уничтожаются все параметры и пересоздаются когда присваиваешь commandtext.
    какой там изначальный тип, у уничтоженного?

    > что для типа DateTime нужно делать как в [49].
    не выдумывай
    сделай вот так, буквально
     with ADODataSet1 do begin
       CommandText := 'SELECT Call,(DateQSO+TimeQSO) AS DateTimeQSO, :DT AS Hello FROM RX4HX WHERE (DateQSO+TimeQSO)>:DateTimeQSO';
       Parameters.ParamByName('DateTimeQSO').Value:= Now();
       Parameters.ParamByName('DT').Value:= Now();
       Open;
     end;
    в дизайне CommandText пустой.
  • Alex_C (27.12.11 23:17) [48]

    > сделай вот так, буквально

    Буквально вот так и сделано.
    Сейчас уже поздно - завтра еще раз перепроверю - может где действительно CommandText переопределяю.

    Кстати нашел очень хорошее объяснение этому всему:
    http://drkb3.narod.ru/855.htm
    думаю всем кто начинает работать с параметрами это прочитать обязательно!
  • Alex_C (27.12.11 23:21) [49]

    > > Ну так они же должны пересоздаваться с изначальным типом?
    >
    > кому должны? тебе? борланд перед тобой отчитыватся?


    Т.е. я правильно понимаю, если я создал в инспекторе объектов параметр с DataType = ftDateTime, я без боязни могу использовать только первый раз, и изменив CommandText , повторно параметр существовать будет, но его тип уже нужно повторно определить?
  • sniknik © (27.12.11 23:41) [50]
    > повторно параметр существовать будет
    совсем не обязательно, может и не существовать...

    справку наконец то читать будем или нет?
 
Конференция "Базы" » Почему не срабатывает составной запрос [D7, Access]
Есть новые Нет новых   [134431   +10][b:0][p:0]