Moin...
Zitat:
natürlich noch mehr bemühen, dies zu beherzigen.
...laß doch andere für dich arbeiten.
Haufenweise Tools nehmen dir die Strafarbeit ab. Im CnPack gibt es Tools die nicht mehr missen möchte...andere braucht jemand anders.
(siehe Bild)
1. Codevervollständigung (besser als die eingebaute)
2. SourceHighlight Erweiterung (die bunten Striche) Da sieht man sofort in welcher "Ebene" man ist.
3. Cleaner
4. CodeFormatter
...usw.
Zitat:
Ist der connect-Button mit der Methode überhaupt nötig, wenn doch ohnehin beim Aufruf des Programms die Verbindung zur Datenbank hergestellt wird.
...nein.
Das Datenbank Connect passiert im "Hintergrund". Der User muß nicht darauf achten ob eine Verbindung besteht. Das Programm muß selbst prüfen ob eine Verbindung besteht und sie ggf. herstellen.
Zitat:
ist ebenso der execute-Button mit der Methode nötig, da ohnehin alles bereits läuft?
...nein/ja.
Als Außenstehender kann man nicht wissen wie es funtionieren soll. "Execute" würde ich zu "Speichern" umbenennen... Mache dir mal einen Plan, auf Papier
, was in welcher Situation an Buttons aktiv ist und welche "Aufgaben" erledigt werden sollen. Das Programm selbst, wie du es bereits gemacht hast
, sollte seinen Zustand kennen.
Zitat:
Du schreibst, dass an gleicher Stelle das ein active Setzen nicht notwenig sei, das dies automatisch geschieht:
...ja.
Automatisch heißt das du nicht darum kümmern mußt.
Delphi-Quellcode:
try
qryMain.SQL.Text := '
SELECT * FROM WARENVERKAUF';
// Im Open/ExecSQL wird die Query INTERN geschlossen und am Ende wieder INTERN auf Active := True gesetzt.
qryMain.Open;
except
on E:
Exception do
outputMemo.text := '
Fehlermeldungstext execute: ' + E.
Message;
end;
Delphi-Quellcode:
procedure TMainFrm.FormCreate(Sender: TObject);
begin
conMain.LibraryName := ExtractFilePath(Application.ExeName) + '
sqlite3.dll';
conMain.Params.Add('
DataBase=' + ExtractFilePath(Application.ExeName) + '
WarenVK.sqlite');
// !!! keine hardcodierte Pfade verwenden
conMain.Connected := True;
//qryMain.SQL.Clear; // nicht notwendig...passiert intern
//qryMain.Params.Clear; // nicht notwendig...passiert intern
qryMain.SQL.Text := '
SELECT ID,KDNR,NAME,VORNAME,FIRMA,PRODUKT,ANZAHL,PREIS FROM WARENVERKAUF';
// Ich bevorzuge bei SQL immer die Großschreibung. Da grenzt sich das SQL von normalen Texten ab...kannst halten wie es willst...aber dann konsequent!
qryMain.Open;
while not qryMain.Eof
do
begin
RefreshItems(qryMain.FieldByName('
ID').AsString,
qryMain.FieldByName('
KDNR').AsString,
qryMain.FieldByName('
NAME').AsString,
// Feldname "NAME" kann in die Hose gehen...reserviertes Wort.
qryMain.FieldByName('
VORNAME').AsString,
qryMain.FieldByName('
FIRMA').AsString,
qryMain.FieldByName('
PRODUKT').AsString,
qryMain.FieldByName('
ANZAHL').Asstring,
qryMain.FieldByName('
PREIS').Asstring);
qryMain.Next;
end;
// qryMain.Close; // braucht nicht wirklich geschlossen zu werden. (Ausnahmen bestätigen die Regel (keine Anzeige der Daten)) Mit der nächsten "Ausführung" passiert eh ein Close.
IsEdit := False;
end;
Nochmal der Hinweis auf das E-Book:
http://www.delphipraxis.net/1364168-post8.html