Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi adoset.fields(i) falsche Parameteranzahl (https://www.delphipraxis.net/152130-adoset-fields-i-falsche-parameteranzahl.html)

Smiley 12. Jun 2010 09:54

Datenbank: Access • Version: 2003 • Zugriff über: ole

adoset.fields(i) falsche Parameteranzahl
 
Ich wollte ein Beispiel, zum übernehmen von Daten aus Access in ein Stringgrid, ausprobieren.
Das Beispiel ist von TMS für die AdvStringGrid Komponenten.
Dabei kommt der Fehler "ungültige Parameteranzahl" beim Aufruf von "adofield := adoset.fields(i);".
adofield ist ein Variant.
Code:
Procedure LoadFromADO(sg: TAdvStringGrid; mdb, table: String);
  Var
    adoset: variant;
    adoconn: variant;
    adofield: variant;
    i, j: integer;

  Begin
    adoconn := CreateOLEObject('ADODB.Connection');
    adoconn.Open('driver={Microsoft Access Driver (*.mdb)};dbq=' + mdb);

    adoset := adoconn.Execute('SELECT * FROM ' + table);

    sg.colcount := adoset.fields.count + 1;

    For i := 1 To adoset.fields.count - 1 Do
      Begin
        adofield := adoset.fields(i);
        sg.cells[i, 0] := adofield.Name;
      End;
    j := 1;
    While Not adoset.EOF Do
      Begin
        If (j > sg.rowcount) Then
          sg.rowcount := sg.rowcount + 1;
        For i := 1 To adoset.fields.count - 1 Do
          Begin
            adofield := adoset.fields(i);
            sg.cells[i, j] := adofield.Value;
          End;
        adoset.MoveNext;
        inc(j);
      End;
    adoset := unassigned;
  End;
Ich möchte mich mit dem direkten ansprechen des adodatasets beschäftigen, wo finde ich dazu nähere Informationen.
Das Beispiel habe ich mit Delphi2010 ausprobiert, vielleicht hat es damit etwas zu tun ?

Smiley 12. Jun 2010 16:52

AW: adoset.fields(i) falsche Parameteranzahl
 
Habe jetzt festgestellt, dass dies ein defektes und nicht ganz aktuelles Beispiel ist.
Mit OLE hier zu arbeiten macht nicht viel Sinn, kann das ja auch mit ADO-Connect und Table oder Query machen.

adofield := adoset.fields(i);
muss
adofield := adoset.fields[i-1];
sein, dann gibt es aber noch das Problem, wenn ein Feld leer ist, dann gibt es weiter unten beim Zuweisen wieder eine Fehlermeldung.

adoset, adoconn und adofield sind sogenannte BlackBoxen, damit zu arbeiten macht gar keinen Spaß.

Der Sinn könnte vielleicht darin bestehen, daß man keine DB-Komponenten installiert haben muss um damit zu arbeiten.
In einer normalen aktuellen Delphi Version macht das aber, denke ich, keinen Sinn so zu arbeiten.
Falls jemand einen Sinn in diesem Beispiel sieht, kann er dazu ja mal was schreiben.


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