AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQLQuery das Feld 'id' wurde nicht gefunden.
Thema durchsuchen
Ansicht
Themen-Optionen

SQLQuery das Feld 'id' wurde nicht gefunden.

Ein Thema von gemy · begonnen am 17. Feb 2019 · letzter Beitrag vom 25. Feb 2019
 
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: SQLQuery das Feld 'id' wurde nicht gefunden.

  Alt 18. Feb 2019, 10:55
Hi zusammen

Hmmm... Besser wäre auf jeden fall, die gesamten DB-Methoden in ein Datenmodul zu verlagern und von diesem nicht auff die GUI (in diesem Fall Form 1) zuzugreifen.

Schlecht ist zum Beispiel dies:
Delphi-Quellcode:
    SQLQuery1.ParamByName('website').Value := Edit1.Text;
    SQLQuery1.ParamByName('mainurl').Value := Edit2.Text;
    SQLQuery1.ParamByName('username').Value := Edit3.Text;
    SQLQuery1.ParamByName('password').Value := Edit4.Text;
Schreibe die Werte der Edits zB. in private Felder (Variablen mit vorangestelltem F), verpasse deiner Form1 Propertys, die diese Felder direkt oder indirekt über Getter-Methoden auslesen können.

Wenn nun der User per zB. OK-Button die Werte der Edits in die DB schreiben will, greift deine Form1 auf das Datenmodul und die Insertprozedur zu, indem sie diese aufruft und per Übergabeparameter die Werte der Felder übergibt. In diesem Fall bräuchtest du die Propertys nicht unbedingt. Andrerseits - wenn diese die Felder über Getter- und Setter-Methoden auslesen/beschreiben, kannst du zB. gleich in der Settermethode ein Passwort verschlüsseln und es so an die DB weiterreichen. Oder du kannst die Werte eh darauf prüfen, ob sie überhaupt in die DB geschrieben werden sollen etc.

Ein weiterer Vorteil: Da das Datenmodul deine GUI nicht kennt umgekehrt aber schon), musst du zB. die Insertprozedur nicht ändern, wenn sich an der GUI was ändert.

Parameter zu "Preparen", bevor der SQL Text gesetzt wird, hab ich so auch noch nicht gesehen.
Passwörter 1:1 in eine Tabelle zu schreiben ist ein Nogo.
Das meint dies:
Delphi-Quellcode:
    SQLQuery1.ParamByName('website').Value := Edit1.Text;
    SQLQuery1.ParamByName('mainurl').Value := Edit2.Text;
    SQLQuery1.ParamByName('username').Value := Edit3.Text;
    SQLQuery1.ParamByName('password').Value := Edit4.Text;
    SQLQuery1.ParamByName('dbname').Value := Edit5.Text;
    SQLQuery1.ParamByName('searchsite').Value := CheckBox1.Checked;
    SQLQuery1.ParamByName('listresults').Value := CheckBox2.Checked;
    SQLQuery1.SQL.Text :=
      'insert into users (website,mainurl,username,password,dbname,searchsite,listresults) '
      + 'values(:website,:mainurl,:username,:password,:dbname,:searchsite,:listresults) ';
    SQLQuery1.ExecSQL;
Das nicht so, sondern wie folgt sein sollte:

Delphi-Quellcode:
    SQLQuery1.SQL.Text :=
      'insert into users (website,mainurl,username,password,dbname,searchsite,listresults) '
      + 'values(:website,:mainurl,:username,:password,:dbname,:searchsite,:listresults) ';
    SQLQuery1.ParamByName('mainurl').Value := Fmainurl;
    SQLQuery1.ParamByName('username').Value := Fusername;
    SQLQuery1.ParamByName('password').Value := Fpassword;
    SQLQuery1.ParamByName('dbname').Value := Fdbname;
    SQLQuery1.ParamByName('searchsite').Value := FCheckBox1Checked;
    SQLQuery1.ParamByName('listresults').Value := FCheckBox2Checked;

    SQLQuery1.ExecSQL;
Die Edits habe ich nur aus Beispielgründen durch pivate Felder ersetzt. Würde sich diese Prozeduur in einem Datenmodul befinden, bekäme sie die mit F beginnenden Felder als Übergabeparameter, auch Argumente genannt und sollten daher (per Konvention) mit A statt mit F beginnen.


Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
 


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 08:28 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