AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datenbankanwendung sauber strukturieren und programmieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datenbankanwendung sauber strukturieren und programmieren

Ein Thema von guidok · begonnen am 3. Nov 2008 · letzter Beitrag vom 19. Nov 2008
 
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

Re: Datenbankanwendung sauber strukturieren und programmiere

  Alt 3. Nov 2008, 10:53
Hi,

eine entsprechende Abstraktion gelingt über TDataSet.
Dazu hier ein kleines Beispiel:

Die Datenklasse (mit ADO auf Access)
Delphi-Quellcode:
unit datADO;

interface

uses
  SysUtils, Classes, DB, ADODB;

type
  TADOmod = class(TDataModule)
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    procedure DataModuleCreate(Sender: TObject);
    procedure DataModuleDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    function GetTable( const ATableName : string; var ADataSet : TDataSet ) : boolean;
    function GetQuery( const ASqlQuery : string; var ADataSet : TDataSet ) : boolean;
    function ExecSql( const ASqlStatement : string; var ARecordsAffected : integer ) : boolean;
  end;

var
  ADOmod: TADOmod;

implementation

const
  DBconn = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Persist Security Info=False';
  DBpath = '..\db\DBabstract.mdb';

{$R *.dfm}

procedure TADOmod.DataModuleCreate(Sender: TObject);
begin
  if ADOConnection1.Connected then
    ADOConnection1.Close;
  ADOConnection1.ConnectionString :=
    Format( DBconn, [ DBpath ] );
end;

procedure TADOmod.DataModuleDestroy(Sender: TObject);
begin
  if ADOConnection1.Connected then
    ADOConnection1.Close;
end;

function TADOmod.ExecSql(const ASqlStatement: string; var ARecordsAffected: integer): boolean;
begin
  try
    ADOConnection1.Execute( ASqlStatement, ARecordsAffected );
    Result := true;
  except
    Result := false;
  end;
end;

function TADOmod.GetQuery(const ASqlQuery: string;
  var ADataSet: TDataSet): boolean;
begin
  ADataSet := TADOTable.Create( Self );
  try
    with TADOQuery( ADataSet )
    do
      begin
        Connection := ADOConnection1;
        SQL.Text := ASqlQuery;
      end;
    Result := true;
  except
    Result := false;
    FreeAndNil( ADataSet );
  end;
end;

function TADOmod.GetTable(const ATableName: string; var ADataSet: TDataSet) : boolean;
begin
  ADataSet := TADOTable.Create( Self );
  try
    with TADOTable( ADataSet )
    do
      begin
        Connection := ADOConnection1;
        TableName := ATableName;
      end;
    Result := true;
  except
    Result := false;
    FreeAndNil( ADataSet );
  end;
end;

end.
Und so wird die verwendet (ein Button, ein Datengrid und eine damit verknüpfte DataSource)
Delphi-Quellcode:
unit frmMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, Grids, DBGrids;

type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses datADO;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  MyDataSet : TDataSet;
begin
  if ADOmod.GetTable( 'Personen', MyDataSet )
  then
    begin
      MyDataSet.Open;
      DataSource1.DataSet := MyDataSet;
    end;
end;

end.
Als weiterer Hinweis seien noch die StoredProcedures genannt, die z.B. bei MSSQL, MySQL, etc. möglich sind.
Hier kann eine Schnittstellen-Ebene geschaffen werden, die die DB-Entwicklung von der Programm-Entwicklung trennt.
Änderungen an der DB-Struktur ziehen nur Änderungen an den StoredProcedures nach sich (natürlich nur, wenn die Ein- und Ausgabe-Parameter sich nicht ändern). Aber wenn man aus einer Tabelle nun jetzt 2 machen möchte, das grundsätzliche Ein- und Ausgabeverhalten hat sich aber nicht geändert, so habe ich nur die Änderungen auf der DB-Seite und das Prog bleibt unangetastet.

cu

Oliver
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz