Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADO: mehrfache Zugriffe auf Foxpro Tabellen: Fehermeldung (https://www.delphipraxis.net/30880-ado-mehrfache-zugriffe-auf-foxpro-tabellen-fehermeldung.html)

Gambit 30. Sep 2004 16:04


ADO: mehrfache Zugriffe auf Foxpro Tabellen: Fehermeldung
 
Hallo,

ich möchte aus einer Tabelle(Foxpro) zunächst alle records löschen und dann neu anlegen:

Delphi-Quellcode:
DB_DataModul.MDBQuery.Close;
DB_DataModul.MDBQuery.SQL.Text:= 'delete from mdb';
DB_DataModul.MDBQuery.ExecSQL;
das funzt auch erstmal so...

wenn ich dann aber wie folgt weitergehe:

Delphi-Quellcode:
DB_DataModul.MDBQuery.Open;
DB_DataModul.MDBQuery.Edit;
  while not DB_DataModul.ZQueryDBMaster.Eof do
  begin
    DB_DataModul.MDBQuery.Append;
    DB_DataModul.MDBQuery.FieldByName('Nr').AsInteger:= DB_DataModul.ZQueryDBMaster.FieldByName('Nr').AsInteger;
    DB_DataModul.MDBQuery.Post;
    DB_DataModul.ZQueryDBMaster.Next;
  end;
DB_DataModul.MDBQuery.Close;
bekomme ich eine OLE DB Exception: Der aktuelle Provider unterstützt nicht die Wiedergabe mehrfacher Recordsets bei einer einzelnen Ausführung

Was mache ich denn da falsch?

Gruß

Gambit

Gambit 30. Sep 2004 20:15

Re: ADO: mehrfache Zugriffe auf Foxpro Tabellen: Fehermeldun
 
Habe mittlerweile eine-allerdings unbefriedigende-Lösung gefunden:

wenn ich eine ADOConnection benutze, kann ich die Datensätze löschen mit:

Delphi-Quellcode:
ADOConnection.Execute('delete from mdb');
Danach kann ich dann wie beschrieben fortfahren:

Delphi-Quellcode:
DB_DataModul.MDBQuery.Open;
DB_DataModul.MDBQuery.Edit;
  while not DB_DataModul.ZQueryDBMaster.Eof do
  begin
    DB_DataModul.MDBQuery.Append;
    DB_DataModul.MDBQuery.FieldByName('Nr').AsInteger:= DB_DataModul.ZQueryDBMaster.FieldByName('Nr').AsInteger;
    DB_DataModul.MDBQuery.Post;
    DB_DataModul.ZQueryDBMaster.Next;
  end;
DB_DataModul.MDBQuery.Close;
Das Problem, welches sich aber aus der Foxprotabelle ergiebt ist, dass die Datensätze nicht wirklich gelöscht werden, sondern nur als gelöscht makiert werden. Bei jedem Durchgang wird die Datenbank dadurch um die Erstellgröße größer. Bei einer BDE Datenbank werden die frei gewordenen Plätze wenigstens wieder belegt wodurch die Datenbank zwar nie kleiner aber auch bei einem Durchgang nicht unwesentlich größer wird. Eben nur durch die hinzugefügten Datensätze.
Eine Möglichkeit die Foxprodatenbank auch physisch zu leeren gibts wohl so nicht...falls jemand was anderes weiß, immer her damit...

Gruß

Gambit


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