Einzelnen Beitrag anzeigen

Sven M.

Registriert seit: 21. Okt 2006
Ort: Halle/Saale
106 Beiträge
 
Delphi 5 Enterprise
 
#1

Oracle Exception im Debug-Modus

  Alt 27. Mai 2015, 13:27
Datenbank: Oracle • Version: 11 • Zugriff über: FireDac
Tach zusammen

Ich versuche via FireDac auf eine Oracle-DB zuzugreifen, was soweit auch erstmal ganz gut funktioniert. Nun besteht aber die Notwendigkeit, bei Programmstart einen Trigger zu erstellen, der dann bei Programmende wieder gedroppt wird.

Codemäßig sieht das im FormShow folgendermaßen aus:

Delphi-Quellcode:
  DBCOnnection.Open;
  QueryData.Open;
  QueryTriggerExists.Open;
  AlerterDataChange.Register;

  if QueryTriggerExists.RecordCount=0 then
  begin
    DBCommand.CommandText.Clear;
    DBCommand.CommandText.Add('CREATE OR REPLACE TRIGGER PROD.TR_CHANGE_TABLE_DATA');
    DBCommand.CommandText.Add('AFTER DELETE OR INSERT OR UPDATE ON PROD.DATA');
    DBCommand.CommandText.Add('BEGIN');
    DBCommand.CommandText.Add('SYS.DBMS_ALERT.SIGNAL (''DATA_CHANGE'', ''TEST_ALERT'');');
    DBCommand.CommandText.Add('END;');
    DBCommand.Execute;
  end;
Während der Programmausführung kommen die extern herbeigeführten Änderungen (über APEX) auch problemlos im verknüpften DBGrid an.
Beim Schließen des Fensters soll dann der Trigger aber wieder gelöscht werden:

Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  AlerterDataChange.Unregister;
  QueryTriggerExists.Refresh;
  if QueryTriggerExists.RecordCount>0 then
  begin
    //trigger erst deaktivieren, dann löschen
    DBCommand.Execute('ALTER TRIGGER PROD.TR_CHANGE_TABLE_DATA DISABLE');
    DBCommand.Execute('DROP TRIGGER PROD.TR_CHANGE_TABLE_DATA');
  end;

  DBConnection.Close;
end;
Und hier tritt folgendes Phänomen auf. Im Debug-Modus aus Delphi heraus bekomme ich eine EOCINativeException:
"[FireDac][Phys][Ora] ORA-01013: Benutzer hat Abbruch des aktuellen Vorgangs angefordert"
Starte ich die kompilierte Exe aber ohne die IDE funktioniert alles problemlos. Kann mir das Phänomen jemand erklären?
Oder mache ich prinzipiell etwas falsch? Muss dazu sagen, dass Oracle generell und der Zugriff via Firedac noch ziemliche böhmische Dörfer für mich sind.



Vieln Dank im Voraus
Sven
  Mit Zitat antworten Zitat