Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Возникла проблема с выполнением запросов ADOQuery. [D6, D7]


stalex2000 ©   (2009-12-25 13:29:00) 

Необходимо выбрать часть данных в таблице, Делаеться через
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


Anatoly Podgoretsky   (2009-12-25 14:32:00) [1]

> stalex2000  (25.12.2009 13:29:00)  [0]

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


Виталий Панасенко   (2009-12-25 14:23:00) [2]

а на TextArt:= Form_main.ADOQuery_TovarInfoKatArt.AsString; не пробовал поменять? хотя все равно.. странннннннооооо ккккаааакто..:-)


stalex2000   (2009-12-25 14:14:00) [3]

Ega23

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

TextArt:= Form_main.ADOQuery_TovarInfoKatArt.Value;

на

TextArt:= Form_main.ADOQuery_TovarInfoKat.FieldByName('Art').AsString;


Виталий Панасенко   (2009-12-25 14:02:00) [4]

по моему, звиздежь и провокация..:-)


Ega23   (2009-12-25 13:36:00) [5]

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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо