Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Wie richtig auf bestimmten Satz in Db prüfen (https://www.delphipraxis.net/53099-wie-richtig-auf-bestimmten-satz-db-pruefen.html)

etom291272 10. Sep 2005 08:29

Datenbank: Ole Db Server • Zugriff über: ADO

Wie richtig auf bestimmten Satz in Db prüfen
 
:-D Hallo zusammen

Bis jetzt habe ich immer so in einer Tabelle überprüft ob ein bestimmter Satz vorhanden ist.
Delphi-Quellcode:
var
  aBad, aBad2:TBetterADODataSet;
  ...
  try
    aBad2:=TBetterADODataSet.Create(Self);
    with aBad2 do
    begin
       Connection:=acn;
       CommandText:='select * from KompOptionen where ArtNr='+QuotedStr(aArtikelFurOption)+
                    ' and RelArtNr='+QuotedStr(pArtNr);
       Active:=True;

       if recordcount>=1 then
       begin
         //machwas
       end

       Close;
    end;//with Bad2 do
  finally
    aBad2.Free;
  end;//Try Bad2
  ...
:gruebel: da mir die viele codetipselei und ausserdem der notwendige Textblock echt auf den Zeiger ging habe ich mir eine andere Lösung überlegt die mit weniger geschreibe auskommt und kam auf das.

Delphi-Quellcode:
var
  sSQL : String;
  olev : Olevariant;
  aSet : _Recordset;
  ...
  sSql:=Format('Select * from VarianteZuPos where VariantenGruppe=(%s)',
              [QuotedStr(Caption)]);
  aSet:=Form1.acn.ConnectionObject.Execute(sSql,olev,0);
  if aSet.RecordCount < 1 then
  begin
  //Mach was ...
  end;
  aSet.Close;
  ...
Nun meine Fragen :?: (Habe in Oh auch in Dp und gegoogelt aber nirgends antworten gefunden)

:arrow: was haltet ihr generell davon
:arrow: ist das stabil
:arrow: wenn man den Typ _Recordset verfolgt erkennt man das irgend ein Interface dahintersteckt und kein Pascal Objekt wie schliesst man diese Resource wieder reicht da die close methode des recordsets oder wird da doch ein objekt erzeugt dass wieder freigegeben werden muss.
:arrow: Kennt Ihr eine andere noch effektivere Methode auf das Vorhandenseins eines bestimmten Satzes zu prüfen?

:coder2: Bin dankkbar für jede Meinung

Bob68 10. Sep 2005 09:00

Re: Wie richtig auf bestimmten Satz in Db prüfen
 
Hallo,
ich benutze DBISAM oder Oracel, und um dort nach vorhandensein eines Datensatz zu suchen benutze ich:
nach der SQL Abfrage immer
if SQL.isnull oder SQL.isempty.

Ich weiss nicht ob es dich weiter bringt aber so geht es halt schneller.
Gruß
Bob68

etom291272 10. Sep 2005 09:33

Re: Wie richtig auf bestimmten Satz in Db prüfen
 
@Bob68

Danke für deine Meinung das Recordset unterstützt die Methode isempty leider nicht das TDataSet schon ich möchte aber lieber wie gesagt den weg über das recordset gehen da nur 2 zeilen code

@All
Bitte um Meinungen zu diesem Code

Zitat:

var
sSQL : String; olev : Olevariant; aSet : _Recordset;
...
sSql:=Format('Select * from VarianteZuPos where VariantenGruppe=(%s)',
[QuotedStr(Caption)]);
aSet:=Form1.acn.ConnectionObject.Execute(sSql,olev ,0);
if aSet.RecordCount < 1 then
begin
//Mach was ...
end;
aSet.Close;
...

Bernhard Geyer 10. Sep 2005 10:03

Re: Wie richtig auf bestimmten Satz in Db prüfen
 
Zitat:

Zitat von etom291272
:arrow: was haltet ihr generell davon

Auch 'ne Möglichkeit

Zitat:

Zitat von etom291272
:arrow: ist das stabil

Wieso sollte es nicht? Die Stabilität der DB-Anwendung hängt vielmehr von der Qualität der (bei dir) OLE DB-Treiber ab und nicht von einer besonderen Art einen Datensatz abzufragen.

Zitat:

Zitat von etom291272
:arrow: wenn man den Typ _Recordset verfolgt erkennt man das irgend ein Interface dahintersteckt und kein Pascal Objekt wie schliesst man diese Resource wieder reicht da die close methode des recordsets oder wird da doch ein objekt erzeugt dass wieder freigegeben werden muss.

Die Freigabe erledigt Delphi mit der automatischen Referenzzählung von selbst. Und wenn du mittels Set_Connection nil zuweist hast du auch eine unverbundene Datenmenge, sprich es ist keine DB-Verbindung mehr nötig.

Zitat:

Zitat von etom291272
:arrow: Kennt Ihr eine andere noch effektivere Methode auf das Vorhandenseins eines bestimmten Satzes zu prüfen?

Optimal, jedoch für jede DB unterschiedlich: Verwendung von Stored Procedure
Sonst: Abfrage mittels Select Count(*) from... und Verwendung von Prepared Statements

Jelly 10. Sep 2005 11:20

Re: Wie richtig auf bestimmten Satz in Db prüfen
 
Statt zu testen, ob
Delphi-Quellcode:
RecordCount < 1 ;
ist es performanter zu testen, ob
Delphi-Quellcode:
EOF and BOF ;
gegeben ist, denn dann ist RecordCount nämlich 0. Bei grossen Datenmengen, wo RecordCount also einen grossen Wert annimmt, ist die Mehtode langsam da alle Datensätze dadurch am Client durchlaufen werden und gezählt werden. EOF und BOF hingegen sind wesentlich schneller und führen zum gleichen Ergebnis.

etom291272 10. Sep 2005 12:11

Re: Wie richtig auf bestimmten Satz in Db prüfen
 
:-D :dp: Danke an alle Ihr habt mir sehr geholfen

was ist mit der methode close des recordsets sollte man die aufrufen wenn man des Set nicht mehr braucht oder ist es egal da die variable die das set speichert ohnehin beim verlassen der Methode nicht mehr existiert :?:

etom291272 10. Sep 2005 20:24

Re: Wie richtig auf bestimmten Satz in Db prüfen
 
bitte um weitere meinungen :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:29 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