AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ADO-Funktion beendet nicht

ADO-Funktion beendet nicht

Offene Frage von "Masika"
Ein Thema von Masika · begonnen am 3. Nov 2006 · letzter Beitrag vom 26. Feb 2007
 
Masika

Registriert seit: 5. Jan 2006
Ort: Wedel
6 Beiträge
 
#1

ADO-Funktion beendet nicht

  Alt 3. Nov 2006, 10:46
Datenbank: Oracle • Zugriff über: ADO
Hallo,

ich habe folgendes Phänomen: Ich habe einen Thread gemacht für den Zugriff auf eine Oracle-Datenbank über ADO. Dieser Thread bleibt von Zeit zu Zeit (alle paar Tage) einfach stehen (Überwachungfunktion sagt mir, wann der zuletzt etwas getan hat). Keine Exception, nichts im Eventviewer. Da habe ich Statusfunktionen in die Prozeduren eingebaut und jetzt weiß ich auch, wo der (meistens) stehenbleibt:
in TADOQuery.Active := true.

Die fragliche Routine poste ich mal:

Delphi-Quellcode:
function TOracleAccess.Select(SQLStr: string; var RecCount: integer; var Rec: Variant): boolean ;
var
  SQL_Query: TADOQuery ;
  Row, Col, ColCount: integer ;
begin
  FProzedurName := 'Selectanweisung' ;
  FSubStatus := 'gestartet.' ;
  result := false ;
  EnterCriticalSection(FCritSect) ;
    if CheckConnection() then
    begin
      FSubStatus := 'Schritt 1' ;
      SQL_Query := TADOQuery.Create(nil) ;
      SQL_Query.CommandTimeout := 20 ;
      SQL_Query.Active := false ;
      SQL_Query.Connection := FDatabase ;
      SQL_Query.SQL.Clear ;
      SQL_Query.SQL.Add(SQLStr) ;
      try
        FSubStatus := 'Schritt 2' ;
        FDatabase.BeginTrans() ;
        FSubStatus := 'Schritt 3' ;
        SQL_Query.Active := true ;
        FSubStatus := 'Schritt 4' ;
        SQL_Query.Open ;
        FSubStatus := 'Schritt 5' ;
        SQL_Query.Last ;
        FSubStatus := 'Schritt 6' ;
        Row := SQL_Query.RecordCount ;
        if (Reccount <= 0) or (RecCount > Row) then RecCount := Row ;
        if RecCount > 0 then
        begin
          FSubStatus := 'Schritt 7' ;
          ColCount := SQL_Query.FieldCount ;
          Rec := VarArrayCreate([0, RecCount, 1, ColCount], varVariant) ;
          for Col := 1 to ColCount do
            Rec[0,Col] := SQL_Query.Fields[Col-1].FieldName ;
          SQL_Query.First ;
          Row := 1 ;
          while (not SQL_Query.Eof) and (Row <= RecCount) do
          begin
            for Col := 1 to ColCount do
            begin
              case SQL_Query.Fields[Col-1].DataType of
                ftInteger : Rec[Row, Col] := SQL_Query.Fields[Col-1].AsInteger ;
                ftString : Rec[Row, Col] := SQL_Query.Fields[Col-1].AsString ;
                ftDateTime: Rec[Row, Col] := SQL_Query.Fields[Col-1].AsDateTime ;
                ftBCD : Rec[Row, Col] := SQL_Query.Fields[Col-1].AsInteger ;
                ftFloat : Rec[Row, Col] := SQL_Query.Fields[Col-1].AsFloat ;
              end ;
            end ;
            SQL_Query.Next() ;
            Inc(Row) ;
          end ;
          FSubStatus := 'Schritt 8' ;
        end ;
        FDatabase.CommitTrans ;
        result := true ;
        FSubStatus := 'Schritt 9' ;
      except
        Rollback ;
      end ;
      SQL_Query.Active := false ;
      SQL_Query.Free() ;
    end ;
  LeaveCriticalSection(FCritSect) ;
  FSubStatus := 'beendet.' ;
end ;
Ich bekomme den Status "Schritt3" und es geht nicht weiter. Einmal ist er auch in TADOCommand.Execute stehengeblieben, aber Inserts sind in meiner Anwendung halt einfach seltener als Selects.

Hat jemand eine Idee?

Danke und Gruß.
Kerstin
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:53 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-2025 by Thomas Breitkreuz