Конференция "Базы" » Почему не срабатывает составной запрос [D7, Access]
 
  • Alex_C (27.12.11 17:25) [20]
    Еще раз хочу обратить внимание - если написать так


     with ADODataSet1 do
     begin
      Close;
      CommandText:=
          'SELECT Call, DateQSO+TimeQSO AS DateTimeQSO FROM RX4HX '+
          'WHERE Call = \"9E1S\" '+
          'ORDER BY 2';
      Open;
    end;



    Все правильно находится.
  • Медвежонок Пятачок © (27.12.11 17:31) [21]
    Так он возвращает выборку. Только не поймешь какую.

    Он возвращает как раз поймешь какую выборку.
    Ту, в которой записи, удовлетворяющие условию where
  • stas © (27.12.11 17:35) [22]
    >На его месте пишется (VARBYTES) - по ходу все же это проблемы Access'а...
    Значит тип параметра задан не верно.
  • Alex_C (27.12.11 17:39) [23]
    Может я чего то не понимаю?

    > Ту, в которой записи, удовлетворяющие условию where

    Запрос был:

     with ADODataSet1 do
     begin
       Active := False;
       CommandText := 'SELECT Call,(DateQSO+TimeQSO) AS DateTimeQSO FROM RX4HX WHERE (DateQSO+TimeQSO)> :DateTimeQSO';
       ADODataSet1.Parameters.ParamByName('DateTimeQSO').Value := Now;
       Active := True;
     end;



    Вернулись записи:
    OK1YDM 28.08.2001 8:06:00
    ON4ADN 29.08.2001 8:33:00
    ...............
    Каким образом эти записи соответствуют WHERE?
  • Медвежонок Пятачок © (27.12.11 17:44) [24]
    Каким образом эти записи соответствуют WHERE?

    Прямым.
    ps:  а тебе зачем вообще sql сервер?
    pps: если ты сам силой мысли можешь делать выборки, причем делаешь это правильнее чем сам сервер?
  • Alex_C (27.12.11 17:48) [25]

    > Прямым.


    Послушай, объясни толком - почему выборка этих значений является правильной?
    Кстати если делать так

     with ADODataSet1 do
     begin
       Active := False;
       CommandText := 'SELECT Call,(DateQSO+TimeQSO) AS DateTimeQSO FROM RX4HX WHERE DateTimeQSO> :DateTimeQSO';
       ADODataSet1.Parameters.ParamByName('DateTimeQSO').Value := Now;
       Active := True;
     end;



    Пишет ошибку: Отсутствует значение для одного или нескольких требуемых параметров.
  • sniknik © (27.12.11 17:48) [26]
    > Каким образом эти записи соответствуют WHERE?
    > + второй параметр с тем же значением и проверяй за машиной... раз не веришь
  • sniknik © (27.12.11 17:50) [27]
    > Пишет ошибку: Отсутствует значение для одного или нескольких требуемых параметров.
    например ввел неправильное поле, которого нет, сам jet (не обертка/дельфи) в некоторых случаях считает неизвестное параметром.
  • Медвежонок Пятачок © (27.12.11 17:50) [28]
    Послушай, объясни толком - почему выборка этих значений является правильной?

    Бессмысленный вопрос.
    Выборку формирует сервер.
    А сервер не виноват и всегда прав.

    Кроме того, сервер писан не двоечниками и считать выражения умеет правильно в отличие от.
  • sniknik © (27.12.11 17:51) [29]
    > неизвестное параметром.
    понятно что
    SELECT Call,(DateQSO+TimeQSO) AS DateTimeQSO FROM RX4HX WHERE DateTimeQSO> :DateTimeQSO

  • sniknik © (27.12.11 17:53) [30]
    понятно что
    хм скрипт кода переформатирует код... если стоит то
    SELECT Call,(DateQSO+TimeQSO) AS DateTimeQSO FROM RX4HX WHERE DateTimeQSO> :DateTimeQSO
  • Alex_C (27.12.11 17:56) [31]

    > А сервер не виноват и всегда прав.

    Согласен. Я это и не оспариваю - я пытаюсь найти ошибку у себя - пока не получается.
    [29] - Не понял ? Где проблема в этом выражении?
  • Медвежонок Пятачок © (27.12.11 18:02) [32]
    лет десять назад я бы взял и тупо бы добавил в список полей селекта сам параметр.
    а потом посмотрел бы чему равно поле и чему равен параметр.

    так я делал когда тоже считал, что иногда сервер вставляет в выборку не те записи что надо, и не вставляет те что надо.
  • sniknik © (27.12.11 18:02) [33]
    > Не понял ? Где проблема в этом выражении?
    у тебя есть в таблице поле DateTimeQSO? ну вот, получается jet-овский параметр сравниваешь с "дельфийским". причем jet-овский как пишет ошибка не инициализирован, без значения.
  • sniknik © (27.12.11 18:04) [34]
    > лет десять назад я бы взял и тупо бы добавил в список полей селекта сам параметр.
    > а потом посмотрел бы чему равно поле и чему равен параметр.
    я ему предлагал... не проникся. ниче через 10 лет дойдет.
  • Alex_C (27.12.11 18:06) [35]

    > у тебя есть в таблице поле DateTimeQSO?


    Нет.
  • Alex_C (27.12.11 18:12) [36]
    Для пробы попробовал так -

     with ADODataSet1 do
     begin
       Active := False;
       CommandText := 'SELECT Call,(DateQSO+TimeQSO) AS DateTimeQSO, :DT AS Hello FROM RX4HX WHERE (DateQSO+TimeQSO)>:DateTimeQSO';
       ADODataSet1.Parameters.ParamByName('DateTimeQSO').Value := Now;
       ADODataSet1.Parameters.ParamByName('DT').Value := 'Hello!';
       Active := True;
     end;



    На месте :DT тоже пишется (VARBYTES) - параметр DT задак как стринг. Тоже не понятно почему...
  • stas © (27.12.11 18:13) [37]
     CommandText := 'SELECT Call,(DateQSO+TimeQSO) AS DateTimeQSO FROM RX4HX WHERE DateTimeQSO> :DateTimeQSO';


    Нельзя использовать алиас в выборке:

     CommandText := 'SELECT Call,(DateQSO+TimeQSO) AS DateTimeQSO FROM RX4HX WHERE (DateQSO+TimeQSO)> :DateTimeQSO';



    Сделай такой же запрос в акцессе и проверь выборку.
  • sniknik © (27.12.11 18:15) [38]
    > параметр DT задак как стринг. Тоже не понятно почему...
    ??? задал и не понятно почему? само оно никак не задается (при "андефайне" дает по типу присваиваемого значения)
  • stas © (27.12.11 18:15) [39]
    with ADODataSet1 do
    begin
      Active := False;
      CommandText := 'SELECT Call,(DateQSO+TimeQSO) AS DateTimeQSO, :DT AS Hello FROM RX4HX WHERE (DateQSO+TimeQSO)>:DateTimeQSO';
      ADODataSet1.Parameters.ParamByName('DateTimeQSO').DataType:=ftDateTime;
      ADODataSet1.Parameters.ParamByName('DateTimeQSO').Value := Now;
      ADODataSet1.Parameters.ParamByName('DT').DataType:=ftString;
      ADODataSet1.Parameters.ParamByName('DT').Value := 'Hello!';
      Active := True;
    end;
 
Конференция "Базы" » Почему не срабатывает составной запрос [D7, Access]
Есть новые Нет новых   [134431   +11][b:0][p:0.002]