AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Tabellenfelder 2 versch. Datenbanken vergleichen
Thema durchsuchen
Ansicht
Themen-Optionen

Tabellenfelder 2 versch. Datenbanken vergleichen

Ein Thema von Luckner · begonnen am 3. Apr 2018 · letzter Beitrag vom 5. Apr 2018
Antwort Antwort
Seite 1 von 3  1 23      
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#1

Tabellenfelder 2 versch. Datenbanken vergleichen

  Alt 3. Apr 2018, 13:26
Datenbank: Firebird • Version: 2.1 • Zugriff über: Dataset
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:
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;
Leider mit einer Fehlermeldung des SQL-Servers. Könnte mir Jemand helfen?
Danke und Gruß,
Luckner
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Tabellenfelder 2 versch. Datenbanken vergleichen

  Alt 3. Apr 2018, 13:34
Wer bringt welchen Fehler?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Tabellenfelder 2 versch. Datenbanken vergleichen

  Alt 3. Apr 2018, 13:54
Beim "JvHTButton1Click" kommt: "Syntaxfehler in JOIN-Operation"

Luckner
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Tabellenfelder 2 versch. Datenbanken vergleichen

  Alt 3. Apr 2018, 13:56
In der letzten SQL-Anweisung fehlt ja auch der JOIN (T2 ist gar nicht definiert).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
563 Beiträge
 
Delphi XE6 Enterprise
 
#5

AW: Tabellenfelder 2 versch. Datenbanken vergleichen

  Alt 3. Apr 2018, 13:59
Beim "JvHTButton1Click" kommt: "Syntaxfehler in JOIN-Operation"

Luckner
Unterstützt Firebird denn die Angabe von Feldnamen in eckigen Klammern? Ich dache, das wäre eine Access-Spezialität, die keine andere Datenbank hat.
  Mit Zitat antworten Zitat
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: Tabellenfelder 2 versch. Datenbanken vergleichen

  Alt 3. Apr 2018, 14:08
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;
  Mit Zitat antworten Zitat
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Tabellenfelder 2 versch. Datenbanken vergleichen

  Alt 3. Apr 2018, 14:13
Hallo Frickler,
Delphi-Quellcode:
  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;
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.

Luckner
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Tabellenfelder 2 versch. Datenbanken vergleichen

  Alt 3. Apr 2018, 14:15
(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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.338 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Tabellenfelder 2 versch. Datenbanken vergleichen

  Alt 3. Apr 2018, 14:17
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:
select Art-Nr
Das müsste mMn in eckigen Klammern stehen.
Peter
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.418 Beiträge
 
Delphi 7 Professional
 
#10

AW: Tabellenfelder 2 versch. Datenbanken vergleichen

  Alt 3. Apr 2018, 14:22
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');
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz