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

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

Вопрос про клозет датасет [D7, XP]


vegarulez ©   (2008-01-28 05:45:00) 

Привет всем мастерам! Вопрос такой: я выбираю в цикле 10 записей из таблицы произвожу с ними манипуляции, и потом в этом же цикле в зависимости от результата манипуляций мне надо обновить запись, с которой в данный момент работаю, а так как она открыта в настоящий момент то получается, что апдейтить её в базе не получается... эксцептион -> процессор на сотку...  
Подскажите как можно выбрать 10 записей в какой -то созданый допустим мною датасет, и уже потом работать с этим датасетом, закрыв при этом запрос к базе, чтобы эти записи были в бд разблокированы на апдейт.
использую D7+ Zeos +Access

procedure TF1.DBW;
var
 s:string;
 j,i:integer;
begin

   with myzquery do
   try
     myzquery.Sql.Text:='Select top 10 `id`,`a`,`b` from `c` WHERE `d`=1 and e=-1';
     myzquery.open;
     if myzquery.RecordCount>0 then
     BEGIN
     While not Eof do
      Begin
       for j:=0 to myzquery.FieldCount-1 do
       db_values[j]:=myzquery.Fields[j].AsString;
        begin
         
          ...
          //далее блок действи с записями db_values[j] в ходе которых формируются переменные resultat[i]
          ...
         
          myzquery1.Sql.Text:='Update `c` set `d`='+resultat[4]+', `e`='+resultat[1]+',`a`="'+resultat[3]+'" where `id`='+db_values[0]+'';
            myzquery1.ExecSql();
            myzquery1.close;

       Next;
      End;
     END;
     
   except
   on E: Exception do
    Begin
     MessageDlg('Error2' +#10#13+ E.Message +#10#13+ inttostr(E.HelpContext), mtWarning,[mbOk], 0);
     myzquery.Close;
     myzquery1.close;
    End;
   end;
end;


Anatoly Podgoretsky   (2008-01-28 15:06:00) [1]

> vegarulez  (28.01.2008 05:45:00)  [0]

Ну например TClientDataset + CachedUpdates


Sergey13   (2008-01-28 10:50:00) [2]

> [6] MsGuns ©   (28.01.08 10:39)
> Отказаться от редактирования в гриде

А оно тут есть? 8-)


MsGuns   (2008-01-28 10:39:00) [3]

Отказаться от редактирования в гриде, заменив правку запросами с переоткрытием по мере необходимости.


ketmar   (2008-01-28 09:17:00) [4]

>[4] Sergey13©(28.01.08 09:14)
какая, какая… в архитектуре. ключевое слово — access. %-)


Sergey13   (2008-01-28 09:14:00) [5]

> [0] vegarulez ©   (28.01.08 05:45)

1. Недурно бы запросы делать через параметры. Почему имена полей в апострофах?
2. Недурно бы весь код посмотреть, ибо есть сомнение - в том ли цикле ты делаешь запрос.

> получается... эксцептион

Какая ошибка?


ketmar   (2008-01-28 08:51:00) [6]

мда. не заметил, извиняюсь.

впрочем, вторая часть рекомендации в силе.


vegarulez   (2008-01-28 07:45:00) [7]

Всмысле? не понимаю...?

так там как раз 2 TZQuery участвуют... myzquery и myzquery1
while идёт  по myzquery, а update по myzquery1...


ketmar   (2008-01-28 07:36:00) [8]

а что, создать ещё один TQuery нельзя? если уж неохота сначала накопить результаты и закрыть этот query?


Наверх

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