![]() |
Datenbank: Absolute Database • Zugriff über: ABS
Tabellenabfrage mit Lookup ergibt immer NULL ?
Hallo,
bei folgendem Code erhalte ich IMMER Null:
Delphi-Quellcode:
obwohl die gesuchten Namen in der Adressendatei eindeutig vorhanden sind.
var such: variant;
... such := DataForm.Adressen.Lookup('GesamtName',csvdata.FieldbyName('GesamtName').value,'GesamtName'); if such = NULL then ... Übersehe ich da einen Fehler in meinem Code? Gruß mandoki |
Re: Tabellenabfrage mit Lookup ergibt immer NULL ?
Delphi-Quellcode:
if not (VarType(such) in [varNull]) then
begin ... := such[0]; |
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! |
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:
und mit:
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;
Delphi-Quellcode:
dann natürlich logischerweise immer das Gegenteil (True).
if (VarType(such) in [varNull]) then
Der Wert in 'such' ist immer NULL und 'varNull' immer 1 ... Hoffe auf eure Hilfe Gruß mandoki |
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... |
Re: Tabellenabfrage mit Lookup ergibt immer NULL ?
Ich mache das so:
Delphi-Quellcode:
Die LocateOptions erklären sich eigentlich von selbst. Lässt Du sie weg, dann suchst Du exakt nach dem Ausdruck
begin
if not Query1.Locate('Vorname,Nachname','Max,Mustermann',[loCaseInsensitive,loPartialKey]) then begin // wenn noch nicht vorhanden, dann einfügen... end; end; |
Re: Tabellenabfrage mit Lookup ergibt immer NULL ?
Zitat:
@ 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: |
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 |
Re: Tabellenabfrage mit Lookup ergibt immer NULL ?
Zitat:
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: |
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:
Gute Nacht
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:25 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