Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Fehlermeldung: 'Das Objekt war geöffnet' bei ExecuteQuery (https://www.delphipraxis.net/113257-fehlermeldung-das-objekt-war-geoeffnet-bei-executequery.html)

GroHae 5. Mai 2008 12:03

Datenbank: MSSQL • Zugriff über: DBX4

Fehlermeldung: 'Das Objekt war geöffnet' bei ExecuteQuery
 
Hallo zusammen,

ich stelle gerade von der BDE auf DBX4 um. Leider bekomme ich im Moment immer die Fehlermeldung "Das Objekt war geöffnet".

Ich habe mir jetzt aus meinem Projekt folgende Kurzfassung erstellt:

Delphi-Quellcode:

procedure TfrmMainMenue.AddParameterDate(iWert: TDateTime; iCommand:TDBXCommand);
var
  MyParameter : TDBXParameter;
  dDT: TSQLTimeStamp;
begin
 MyParameter := iCommand.CreateParameter;
 with MyParameter do
   begin
    DataType := TDBXDataTypes.TimeStampType;
    dDT:=DateTimeToSQLTimeStamp(iWert);
    Value.SetTimeStamp(dDT);
   end;
 iCommand.Parameters.AddParameter(MyParameter);
end;



procedure TfrmMainMenue.Button3Click(Sender: TObject);
var
  MyConnectionFactory: TDBXConnectionFactory;
  MyConnectionProperties: TDBXProperties;
  DB_Test : TDBXConnection;

  MyCommand : TDBXCommand;

  MyReader : TDBXReader;
begin
 MyConnectionFactory := TDBXConnectionFactory.GetConnectionFactory;
 MyConnectionProperties := MyConnectionFactory.GetConnectionProperties('BFS');
 DB1 := MyConnectionFactory.GetConnection(MyConnectionProperties);

 MyCommand := DB1.CreateCommand;

 MyCommand.Parameters.ClearParameters;
 MyCommand.Text := 'SELECT * FROM Unternehmenstamm WHERE (ChgDate_ID = ?) ORDER BY UnternehmenNr_ID';
 AddParameterDate(StrToDate('01.01.1990'),MyCommand);
 MyReader := MyCommand.ExecuteQuery;
 while MyReader.Next do
   ShowMessage(MyReader.Value['Name'].GetAnsiString);

 MyCommand.Parameters.ClearParameters;
 MyCommand.Text := 'SELECT * FROM Unternehmenstamm WHERE (ChgDate_ID = ?) ORDER BY UnternehmenNr_ID';
 AddParameterDate(StrToDate('02.01.1990'),MyCommand);
 MyReader := MyCommand.ExecuteQuery;  // --> Fehlermeldung: 'Das Objekt war geöffnet'

 while MyReader.Next do
   ShowMessage(MyReader.Value['Name'].GetAnsiString);


end;
Immer wenn ich einen Befehl mit Parametern zum zweiten mal abschicke bekomme ich die Fehlermeldung.

Was mache ich da falsch?

GroHae 6. Mai 2008 15:46

Re: Fehlermeldung: 'Das Objekt war geöffnet' bei ExecuteQue
 
ich behelfe mir im Moment damit, dass ich zuerst immer MyCommand.Free aufrufe um dann MyCommand neu zu erstellen. Aber das kann doch nicht so gedacht sein...

Delphi-Quellcode:
procedure TfrmMainMenue.Button3Click(Sender: TObject);
var
  MyConnectionFactory: TDBXConnectionFactory;
  MyConnectionProperties: TDBXProperties;
  DB_Test : TDBXConnection;

  MyCommand : TDBXCommand;

  MyReader : TDBXReader;
begin

 MyConnectionFactory := TDBXConnectionFactory.GetConnectionFactory;
 MyConnectionProperties := MyConnectionFactory.GetConnectionProperties('BFS');
 DB_Test := MyConnectionFactory.GetConnection(MyConnectionProperties);

 MyCommand := DB_Test.CreateCommand;
 MyCommand.Parameters.ClearParameters;
 MyCommand.Text := 'SELECT * FROM Unternehmenstamm WHERE (ChgDate_ID = ?) ORDER BY UnternehmenNr_ID';
 AddParameterDate(StrToDate('01.01.1990'),MyCommand);
 MyReader := MyCommand.ExecuteQuery;
 while MyReader.Next do
   ShowMessage('1 ' + MyReader.Value['Name'].GetAnsiString);
 MyCommand.Free; // wieder freigeben...


 MyCommand := DB_Test.CreateCommand; //.. und dann neu erstellen
 MyCommand.Parameters.ClearParameters;
 MyCommand.Text := 'SELECT * FROM Unternehmenstamm WHERE (ChgDate_ID = ?) ORDER BY UnternehmenNr_ID';
 AddParameterDate(StrToDate('01.01.1990'),MyCommand);
 MyReader := MyCommand.ExecuteQuery;  // Jetzt geht es
 while MyReader.Next do
   ShowMessage('2 ' + MyReader.Value['Name'].GetAnsiString);
 MyCommand.Free;


end;


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