AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Prism Firebird - Abfrage - Tausend mal funktioniert und beim...
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird - Abfrage - Tausend mal funktioniert und beim...

Ein Thema von spacewolf · begonnen am 2. Sep 2008 · letzter Beitrag vom 3. Sep 2008
 
Benutzerbild von spacewolf
spacewolf

Registriert seit: 24. Apr 2003
Ort: Magdeburg
218 Beiträge
 
Delphi 7 Professional
 
#1

Firebird - Abfrage - Tausend mal funktioniert und beim...

  Alt 2. Sep 2008, 16:38
Datenbank: Firebird • Version: 2.04 • Zugriff über: IBX / TIBDATASET
Hallo Leute über die folgende Funktion wird die Datenbank abgefragt:

Delphi-Quellcode:
function daOpenDataSet_(ADB: TIBDatabase; const ATableName: String;
  const AFieldNames: Array of String; const ACondition: String): TIBDataSet;
var
  ibTr: TIBTransaction;
  s: String;
  p: Pointer;
begin
  p := nil;
  Result := nil;
  try
    if ATableName = 'then
      raise EDaDBError.Create(SDBENoTableName);
    if Length(AFieldNames) = 0 then
      raise EDaDBError.Create(SDBENoFieldName);
// if ACondition = '' then
// raise EDaDBError.Create(SDBENoCondition);
    Result := TIBDataSet.Create(nil);
    ibTr := TIBTransaction.Create(Result);
    ibTr.DefaultAction := TARollback;
    ibTr.Params.Add(konDBReadOnlyTran);
    ibTr.DefaultDatabase := ADB;
    Result.Transaction := ibTr;

    ibTr.StartTransaction;
    if ACondition <> 'then
      Result.SelectSQL.Text := Format('SELECT %s FROM %s WHERE %s',
        [daArrayToString(AFieldNames), ATableName, ACondition])
    else
      Result.SelectSQL.Text := Format('SELECT %s FROM %s',
        [daArrayToString(AFieldNames), ATableName]);

    Result.Open;
//Muss Caller handeln ibdsFields.Transaction.Rollback;
  except
    on e:Exception do begin
      p := AcquireExceptionObject;
      s := '';
      try
        if (ADB <> nil) then
          s := ADB.DatabaseName;
      except end;
      e.Message := 'daDb.daOpenDataSet' +
                   SDBEErrRead+#13#10#09 +
                   SDBDataBase+': '+s+#13#10#09+
                   SDBTable+': '+ATableName+#13#10#09+
                   SDBField+': '+daArrayToString(AFieldNames)+#13#10#09+
                   SDBCondition+': '+ACondition+#13#10#09+
                   SPMErrMsg+': '+e.Message+#13#10#09+
                   SPMErrCls+': '+e.ClassName+#13#10#09;
    end;//on e:Exception do begin
  end;
  if p <> nil then begin
    raise EDaDBError(p);
  end;
end;
Tausende Male funktionierts und irgendwann kommt irgendeine Fehlermeldung - jetzt z.B. diese hier:
EAccessViolation / Zugriffsverletzung bei Adresse 10024CC6 in Modul 'gd32.dll'. Lesen von Adresse 00000008.



Ich habe keine Ahnung warums da kracht. Kann mir da jemand einen TIP geben?

Shalom

der Andreas
Andreas Göllner
("`-''-/").___..--''"`-._
`6_ 6 ) `-. ( ).`-.__.`)
"Ich kann Dir nur die Tür zeigen, durchgehen musst Du ganz allein."
Wer ist die Tür? Jesus!
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz