Einzelnen Beitrag anzeigen

Benutzerbild von hitzi
hitzi

Registriert seit: 2. Jan 2003
Ort: Eibau
768 Beiträge
 
Delphi 2010 Professional
 
#1

ADOConnection.Open macht Probleme in einer Funktion

  Alt 16. Feb 2004, 10:42
Hallo,

ist das ein Feature, Bug oder ein Fehler in meinem Quelltext?
Öffne ich in einer Funktion eine ADOConnection und schließe sie wieder - mache das gleiche nach einer Minute nochmal(in diesem Testprojekt Button1 wird gedrückt) -> Fehler: Im Project "..." ist eine Exception der Klasse EOleException aufgetreten. Meldung 'Schwerwiegender Fehler'. Prozess wurde angehalten ...
Der Fehler liegt bei der Funktion aus der ADODB (Zeile: 1577)

Wird aber "Test" als Prozedure und nicht als Function deklariert, dann funktioniert es!?
Könnt ihr das mal bitte überprüfen.
Bei mir baut die ADOConnection eine Verbindung zu einer Informixdatenbank auf (Provider = Ifxoledbc.2).
System mit dieser Fehlermeldung: Windows XP Pro
Auf einem Win200 System konnte dieser Fehler nicht reproduziert werden.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, Buttons, DB, ADODB;

type
  TForm1 = class(TForm)
    DBConnection: TADOConnection;
    ADODataSet1: TADODataSet;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    function Test : boolean;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const //Parameter: Passwort, User, Datenbank, Server
      dbConnectionString = 'Provider=Ifxoledbc.2;Password=%s;Persist Security Info=True;User ID=%s;Data Source=%s@%s';


function TForm1.Test : boolean;
begin
    if DBConnection.Connected then DBConnection.Close;
    DBConnection.ConnectionString := format(dbConnectionString, [...]); //ausgeblendet, verrate doch nicht unsere Passwörter ;)
    DBConnection.Open;
    if DBConnection.Connected then DBConnection.Close;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  test;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  if adodataset1.Active then adodataset1.Close;
  if dbconnection.Connected then dbconnection.Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  test;
end;

end.
Thomas
  Mit Zitat antworten Zitat