AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Wie richtig auf bestimmten Satz in Db prüfen

Wie richtig auf bestimmten Satz in Db prüfen

Ein Thema von etom291272 · begonnen am 10. Sep 2005 · letzter Beitrag vom 10. Sep 2005
Antwort Antwort
etom291272

Registriert seit: 16. Feb 2004
Ort: ---
232 Beiträge
 
#1

Wie richtig auf bestimmten Satz in Db prüfen

  Alt 10. Sep 2005, 08:29
Datenbank: Ole Db Server • Zugriff über: ADO
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
  ...
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)

was haltet ihr generell davon
ist das stabil
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.
Kennt Ihr eine andere noch effektivere Methode auf das Vorhandenseins eines bestimmten Satzes zu prüfen?

Bin dankkbar für jede Meinung
  Mit Zitat antworten Zitat
Bob68

Registriert seit: 24. Aug 2005
Ort: Moers
20 Beiträge
 
Delphi 2006 Enterprise
 
#2

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

  Alt 10. Sep 2005, 09:00
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
  Mit Zitat antworten Zitat
etom291272

Registriert seit: 16. Feb 2004
Ort: ---
232 Beiträge
 
#3

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

  Alt 10. Sep 2005, 09:33
@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;
...
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.174 Beiträge
 
Delphi 10.4 Sydney
 
#4

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

  Alt 10. Sep 2005, 10:03
Zitat von etom291272:
was haltet ihr generell davon
Auch 'ne Möglichkeit

Zitat von etom291272:
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 von etom291272:
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 von etom291272:
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
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#5

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

  Alt 10. Sep 2005, 11:20
Statt zu testen, ob
RecordCount < 1 ; ist es performanter zu testen, ob
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.
  Mit Zitat antworten Zitat
etom291272

Registriert seit: 16. Feb 2004
Ort: ---
232 Beiträge
 
#6

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

  Alt 10. Sep 2005, 12:11
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
  Mit Zitat antworten Zitat
etom291272

Registriert seit: 16. Feb 2004
Ort: ---
232 Beiträge
 
#7

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

  Alt 10. Sep 2005, 20:24
bitte um weitere meinungen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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