Конференция "Базы" » Возникла проблема с выполнением запросов ADOQuery. [D6, D7]
 
  • stalex2000 © (25.12.09 13:29) [0]
    Необходимо выбрать часть данных в таблице, Делаеться через
    ADOQuery, а потом просмотреть все значения - просматриваются в цикле.

    Высылаю кусок кода:


      Form_main.ADOQuery_TovarInfoKat.Close;
      Form_main.ADOQuery_TovarInfoKat.Parameters.ParamByName('PriceNull').Value:=-1;
      Form_main.ADOQuery_TovarInfoKat.Parameters.ParamByName('Kat').Value:=IntToStr(Co deKat);
      Form_main.ADOQuery_TovarInfoKat.Open;    //Выбор всех товаров в данной группе
      Form_main.ADOQuery_TovarInfoKat.First;
      while not Form_main.ADOQuery_TovarInfoKat.Eof do
        begin
         TextArt:= Form_main.ADOQuery_TovarInfoKatArt.Value;
    ....



    Обнаружена проблема, если поле Art в запросе пустое, то в строчке TextArt:= Form_main.ADOQuery_TovarInfoKatArt.Value; переменной TextArt присваевается предыдущее значение.

    Т.е., например, в таблице, Поле Art:
    1256
    (пусто)
    (пусто)
    1476
    (пусто)
    (пусто)

    то в результате выполнения запроса, переменной TextArt в цикле будет присвоены значения:
    1256
    1256
    1256
    1476
    1476
    1476

    т.е. пустые значения будут заменены на предыдущие.

    Подскажите почему это происходит?
    А главное, как это исправить?

    Сам запрос:

    select * from price_main, Price_Tovar_Info
    where
    price_main.Code = Price_Tovar_Info.Code and
    kategor=:kat and
    (price_1>:PriceNull)
    order by tovar

  • Ega23 © (25.12.09 13:36) [1]
    1. Form_main.  выкинуть.
    2.


    var
     fld : TField;

    begin
      .....
     ADOQuery_TovarInfoKat.Open;
     ADOQuery_TovarInfoKat.DisableControls;
     try
       ADOQuery_TovarInfoKat.First;
       while not ADOQuery_TovarInfoKat.Eof do
       begin
         fld := ADOQuery_TovarInfoKatArt.FieldByName(....);
         if fld.IsNull then
           TextArt:= 'WTF?'
         else
           TextArt:= fld.AsString;
       end;

     finally
       ADOQuery_TovarInfoKat.EnableControls;
     end;

  • Виталий Панасенко (25.12.09 14:02) [2]
    по моему, звиздежь и провокация..:-)
  • stalex2000 © (25.12.09 14:14) [3]
    Ega23

    Спасибо помогло.
    Всё нормально стало работать при замене

    TextArt:= Form_main.ADOQuery_TovarInfoKatArt.Value;

    на

    TextArt:= Form_main.ADOQuery_TovarInfoKat.FieldByName('Art').AsString;
  • Виталий Панасенко (25.12.09 14:23) [4]
    а на TextArt:= Form_main.ADOQuery_TovarInfoKatArt.AsString; не пробовал поменять? хотя все равно.. странннннннооооо ккккаааакто..:-)
  • Anatoly Podgoretsky © (25.12.09 14:32) [5]
    > stalex2000  (25.12.2009 13:29:00)  [0]

    Не понятно, так быть не должно, но для начала попробуй сделать соединение и указать явно поля, заодно выбрось
    ADOQuery, замени на TAdoDataset
 
Конференция "Базы" » Возникла проблема с выполнением запросов ADOQuery. [D6, D7]
Есть новые Нет новых   [134435   +33][b:0][p:0.001]