Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Einträge aus Datenbank an Variable übergeben (https://www.delphipraxis.net/159753-eintraege-aus-datenbank-variable-uebergeben.html)

t0mmy 11. Apr 2011 15:53

Datenbank: MsSQL • Version: 2005 • Zugriff über: ADO

Einträge aus Datenbank an Variable übergeben
 
Hallo!

Ich habe folgendes Problem und zwar trage ich Werte von 4 Editfeldern mittels Button der folgenden Code enthält:
Delphi-Quellcode:
ADOConnection1.ConnectionString:=
      xxxx

    ADOConnection1.Open;

    Try
      //ADOQuery1.Active := True;
      ADOQuery1.SQL.Text := 'INSERT INTO IDAUFTRAG (Pfad, Auftragsnummer) VALUES ('#39''+edit_setpfad.Text+''#39','#39''+edit_anumber.Text+''#39')';
      ADOQuery1.Open;

    except
       on E : Exception do
       begin
           MessageDlg('Eingetragen!', mtInformation, [mbOK], 0);
       end;
    end;

      ADOQuery1.Close;
      ADOConnection1.Close;

      edit_setpfad.Text := '';
      edit_anumber.Text := '';
Jetzt habe ich einen Lesen Button und er soll dann nach dem was in edit_anumber.Text drinnen steht filtern und mir dann edit_setpfad.Text befüllen.

DeddyH 11. Apr 2011 15:58

AW: Einträge aus Datenbank an Variable übergeben
 
Zunächst einmal solltest Du Deine Statements parametrisieren und beim Eintragen/Ändern von Daten ExecSQL statt Open verwenden. Und was ist das Problem? Eine weitere Query mit einer entsprechend parametrisierten SQL-Abfrage, Parameter setzen, öffnen (diesmal mit Open *g*), auslesen und ermittelten Wert dem Edit.Text zuweisen.

generic 11. Apr 2011 16:07

AW: Einträge aus Datenbank an Variable übergeben
 
Das parametrisieren ist wichtig, sonst ist eine Anwendung anfällig für SQL-Injections!

Sicherheitslücke!

t0mmy 11. Apr 2011 16:26

AW: Einträge aus Datenbank an Variable übergeben
 
Das Problem is, das ich nicht weiss was ich ADOQuery1.SQL.Text übergeben muss damit ich das filtern kann was ich suche.. und dann die übergabe mache.

Sry.. ich bin ein Anfänger in diese Gebiet.. was meint ihr mit parametrisieren..

mfg

schlecki 11. Apr 2011 16:50

AW: Einträge aus Datenbank an Variable übergeben
 
so kannst du deine Query parametrisieren...

Code:
ADOQuery1.SQL.Text := 'INSERT INTO IDAUFTRAG (Pfad, Auftragsnummer) VALUES (:pfad, :nummer)';
ADOQuery1.ParamByName('pfad').AsString := deinpfad
ADOQuery1.ParamByName('nummer').AsInteger := 1
ADOQuery1.Execute // oder .ExecSQL;
und so bekommst du deine Daten wieder raus:
Code:
ADOQuery1.SQL.Text := 'select * from IDAUFTRAG where PFAD = :PFAD'; // oder Suche mit PFAD like :PFAD
ADOquery1.ParamByName('PFAD').AsString := DeinSuchPfad;
ADOQuery1.Open;

if ADOQuery1.Eof then
begin
  // nichts gefunden
end
else
begin
  // wir haben's
end;

shmia 11. Apr 2011 17:21

AW: Einträge aus Datenbank an Variable übergeben
 
Bei den ADO-Komponenten sieht das Befüllen der Parameter geringfügig anderst aus:
Delphi-Quellcode:
ADOQuery1.SQL.Text := 'select * from IDAUFTRAG where PFAD = :PFAD'; // oder Suche mit PFAD like :PFAD
ADOquery1.Parameters.ParamValues['PFAD'] := DeinSuchPfad;
ADOQuery1.Open;
Im Gegensatz zu TQuery besitzt TAdoQuery ein eingebettetes Unterobjekt namens "Parameters".
Das Prinzip der Parameter bleibt aber gleich.

t0mmy 13. Apr 2011 12:06

AW: Einträge aus Datenbank an Variable übergeben
 
Versteh ich nicht...
Delphi-Quellcode:
      ADOQuery1.SQL.Text := 'select Pfad from AFSSAuftraege where Würthnummer like = '+edit_wnumber.Text+')';
      ADOQuery1.Open;
      DeinSuchPfad := ADOQuery1.ParamByName('#39'+edit_wnumber.Text+'#39').AsString;
Es wird nichts übergeben --> Fehler bei Open

Was ich will is das beider Spalte Pfad von der Tabelle AFSSAuftraege die Würthnummer die in der selben Zeile steht als string in ein Edit feld schreiben

DeddyH 13. Apr 2011 12:10

AW: Einträge aus Datenbank an Variable übergeben
 
Entweder like oder =, aber nicht beides gleichzeitig.
Delphi-Quellcode:
      ADOQuery1.SQL.Text := 'select Pfad from AFSSAuftraege where Würthnummer like :param)';
      ADOQuery1.Parameters.ParamByName('param').Value := edit_wnumber.Text;
      ADOQuery1.Open;
      if not ADOQuery1.EOF then
        DeinSuchPfad := ADOQuery1.FieldByName('Pfad').AsString;

t0mmy 13. Apr 2011 21:59

AW: Einträge aus Datenbank an Variable übergeben
 
Okay habs jetzt mittlerweile verstanden, aber wenn ich jetzt meine Einträge parametrisiere bekomme ich beim ausführen meines Programmes einen Error bei folgender Programmzeile:

Delphi-Quellcode:
ADOQuery1.ParamByName('pfad').AsString := edit_setpfad.Text;
Error:
Undeclearded identifier: 'ParamByName'
Missing operator or semicolon

Auch wenn ich schreibe:

Delphi-Quellcode:
ADOQuery1.Parameters.ParamByName('pfad').AsString := edit_setpfad.Text;
kommt dann wieder ein Error: Undeclearded identifier: 'AsString'

omata 13. Apr 2011 22:26

AW: Einträge aus Datenbank an Variable übergeben
 
So wie in #8 von DeddyH schon gezeigt:

Parameter:
Delphi-Quellcode:
ADOQuery1.Parameters.ParamByName('pfad').Value:=edit_setpfad.Text;


Inhalt:
Delphi-Quellcode:
edit_setpfad.Text:=ADOQuery1.FieldByName('pfad').AsString;

t0mmy 13. Apr 2011 22:35

AW: Einträge aus Datenbank an Variable übergeben
 
@omata das is mir schon klar.. aber dafür muss ich ja die Einträge parametrisieren und da kommt halt da Fehler

Sir Rufo 13. Apr 2011 22:40

AW: Einträge aus Datenbank an Variable übergeben
 
Zitat:

Zitat von t0mmy (Beitrag 1094958)
@omata das is mir schon klar.. aber dafür muss ich ja die Einträge parametrisieren und da kommt halt da Fehler

Wenn es dir klar ist warum schreibst du es nicht genau so wie es dir gezeigt wurde?
So ähnlich ergibt beim programmieren immer Fehler

BTW es gibt einen Unterschied zwischen Programm ausführen und Programm compilieren.
Ausführen geht nur, wenn das Compilieren erfolgreich war.
Ich vermute aber, das das Compilieren schon fehlschlägt.

Also auch bei der Fehlerbeschreibung ist eine ungenaue Beschreibung kontraproduktiv

t0mmy 13. Apr 2011 23:25

AW: Einträge aus Datenbank an Variable übergeben
 
Richtig beim Compilier kommt schon der Fehler und ich habe es genau so geschrieben wie die einen mir es gepostet haben.
Das Problem ist das ich halt beim Parametrisieren die Fehlermeldung erhalte (wie schon gepostet)

wenn ich aber:

Delphi-Quellcode:
    ADOQuery1.SQL.Text := 'INSERT INTO AFSSAuftraege (Würthnummer, Auftragsnummer, Pfad, XMLNummer) VALUES ('#39''+edit_wnumber.Text+''#39','#39''+edit_anumber.Text+''#39','#39''+edit_setpfad.Text+''#39','#39''+edit_xmlnummer.Text+''#39')';
    ADOQuery1.Open;
schreibe, dann kann er es compilieren. Jedoch funktioniert der Abruf/Lesen nicht, da die Parameter nicht parametrisiert sind.

Das einzige was ich wissen will ist wie die parametrisierung der Parameter funktioniert.

Delphi-Quellcode:
ADOQuery1.Parameters.ParamByName('wuerthnummer').AsString := edit_wnumber.Text;
.AsString is undeclared

Sir Rufo 13. Apr 2011 23:30

AW: Einträge aus Datenbank an Variable übergeben
 
Finde den Unterschied und du hast den Fehler
Delphi-Quellcode:
// Vorschlag von DeddyH
ADOQuery1.Parameters.ParamByName('pfad').Value:=edit_setpfad.Text;
und
Delphi-Quellcode:
// Deine Variante
ADOQuery1.Parameters.ParamByName('wuerthnummer').AsString := edit_wnumber.Text;

t0mmy 13. Apr 2011 23:42

AW: Einträge aus Datenbank an Variable übergeben
 
Also wenn mich nicht alles täuscht dan hast du dich bisschen verschaut. Und zwar die Zeile:

Delphi-Quellcode:
ADOQuery1.Parameters.ParamByName('param').Value := edit_wnumber.Text;
in dem Kontext:
Delphi-Quellcode:
      ADOQuery1.SQL.Text := 'select Pfad from AFSSAuftraege where Würthnummer like :param)';
      ADOQuery1.Parameters.ParamByName('param').Value := edit_wnumber.Text;
      ADOQuery1.Open;
      if not ADOQuery1.EOF then
        DeinSuchPfad := ADOQuery1.FieldByName('Pfad').AsString;
Ist dazu da das ich nach dem Eintrag edit_wbumber.Text suche und dann den Pfad als String in eine Variable schreibe

Weiter oben im Verlauf hat er ja auch erwähnt das ich meine einträge Parametrisieren muss, und diese Antwort von Ihm gilt nur zum Lesen der Einträge

achja, schlecki hat mir den code geliefert...

Sir Rufo 13. Apr 2011 23:48

AW: Einträge aus Datenbank an Variable übergeben
 
:shock: wieso hab ich mich verschaut?

Lies dir bitte deine Beiträge nochmal durch und du wirst feststellen, dass ich mich auf die Codezeile beziehe, die du beschrieben hast.

t0mmy 14. Apr 2011 00:01

AW: Einträge aus Datenbank an Variable übergeben
 
Also.. wenn ich das Richtig verstanden haben.. dann kann ich mit

Delphi-Quellcode:
ADOQuery1.SQL.Text := 'INSERT INTO AFSSAuftraege (Würthnummer, Auftragsnummer, Pfad, XMLNummer) VALUES (:würthnummer, :auftragsnummer, :pfad, :xmlnummer)';
ADOQuery1.Parameters.ParamByName('würthnummer').Value := edit_wnumber.Text;
...
meine einträge parametrisieren nur brauche ich am schluss ein ADOQuery1.ExecSQL;
und beim lesen ein ADOQuery1.Open;
-->???

mkinzler 14. Apr 2011 06:33

AW: Einträge aus Datenbank an Variable übergeben
 
Ja, wobei die Umlaute im Feldnamen/paramter u.U. Probleme bereiten könnten.

schlecki 14. Apr 2011 12:11

AW: Einträge aus Datenbank an Variable übergeben
 
Zitat:

Zitat von t0mmy (Beitrag 1094975)
Delphi-Quellcode:
      ADOQuery1.SQL.Text := 'select Pfad from AFSSAuftraege where Würthnummer like :param)';
      ADOQuery1.Parameters.ParamByName('param').Value := edit_wnumber.Text;
      ADOQuery1.Open;
      if not ADOQuery1.EOF then
        DeinSuchPfad := ADOQuery1.FieldByName('Pfad').AsString;
achja, schlecki hat mir den code geliefert...

Das war nur beispielhaft - und die korrekte Verwendung wurde hier ja auch schon mehrfach gepostet. Ich war mir nicht bewusst, dass es bei TADOQuery nur über Parameters geht.

Mir scheint, du weißt nicht genau, wie du die SQL-Befehle anwenden sollst?

Insert - schreibt neue Datensätze in die Tabelle - verwende hier ADOQuery.ExecSQL, es wird kein ResultSet zurückgeliefert
Update - aktualisiert einen oder mehrere Datensätze - rest wie bei Insert
Select - selektiert Daten. verwende hier ADOQuery.Open und du bekommst ein ResultSet, welches du dann weiter verarbeiten kannst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz