Опять про таблицы в памяти

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Alexx
Постоянный обитатель
Сообщения: 168
Зарегистрирован: 29 мар 2005, 17:49

Опять про таблицы в памяти

Сообщение Alexx »

Добрый день!
Дано: есть 2 таблицы в памяти,которые наполнены данными. Кол-во записей в каждой таблице может быть произвольным. Необходимо из них сформировать 3-ю таблицу, т.е. склеить их.
Например:
TABLE1
а1 b1
а2 b2
а3 b3

TABLE2
c1 d1
c2 d2
c3 d3
c4 d4
c5 d5

Итог должен быть таким:
TABLE3
а1 b1 c1 d1
а2 b2 c2 d2
а3 b3 c3 d3
c4 d4
c5 d5
Т.е. поля в итоговой таблице в которых нет данных из исходной должны быть пустыми.

Заранее, спасибо!
Johny
Местный житель
Сообщения: 291
Зарегистрирован: 29 мар 2005, 17:49
Откуда: С-Петербург
Контактная информация:

Сообщение Johny »

я бы написал так:

if (modifier GetFirst Table1)=tsOK then //спозиционировался на первую запись
begin
do
{
Insert Table3
set
Field1:=Table1.Field1,
Field2:=Table1.Filed2,
.....
FieldN:=Table1.FiledN,
} while (modifier GetNext Table1)=tsOK; //встал на следующую, если реально
end;

if (modifier GetFirst Table2)=tsOK then
begin
do
{
Insert Table3
set
Field1:=Table2.Field1,
Field2:=Table2.Filed2,
.....
FieldN:=Table2.FiledN,
} while (modifier GetNext Table2)=tsOK;
end;
Alexx
Постоянный обитатель
Сообщения: 168
Зарегистрирован: 29 мар 2005, 17:49

Сообщение Alexx »

Нет, я про другое говорил. Необходимо склеить таблицы не последовательно, а параллельно.
Johny
Местный житель
Сообщения: 291
Зарегистрирован: 29 мар 2005, 17:49
Откуда: С-Петербург
Контактная информация:

Сообщение Johny »

Тогда вопрос следущий, какой логикой связаны эти таблицы? Просто первая строка первой-> первая строка второй?

if (modifier GetFirst Table2)=tsOK then
begin
modifier GetFirst Table3;
do
{
Update current Table3
set
Field1:=Table2.Field1,
Field2:=Table2.Filed2,
.....
FieldN:=Table2.FiledN;
modifier GetNext Table3;
} while (modifier GetNext Table2)=tsOK;
end;

Думаю написать что-то такое вместо второго блока.
Только тут трабла, если вторая табла больше будет.

ПОэтому я бы писал вообще проверку на то, какой цикл запускать сначала. Сначала должен идти по большей табле всегда.

Пишу на коленке, поэтому могут быть недочеты.
Безвыходных ситуаций не бывает: DO LOOP WHILE TRUE
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

insert into table3 as select
поля из table1,table2 сответсвующие по кол-ву,типу table3
where (( table1.nrec == table2.nrec )) ;

пример
insert into saldofnd
select
0,
saldomc.ATL_LASTDATE,saldomc.ATL_LASTTIME,saldomc.ATL_LASTUSER,saldomc.ATL_ORIGINOFFICE,
saldomc.LASTUSER,saldomc.LASTTIME,saldomc.LASTDATE,saldomc.FILIALNO,
saldomc.sp,saldomc.cmc,saldomc.cpodr,saldomc.cmol,saldomc.cparty,saldomc.cval
where ((1006000104 == katmc.barkod and 0 == saldomc.sp and katmc.nrec == saldomc.cmc and 0<< saldomc.cpodr )) ;
Ответить