Hallo Zusammen,
vielen Dank für Eure guten ANtworten. Ich habe mich intensiv damit beschäftigt und wollte hier einen kurzen Zwischenstand geben:
Ich habe eine ExecQuery Procedure geschrieben, mit der ich die Daten in ein Array of String einlese - dass ist die Ausgangsform, wie ich in der Vergangenheit die Daten dann weiterverarbeitet habe:
Delphi-Quellcode:
procedure ExecQuery2 (
query: TMyQuery;
var Cols: TCols;
var Rows: TRows);
var I, J: integer;
begin
SetLength(Cols,
query.FieldCount);
SetLength(Rows,
query.FieldCount,
query.RecordCount);
for J:=0
to query.FieldCount -1
do
begin
Cols[J]:=
query.Fields.Fields[J].FieldName;
end;
for I:=0
to query.RecordCount -1
do
begin
for J:=0
to query.FieldCount -1
do
begin
Rows[J,I]:=
query.Fields.Fields[J].Text;
end;
query.Next;
end;
end;
Mein Aufruf habe ich mit Eurer Hilfe dann so gestaltet (Er macht wenig Sinn, ich wollte nur mal üben...):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Cols: TCols;
Rows: TRows;
begin
MyQuery1.SQL.Clear;
MyQuery1.SQL.Add('select * from Benutzer where Vorname='+#39+Edit1.Text+#39);
connect2;
ExecQuery2(Form1.MyQuery1, Cols, Rows);
FillGrid(StringGrid1, Cols, Rows);
Disconnect2;
showmessage('Stop');
MyQuery1.SQL.Clear;
MyQuery1.SQL.Add('update benutzer set Vorname='+#39+Edit2.Text+#39+' where Vorname='+#39+Edit1.Text+#39);
MyQuery1.Execute;
MyQuery1.SQL.Clear;
MyQuery1.SQL.Add('select * from Benutzer');
connect2;
ExecQuery2(Form1.MyQuery1, Cols, Rows);
FillGrid(StringGrid1, Cols, Rows);
Disconnect2;
end;
So sehen meine Connect und disconnect proceduren aus.
Delphi-Quellcode:
procedure connect (Connection: TMyConnection);
var Datei: TextFile;
MyString:
String;
begin
AssignFile(Datei, ExtractFilePath(Application.ExeName) + '
SQL.set');
Reset(Datei);
try
ReadLn(Datei, MyString);
Connection.Server := copy(MyString, pos('
:', MyString)+1, length(MyString));
ReadLn(Datei, MyString);
Connection.Username := copy(MyString, pos('
:', MyString)+1, length(MyString));
ReadLn(Datei, MyString);
Connection.Password := copy(MyString, pos('
:', MyString)+1, length(MyString));
ReadLn(Datei, MyString);
Connection.Database := copy(MyString, pos('
:', MyString)+1, length(MyString));
finally
CloseFile(Datei);
end;
Connection.Connected:=true;
end;
Delphi-Quellcode:
procedure disconnect (Connection: TMyConnection);
begin
Connection.Connected:=false;
end;
Wie gestaltet Ihr es, wenn Ihr die Zugangsdaten in einer Datei verwalten wollt? Meine
SQL.SET kann jedes Textprogramm öffnen, was ja nicht so gedacht ist...
Zum Thema Klassen - habe ich noch keine Erfahrungen gesammelt, da ich noch nie eine gebaut habe...
Wozu macht die Klasse Sinn?
Warum macht die abstrakte Klasse Sinn, bzw wie werden die Proceduren abstrakt erstellt?
Ist das hier eine Zuweisung der Procedure ExecQuery aus der abstrakten Klasse zu der Procedure ExecQuery aus der konkreten Klasse?
Delphi-Quellcode:
TMySQLNativeStore.ExecQuery;
begin
ExecQuery( FDB, AQuery, ACols, ARows );
end;
Vielen Dank für Eure Unterstützung
Ykcim