//Programm Kundenliste als ersten Versuch eine Objectlist zur Aufnahme der Daten
//für eine SQLite DB einzusetzen.
//Hilfe dazu erhielt ich aus vorangegangenen Projekten in der DP vor allem von
//Hobbycoder, Haentschmann und P80286, dennen ich hiermit nochmals danke.
//Erstellt von EdAdvokat April 2017
unit uMainFRM;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
Vcl.StdCtrls, uFRMCustomer,
uCustomerList,
Vcl.ComCtrls, Data.DB, ZAbstractRODataset, ZAbstractDataset,
ZDataset, ZAbstractConnection, ZConnection;
type
TFRMMainCustomer =
class(TForm)
lvCustomer: TListView;
btnAdd: TButton;
btnMake: TButton;
btnDelete: TButton;
btnAutomatic: TButton;
btnClose: TButton;
conMain: TZConnection;
zqryMain: TZQuery;
btnSaveDB: TButton;
btnloadDB: TButton;
edtKDNR: TEdit;
edtName: TEdit;
edtVorname: TEdit;
edtFirma: TEdit;
edtProdukt: TEdit;
edtAnzahl: TEdit;
edtPreis: TEdit;
lblKDNR: TLabel;
lblName: TLabel;
lblVorname: TLabel;
lblFirma: TLabel;
lblProdukt: TLabel;
lblAnzahl: TLabel;
lblPreis: TLabel;
edtTestID: TEdit;
procedure btnAddClick(Sender: TObject);
procedure btnMakeClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
procedure btnAutomaticClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TOBject);
procedure btnCloseClick(Sender: TObject);
procedure btnSaveDBClick(Sender: TObject);
procedure btnloadDBClick(Sender: TObject);
procedure lvCustomerClick(Sender: TObject);
private
{ Private-Deklarationen }
CustomerList: TCustomerList;
procedure FuelleListView;
procedure connect;
procedure clearAllFields;
procedure saveTableData(ID,KDNR,
NAME,VORNAME,FIRMA,PRODUKT,ANZAHL,PREIS:
string );
public
{ Public-Deklarationen }
end;
var
FRMMainCustomer: TFRMMainCustomer;
implementation
{$R *.dfm}
procedure TFRMMainCustomer.btnAutomaticClick(Sender: TObject);
var
r: integer;
I: Integer;
KDN, KDN1,
Name, Vorname, Firma, Produkt:
string;
KDNR, Anzahl: Integer;
Preis: Currency;
begin
Customerlist.Clear;
Randomize;
for I := 0
to 999
do
begin
r:=Random(10);
case r
of
0:
Name:='
Lehmann';
1:
Name:='
Krausnig';
2:
Name:='
Karlsberg';
3:
Name:='
Ludwig';
4:
Name:='
Antonia';
5:
Name:='
Delphenhorst';
6:
Name:='
Erinig';
7:
Name:='
Fiedler';
8:
Name:='
Gurrlig';
9:
Name:='
Henzener';
end;
r:=Random(10);
case r
of
0: Vorname:='
Dieter';
1: Vorname:='
Klaus';
2: Vorname:='
Paul';
3: Vorname:='
Helga';
4: Vorname:='
Bernd';
5: Vorname:='
Friedel';
6: Vorname:='
Gustaf';
7: Vorname:='
Heinz';
8: Vorname:='
Joachim';
9: Vorname:='
Manfred';
end;
r:=Random(10);
case r
of
0: KDN:='
11';
1: KDN:='
12';
2: KDN:='
13';
3: KDN:='
14';
4: KDN:='
15';
5: KDN:='
16';
6: KDN:='
17';
7: KDN:='
18';
8: KDN:='
19';
9: KDN:='
20';
end;
r:=Random(10);
case r
of
0: KDN1:='
21';
1: KDN1:='
22';
2: KDN1:='
23';
3: KDN1:='
24';
4: KDN1:='
25';
5: KDN1:='
26';
6: KDN1:='
27';
7: KDN1:='
28';
8: KDN1:='
29';
9: KDN1:='
30';
end;
r:=Random(10);
case r
of
0: Firma:='
Schulbedarf';
1: Firma:='
Schule&mehr';
2: Firma:='
Hausmeisterserv.';
3: Firma:='
Lernen KG';
4: Firma:='
Lehrbuch Co.';
5: Firma:='
Möbel KG';
6: Firma:='
Hefte/Bücher';
7: Firma:='
Buch4you';
8: Firma:='
Lernen4all';
9: Firma:='
Bedarf Schule';
end;
r:=Random(10);
case r
of
0: Produkt:='
Stühle';
1: Produkt:='
Tische';
2: Produkt:='
Hefte';
3: Produkt:='
Blöcke';
4: Produkt:='
Bilder';
5: Produkt:='
Kreide';
6: Produkt:='
Bücher';
7: Produkt:='
Tafeln';
8: Produkt:='
Werkzeug';
9: Produkt:='
Mappen';
end;
KDNR:=strtoint(KDN[1]+KDN1[1]+format('
%.6d',[i]));
Anzahl:=Random(20);
r:=Random(10000);
Preis:=r/100;
CustomerList.AddCustomer(KDNR,
Name, Vorname, Firma, Produkt, Anzahl, Preis );
end;
FuelleListView;
end;
procedure TFRMMainCustomer.btnCloseClick(Sender: TObject);
begin
close;
end;
procedure TFRMMainCustomer.btnAddClick(Sender: TObject);
var
Customer: TCustomer;
begin
//Eingabeformular mit Defaultwerten bestücken
FRMCustomer.edtKDNR.Text:='
';
FRMCustomer.edtName.Text:='
';
FRMCustomer.edtName.Text:='
';
FRMCustomer.edtVorname.text:='
';
FRMCustomer.edtFirma.text:='
';
FrmCustomer.edtProdukt.Text:='
';
FrmCustomer.edtAnzahl.text:='
';
FRMCustomer.edtPreis.text:='
';
if frmCustomer.ShowModal=mrOK
then
begin
Customer:=TCustomer.Create;
//Das Object Customer erzeugen.
Customer.KDNR:=strtoint(frmCustomer.edtKDNR.Text);
//Customer wird befüllt
Customer.
Name:=FRMCustomer.edtName.Text;
Customer.Vorname:=FRMCustomer.edtVorname.text;
Customer.Firma:=FRMCustomer.edtFirma.text;
Customer.Produkt:=FRMCustomer.edtProdukt.text;
customer.Anzahl:=strtoint(FRMCustomer.edtAnzahl.text);
Customer.Preis:= StrToCurr(FRMCustomer.edtPreis.Text);
CustomerList.Add(Customer);
//Übergabe an CustomerList
FuelleListView;
end;
end;
procedure TFRMMainCustomer.btnDeleteClick(Sender: TObject);
begin
if lvCustomer.Selected<>
nil then
begin
//Hier löschen wir das Object aus der ObjectListe
//Durch die Eigenschaft OwnObjects, die zu jeder TObjectList gehört,
//kümmert sich die ObjectListe selber darum, das entsprechende Object Customer
//frei zugehen. Brauchen wir also nicht selber mache.
//Ansonsten gilt grundsätzlich, was ich selber erzeuge gebe ich auch selber wieder frei
CustomerList.Delete(lvCustomer.Selected.
Index);
FuelleListView;
end;
end;
procedure TFRMMainCustomer.btnloadDBClick(Sender: TObject);
begin
CustomerList.LoadFromDB(conMain);
FuelleListView;
end;
procedure TFRMMainCustomer.btnSaveDBClick(Sender: TObject);
begin
CustomerList.SavetoDB(conMain);
end;
procedure TFRMMainCustomer.btnMakeClick(Sender: TObject);
begin
if lvCustomer.Selected<>
nil then
begin
//Über den Index kann man nun auf jedes Object in der ObjektListe zugreifen
//Damit bestücken wir das Formular mit den Werten aus den Eigenschaften des Objects
frmCustomer.edtKDNR.Text:=inttostr(CustomerList[lvCustomer.Selected.
Index].KDNR);
frmCustomer.edtName.Text:=CustomerList[lvCustomer.Selected.
Index].
Name;
frmCustomer.edtVorname.Text:=CustomerList[lvCustomer.Selected.
Index].Vorname;
fRMCustomer.edtFirma.Text:=CustomerList[lvCustomer.Selected.
Index].Firma;
frmCustomer.edtProdukt.text:=CustomerList[lvCustomer.Selected.
Index].Produkt;
frmCustomer.edtAnzahl.Text:=IntToStr(Customerlist[lvCustomer.Selected.
Index].Anzahl);
frmCustomer.edtPreis.Text:=CurrToStr(Customerlist[lvCustomer.Selected.
Index].Preis);
if FRMCustomer.ShowModal=mrOK
then
begin
//Object erzeugen nicht nötig, da es bereits besteht. Zugriff also möglich
//für die Übertragung der Daten aus dem Formular
CustomerList[lvCustomer.Selected.
Index].KDNR:=strtoint(frmCustomer.edtKDNR.Text);
CustomerList[lvCustomer.Selected.
Index].
Name:=frmCustomer.edtName.Text;
CustomerList[lvCustomer.Selected.
Index].Vorname:=FRMCustomer.edtVorname.Text;
CustomerList[lvCustomer.Selected.
Index].Firma:=FRMCustomer.edtFirma.text;
CustomerList[lvCustomer.Selected.
Index].Produkt:=FRMCustomer.edtProdukt.text;
CustomerList[lvCustomer.Selected.
Index].Anzahl:=strtoint(FRMCustomer.edtAnzahl.text);
CustomerList[lvCustomer.Selected.
Index].Preis:=strtocurr(FRMCustomer.edtPreis.Text);
FuelleListView;
end;
end;
end;
procedure TFRMMainCustomer.clearAllFields;
begin
with FRMMainCustomer
do
begin
edtKDNR.Clear;
edtName.Clear;
edtVorname.Clear;
edtFirma.Clear;
edtProdukt.Clear;
edtAnzahl.Clear;
edtPreis.Clear;
end;
end;
procedure TFRMMainCustomer.connect;
begin
conMain.LibraryLocation:=ExtractFilePath(application.ExeName)+'
sqlite3.dll';
conMain.Database:=ExtractFilePath(application.ExeName)+'
WarenVK.sqlite';
conMain.Connected:=true;
zqryMain.SQL.Clear;
zqryMain.Params.Clear;
zqryMain.SQL.Text:='
SELECT * FROM WARENVERKAUF1';
zqryMain.Open;
while not zqryMain.Eof
do
begin
saveTableData(zqryMain.FieldByName('
ID').AsString,zqryMain.FieldByName('
KDNR').AsString,zqryMain.FieldByName('
Name').AsString, zqryMain.FieldByName('
Vorname').AsString,zqryMain.FieldByName('
Firma').AsString,zqryMain.FieldByName('
Produkt').AsString,zqryMain.FieldByName('
Anzahl').AsString, zqryMain.FieldByName('
Preis').AsString);
zqryMain.Next
end;
zqryMain.Close;
end;
procedure TFRMMainCustomer.FormCreate(Sender: TObject);
begin
CustomerList:=TCustomerList.Create;
connect;
clearAllFields;
end;
procedure TFRMMainCustomer.FormDestroy(Sender: TOBject);
begin
CustomerList.Free;
end;
procedure TFRMMainCustomer.FuelleListView;
var
li: TListItem;
I: Integer;
begin
lvCustomer.Items.BeginUpdate;
Try
//ListView mit Daten aus der ObjectList befüllen.
lvCustomer.Items.Clear;
for I := 0
to CustomerList.Count-1
do
begin
li:=lvCustomer.Items.Add;
li.Caption:=inttostr(CustomerList[i].ID);
//
li.SubItems.Add(inttostr(CustomerList[i].KDNR));
//
li.SubItems.Add(CustomerList[i].
Name);
li.SubItems.Add(CustomerList[i].Vorname);
li.SubItems.Add(CustomerList[i].Firma);
li.SubItems.Add(CustomerList[i].Produkt);
li.SubItems.Add(inttostr(CustomerList[i].Anzahl));
li.SubItems.Add(FormatCurr('
#0.00 €', CustomerList[i].Preis));
end;
Finally
lvCustomer.Items.EndUpdate;
End;
end;
procedure TFRMMainCustomer.lvCustomerClick(Sender: TObject);
var CurrentCustomerID :
string;
begin
if lvCustomer.SelCount>=1
then
begin
CurrentCustomerID:=lvCustomer.Selected.Caption;
//
zqryMain.SQL.Clear;
zqryMain.Params.Clear;
zqryMain.SQL.Text:='
SELECT * FROM WARENVERKAUF1 WHERE ID = :CID';
zqryMain.ParamByName('
CID').AsString := CurrentCustomerID;
//
zqryMain.Open;
edtKDNR.text:=zqryMain.FieldByName('
KDNR').AsString;
edtName.text:=zqryMain.FieldByName('
Name').AsString;
edtVorname.Text:=zqryMain.FieldByName('
Vorname').AsString;
edtFirma.text:=zqryMain.FieldByName('
Firma').asstring;
edtProdukt.text:=zqryMain.FieldByName('
Produkt').AsString;
edtAnzahl.text:=zqryMain.FieldByName('
Anzahl').AsString;
edtPreis.Text:=zqryMain.FieldByName('
Preis').AsString;
zqryMain.Next;
//
zqryMain.close;
end;
end;
procedure TFRMMainCustomer.saveTableData(ID, KDNR,
NAME, VORNAME, FIRMA, PRODUKT, ANZAHL, PREIS:
string);
var item:TListItem;
begin
Item:=lvCustomer.Items.Add;
item.Caption:=ID;
item.SubItems.Add(KDNR);
//
item.SubItems.Add(
Name);
item.SubItems.Add(Vorname);
item.SubItems.Add(Firma);
item.SubItems.Add(Produkt);
item.SubItems.Add(Anzahl);
item.SubItems.Add(Preis);
end;
end.