Entwickler-Ecke

Datenbanken - Abfrage via Access


Apo95 - So 29.07.12 14:14
Titel: Abfrage via Access
Hallo,Leute,

ich versuche, ein Datenbankprogramm zu bauen. Der Nutzer gibt den Suchbegriff in eine Editfeld ein und in einer DBGrid soll das Ergebnis markiert werden. Der Quellcode allerdings tut nicht das, was ich will; es erscheint immer eine Fehlermeldung und/oder das Ergebnis wird nicht markiert.

Hier der Source:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
adoquery1.Active := true;
  adoquery1.ExecSQL;
  if adoquery1.RecordCount = 1
  then begin
     Edit1.Text :=ADOQuery1Identifier.Text;
     Edit1.Text := ADOQuery1INN.Text;
     cyDBAdvGrid1.Selection;
     cyDBAdvGrid1.Selection;
     cyDBAdvGrid1.SetFocus;
  end
  else
  Edit1.Clear;
    Application.MessageBox('Es stimmte kein Eintrag mit Ihrer Suchanfrage überein.','Kein Ergebnis/Suche fehlgegangen',mb_ICONSTOP or mb_OK);
Weiß jemand Rat? Ich habe mit Datenbankprogrammen nur sehr wenig Erfahrung.

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Delete - Di 31.07.12 01:42

user profile iconApo95 hat folgendes geschrieben Zum zitierten Posting springen:
Weiß jemand Rat? Ich habe mit Datenbankprogrammen nur sehr wenig Erfahrung.


Nein, ich rate noch:

1. Welche Fehlermeldung erscheint denn?
2. Wie sieht dein SQL-String aus?

Ohne diese Informationen kann kein Mensch der Welt eine sinnvolle Antwort auf deine Frage geben. Wieso verschweigst du sie dennoch?


Apo95 - Di 31.07.12 15:12

Danke für den Tipp: Das hatte ich völlig verpennt...

SELECT *FROM care_icd10_de

Fehlermeldung:

'Es konnte kein passender Eintrag gefunden werden.' Diese Fehlermeldung habe ich eingefügt, falls tatsächlich kein Eintrag übereinstimmt. Diese erscheint aber immer .


bummi - Di 31.07.12 15:51


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
  adoquery1.Active := true;
  //adoquery1.ExecSQL;  >> ExecSQL brauchst Du wenn Du einen Befehl ohne Ergebnismenge ausführen willst
  if adoquery1.RecordCount = 1 // was wenn mehr als ein Satz zurückkommt
   then 
    begin
     Edit1.Text :=ADOQuery1Identifier.Text;
     Edit1.Text := ADOQuery1INN.Text;
     cyDBAdvGrid1.Selection;
     //cyDBAdvGrid1.Selection; >>> Doppelt
     cyDBAdvGrid1.SetFocus;
    end
  else
    begin // ohne begin - end wid die Nachricht immer angezeigt
      Edit1.Clear;
      Application.MessageBox('Es stimmte kein Eintrag mit Ihrer Suchanfrage überein.','Kein Ergebnis/Suche fehlgegangen',mb_ICONSTOP or mb_OK);
    end;


Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt


Delete - Di 31.07.12 17:00

user profile iconApo95 hat folgendes geschrieben Zum zitierten Posting springen:
Danke für den Tipp: Das hatte ich völlig verpennt...
SELECT *FROM care_icd10_de
Fehlermeldung: 'Es konnte kein passender Eintrag gefunden werden.' Diese Fehlermeldung habe ich eingefügt, falls tatsächlich kein Eintrag übereinstimmt. Diese erscheint aber immer .


Tja, einen Befehl *FROM gibt es nicht ...


bummi - Di 31.07.12 20:24

@Perlsau

??? :gruebel:


Narses - Di 31.07.12 21:12

Moin!

@user profile iconbummi: Ich schätze er meint, dass da ein Space fehlt. :idea: ;)

cu
Narses


Delete - Di 31.07.12 21:58

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
@user profile iconbummi: Ich schätze er meint, dass da ein Space fehlt. :idea: ;)


@ Narses: Exakt erkannt. Wenn der TE diesen SQL-Befehl direkt in den Foren-Editor kopiert hat, ist das der Fehler, der dafür sorgt, daß " kein passender Eintrag gefunden werden" konnte. Ansonsten hat er sich nur vertippt ...

Moderiert von user profile iconNarses: Beiträge zusammengefasst

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
@Perlsau

??? :gruebel:


Ich hätte auch schreiben können: Eine Spalte *from gibt es nicht ...


bummi - Di 31.07.12 23:00

Ich hatte das fehlende Leerzeichen tatsächlich übersehen, wenn ich eine Abfrage in der Art in einem Adodataset verwende wird es erstaunlicherweise aber trotzdem problemlos geöffnet.


Delete - Di 31.07.12 23:05

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
Ich hatte das fehlende Leerzeichen tatsächlich übersehen,


Kommt in den besten Familien vor :wink:


user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
wenn ich eine Abfrage in der Art in einem Adodataset verwende wird es erstaunlicherweise aber trotzdem problemlos geöffnet.


Das ist ja der Hammer :!: Intelligentes AdoDataset ... Dann wird der Fehler beim TE wohl woanders liegen ...


bummi - Di 31.07.12 23:15

Ich denke es ist das fehlende Begin .. End im Else Zweig, die Fehlermeldung wird er inzwischen geändert haben .... :glaskugel:


Delete - Mi 01.08.12 01:24

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
Ich denke es ist das fehlende Begin .. End im Else Zweig


Das ist es mit Sicherheit:

Delphi-Quelltext
1:
2:
3:
else
  Edit1.Clear;
    Application.MessageBox ...


Logischerweis wird die Messagebox immer angezeigt.

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
die Fehlermeldung wird er inzwischen geändert haben .... :glaskugel:


Die Fehlermeldung sollte heißen: "Ich bin eine sinnlose Messagebox ..." :D

Du hast eine Glaskugel? Wow! :lol:


DannyVapid - So 30.09.12 21:53


Delphi-Quelltext
1:
2:
if not ADOQuery1.Locate('Identifier', Edit1.Text, [loPartialKey])
   then ShowMessage('Nix gefunden');


das sollte gehen

Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt