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