Announcement

Collapse
No announcement yet.

EoF wird übersprungen

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

  • EoF wird übersprungen

    Hi,

    ich habe mit einer ADO-Query von Delphi6 ein Recordset mit Daten aus einer XML-DAtei geladen. Deise Daten möchte ich nun in einer while Schleife bearbeiten. Der Kopf der Schleife sieht so aus : WHILE NOT ADOquXML.EOF DO !!!

    Ich habe in einem Test XML-File 3 Datensätze. Wenn ich auf dem 2. Datensatz stehe und ein simples ADOquXML.next ausführe, stehe ich wieder auf dem ersten und befinde mich somit in einer endlos-Schleife.

    Wie hab ich das hinbekommen. kann mir jemand aus der Endlos-Schleife helfen?

    Gruß
    Carlos

  • #2
    Hallo,

    ich kann diesen Effekt nicht reproduzieren (Delphi 6.01 unter Windows 2000 SP2; MDAC 2.6). Mein Testprogramm liefert in der Schleife sowohl mit TADODataSet als auch mit TADOTable jeden einzelnen Datensatz zurück:
    <pre>
    unit ADOXMLFrm;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    Db, ADODB, StdCtrls, ComCtrls, Grids, DBGrids, ExtCtrls, DBCtrls;

    type
    TFormMain = class(TForm)
    ButtonCreate: TButton;
    StatusBar1: TStatusBar;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    ButtonOpen: TButton;
    DBNavigator1: TDBNavigator;
    ButtonSave: TButton;
    ADODataSetXML: TADODataSet;
    ButtonLoop: TButton;
    ButtonLoopADOTable: TButton;
    ADOTable1: TADOTable;
    procedure ButtonCreateClick(Sender: TObject);
    procedure ButtonOpenClick(Sender: TObject);
    procedure ButtonSaveClick(Sender: TObject);
    procedure ButtonLoopClick(Sender: TObject);
    procedure ButtonLoopADOTableClick(Sender: TObject);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    end;

    var
    FormMain: TFormMain;

    implementation

    {$R *.DFM}

    resourcestring
    cCONNSTR = 'Provider=DTSFlatFile.1;' +
    'Data Source=%s;' +
    'Mode=Read;' +
    'File Format=0;' +
    'File Type=1;' +
    'Skip Rows=0;' +
    'First Row Column Name=False;' +
    'Number of Column=0;' +
    'Max characters per delimited column=255';
    cXMLFILE = 'C:\Ablage\Telefon.xml';

    procedure TFormMain.ButtonCreateClick(Sender: TObject);
    var
    aDataSet : TADODataSet;
    begin
    aDataSet := TADODataSet.Create(Application);
    try
    // Datenmenge definieren
    aDataSet.FieldDefs.Add('Name' ftString, 20);
    aDataSet.FieldDefs.Add('Vorname' ftString, 10);
    aDataSet.FieldDefs.Add('eMail' ftString, 20);
    aDataSet.FieldDefs.Add('Telefon' ftString, 15);
    // Datenmenge erstellen
    aDataSet.CreateDataSet;
    // Daten zur Datenmenge hinzufügen
    aDataSet.AppendRecord(['Mustermann', 'Manfred','[email protected]',
    '(030) 12345']);
    // Datenmenge in einer XML-Datei speichern
    aDataSet.SaveToFile(cXMLFILE);
    DataSource1.DataSet := aDataSet;
    ShowMessage('Fertig');
    DataSource1.DataSet := nil;
    finally
    aDataSet.Free;
    end;
    end;

    procedure TFormMain.ButtonOpenClick(Sender: TObject);
    begin
    ADODataSetXML.ConnectionString := Format(cCONNSTR, [cXMLFILE]);
    ADODataSetXML.LoadFromFile(cXMLFILE);
    end;

    procedure TFormMain.ButtonSaveClick(Sender: TObject);
    begin
    ADODataSetXML.SaveToFile(cXMLFILE);
    end;

    procedure TFormMain.ButtonLoopClick(Sender: TObject);
    begin
    ADODataSetXML.First;
    while not ADODataSetXML.Eof do
    begin
    ShowMessage(ADODataSetXML.Fields[0].Value);
    ADODataSetXML.Next
    end;
    end;

    procedure TFormMain.ButtonLoopADOTableClick(Sender: TObject);
    begin
    ADOTable1.ConnectionString := Format(cCONNSTR, [cXMLFILE]);
    ADOTable1.LoadFromFile(cXMLFILE);
    ADOTable1.First;
    while not ADOTable1.Eof do
    begin
    ShowMessage(ADOTable1.Fields[0].Value);
    ADOTable1.Next
    end;
    end;

    end.
    </pre&gt

    Comment

    Working...
    X