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

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

Ошибка при вызове ADOQuery [D7, dBase, FoxPro]


al_tor ©   (2006-08-09 08:46:00) 

Имеется следующая финкция

function TForm1.OstCl(SAcc:String):Real;
Var SQL_K: TStringList;
begin
SQL_K:=TStringList.Create;
ADOQDBF.Active:=False;
SQL_K.ADD('SELECT * FROM BILLOST');
SQL_K.ADD('WHERE BILL_KL='''+SAcc+'''');
ADOQDBF.Active:=TRUE;
if ADOQDBF.RecordCount<>0 then
  begin
   ADOQDBF.First;
   Result:=ADOQDBF.FieldValues['SUM_OST'];
  end
 else Result:=0;
 
ADOQDBF.Active:=False;
end;

ADOCDBF: TADOConnection;
ADOQDBF: TADOQuery;

ADOCDBF.ConnectionString= 'Provider=VFPOLEDB.1;Data Source=C:\Program Files\Borland\Delphi7\Projects\VipMon;Password="";Collating Sequence=MACHINE'

Функция вызывается в цикле. Во время второго
запуска - вываливается ошибка "Текущий
проводник не поддерживает возврат нескольких
наборов записей в результате одной операции"

Подскажите, пожалуйста, где я ошибся.


MsGuns   (2006-08-09 16:48:00) [1]

Вместо зубодробительного

SQL_K.ADD('SELECT * FROM BILLOST');
SQL_K.ADD('WHERE BILL_KL='''+SAcc+'''');

следует писать по-грамотному:

with ADOQDBF do
 try
  if Active then Close;
  SQL.Text := 'SELECT * FROM BILLOST WHERE BILL_KL=:psacc';
  Parameters.ParamByName('psacc').Value := SAcc;
  Open;
  FetchAll;   // Может быть нужен, если НД не отображается
  if RecordCount>0 then
    ....
  Close;
 except
  ShowMessage('Не сложилось ;(');
 end;

И еще. Созданные в ране списки, ка и прочие объекты, под которые выделяются ресурсы, надо прибивать перед выходом из процедур (закрытии форм) в обязательном порядке !


ANB   (2006-08-09 09:31:00) [2]


> Потому, что текста запроса в нем нет, подозреваю.

Потому, что на следующем проходе там уже 2 запроса :)


Sergey13   (2006-08-09 09:09:00) [3]

> [2] al_tor   (09.08.06 09:01)
Ты предлагаешь нам твои хвосты обрубать?

> Вылетает все равно в строке "ADOQDBF.Active:=TRUE;"

Потому, что текста запроса в нем нет, подозреваю.


al_tor   (2006-08-09 09:08:00) [4]

Все, понял - я перед каждым следующим вызове ADOQDBF.SQL не очищал, а пихал туда новый запрос.


al_tor   (2006-08-09 09:01:00) [5]

Это "хвосты" остались. Вылетает все равно в строке "ADOQDBF.Active:=TRUE;"


Sergey13   (2006-08-09 08:55:00) [6]

Не понял, зачем писать запрос в какую-то переменную, а не в свойство кверика?


Наверх

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