![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: Dataset
Tabellenfelder 2 versch. Datenbanken vergleichen
Hallo,
ich möchte bestimmte Felder einer Tabelle aus Firebird und einer aus MS-Access miteinander vergleichen und die Unterschiede in einem DBGrid anzeigen. Mein Versuch (mit Fehlermeldung) ist folgender:
Delphi-Quellcode:
Leider mit einer Fehlermeldung des SQL-Servers. Könnte mir Jemand helfen?
procedure TFrameRohwareLager.JvHTButton1Click(Sender: TObject);
begin DatamoduleAuftrag.DataModule2.ADOConnection1.Connected := false; DatamoduleAuftrag.DataModule2.ADOConnection1.connectionstring := 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source = ' + ADOConnection + ' ; Persist Security Info=False;'; DatamoduleAuftrag.DataModule2.ADOConnection1.Connected := true; DatamoduleAuftrag.DataModule2.ADOQueryEtikbase.Active := False; DatamoduleAuftrag.DataModule2.ADOQueryEtikbase.SQL.Clear; DatamoduleAuftrag.DataModule2.ADOQueryEtikbase.SQL.Add('select Art-Nr, Format, Numerierung from Artikel T2 INNER JOIN [Material-Stamm] on Artikel.[Mat-Nr] = [Material-Stamm].[Mat-Nr] ORDER BY Artikel.[Mat-Nr]'); DatamoduleAuftrag.DataModule2.ADOQueryEtikbase.Open; DatamoduleRohwareLager.DataModule9.IBDatabaseRohwareBewegung.Connected := true; DatamoduleRohwareLager.DataModule9.IBDataSetRohwareBestand.Close; DatamoduleRohwareLager.DataModule9.IBDataSetRohwareBestand.SelectSQL.Clear; DatamoduleRohwareLager.DataModule9.IBDataSetRohwareBestand.SelectSQL.Add('select ROHWARENR, FORMAT, OBERMATERIAL from ROHWARESTAND T1 on T1.ROHWARENR = T2.[Art-Nr] where T1.FORMAT <> T2.[Format] OR T1.OBERMATERIAL <> T2.[Numerierung] order by ROHWARENR'); DatamoduleRohwareLager.DataModule9.IBDataSetRohwareBestand.Open; end; Danke und Gruß, Luckner |
AW: Tabellenfelder 2 versch. Datenbanken vergleichen
Wer bringt welchen Fehler?
|
AW: Tabellenfelder 2 versch. Datenbanken vergleichen
Beim "JvHTButton1Click" kommt: "Syntaxfehler in JOIN-Operation"
Luckner |
AW: Tabellenfelder 2 versch. Datenbanken vergleichen
In der letzten SQL-Anweisung fehlt ja auch der JOIN (T2 ist gar nicht definiert).
|
AW: Tabellenfelder 2 versch. Datenbanken vergleichen
Zitat:
|
AW: Tabellenfelder 2 versch. Datenbanken vergleichen
Stimmt. Habe es jetzt geändert, aber mit selben Meldung.
Delphi-Quellcode:
procedure TFrameRohwareLager.JvHTButton1Click(Sender: TObject);
begin DatamoduleAuftrag.DataModule2.ADOConnection1.Connected := false; DatamoduleAuftrag.DataModule2.ADOConnection1.connectionstring := 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source = ' + ADOConnection + ' ; Persist Security Info=False;'; DatamoduleAuftrag.DataModule2.ADOConnection1.Connected := true; DatamoduleAuftrag.DataModule2.ADOQueryEtikbase.Active := False; DatamoduleAuftrag.DataModule2.ADOQueryEtikbase.SQL.Clear; DatamoduleAuftrag.DataModule2.ADOQueryEtikbase.SQL.Add('select Art-Nr, Format, Numerierung from Artikel T2 INNER JOIN [Material-Stamm] on Artikel.[Mat-Nr] = [Material-Stamm].[Mat-Nr] ORDER BY Artikel.[Mat-Nr]'); DatamoduleAuftrag.DataModule2.ADOQueryEtikbase.Open; DatamoduleRohwareLager.DataModule9.IBDatabaseRohwareBewegung.Connected := true; DatamoduleRohwareLager.DataModule9.IBDataSetRohwareBestand.Close; DatamoduleRohwareLager.DataModule9.IBDataSetRohwareBestand.SelectSQL.Clear; DatamoduleRohwareLager.DataModule9.IBDataSetRohwareBestand.SelectSQL.Add('select ROHWARENR, FORMAT, OBERMATERIAL from ROHWARESTAND T1 LEFT JOIN T2 on T1.ROHWARENR = T2.Art-Nr where T1.FORMAT <> T2.Format OR T1.OBERMATERIAL <> T2.Numerierung order by ROHWARENR'); DatamoduleRohwareLager.DataModule9.IBDataSetRohwareBestand.Open; end; |
AW: Tabellenfelder 2 versch. Datenbanken vergleichen
Hallo Frickler,
Delphi-Quellcode:
funktioniert. Benutze schon für andere Abfragen und greife mit der ADO-Komponnente direkt auf eine ACCESS-Datenbank. Für die JOIN-Anweisung habe ich die eckigen Klammern auch ausgelassen.
DatamoduleAuftrag.DataModule2.ADOQueryEtikbase.Active := False;
DatamoduleAuftrag.DataModule2.ADOQueryEtikbase.SQL.Clear; DatamoduleAuftrag.DataModule2.ADOQueryEtikbase.SQL.Add('select Art-Nr, Format, Numerierung from Artikel T2 INNER JOIN [Material-Stamm] on Artikel.[Mat-Nr] = [Material-Stamm].[Mat-Nr] ORDER BY Artikel.[Mat-Nr]'); DatamoduleAuftrag.DataModule2.ADOQueryEtikbase.Open; Luckner |
AW: Tabellenfelder 2 versch. Datenbanken vergleichen
(hab ich eigentlich schon mal gesagt, was ich von diesen Einzeilern halte?)
Hab ich es übersehen? Das Datamodule9 hat gar keine DB mit dem es sich verbindet? Und diese eckigen Klammern sind eine access-Spezialität. Aber wemm MS und DBs auf einander treffen gibt es die eine oder andere Eigenheit. Sonst könnte man ja die DB problemlos austauschen. Wie wäre es wenn Du erst versuchst die Verbindung zu einer Datenbank auzubauen, und dann die zu der anderen? Dann ist unter Umständen die Fehlersuche etwas einfacher? Gruß K-H |
AW: Tabellenfelder 2 versch. Datenbanken vergleichen
Hast du die SQL-Statements schon ohne Delphi geprüft?
Es wäre auch gut zu wissen, welches SQL-Statement den Fehler bringt. Was mit auffällt:
Code:
Das müsste mMn in eckigen Klammern stehen.
select Art-Nr
|
AW: Tabellenfelder 2 versch. Datenbanken vergleichen
Dazwischen JOIN T2 fehlt der Tabellenname.
Das muss irgendwie so aussehen: JOIN Tabellenname T2 Wenn die Tabellen in beiden Datenbanken den gleichen Namen haben, wird's wohl Join Artikel T2 heißen müssen. Wahrscheinlich wäre es dann dashier:
Delphi-Quellcode:
DatamoduleRohwareLager.DataModule9.IBDataSetRohwareBestand.SelectSQL.Add('select ROHWARENR, FORMAT, OBERMATERIAL');
DatamoduleRohwareLager.DataModule9.IBDataSetRohwareBestand.SelectSQL.Add('from ROHWARESTAND T1'); DatamoduleRohwareLager.DataModule9.IBDataSetRohwareBestand.SelectSQL.Add('LEFT JOIN Artikel T2'); DatamoduleRohwareLager.DataModule9.IBDataSetRohwareBestand.SelectSQL.Add('on T1.ROHWARENR = T2.Art-Nr'); DatamoduleRohwareLager.DataModule9.IBDataSetRohwareBestand.SelectSQL.Add('where T1.FORMAT <> T2.Format'); DatamoduleRohwareLager.DataModule9.IBDataSetRohwareBestand.SelectSQL.Add('OR T1.OBERMATERIAL <> T2.Numerierung'); DatamoduleRohwareLager.DataModule9.IBDataSetRohwareBestand.SelectSQL.Add('order by ROHWARENR'); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz