Announcement

Collapse
No announcement yet.

ADO-Kuriosum unter WindowsXP

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ADO-Kuriosum unter WindowsXP

    Hallo liebe erfahrene Programmierer,

    ich benutze Delphi5.1 unter Windows 2000 und habe auch schon das Update der ADOKomponenten für MDacType 2.6 eingespielt, wie hier im Forum für die Lauffähigkeit unter Windows XP wärmstens empfohlen. Dieser beseitigte auch den "EOF oder BOF ist True"-Fehler, der vorher unter Windows XP aufgetreten war.

    Ich habe nun ein Programm geschrieben, das ein TChecklistbox-Objekt mit Daten aus einer Access.mdb füllt. Es wird in der Mdb auch nachgehalten, ob ein Datensatz bereits ausgewählt wurde, oder nicht, so daß sich hier automatisch die Checked-Eigenschaft des Datensatzes setzt oder nicht.
    Bei jedem Datensatz, dessen Checked-Eigenschaft gesetzt ist, wird zusätzlich in einer zweiten Datenbank ein Daten-Abgleich durchgeführt (ob Daten vorhanden sind, die sich in einem Feld namens "BKurz" mit denen aus der ersten Datenbank gleichen).

    <b>Soweit ist alles ok und läuft auch unter allen anderen Betriebssystemen.</b>

    Wenn ich das Programm unter <b>Windows-XP</b> laufen lasse, tritt aber ein merkwürdiges Problem auf:
    Beim 253. Datensatz, dessen Checked-Eigenschaft gesetzt ist, funktioniert das Öffnen der Abgleich-Abfrage nicht, und die Showmessage (die ich zu Testzwecken eingebaut habe, s.u.) zeigt sich.

    Der Programmcode ist der Folgende:

    <Pre><Code>
    //Es liegt in einer separaten Unit vor:
    Datamodul:TDatenmodul;
    {darin:} adoArchiv:TConnectProof;
    {ein Nachfolger von TADOConnection. Dieser testet nach erfolgreicher
    Datenbank-Verbindung noch diverse Dinge, wie das Vorhandensein bestimmter
    Tabellen und den Inhalt einer Rechtetabelle. Erst wenn hier alles stimmt,
    wird die Verbindung gehalten, ansonsten wieder abgebrochen.
    Zusätzlich enthält die Komponente eine String-Variable namens UnchangedConnectionstring.
    Denn ich stellte fest, daß der Connectionstring sich nach der Datenbank-Verbindung
    ändern kann. Mit diesem geänderten String lassen sich keine weiteren ADO-Objekte
    verbinden, daher halte ich den ursprünglichen Connectionstring fest.}

    // Folgende Prozedur wird für jeden Datensatz der TChecklistbox aufgerufen:
    procedure TFormMain.Abgleich(BKurz:String)
    var vqry:TADOQuery;
    bolError:Boolean;
    begin
    ...
    vqry:=TadoQuery.Create(nil);
    vqry.ConnectionString:=datamodul.adoArchiv.Unchang edConnectionString;
    vqry.SQL.Add('SELECT [B_Bkurz],[B_Matchcode] FROM Bestandsuebersicht WHERE ([B_Bkurz]='''+BKurz+''') AND (left([B_Matchcode],1)=''A'');');
    bolError:=false;
    try
    vqry.Open; // diese Anweisung funktioniert beim 253. Mal nicht mehr.
    except
    showmessage( 'datamodul.adoArchiv.UnchangedConnectionString=''' +datamodul.adoArchiv.UnchangedConnectionString
    +'''; vqry.ConnectionString=''' +vqry.ConnectionString
    +'''; qry.SQL.Text=''' +vqry.SQL.Text
    +'''');
    bolError:=true;
    end;
    vqry.close;
    vqry.free;
    ...
    end;
    </Code></Pre>

    Es gibt in den mit "..." gekennzeichneten Abschnitten weitere Anweisungen, die alle in <b>Try Except</b>-Blöcke eingefaßt sind, alle ebenfalls eine Test-Showmessage auslösen könnten, es aber nie tun. Es sind alles Update-SQL-Anweisungen, die ich über AdoArchiv.Execute ausführe.
    Ich verstehe nicht, wo sich/wie sich gemerkt wird, wieviele vorherige ADOQuery-Zugriffe bereits durchgeführt wurden, zumal ich das fragliche Objekt jedesmal erzeuge und wieder freigebe. Warum klappen gerade 252 Abfragen??? Die Zahl liegt verdächtig nahe an &FF... aber eben nicht genau dort, und ich wüßte auch keine Interpretation bezüglich dieser Zahl. Stackwerte können nach vqry.Free nicht mehr vorliegen. Genauer gesagt lägen sie selbst ohne Free nicht vor, da die Variable vqry

  • #2
    nur innerhalb der Prozedur definiert ist, und diese ja komplett durchlaufen wird.

    Hat irgendjemand eine Idee?
    Gibt es schon ein Update für Delphi5 für MDacType 2.7? Eigentlich genügt das Update für 2.6 doch? Könnte es überhaupt hieran liegen?

    mfg
    Alexander Kochsie

    Comment


    • #3
      Hallo Alexander,<br>
      <br>
      versuch doch mal, die Routine von TADOQuery auf TADODataset umzustellen. Um TADOTable und TADOQuery sollte man einen großen Bogen machen (siehe u.a. Kommentare von Andreas Kosch hier im Forum).<br><br>
      Gruß,<br>
      Ulric

      Comment

      Working...
      X