Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Tabellenabfrage mit Lookup ergibt immer NULL ? (https://www.delphipraxis.net/90039-tabellenabfrage-mit-lookup-ergibt-immer-null.html)

mandoki 10. Apr 2007 20:27

Datenbank: Absolute Database • Zugriff über: ABS

Tabellenabfrage mit Lookup ergibt immer NULL ?
 
Hallo,

bei folgendem Code erhalte ich IMMER Null:

Delphi-Quellcode:
var such: variant;
...
such := DataForm.Adressen.Lookup('GesamtName',csvdata.FieldbyName('GesamtName').value,'GesamtName');
if such = NULL then
   ...
obwohl die gesuchten Namen in der Adressendatei eindeutig vorhanden sind.

Übersehe ich da einen Fehler in meinem Code?

Gruß mandoki

mkinzler 10. Apr 2007 20:47

Re: Tabellenabfrage mit Lookup ergibt immer NULL ?
 
Delphi-Quellcode:
if not (VarType(such) in [varNull]) then
begin
   ... := such[0];

mandoki 10. Apr 2007 21:18

Re: Tabellenabfrage mit Lookup ergibt immer NULL ?
 
ähm... sorry, hab noch nie mit Lookup gearbeitet :gruebel:

Soll der Bespielcode danach eingefügt werden?
In der Delphi Hilfe finde ich zu Lookup nur wenig Infos. :?

Edit: sorry... habs jetzt unter TBDEDataSet gefunden :oops:
Danke für den Tipp!

mandoki 10. Apr 2007 22:15

Re: Tabellenabfrage mit Lookup ergibt immer NULL ?
 
Irgendwie funktioniert das leider immer noch nicht so wie es sollte :roll:

Es geht darum Datensätze aus einer CSV-Datei zu importieren. Hierbei sollen natürlich nur die Sätze eingefügt werden, die noch nicht vorhanden sind.

Mit folgendem Code ist das Ergebnis immer False:
Delphi-Quellcode:
 while not csvdata.eof do
    begin
      such := dataform.Adressen.Lookup('GesamtName',csvdata.FieldbyName('GesamtName').value,'GesamtName');
      if not (VarType(such) in [varNull]) then
          begin
            dataform.Adressen.Append;
            if csvdata.FindField('Vorname') <> NIL then
               dataform.AdressenVorname.value := csvdata.FieldbyName('Vorname').value;
und mit:
Delphi-Quellcode:
      if (VarType(such) in [varNull]) then
dann natürlich logischerweise immer das Gegenteil (True).

Der Wert in 'such' ist immer NULL und 'varNull' immer 1 ...
Hoffe auf eure Hilfe

Gruß mandoki

raiguen 11. Apr 2007 09:39

Re: Tabellenabfrage mit Lookup ergibt immer NULL ?
 
Moin :)
Nun, bei mir funktioniert der Code bzw die Methode...
Die Methode .Lookup ist NICHT Caseinsensitive und auch NICHT partiell, d.h. der 'Suchbegriff'(=KeyValues) MUSS exact mit dem durchsuchten Feld (=KeyFields) übereinstimmen; vielleicht das noch mal als Hinweis...

d.malkmus 11. Apr 2007 10:28

Re: Tabellenabfrage mit Lookup ergibt immer NULL ?
 
Ich mache das so:

Delphi-Quellcode:
begin
  if not Query1.Locate('Vorname,Nachname','Max,Mustermann',[loCaseInsensitive,loPartialKey]) then begin
    // wenn noch nicht vorhanden, dann einfügen...

  end;
end;
Die LocateOptions erklären sich eigentlich von selbst. Lässt Du sie weg, dann suchst Du exakt nach dem Ausdruck

mandoki 11. Apr 2007 17:21

Re: Tabellenabfrage mit Lookup ergibt immer NULL ?
 
Zitat:

Zitat von raiguen
Moin :)
Nun, bei mir funktioniert der Code bzw die Methode...
Die Methode .Lookup ist NICHT Caseinsensitive und auch NICHT partiell, d.h. der 'Suchbegriff'(=KeyValues) MUSS exact mit dem durchsuchten Feld (=KeyFields) übereinstimmen; vielleicht das noch mal als Hinweis...

Danke, aber das ist mir schon klar. Tatsache ist, das der Inhalt des zu suchenden Feldes (GesamtName) exakt so bereits in der Adressendatei existiert und trotzdem nicht gefunden wird. :?

@ d.malkmus:
Mit der Locate hab ich auch keine Probleme, allerdings wird hierbei der Datensatzzeiger verändert, daher möchte ich dies lieber mit Lookup lösen.

Oder wäre eine SQL-Abfrage sinnvoller?
Habe mit SQL noch keine große Erfahrung.

Gruß mandoki

Edit: hm.. hab das ganze jetzt mal mit locate getestet und auch damit wird der Datensatz im ersten durchlauf nicht gefunden und daher eingefügt. Bei erneutem Start des Vorgangs wird der Satz aber als bereits vorhanden gefunden. Bin ratlos... :roll:

marabu 11. Apr 2007 19:39

Re: Tabellenabfrage mit Lookup ergibt immer NULL ?
 
Hallo mandoki,

du prüfst mit der Tabelle Adressen und manipulierst die Tabelle DataForm.Adressen - wenn es sich dabei nicht um dieselbe Komponente handelt, so ist klar dass du den eingefügten Schlüssel beim zweiten Mal nicht findest. Die Komponente Adressen müsste erst synchronisiert werden.

Grüße vom marabu

mandoki 11. Apr 2007 20:40

Re: Tabellenabfrage mit Lookup ergibt immer NULL ?
 
Zitat:

Zitat von marabu
Hallo mandoki,

du prüfst mit der Tabelle Adressen und manipulierst die Tabelle DataForm.Adressen - wenn es sich dabei nicht um dieselbe Komponente handelt, so ist klar dass du den eingefügten Schlüssel beim zweiten Mal nicht findest. Die Komponente Adressen müsste erst synchronisiert werden.

Grüße vom marabu

Hallo marabu,
da ist mir wohl beim Code einfügen hier ein Fehler unterlaufen, sorry.
Natürlich handelt es sich jeweils um DataForm.Adressen.
Trotzdem danke für den Hinweis.

Könnte das Problem damit zusammenhängen, das es sich bei den Importdaten um eine mit TJvDBGridCSVExport exportierte Datei handelt, welche ich über eine TJvCsvDataSet Komponente importiere?
Oder macht die Absolute Database Tabelle (Zieldatei) hier Probleme?

Bin für jeden Tipp dankbar. :wink:

marabu 11. Apr 2007 21:20

Re: Tabellenabfrage mit Lookup ergibt immer NULL ?
 
Hallo,

du musst mal prüfen, was du beim Lookup wirklich suchst. Die Methode Lookup() arbeitet ansonsten wie beschrieben:

Delphi-Quellcode:
const
  CANDIDATE_KEY = 'GesamtName';
var
  vName: Variant;
begin
  // ...
  vName := csvdata.FieldValues[CANDIDATE_KEY];
  ShowMessage(VarToStr(vName));
  if dataform.Adressen.Lookup(CANDIDATE_KEY, vName, CANDIDATE_KEY) = Null then
  begin
    // append ...
end;
Gute Nacht


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 Uhr.
Seite 1 von 2  1 2      

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