Firebird i Delphi

0

Hej.
Da się porównać 2 tabele o tej samej strukturze i jak w drugiej będzie więcej rekordów to dodać je (te które nie istnieją w pierwszej tabeli) do pierwszej tabeli i zapisać, używając baz Firebird?

Dzięki za sugestie. [soczek]

0
Zmęczony napisał(a)

Hej.
Da się porównać 2 tabele o tej samej strukturze i jak w drugiej będzie więcej rekordów to dodać je (te które nie istnieją w pierwszej tabeli) do pierwszej tabeli i zapisać, używając baz Firebird?

Dzięki za sugestie. [soczek]

Cos takiego:
insert into tabela1 (as) select * from tabela2
where ID not in (select ID from tabela2 where tabela1.pole1=tabela2.pole1 and tabela1.pole2=tabela2.pole2 ...i tak dalej wymienić tu wszystkie odpowiadające sobie pola)

Być może da się to szybciej zrobić.

0

... WHERE ID NOT IN (SELECT ...

Różnie to działa w różnych wersjach - chodzi mi o wydajność. Kluczowe jest to co to znaczy "te które nie istnieją", czy jest jedna kolumna która o tym świadczy czy więcej. Jeśli wyznacznikiem jest klucz, sugerował bym użycie zapytania, mniej więcej takiego:

FOR
SELECT T1.ID, T1.POLE1, T1.POLE2 ...
FROM T1
LEFT JOIN T2 ON T2.ID=T1.ID
WHERE T2.ID IS NULL
INTO :ID, :POLE1, :POLE2
DO
INSERT INTO T2 (ID, POLE1, POLE2) VALUES :ID, :POLE1, :POLE2

@Mariusz - sposób przez Ciebie podany będzie działał, ale tak jak mówię różnie to bywa z wydajnością. Czasem jawne podanie ID'ków w IN'ie jest o wiele szybsze niż wstawienie w tym miejscu podzapytania.

b

0

OK rozumiem.
Teraz to tylko przenieść do Delphi do komponentów IBX.

Generalnie chodzi o to, że ten sam program używam na PC i laptopie, którego wynosze gdzieś tam w drogę. Wtedy też dodaję nowe rekordy.
Powiedzmy, że mam na PC 50 rekordów i te same 50 w laptopie. Gdzieś tam kiedyś na laptopie dodałem nowych 15 i teraz te 15 chciałbym przenieść do PC i zapisać je Transakcją na commit itd.
Wiem, że mówłgbym nadpisywać plik z bazą (cośtam.gdb), ale chcę to zrobić w bardziej elegancki sposób. :-)

Spróbuję waszych zapytań wtrącić do Delphi do IBQuery itd. Może się uda.
Dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1