![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Too many open tables [D7, Paradox]
Openfire © (2004-09-29 13:46:00)День добрый!
Такая проблема: есть две таблицы, в которые с помощью Query добавляются новые записи и в определенные момент выскакивает "Too many open tables", вполне понятно что нельзя залочить в парадоксе более 255 строк, но как послать commit не вполне понятно...
Пытаюсь использовать CommitUpdates при CachedUpdates мне пишется "Invalid handle to the function"...
Помогите, пожалуйста решить проблему...
Openfire (2004-10-01 09:58:00) [1]Спасибо за помощь... Убрав ExecSQL при поиске данных все получилось...
msguns (2004-10-01 09:16:00) [2]>ЮЮ © (01.10.04 07:43) [9]
Похоже, ExecSQL используется вместо Prepare :)) Хотя при наличии отсутствия сервера и Prepare как мертвому припарки (О ! Какая игра слов !) ;)
ЮЮ (2004-10-01 07:43:00) [3]DataModule1.Find_A.ExecSQL;
DataModule1.Find_A.Open;
первое - лишнее, если запрос возвращает НД
DataModule1.Add_Human.ExecSQL;
DataModule1.Add_Human.Close;
второе - лишнее, если запрос вставляет записи
Openfire (2004-10-01 05:49:00) [4]2msguns
>DataModule1.Find_A.ExecSQL;
>DataModule1.Find_A.Open;
Это Query в которой ищется есть ли уже данные в базе или нет
Можно конечно и DataModule1.Find_A.Active написать
>DataModule1.Add_Money.ExecSQL;
Это Query которая записывает даные в базу...
>DataModule1.Add_Money.Close;
Это соответственно ее закрытие, но оно как бы не нужно я просто искал способы отсоединиться от таблицы, что бы мне не писалось "Too many open tables"
DarkMan (2004-09-30 10:32:00) [5]DataModule1.Find_A.Open;
DataModule1.Add_Money.Close;
Накой это вот........
msguns (2004-09-30 09:18:00) [6]>
DataModule1.Find_A.ExecSQL;
DataModule1.Find_A.Open;
DataModule1.Add_Money.ExecSQL;
DataModule1.Add_Money.Close;
А вот это что за сладкие парочки ?
Openfire (2004-09-30 06:34:00) [7]while not Eof(f) do
begin
Readln(f,s);
...
if (fio <> '') and (acc <> '') then
begin
DataModule1.Find_A.Close;
DataModule1.Find_A.ParamByName('acc').AsString:=acc;
DataModule1.Find_A.ExecSQL;
DataModule1.Find_A.Open;
DataModule1.DataSource3.DataSet:=DataModule1.Find_A;
if DataModule1.DataSource3.DataSet.RecordCount > 0 then
begin
DataModule1.Add_Money.ParamByName('n_a').AsInteger:=zz;
DataModule1.Add_Money.ParamByName('n').AsInteger:=DataModule1.DataSource3.DataSet.FieldByName('num').AsInteger;
DataModule1.Add_Money.ParamByName('m').AsCurrency:=mon;
DataModule1.Add_Money.ExecSQL;
DataModule1.Add_Money.Close;
end
else
begin
DataModule1.Add_Human.ParamByName('fio').AsString:=UCase(fio);
DataModule1.Add_Human.ParamByName('acc').AsString:=acc;
DataModule1.Add_Human.ExecSQL;
DataModule1.Add_Human.Close;
DataModule1.Find.ParamByName('fio').AsString:=UCase(fio);
DataModule1.Find.ParamByName('acc').AsString:=acc;
DataModule1.Find.ExecSQL;
DataModule1.Find.Open;
DataModule1.DataSource3.DataSet:=DataModule1.Find;
{-- --}
DataModule1.Add_Money.ParamByName('n_a').AsInteger:=0;
DataModule1.Add_Money.ParamByName('n').AsInteger:=DataModule1.DataSource3.DataSet.FieldByName('num').AsInteger;
DataModule1.Add_Money.ParamByName('m').AsCurrency:=0;
DataModule1.Add_Money.ExecSQL;
DataModule1.Add_Money.Close;
if mon > 0 then
begin
DataModule1.Add_Money.ParamByName('n_a').AsInteger:=zz;
DataModule1.Add_Money.ParamByName('n').AsInteger:=DataModule1.DataSource3.DataSet.FieldByName('num').AsInteger;
DataModule1.Add_Money.ParamByName('m').AsCurrency:=mon;
DataModule1.Add_Money.ExecSQL;
DataModule1.Add_Money.Close;
end;
DataModule1.Find.Close;
inc(jj1);
end;
inc(jj);
end;
inc(j);
end;
в Add_Money и Add_Human insert into...
msguns (2004-09-29 15:06:00) [8]Commit для парадокса ?
ПАРАДОКС !
Amoeba (2004-09-29 14:23:00) [9]
> Openfire (29.09.04 14:01) [2]
"Ошибка в 17 строке" = "код в студию!"
Openfire (2004-09-29 14:01:00) [10]Не понял...
Anatoly Podgoretsky (2004-09-29 13:48:00) [11]Ошибка в 17 строке