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

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

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 строке


Наверх

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