wow
umständlich und wenig wartungsfreundlich oder?
1. bitte setz beim codeposten doch die delphitags!
2. ich würde mir überlegen, ob ihr euch nicht eine liste anlegt, in der die felder stehen!
Delphi-Quellcode:
type
tint=class
value:integer;
end;
tfelddef=record
fname:
string;
display:
string;
typ:integer;
// 1:string 2:integer 3:float etc
end;
var
fldlist:
array of tfelddef;
anzfields:integer;
...
procedure init;
begin
anzfields:=3;
// 3 => anzahl der felder in der db hier nur als beispiel
setlength(fldlist,anzfields);
fldlist[0].fname:='
name';
fldlist[0].display:='
Name';
fldlist[0].typ:=1;
fldlist[1].fname:='
alter';
fldlist[1].display:='
Alter';
fldlist[1].typ:=2;
fldlist[1].fname:='
groesse';
fldlist[1].display:='
Größe';
fldlist[1].typ:=3;
...
// hier die anderen
end;
procedure load;
var
zeile,spalte:integer;
feldname:tint;
begin
query.sql.txt:='
select * from tabelle';
// etc
query.open;
if query.eof
then
exit;
zeile:=0;
for spalte:=0
to anzfields-1
do
begin
feldname:=tint.Create;
feldname.value:=spalte;
//<- spalte zum ladezeitpunkt
grid.Objects[0,Zeile]:=feldname;
// der spalte(in zeile 0) das object zuweisen
grid.cell[0,Zeile]:=fldlist[spalte].display;
// titel
end;
while not query.eof
do
begin
inc(zeile);
// nächste zeile
for spalte:=0
to anzfields-1
do
begin
case fldlist[spalte].typ
of
1: grid.Cells[Spalte,Zeile]:=
query.FieldByName(fldlist[spalte].fname).asString;
2: grid.Ints[Spalte,Zeile]:=
query.FieldByName(fldlist[spalte].fname).asInteger;
3: grid.floats[Spalte,Zeile]:=
query.FieldByName(fldlist[spalte].fname).asFloat;
end;
end;
query.next;
end;
end;
- baeachte dabei, dass du die objekte ggf. wieder freigeben musst.
- das speichern über die feldnamen sollte dann keine probleme machen, da der
db die reihenfolge egal ist, wenn du per feldname die werte zuweist.