Einzelnen Beitrag anzeigen

Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
826 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Anleitung zum Umgang mit Datenbank Komponenten

  Alt 8. Okt 2012, 12:45
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
Patrick

Geändert von Ykcim ( 8. Okt 2012 um 15:14 Uhr)
  Mit Zitat antworten Zitat