Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Kein Datensatz->Fehler abfangen & DBEdit zurückschreiben (https://www.delphipraxis.net/14747-kein-datensatz-fehler-abfangen-dbedit-zurueckschreiben.html)

daywalker-dj-k 14. Jan 2004 20:51


Kein Datensatz->Fehler abfangen & DBEdit zurückschrei
 
hallo,
wie kann ich die fehlermeldung abfangen, dass kein datensatz gefunden wird? oder besser gesagt wie kann ich selbst dann eine generieren? wenn ein datensatz gefunden wird, klappt alles super.

so klappt es leider nicht:

Delphi-Quellcode:
      try
        ADODataSet1.CommandText := 'SELECT * FROM kunden WHERE KDNR='''+Edit2.Text+''';';
        ADOConnection1.Connected := True;
        ADODataSet1.Active := True;
      except
        Label20.Caption := 'Fehler';
      end;
weiterhin schreibt mein DBEdit die änderungen innerhalb des feldes nicht direkt in die db. habe das dbedit einfach mit datasource und datafield eingebunden. ausgelesen wird alles. muss man erst noch was einstellen?

danke
mfg
tkliewe

[edit=r_kerber]Delphi-Tags gesetzt. Mfg, r_kerber[/edit]

trifid 14. Jan 2004 21:49

Re: Kein Datensatz->Fehler abfangen & DBEdit zurücksc
 
Hallo,

mehrere Punkte ... (nein nicht diese) :-)

Zitat:

try
ADODataSet1.CommandText := 'SELECT * FROM kunden WHERE KDNR='''+Edit2.Text+''';';
ADOConnection1.Connected := True;
ADODataSet1.Active := True;
except
Label20.Caption := 'Fehler';
end;
die Connection ADOConnection1.Connected := True; würde ich von Anfang an auf TRUE haben
und gar nicht hier in diesen Bereich öffnen
gibt es irgendwelche Gründe warum keine ständige Verbindung vorhanden sein soll

zweitens
prüfe vorher über einen
SQL-Code:
   SELECT Count(*) FROM kunden WHERE KDNR='123'
ob überhaupt ein Kunde in der DB vorhanden ist, erst dann würde ich mit anderen Zuweisungen fortfahren .

drittens dbedit
Zitat:

weiterhin schreibt mein DBEdit die änderungen innerhalb des feldes nicht direkt in die db. habe das dbedit einfach mit datasource und datafield eingebunden. ausgelesen wird alles. muss man erst noch was einstellen?
in welchen Bezug steht das zum oberen Verhalten ?
wurde ein .Post durchgeführt, nachdem die Daten in dbedit geändert wurden ?

daywalker-dj-k 14. Jan 2004 22:00

Re: Kein Datensatz->Fehler abfangen & DBEdit zurücksc
 
hallo,
also die verbindung soll nicht von anfang an true sein, da später auf diese db von mehreren computern aus zugegriffen werden soll -> möglichst kurze verbindungen nur aufbauen


Source:
SQL-Code:
   SELECT Count(*) FROM kunden WHERE KDNR='123'
also soll ich diesen sql-string als command-text einsetzen und nachher abfragen ob das ungleich 0 ist, oder wie ist das gemeint?


.post wurde nicht ausgeführt. hab noch nie vorher auf ne access-db zugegriffen. wie bzw. an welchem objekt muss ich das ausführen.

danke schonmal
gruß
tkliewe

[edit=r_kerber]SQL-Tags gesetzt. Mfg, r_kerber[/edit]

trifid 14. Jan 2004 22:15

Re: Kein Datensatz->Fehler abfangen & DBEdit zurücksc
 
Hallo,

mitlerweile poste ich deine anliegen quer ... kann anstrengend werden (nicht für mich, für dich)

Zitat:

also die verbindung soll nicht von anfang an true sein, da später auf diese db von mehreren computern aus zugegriffen werden soll -> möglichst kurze verbindungen nur aufbauen
wenn du ständig die Verbindung aufbaust und trennst bei deiner access-datenbank, dann
warten irgendwann die anderen
bei access ist es nicht so kritisch wie bei einen SQL-Server



Zitat:

also soll ich diesen sql-string als command-text einsetzen und nachher abfragen ob das ungleich 0 ist, oder wie ist das gemeint?
Delphi-Quellcode:
   ADODataSet.Close;
   ADODataSet.CommandText := Format (SELECT Count(*) as Anzahl FROM kunden WHERE KDNR='%s', Edit1.Text);
   ADODataSet.Open;
   n := ADOQuery.FieldByName('Anzahl').asInteger;
   if n > 0 then
   begin
      // huch ich habe eine Kunden
   end else begin
      // nichts gefunden
   end;
Zitat:

.post wurde nicht ausgeführt. hab noch nie vorher auf ne access-db zugegriffen. wie bzw. an welchem objekt muss ich das ausführen.
Es gibt von Borland eine wunderschöne Einführungs-Broschüre die liegt bei jeden Delphi dabei
Hier ist ein Beispiel beschrieben wie man sich in die Datenbank-Komponenten einarbeitet kann.

Delphi-Quellcode:
ADODataSet.Edit;
ADODataSet.FieldByName('KundenName').asString := 'daywalker-dj-k';
ADODataSet.Post;
wenn Du den DBnavigator verwendest, dann wird das "häckchen" aktiv - dahinter verbirgt sich ein post

[edit=r_kerber]Code ind Delphi-Tags geändert. Mfg, r_kerber[/edit]

raeschnix 14. Jan 2004 22:35

Re: Kein Datensatz->Fehler abfangen & DBEdit zurücksc
 
Hi!

Also ich würds in etwa so lösen:

Delphi-Quellcode:
  myCommandText := 'SELECT * FROM kunden WHERE KDNR = '''+Edit2.Text+''';';

  ADOConnection1.Connected := True;
  if not ADODataSet1.Active then
    ADODataSet1.open;

  with ADODataSet1 do
    begin
      DisableControls; // damit nix ruckelt (Bei mehr DS in einem Grid z.B)
      CommandText := mycommandtext;
      Requery;
      EnableControls;
    end;
Dazu bauste noch ne RecordCount Variable ein und prüfst vorher ab ob > = 0 und gibst ne entsprechende Meldung aus.

Gruss
raeschnix

P.S Wo ist die Formatierung hin in der Vorschau ???

[edit=r_kerber]Delphi-Tags gesetzt. Mfg, r_kerber[/edit]

trifid 14. Jan 2004 22:39

Re: Kein Datensatz->Fehler abfangen & DBEdit zurücksc
 
Hallo,

auf den Requery würde ich mich nicht verlassen

daywalker-dj-k 14. Jan 2004 22:58

Re: Kein Datensatz->Fehler abfangen & DBEdit zurücksc
 
hallo,
soweit so gut. also mein qt sieht jetzt so aus:

Delphi-Quellcode:
      ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + strDBPath+strMandant+ '\db.mdb;Mode=Share Deny Read|Share Deny Write;Persist Security Info=False;';
      ADOConnection1.Connected := True;
      ADODataSet1.Close;
      ADODataSet1.CommandText := 'SELECT Count(*) as Anzahl FROM kunden WHERE KDNR=''' +Edit2.Text+ ''';';
      ADODataSet1.Open;
      n := ADOQuery1.FieldByName('Name1').asInteger;
      if n > 0 then
        begin
          Label20.Caption := 'ja';
        end
      else
        begin
        Label20.Caption := 'nein';
       end;
ich lese 14 felder aus der db aus und packe sie in dbedits. ich erhalte beim starten der prozedur allerdings immer die fehlermeldung, dass das feld, welches in dbedit14 geschrieben werden soll, nicht gefunden werden kann. wenn ich noch ein edit hinzufüge, dann wird das 15. feld nicht gefunden. also immer das letzte. woran kann das liegen.

wie muss ich eigenltich die ADOquery einbinden? habs jetzt einfach mit der connection gemacht. oder muss ich auf datasource zurückgreifen?

danke nochmals. ihr habt mir schon sehr weitergeholfen.
mfg
tkliewe

[edit=r_kerber]Delphi-Tags gesetzt. Mfg, r_kerber[/edit]

trifid 14. Jan 2004 23:09

Re: Kein Datensatz->Fehler abfangen & DBEdit zurücksc
 
Hallo,


Zitat:

ich lese 14 felder aus der db aus und packe sie in dbedits.
machst Du das manuell ? normalerweise funktioniert das über die dbedit.datasource-verbindung
datasource ist mit dataset dataset mit connection.

Zitat:

ich erhalte beim starten der prozedur allerdings immer die fehlermeldung, dass das feld, welches in dbedit14 geschrieben werden soll, nicht gefunden werden kann. wenn ich noch ein edit hinzufüge, dann wird das 15. feld nicht gefunden. also immer das letzte. woran kann das liegen.
source, würde hier weiterhelfen
nochmals,
auf dein form ist ein DataSource (ds) und ein ADODataSet (ads) und n DBedit (dbe)
ads hat connection
ads.active = true
ds ist mit ads verbunden
dbe.datasource ist mit ds verbunden
dbe.datafield ist feld1
dbe9.datasource ist mit ds verbunden
dbe9.datafield ist feld9

Zitat:

wie muss ich eigenltich die ADOquery einbinden? habs jetzt einfach mit der connection gemacht. oder muss ich auf datasource zurückgreifen?
sorry ich habe mich mit den ADOquery verschrieben und meinte ADOdataset
aber jetzt muss ich noch etwas mehr erzählen
Du brauchst ein ADOdataset für den 'SELECT'
und ein anderes für den 'COUNT'
ach, vielleicht hast du deswegen keine felder mehr

Code:
ADOConnection1.Connected := True;

ADODataSet1.Close;
ADODataSet1.CommandText := 'SELECT Count(*) as Anzahl FROM kunden WHERE KDNR=''' +Edit2.Text+ ''';';
ADODataSet1.Open;
n := ADODataSet1.FieldByName('Name1').asInteger;
if n > 0 then
begin
   ADODataSet2.Close;
   ADODataSet2.CommandText := 'SELECT Count(*) as Anzahl FROM kunden WHERE KDNR=''' +Edit2.Text+ ''';';
   ADODataSet2.Open;
end else begin
   Label20.Caption := 'nein';
end;
das ADODataSet2 ist mit deinen Datasource und den DBedit's verbunden

daywalker-dj-k 14. Jan 2004 23:41

Re: Kein Datensatz->Fehler abfangen & DBEdit zurücksc
 
hallo,
danke für deine ausführliche beschreibung. werde es morgen direkt ausprobieren.
ggf. melde ich mich nochmal :-D
mfg
tkliewe


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