Delphi et DOA

cs_Juju1988 Messages postés 70 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 21 juin 2011 - 14 avril 2011 à 10:33
cs_Juju1988 Messages postés 70 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 21 juin 2011 - 14 avril 2011 à 16:19
Bonjour,

Je suis stagiaire et débute en Delphi et DOA notamment. Je fais des petits tests pour découvrir là j'ai simplement :
- TDataSource
- TOracleSession
- TOracleLogon
- TOracleDataSet
On m'a demandé d'essayer d'interrompre la connexion à la base de données après chaque requête mais si je fais ça mon DBGrid n'affiche plus rien...
Comment puis-je faire ? Voici mon code :
unit Unit1;

interface

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

type
  Tfrm_TestConnectOracleDBGrid = class(TForm)
    bt_Connect: TButton;
    bt_Req: TButton;
    DBGrid1: TDBGrid;
    bt_Quitter: TButton;
    OracleSession1: TOracleSession;
    OracleDataSet1: TOracleDataSet;
    DataSource1: TDataSource;
    bt_Deco: TButton;
    OracleLogon1: TOracleLogon;
    ClientDataSet1: TClientDataSet;
    procedure bt_QuitterClick(Sender: TObject);
    procedure bt_ConnectClick(Sender: TObject);
    procedure bt_ReqClick(Sender: TObject);
    procedure bt_DecoClick(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }

  end;

var
  frm_TestConnectOracleDBGrid: Tfrm_TestConnectOracleDBGrid;
  username : String;
  password : String;
  database : String;
implementation

{$R *.dfm}

procedure Tfrm_TestConnectOracleDBGrid.bt_QuitterClick(Sender: TObject);
begin
frm_TestConnectOracleDBGrid.Close;
end;

procedure Tfrm_TestConnectOracleDBGrid.bt_ConnectClick(Sender: TObject);
begin
OracleLogon1.Execute;
username := OracleSession1.LogonUsername;
password := OracleSession1.LogonPassword;
database := OracleSession1.LogonDatabase;
end;

procedure Tfrm_TestConnectOracleDBGrid.bt_ReqClick(Sender: TObject);
begin
if OracleSession1.Connected = True then
  OracleDataSet1.Open;
else
  begin
  OracleSession1.LogonUsername := username;
  OracleSession1.LogonPassword := password;
  OracleSession1.LogonDatabase := database;
  OracleSession1.LogOn;
  OracleDataSet1.Active := True;
  end;
//OracleSession1.LogOff;
end;

procedure Tfrm_TestConnectOracleDBGrid.bt_DecoClick(Sender: TObject);
begin
  OracleSession1.LogOff;
end;

end.


Après avoir parcouru les forums j'ai vu qu'on pouvait utiliser un TClientDataSet, pour faire une copie mais je ne sais pas comment procéder...
Pouvez vous m'aider ?


A moins que je puisse charger dans un fichier XML ou autre ... mais je n'ai pas trouvé de fonction comme ça avec un TOracleDataSet.

Merci d'avance

2 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
14 avril 2011 à 15:59
Bonjour,

On m'a demandé d'essayer d'interrompre la connexion à la base de données après chaque requête

C'est un peu farfelu cette demande..
En connais-tu la raison ?

cantador
0
cs_Juju1988 Messages postés 70 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 21 juin 2011
14 avril 2011 à 16:19
C'est ce que tout le monde me dit. Mais c'est pour ne pas avoir une connexion permanent pour pas avoir de connexion quand on en a pas besoin, pour que ce soit plus secure ...

Mais bon on m'a aidé à trouver cette solution
unit Unit1;

interface

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

type
  Tfrm_TestConnectOracleDBGrid = class(TForm)
    bt_Connect: TButton;
    bt_Req: TButton;
    DBGrid1: TDBGrid;
    bt_Quitter: TButton;
    OracleSession1: TOracleSession;
    OracleDataSet1: TOracleDataSet;
    DataSource1: TDataSource;
    bt_Deco: TButton;
    OracleLogon1: TOracleLogon;
    ClientDataSet: TClientDataSet;
    txtRequete: TEdit;
    btnOk: TButton;
    procedure bt_QuitterClick(Sender: TObject);
    procedure bt_ConnectClick(Sender: TObject);
    procedure bt_ReqClick(Sender: TObject);
    procedure bt_DecoClick(Sender: TObject);
    procedure btnOkClick(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  frm_TestConnectOracleDBGrid: Tfrm_TestConnectOracleDBGrid;
  username : String;
  password : String;
  database : String;
  procedure CopieDataSet(OracleDataSet : TOracleDataSet; ClientDataSet : TClientDataSet);

implementation

{$R *.dfm}

procedure Tfrm_TestConnectOracleDBGrid.bt_QuitterClick(Sender: TObject);
begin
frm_TestConnectOracleDBGrid.Close;
end;

procedure Tfrm_TestConnectOracleDBGrid.bt_ConnectClick(Sender: TObject);
begin
OracleLogon1.Execute;
username := OracleSession1.LogonUsername;
password := OracleSession1.LogonPassword;
database := OracleSession1.LogonDatabase;
end;

procedure Tfrm_TestConnectOracleDBGrid.bt_ReqClick(Sender: TObject);
begin
  if not OracleSession1.Connected then
  begin
    OracleSession1.LogonUsername := username;
    OracleSession1.LogonPassword := password;
    OracleSession1.LogonDatabase := database;
    OracleSession1.LogOn;
    ShowMessage('Connecté');
  end;

  OracleDataSet1.Open;
  CopieDataSet(OracleDataSet1, ClientDataSet);
  OracleDataSet1.Master := nil;
  ClientDataSet.MasterSource := nil;
  DataSource1.DataSet := ClientDataSet;
  DBGrid1.DataSource := DataSource1;

  OracleSession1.LogOff;
end;

procedure Tfrm_TestConnectOracleDBGrid.bt_DecoClick(Sender: TObject);
begin
  OracleSession1.LogOff;
  ShowMessage('Déconnexion');
end;

procedure CopieDataSet(OracleDataSet : TOracleDataSet; ClientDataSet : TClientDataSet);
var
  i : integer;
begin
ClientDataSet.Close();
ClientDataSet.FieldDefs.Clear();
for i := 0 to OracleDataSet.FieldCount - 1 do
  ClientDataSet.FieldDefs.Add(OracleDataSet.Fields[i].FieldName, OracleDataSet.Fields[i].DataType, OracleDataSet.Fields[i].Size);
  ClientDataSet.CreateDataSet();
  while not OracleDataSet.Eof do
  begin
    ClientDataSet.Append;
    for i := 0 to OracleDataSet.FieldCount - 1 do
      ClientDataSet.Fields[i].Value := OracleDataSet.Fields[i].Value;
      ClientDataSet.Post;
      OracleDataSet.Next;
  end;
end;

end;

end.



Si ça peut aider ...
0
Rejoignez-nous