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

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

Копирование записи в IBTable [D7, IB6.x]


merko$ ©   (2007-03-22 06:17:00) 

Уважаемые Мастера, подскажите пожалуйста как скопировать запись из IBTable1 в ту же IBTable1 с новым ID?

ID у меня формируется:
procedure TDM.tORGNewRecord(DataSet: TDataSet);
begin
IBStoredProc11.ExecProc;
DataSet['ID_ORG']:=IBStoredProc11.ParamByName('UORG').AsInteger;
end;
end.

Заранее благодарю.


ustas   (2007-03-23 15:15:00) [1]

> ANB ©   (22.03.07 11:07)
Извращенец :)

:) Категорически не согласен. Просто что первое под руку попалось то и запостил. Естественно что квери создавать и туда параметры передавать по именам полей или вообще sql по ходу генерить.


merko   (2007-03-23 08:53:00) [2]

спасибо всем проблему решил


ANB   (2007-03-22 11:07:00) [3]


> ustas   (22.03.07 09:49) [7]

Извращенец :)

insert into Table1 (ID, F1, F2 . . . /*все поля*/)
select GenerID /*тута сгенерить новый ID*/, F1, F2 . . .

Все это запихать в кверю и выполнить Exec (точно метод не помню)


ustas   (2007-03-22 09:49:00) [4]

Я делал это следующим образом. Создавал дополнительно запрос по таблице куда выбирал все поля таблицы по ID на котором установлен курсор в таблице, а затем таблицу переводил в состояни Append и пробегался по всем полям запроса и переносил их значения в таблицу (если есть счетчик, ID который определяется тригером из генератора, то нужно это поле пропустить соответсвенно). Пример (краткая вырезка из проекта):
...
var i,e,kodrec,kodnewrec: Integer;
begin
 kodrec := QMain.FieldByName('id').AsInteger;
 if kodrec = 0 then Exit;
 QForCopy.Close;
 QForCopy.ParamByName('id_param').Value := QMain.FieldByName('id').AsInteger;
 QForCopy.Open;
 if not Table.Active then Table.Active := True;
 Table.Append;
 for i := 0 to QForCopy.FieldCount - 1 do begin
   if i > 0 then begin Table.Fields[i].Value := QForCopy.Fields[i].Value;
 end;
 Table.Post;
 Table.Active := True;
 Table.Last;
 kodnewrec := Table.FieldByName('id').AsInteger;
 ...
end;


Jan   (2007-03-22 09:36:00) [5]


> Если можно приведите пример кода копирования записи
>

Как добавить запись знаем? А копирование, подразумевает, что поля заполняются из текущей записи таблицы, которая источник.


merko$   (2007-03-22 09:12:00) [6]

> Sergey13
Если можно приведите пример кода копирования записи


Sergey13   (2007-03-22 08:30:00) [7]

> [0] merko$ ©   (22.03.07 06:17)
> Уважаемые Мастера, подскажите пожалуйста как скопировать
> запись из IBTable1 в ту же IBTable1 с новым ID?

А как ты вставляешь новые записи? Так же и копировать, только значения, которые вводишь сначала надо "посмотреть" в копируемой записи.

ЗЫ: Но методы твоей работы с СКЛ сервером очень далеки от "идеала".


merko$   (2007-03-22 07:10:00) [8]

Я это прекрасно понимаю, а фраза - переместить запись из DBGrid1 в DBGrid2 использована мной для представления ситуации


Mike Kouzmine   (2007-03-22 07:05:00) [9]

Копируют записи не в компонентах, а в таблицах базы данных. А комп. только отображают и дают механизмы работы с данными.


merko$   (2007-03-22 06:34:00) [10]

Либо как-то переместить запись из DBGrid1 в DBGrid2


Наверх

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