Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   exception exception in module xxxxx at 00000 (https://www.delphipraxis.net/189479-exception-exception-module-xxxxx-00000-a.html)

p80286 16. Jun 2016 15:05

Datenbank: oracle • Version: 12 • Zugriff über: ado

exception exception in module xxxxx at 00000
 
Hallo zusammen,
obige Fehlermeldung erhalte ich wenn in einer Abfrage Parameter benutze, diese aber nicht fülle:
Delphi-Quellcode:
{verkürzt}
adoquery.sql.text:='select irgendwas von tablee99 where key=:_key and feld1=99';
adoquery.open; { hier kommt die Fehlermeldung}
Soweit so schlecht, weil ich den Fehler nicht im SQL-Text gesucht habe.
die Fehlerausgabe habe ich so
Delphi-Quellcode:
except
    on E: Eoleexception do
    begin
      msg:=GetADOErrorString(ADOConnection1);
      raise exception.create(msg);
    end
    else raise;
  end;
realisiert, aber bis auf das ominöse Exception Exception ... kommt da nichts.
Gibt es eine Möglichkeit etwas sprechendere Fehlermeldungen zu bekommen?

Gruß
K-H

Bernhard Geyer 16. Jun 2016 15:32

AW: exception exception in module xxxxx at 00000
 
Ich hoffen nicht das du den MS Provider für Oracle verwendest.
Dieser ist nie richtig über den Zustand eines Proof of Conzept hinaus gekommen.
Am besten schmeißt man bei Oracle ADO weg und nimmt native Zugriffskomponenten wie von DevArt her oder neuerdings FireDac.

Sherlock 16. Jun 2016 15:33

AW: exception exception in module xxxxx at 00000
 
Ich unterstütze Bernhards Beitrag. Oracle nur Nativ!

Sherlock

nahpets 16. Jun 2016 15:39

AW: exception exception in module xxxxx at 00000
 
Versuch' es mal bitte mit dem Abfangen von EAdoError, das dürfte eine näherliegende Exception für das auftretende Problem sein.

Auszug aus 'nem Programm, das Datenbankfehler abfangen muss:
Delphi-Quellcode:
   
    try
      // Irgendwas, was für 'nen Datenbankfehler sorgen könnte.
    Except
      on e : EAdoError do begin
        slError := TStringList.Create;
        slError.Add(e.Message);
        if con.Errors.Count > 0 then begin
          for i := 0 to con.Errors.Count - 1 do begin
            slError.Add(Format('Number: %d',[con.Errors.Item[i].Number]));
            slError.Add(Format('NativeError: %d',[con.Errors.Item[i].NativeError]));
            slError.Add(Format('Description: %s',[con.Errors.Item[i].Description]));
            slError.Add(Format('Source: %s',[con.Errors.Item[i].Source]));
            slError.Add(Format('HelpFile: %s',[con.Errors.Item[i].HelpFile]));
            slError.Add(Format('SQLState: %s',[con.Errors.Item[i].SQLState]));
          end;
          MessageDlg(slError.Text,mtError, [mbOk],0);
        end else begin
          MessageDlg(e.Message + #13#13 + qrySQL.SQL.Text, mtError, [mbOk], 0);
        end;
        slError.Free;
      end;
      on e : Exception do begin
        MessageDlg(e.Message + #13#13 + qrySQL.SQL.Text, mtError, [mbOk], 0);
      end;
    end;
con ist die TAdoConnection,
qrySQL ist 'ne TADOQuery,
slError 'ne TStringList und i ist ein Integer.

p80286 16. Jun 2016 16:01

AW: exception exception in module xxxxx at 00000
 
erst einmal vielen Dank!
@Sherlock und Bernhard
Auf die Antwort hätte ich gewettet:wink: nein ich nutze den MS-Provider nicht. Und wenn man nichts anderes hat, muß man eben damit leben *schulterzuck*
@nahpets
das kommt mir irgendwie bekannt vor, nicht das ich das mal wegoptimiert habe.:oops:

Ich hab mir jetzt so beholfen:
Delphi-Quellcode:
 ADOQuery1.SQL.Text:=QueryText.Text;
 if ADOQuery1.Parameters.Count>0 then begin
   raise exception.Create('Parameters are not accepted');
   exit;
 end;
jetzt kommt
---------------------------
Anwendungsfehler
---------------------------
Exception Exception in Modul SQLClient.exe bei 00000000.

Parameters are not accepted.


---------------------------
OK
---------------------------

Das ist zwar nicht so schön, erfüllt aber erst einmal seinen Zweck.

Vielen dank!

K-H

nahpets 16. Jun 2016 16:09

AW: exception exception in module xxxxx at 00000
 
Naja, kann man so machen, aber wie wäre es denn, die Parameter einfach abzufragen?
Delphi-Quellcode:
procedure GetSQLParameters(qry : TAdoQuery);
var
          i : Integer;
begin
  with qry.Parameters do begin
    if Count > 0 then begin
      for i := 0 to Count - 1 do begin
        qry.Parameters[i].Value := InputBox('Parametereingabe:',qry.Parameters[i].Name + ' = ','');
      end;
    end;
  end;
end;
Im Quelltext dann vor dem Open der Query sowas:
Delphi-Quellcode:
  try
    qry.SQL.Text := // irgendeine Zuweisung:
    GetSQLParameters(qry);
    qry.Open
  except
    // siehe oben
  end;

EWeiss 16. Jun 2016 16:20

AW: exception exception in module xxxxx at 00000
 
Bekommst du denn grundsätzlich eine Fehlermeldung die mehr ausgibt?
Ich meine in dem du ein Dump file erstellst wenn die Anwendung abstürzt?
Vorrausgesetzt natürlich es ist ein System Exception.

Wenn Windows selbst nicht in der Lage ist mehr Informationen darüber zu geben
wirst du es im Programm ohne eigene exception Routine auch nicht erreichen.

So wie du es ja hier gemacht hast.

Delphi-Quellcode:
raise exception.Create('Parameters are not accepted');


gruss

p80286 16. Jun 2016 16:55

AW: exception exception in module xxxxx at 00000
 
Zitat:

Zitat von nahpets (Beitrag 1340348)
Naja, kann man so machen, aber wie wäre es denn, die Parameter einfach abzufragen?

Im Augenblick ist eine Parameterabfrage nicht gewünscht, aber der Ansatz ist interessant, muß ich mir aufheben.

Zitat:

Zitat von EWeiss (Beitrag 1340349)
Bekommst du denn grundsätzlich eine Fehlermeldung die mehr ausgibt?
Ich meine in dem du ein Dump file erstellst wenn die Anwendung abstürzt?

Irgendwo in dem adoquery.Open ereignet sich der Schluckauf (ich gebe zu, daß ich im Augenblick wenig geneigt bin noch mehr Zeit auf das Debugging zu verwenden, vor allem weil mein Assembler doch stark eingerostet ist) und einen eigentlichen Absturz gibt es ja nicht. wen ich nach der Fehlermeldung den SQL-Source modifiziere ist alles gut.

Mein eigentliches Problem ist, daß es Dummheiten gibt, die ich mir nicht vorstellen kann, und da hätte ich gerne vom "System" eine halbwegs aussagekräftige Fehlermeldung.
(wer grinst da?)

@nahpets
Wie ich vermutet habe, die Meldung hab ich wegoptimiert. Also wieder hineinfrickeln und mal sehen was sich tut.

Falls ich Ergebnisse vorzeigen kann, schreib ich wieder.

Gruß
K-H


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