AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL ANweisung liefert leere Datenmenge
Thema durchsuchen
Ansicht
Themen-Optionen

SQL ANweisung liefert leere Datenmenge

Ein Thema von Moony · begonnen am 3. Mär 2009 · letzter Beitrag vom 4. Mär 2009
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#1

SQL ANweisung liefert leere Datenmenge

  Alt 3. Mär 2009, 13:49
Datenbank: MSAccess, MSSQL, MySQL, DB2, Oracle • Zugriff über: TADOConnection
Hallo zusammen,

ich versuche über ein Modul nach dem vorhandesein des zu bearbeitenden Datensatzes nachzufragen. Denn während ich meine Datensätze markiere und nicht aktualisiere, kann es sein dass vom einem Host an den Datensätzen was geändert wurde und somit mir zur Bearbeitung nicht mehr zur Verfügung stehen.

Deshalb übergebe ich an mein Modul zwei Listen: Names & Values.
Names beinhaltet die Feldnamen kommasepariert und Values die dazugehörigen Inhalte des aktuellen Datensatzes.

Die Funktion sieht dann folgendermaßen aus:

Delphi-Quellcode:
function FindMyRecord(var Names,Values: PChar): Boolean;
var SQL : String;
    myTable,
    myConn : String;
    Ini : TIniFile;
    myDB : TADOConnection;
    myDS : TADODataSet;
    FN, FV : TStringList;
begin
   Result := false;

  Ini := TIniFile.Create(Project.Name);
  try
    myTable := Ini.ReadString('DatabaseSettings', 'DatabaseTable', '');
    myConn := Ini.ReadString('DatabaseSettings', 'DatabaseFileName', '');
  finally
    Ini.Free;
  end;

  if (myConn = '') or (myTable = '') then
     Exit;

  myDB := TADOConnection.Create(nil);
  myDS := TADODataSet.Create(nil);
  FN := TStringList.Create;
  FV := TStringList.Create;
  try
    myDB.ConnectionString := myConn;
    myDB.Open;

    if myDB.Connected then
    begin
      FN.CommaText := String(Names);
      FV.CommaText := String(Values);

      myDS.Connection := myDB;

      SQL := 'SELECT * FROM ' + myTable + ' WHERE ';

      for i := 0 to FN.Count - 1 do
      begin
         SQL := SQL + FN.Strings[i] + '=''' + FV.Strings[i] + '''';

        if i < FN.Count - 1 then
           SQL := SQL + ' AND ';
      end;

      myDS.CommandText := SQL;
      myDS.Open;

      if myDS.RecordCount > 0 then
         Result := true;
    end;
  finally
    FN.Free;
    FV.Free;
    myDB.Free;
    myDS.Free;
  end;
end;
Wenn ich den SQL Befehl ausführe bekomme ich als Recordcount 0 zurück, obwohl der Datensatz definitiv so existiert? Irgendeiner ne Idee wieso?

Gruß, Moony
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
zack0r

Registriert seit: 5. Jan 2005
Ort: Rosenheim
25 Beiträge
 
#2

Re: SQL ANweisung liefert leere Datenmenge

  Alt 3. Mär 2009, 14:07
Hm ich würd mir einfach am Ende mal die SQL-Anfrage ausgeben lassen, wenn die Schleife die zusammengebaut hat, da stimmt bestimmt irgendwas nich.
Bleibt nicht am ende ein 'AND ' stehen? Und fehlt nicht das Semikolon am Ende der Anfrage? Ich weiß nicht wie genau das dein DBMS nimmt.

zack0r
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#3

Re: SQL ANweisung liefert leere Datenmenge

  Alt 3. Mär 2009, 14:19
... und solche String-Verknüpfung für SQL-Befehle gehört sowieso verboten; dafür gibt es die Parameter, die auch in Deiner Situation sinnvoll sind. Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: SQL ANweisung liefert leere Datenmenge

  Alt 3. Mär 2009, 15:54
..und ich würde meine Tabellen um ein LastModifiedTimestamp erweitern und das durch einen Trigger befüllen.
Dann wüsste man sowas allein aufgrund der Uhrzeit...

Grüsse
wo
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#5

Re: SQL ANweisung liefert leere Datenmenge

  Alt 3. Mär 2009, 17:01
@Woge:
Da ich nicht weiß ob es in den Tabellen ein solches Feld gibt, bin ich auf das angewiesen was ich bekomme. Also fällt das schon mal weg. Da ich den Kunden nicht vorgeben kann welche Felder sie sich bauen.

@Jürgen:
Warum ist der SQL Befehl nicht richtig? Es ist richtig zusammengesetzt und führt zu keinerlei Fehlern!

@zack:
Ich habe mir die SQL Anweisung angeschaut bevor sie ausgeführt wird. Wenn ein AND zuviel da stünde, würde der Befehl an sich nciht ausgeführt werden und in eine Exception laufen. Was aber nicht der Fall ist. Die Datenmenge liefert mir einen Recordcount von 0 zurück.
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: SQL ANweisung liefert leere Datenmenge

  Alt 3. Mär 2009, 17:16
Zitat von Moony:
Es ist richtig zusammengesetzt und führt zu keinerlei Fehlern!
Wenn die Frage richtig ist, könnte dann 0 nicht auch die richtige Antwort sein?

Gruss
wo
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#7

Re: SQL ANweisung liefert leere Datenmenge

  Alt 3. Mär 2009, 17:34
Der Datensatz existiert genauso in der Form wie ich ihn angefragt habe. Ich habe in der Zwischenzeit keinerleio Änderungen vorgenommen.
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: SQL ANweisung liefert leere Datenmenge

  Alt 3. Mär 2009, 18:07
Hallo,

RecordCount ist keine gute Idee.
Du muss nichts drinstehen,

Probier mal select count(*)


Heiko
Heiko
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#9

Re: SQL ANweisung liefert leere Datenmenge

  Alt 4. Mär 2009, 09:01
Der COUNT Befehl liefert ebenfalls 0 zurück.
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
427 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: SQL ANweisung liefert leere Datenmenge

  Alt 4. Mär 2009, 09:18
Dann ist auch kein Datensatz da, der der entsprechenden Where-Bedingung entspricht. Laß Dir doch mal das komplette generierte SQL-Statement ausgegeben und führ es dann per Hand aus. Vieleicht siehst Du dann, warum keine Daten geliefert werden.
Abgesehen davon: kann es sein, daß der Host den Record erzeugt hat, Du ihn aber noch nicht sehen kannst, weil er die Daten noch nicht commited hat? Oder umgekehrt, daß die Daten nicht gefunden werden, WEIL der Host inzwischen geändert und commited hat?

Grüße,
Uli
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 14:04 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