![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при вызове 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]Не понял, зачем писать запрос в какую-то переменную, а не в свойство кверика?