AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi schnellere Suche in Datenbank
Thema durchsuchen
Ansicht
Themen-Optionen

schnellere Suche in Datenbank

Ein Thema von Gambit · begonnen am 24. Jan 2005 · letzter Beitrag vom 24. Jan 2005
Antwort Antwort
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#1

schnellere Suche in Datenbank

  Alt 24. Jan 2005, 17:24
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
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#2

Re: schnellere Suche in Datenbank

  Alt 24. Jan 2005, 17:37
Könntest du nicht beide TAbellen auf einmal laden?
Damit ein ...
SQL-Code:
SELECT A
FROM B
WHERE C not in (SELECT C
                 FROM OldB)
... möglich wird?
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#3

Re: schnellere Suche in Datenbank

  Alt 24. Jan 2005, 17:44
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?
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

Re: schnellere Suche in Datenbank

  Alt 24. Jan 2005, 18:14
Zitat mit ausgetauschten Bezeichnern
Könntest du nicht beide TAbellen auf einmal laden?
Damit ein ...
SQL-Code:
SELECT *
FROM KundenAlt
WHERE KundenNr not in (SELECT KundenNr
                        FROM KundenAlt)
... möglich wird?
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#5

Re: schnellere Suche in Datenbank

  Alt 24. Jan 2005, 18:20
hmmm, das setzt voraus, dass Foxpro Unterabfragen kann, oder? Muss ich mal probieren...
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#6

Re: schnellere Suche in Datenbank

  Alt 24. Jan 2005, 18:31
Zitat von Gambit:
hmmm, das setzt voraus, dass Foxpro Unterabfragen kann, oder? Muss ich mal probieren...
Du kannst auch eine andere museumsreife DB hernehmen um das hinzukriegen.
Du könntest die Daten durch MS Jet schleusen und darin dein SubQuery absetzen:
SQL-Code:
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])
Wobei ich absolut kein Profi für Jet bin (aufgrund einer akuten Allergie gegen dieses scheußliche Ding ).
Es könnte aber für deinen Fall reichen.
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#7

Re: schnellere Suche in Datenbank

  Alt 24. Jan 2005, 18:38
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:
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;
wobei das natürlich Quatsch ist, weil jedesmal die gleiche DB angesprochen wird. Aber sonst scheint die Unterabfrage zu funzen...

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.
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#8

Re: schnellere Suche in Datenbank

  Alt 24. Jan 2005, 21:23
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...
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:01 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