![]() |
schnellere Suche in Datenbank
Hallo,
ich habe hier folgendes Problem: Ich habe eine alte Foxpro-Datenbank mit Kundendaten so auch einer Kundennummer. Es existiert kein Primärschlüssel! Die Kundennummern sind zwar einzigartig, es ist aber nicht garantiert, dass eine neu vergebene Kundennummer stets einen numerisch höheren Wert hat als alle anderen vorhandenen. Ich soll nun erfassen, ob neue Kunden hinzugefügt werden. Die einzige Lösung, die ich bisher habe, ist in der aktuellen DB Datensatz für Datensatz durchzugehen und zB mit der Kundennummer eine Select-Anweisung auf die ältere Version der Datenbank durchzuführen. Bekomme ich nichts zurück, habe ich einen neuen Kunden. Das geht zwar, dauert aber elendig lange, weil die DB etwa 40.000 Datensätze hat und ich somit pro Durchgang 40.000x40.000 Select -Anweisungen durchführe. Und das um vielleicht festzustellen, dass ein Kunde dazugekommen ist. Wie gesagt, ist es eine Foxpro-Datenbank, keine Trigger, keine Protokolle und kein Primärschlüssel. Weiß jemand Rat? Gruß Gambit |
Re: schnellere Suche in Datenbank
Könntest du nicht beide TAbellen auf einmal laden?
Damit ein ...
SQL-Code:
... möglich wird?
SELECT A
FROM B WHERE C not in (SELECT C FROM OldB) |
Re: schnellere Suche in Datenbank
Könntest du mir das nochmal etwas genauer erklären? Angenommen meine aktuelle Datenbanktabelle heißt Kunden und die ältere Kopie davon KundenAlt und die Suchspalte KDNNR. Wie soll dann die Select-Anweisung lauten?
|
Re: schnellere Suche in Datenbank
Zitat mit ausgetauschten Bezeichnern Könntest du nicht beide TAbellen auf einmal laden? Damit ein ...
SQL-Code:
... möglich wird?
SELECT *
FROM KundenAlt WHERE KundenNr not in (SELECT KundenNr FROM KundenAlt) |
Re: schnellere Suche in Datenbank
hmmm, das setzt voraus, dass Foxpro Unterabfragen kann, oder? Muss ich mal probieren...
|
Re: schnellere Suche in Datenbank
Zitat:
Du könntest die Daten durch MS Jet schleusen und darin dein SubQuery absetzen:
SQL-Code:
Wobei ich absolut kein Profi für Jet bin (aufgrund einer akuten Allergie gegen dieses scheußliche Ding ;) ).
SELECT *
FROM [ODBC;DSN=DeineOdbcDsn;uid=DeineUserID;pwd=DeinPassword;database=DeineDatenbank].[Kunden] WHERE KundenNr not in (SELECT KundenNr FROM [ODBC;DSN=DeineOdbcDsn;uid=DeineUserID;pwd=DeinPassword;database=DeineDatenbank].[KundenAlt]) Es könnte aber für deinen Fall reichen. :gruebel: |
Re: schnellere Suche in Datenbank
im Moment habe ich eher das Problem, beide DB's zu laden um sie entsprechend anzusprechen. Was ich bisher in der Kürze geschrieben habe ist folgendes.
Delphi-Quellcode:
wobei das natürlich Quatsch ist, weil jedesmal die gleiche DB angesprochen wird. Aber sonst scheint die Unterabfrage zu funzen...
procedure TForm1.Button1Click(Sender: TObject);
begin ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('SELECT * FROM sd_kdn WHERE kdnnr not in (SELECT kdnnr FROM sd_Kdn)') ; ADOQuery1.Open; end; in meinem Falle liegt die aktuelle DB im Verzeichnis DBREF und die Kopie im Verzeichnis DBWORK. Ich habe zwei ADOQuerys wobei die eine mit sd_kdn im DBREF-Verzeichnis und die andere mit sd_kdn in DBWORK verbunden ist. |
Re: schnellere Suche in Datenbank
Ich komm' da jetzt echt nicht weiter, wie macht man denn so eine Unteranfrage mit zwei Querys?
Gruß Gambit edit: Es klappt, wenn beide Datebanktabellen unter anderem Namen im gleichen Verzeichnis stehen. Die ADOConnection zeigt dann auf dieses Verzeichnis. Ich hätte allerdings lieber 2 Verzeichnisse gehabt, wie das dann geht, weiß ich auch noch nicht... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 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 by Thomas Breitkreuz