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
 
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, 12: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
 


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