AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Tabellenabfrage mit Lookup ergibt immer NULL ?
Thema durchsuchen
Ansicht
Themen-Optionen

Tabellenabfrage mit Lookup ergibt immer NULL ?

Ein Thema von mandoki · begonnen am 10. Apr 2007 · letzter Beitrag vom 12. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von mandoki
mandoki

Registriert seit: 20. Feb 2006
Ort: Kiel
48 Beiträge
 
Delphi 7 Professional
 
#1

Tabellenabfrage mit Lookup ergibt immer NULL ?

  Alt 10. Apr 2007, 21:27
Datenbank: Absolute Database • Zugriff über: ABS
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Tabellenabfrage mit Lookup ergibt immer NULL ?

  Alt 10. Apr 2007, 21:47
Delphi-Quellcode:
if not (VarType(such) in [varNull]) then
begin
   ... := such[0];
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von mandoki
mandoki

Registriert seit: 20. Feb 2006
Ort: Kiel
48 Beiträge
 
Delphi 7 Professional
 
#3

Re: Tabellenabfrage mit Lookup ergibt immer NULL ?

  Alt 10. Apr 2007, 22:18
ähm... sorry, hab noch nie mit Lookup gearbeitet

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
Danke für den Tipp!
  Mit Zitat antworten Zitat
Benutzerbild von mandoki
mandoki

Registriert seit: 20. Feb 2006
Ort: Kiel
48 Beiträge
 
Delphi 7 Professional
 
#4

Re: Tabellenabfrage mit Lookup ergibt immer NULL ?

  Alt 10. Apr 2007, 23:15
Irgendwie funktioniert das leider immer noch nicht so wie es sollte

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:
      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
  Mit Zitat antworten Zitat
raiguen
(Gast)

n/a Beiträge
 
#5

Re: Tabellenabfrage mit Lookup ergibt immer NULL ?

  Alt 11. Apr 2007, 10:39
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...
  Mit Zitat antworten Zitat
d.malkmus

Registriert seit: 19. Mai 2005
Ort: Faulbach
12 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Tabellenabfrage mit Lookup ergibt immer NULL ?

  Alt 11. Apr 2007, 11:28
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
Daniel Malkmus
16 Bit sind zu wenig, 32 zu viel für einen Kasten...
  Mit Zitat antworten Zitat
Benutzerbild von mandoki
mandoki

Registriert seit: 20. Feb 2006
Ort: Kiel
48 Beiträge
 
Delphi 7 Professional
 
#7

Re: Tabellenabfrage mit Lookup ergibt immer NULL ?

  Alt 11. Apr 2007, 18:21
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...
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Tabellenabfrage mit Lookup ergibt immer NULL ?

  Alt 11. Apr 2007, 20:39
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
  Mit Zitat antworten Zitat
Benutzerbild von mandoki
mandoki

Registriert seit: 20. Feb 2006
Ort: Kiel
48 Beiträge
 
Delphi 7 Professional
 
#9

Re: Tabellenabfrage mit Lookup ergibt immer NULL ?

  Alt 11. Apr 2007, 21:40
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.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Tabellenabfrage mit Lookup ergibt immer NULL ?

  Alt 11. Apr 2007, 22:20
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:31 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