VIP, копирование строки таблицы
Модераторы: m0p3e, edward_K, Модераторы
-
- Местный житель
- Сообщения: 291
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: С-Петербург
- Контактная информация:
тааак, ну началось, теперь еще и на вопросы начали на форуме отвечать Так и совсем с катушек слететь можно
А теперь по существу.
Вот эти вот #Tab1 и #Tab2 это о чем.
Как ф-я работает?
Откуда и куда и чего копирует? Из одной таблицы в другую? а смысл?
А теперь по существу.
Вот эти вот #Tab1 и #Tab2 это о чем.
Как ф-я работает?
Откуда и куда и чего копирует? Из одной таблицы в другую? а смысл?
Безвыходных ситуаций не бывает: DO LOOP WHILE TRUE
-
- Местный житель
- Сообщения: 645
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"
)))))))))))
"А смысл" Наверное я тогда не понял вопроса. )) Смысл думал Вы написали в вопросе.
Как работает.
Когда Вы описываете таблицу, то у нее всегда есть буфер записи.
Если таблица не участвует в секции where (()),
то в буфер помещается первая запись табоицы. Если Вы позиционируетесь - то текущая.
К примеру, Вам надо скопировать строку спецификации накладной (katsopr) из одной накладной в другую (katsopr1 - синоним katsopr).
Для этого:
1. Описываете таблицу синоним для spsopr - spsoprNew.
2. делаете
CopyTablesFields(#spsopr.#spsoprnew);
spsoprnew.Nrec := 0;
Spsoprnew.cSopr = KatSopr2.Nrec;
insert current SpSoprNew;
В спецификации накладной katsopr2 появится новая строка - копия строки из katsopr1.
....
Вообще-то, чаще всего функция используется для прямого копирования записей таблиц между двумя базами данных, т.к. в одной базе можно выкрутиться и без использования этой функции путем
if getfirst Spsoprnew where ((SpSopr.Nrec ==SpSoprNew.Nrec)) = tsOk
{
spsoprnew.Nrec := 0;
Spsoprnew.cSopr = KatSopr2.Nrec;
insert current SpSoprNew;
};
"А смысл" Наверное я тогда не понял вопроса. )) Смысл думал Вы написали в вопросе.
Как работает.
Когда Вы описываете таблицу, то у нее всегда есть буфер записи.
Если таблица не участвует в секции where (()),
то в буфер помещается первая запись табоицы. Если Вы позиционируетесь - то текущая.
К примеру, Вам надо скопировать строку спецификации накладной (katsopr) из одной накладной в другую (katsopr1 - синоним katsopr).
Для этого:
1. Описываете таблицу синоним для spsopr - spsoprNew.
2. делаете
CopyTablesFields(#spsopr.#spsoprnew);
spsoprnew.Nrec := 0;
Spsoprnew.cSopr = KatSopr2.Nrec;
insert current SpSoprNew;
В спецификации накладной katsopr2 появится новая строка - копия строки из katsopr1.
....
Вообще-то, чаще всего функция используется для прямого копирования записей таблиц между двумя базами данных, т.к. в одной базе можно выкрутиться и без использования этой функции путем
if getfirst Spsoprnew where ((SpSopr.Nrec ==SpSoprNew.Nrec)) = tsOk
{
spsoprnew.Nrec := 0;
Spsoprnew.cSopr = KatSopr2.Nrec;
insert current SpSoprNew;
};
-
- Местный житель
- Сообщения: 291
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: С-Петербург
- Контактная информация:
там про
А ответ ваш в самую тему попал.
Я совсем забыл что есть такая штука как синонимы. И сидел парился как бы выкрутиться
Все прочитал, вроде даже понял, делаю ctrl+shift, ctrl+ins и чуток правлю.
PS: А то я тут уже в цикле навставлял одну и ту же запись кучу раз
это не важно. Просто само как-то приписалось, а-ля мысли вслух.а смысл?
А ответ ваш в самую тему попал.
Я совсем забыл что есть такая штука как синонимы. И сидел парился как бы выкрутиться
Все прочитал, вроде даже понял, делаю ctrl+shift, ctrl+ins и чуток правлю.
PS: А то я тут уже в цикле навставлял одну и ту же запись кучу раз
Безвыходных ситуаций не бывает: DO LOOP WHILE TRUE
-
- Местный житель
- Сообщения: 291
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: С-Петербург
- Контактная информация:
Хожу вокруг да около, а не получается. Суть такая, пишу код, и не могу выйти из цикла:
interface copy_spmnlan;
var
oldNrec : comp; //передаю Nrec шапки (Mnplan.nrec)
newNrec : comp; //и Nrec новой строки MnPlan
create view as select * from spmnplan,spmnplan spmnplanNew where spmnplan.cmnplan=oldNrec;
parameters oldNrec,newNrec;
handleevent
cmInit:{
if getfirst spmnplanNew where ((spmnplan.Nrec==spmnplanNew.Nrec)) = tsOk
{
do
{
getfirst spmnplanNew where ((spmnplan.Nrec==spmnplanNew.Nrec))
spmnplanNew.nrec:=0;
spmnplanNew.cmnplan:=newNrec;
insert current spmnplanNew;
}while (modifier getnext spmnplan where ((oldNrec==spmnplan.cmnplan))=tsOk); // вот тута циклимся и все
};
}
end;
end.
interface copy_spmnlan;
var
oldNrec : comp; //передаю Nrec шапки (Mnplan.nrec)
newNrec : comp; //и Nrec новой строки MnPlan
create view as select * from spmnplan,spmnplan spmnplanNew where spmnplan.cmnplan=oldNrec;
parameters oldNrec,newNrec;
handleevent
cmInit:{
if getfirst spmnplanNew where ((spmnplan.Nrec==spmnplanNew.Nrec)) = tsOk
{
do
{
getfirst spmnplanNew where ((spmnplan.Nrec==spmnplanNew.Nrec))
spmnplanNew.nrec:=0;
spmnplanNew.cmnplan:=newNrec;
insert current spmnplanNew;
}while (modifier getnext spmnplan where ((oldNrec==spmnplan.cmnplan))=tsOk); // вот тута циклимся и все
};
}
end;
end.
Безвыходных ситуаций не бывает: DO LOOP WHILE TRUE
Код: Выделить всё
interface copy_spmnlan;
var
oldNrec : comp; //передаю Nrec шапки (Mnplan.nrec)
newNrec : comp; //и Nrec новой строки MnPlan
create view
from spmnplan,spmnplan spmnplanNew
where
((oldNrec == spmnplan.cmnplan);
parameters oldNrec,newNrec;
handleevent
cmInit:{
_loop spmnplan
{
if getfirst spmnplanNew where ((spmnplan.Nrec==spmnplanNew.Nrec)) = tsOk
{
spmnplanNew.nrec:=0;
spmnplanNew.cmnplan:=newNrec;
insert current spmnplanNew;
}
};
}
end;
end.
-
- Местный житель
- Сообщения: 291
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: С-Петербург
- Контактная информация:
я уже тоже только что дотумкал, только у меня более деревянно.
[/quote]
if getfirst spmnplanNew where ((spmnplan.Nrec==spmnplanNew.Nrec)) = tsOk
{
//сюда вот добавил такую строку и нормально стало
modifier getfirst spmnplan;
do
{
getfirst spmnplanNew where ((spmnplan.Nrec==spmnplanNew.Nrec))
spmnplanNew.nrec:=0; ..... [quote][/quote]
[/quote]
if getfirst spmnplanNew where ((spmnplan.Nrec==spmnplanNew.Nrec)) = tsOk
{
//сюда вот добавил такую строку и нормально стало
modifier getfirst spmnplan;
do
{
getfirst spmnplanNew where ((spmnplan.Nrec==spmnplanNew.Nrec))
spmnplanNew.nrec:=0; ..... [quote][/quote]
Безвыходных ситуаций не бывает: DO LOOP WHILE TRUE