Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADOConnection auslagern in Unit (https://www.delphipraxis.net/71123-adoconnection-auslagern-unit.html)

domsch 9. Jun 2006 09:22

Datenbank: MSSQL • Version: 2005 • Zugriff über: ADO

ADOConnection auslagern in Unit
 
Hallo,

will für meine Anwendung die Datenbank Connection in eine Unit auslagern, da ich die Connection in der Anwendung an verschiedenen Orten benutzen muss.

Nach dem ich ein bissel hier gesucht habe, sieht mein quellcode momentan so aus :

(is nur ne beispiel anwendung ;) )

Delphi-Quellcode:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls,
  //Eigene Units die gebraucht werden
  Unit2;

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

var
  Form1: TForm1;

implementation

{$R *.dfm}


(*
Per Knopfdruck soll nen DBGrid Daten aus der DB angezeigt werden,
die Datasource ist dem Grid zugeteilt,
der Datasource ist der Table zugeteilt
dem table will ich per Code die sachen zuweisen
*)
procedure TForm1.Button1Click(Sender: TObject);
begin

//Table eine Connection zuweisen
table.Connection:= unit2.connectionGeber(Application.Owner);

//Tablenamen der Tabelle einstellen
table.TableName:='Kunde';

//Table aktivieren
table.Active:=true;
end;

end.
und die Unit2:
Delphi-Quellcode:
unit Unit2;

interface

uses
ADODB, Classes;

function connectionGeber(comp:TComponent):TADOConnection;

implementation

function connectionGeber(comp:TComponent):TADOConnection;
var
con:TADOConnection;
begin
con:= con.Create(comp);

con.Connected:=false;

con.Provider:='SQLNCLI.1';

con.ConnectionString := 'Provider=SQLNCLI.1;Password=dasPW;Persist Security Info=True;User ID=derUser;Initial Catalog=derDBName';

con.LoginPrompt:=false;

con.Connected:=true;
con.Open;

end;

end.
Die DB läuft auf dem selben rechner. Wenn ich die Connection so in die Form ziehe und den Connection String zusammen baue,
sieht er genauso aus wie oben funktionbiert aber...

wenn ich es per Connection aus der Unit versuche kommt ne "Zugriffsverletzung"...

Erkennt einer den Fehler??


Gruß

marabu 9. Jun 2006 09:25

Re: ADOConnection auslagern in Unit
 
Hi.

Die Zeile, in der du den Rückgabewert deiner Funktion ConnectionGeber() setzt - hast du die weiß gefärbt?

Grüße vom marabu

mkinzler 9. Jun 2006 09:26

Re: ADOConnection auslagern in Unit
 
Warum nimmst du kein Datenmodul?

domsch 9. Jun 2006 09:34

Re: ADOConnection auslagern in Unit
 
@marabu..

oops beim kopieren vergessen,

nein steht dabei

also als letztes in der Unit2
Delphi-Quellcode:
result:=con;

@mkinzler

öhm ka. noch nie was von gehört?! :D

marabu 9. Jun 2006 09:49

Re: ADOConnection auslagern in Unit
 
Ist wirklich besser, wenn du ein Datenmodul (Datei - Neu - Datenmodul) verwendest und deine Connection darauf ziehst. Der Owner deiner Connection ist die Form, wenn du die Komponente zur Entwurfszeit erstellst. Zur Laufzeit übergibst du Application.Owner als Owner - ob das so gut ist?

marabu

domsch 9. Jun 2006 09:55

Re: ADOConnection auslagern in Unit
 
Datenmodul eingestez....


und siehe da.. FUNKTIONIERT..


besten dank!!

:dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:20 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