Announcement

Collapse
No announcement yet.

Felder in eine dBase/Paradox-Datei zur Laufzeit anfügen

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

  • Felder in eine dBase/Paradox-Datei zur Laufzeit anfügen

    Hi,

    weiß jemand wie man in einer dBase/Paradox-Datei zur Laufzeit neue Felder anfügen (keine Virtuellen- oder Kalkulationsfelder) kann?

    Danke Stefan

  • #2
    Hallo,

    wenn die neuen Felder keine berechneten Felder sind, muss die Tabellenstruktur geändert werden. Das geht am einfachsten mit SQL. In der BDE-Hilfedatei <b>LOCALSQL.HLP</b> ist dazu unter dem Stichwort <b>ALTER TABLE</b> das folgende Beispiel zu finden:

    <i>Folgende Anweisung löscht die Spalte FULLNAME und fügt die Spalte LASTNAME ein:</i>
    <pre>
    ALTER TABLE "names.db"
    DROP fullname,
    ADD lastname CHAR(25)
    </pre>

    Zielt die Frage allerdings darauf ab, nicht die Tabellenstruktur zu ändern, sondern nur die in Delphi verfügbaren TField-Instanzen zu erweitern, demonstriert das folgende Beispiel diesen Fall:
    <pre>
    procedure TForm1.Button2Click(Sender: TOObject);
    var
    T: TStringField;
    begin
    Query1.Close;
    T := TStringField.Create(Self);
    T.FieldName := 'CO_NAME';
    T.Name := Query1.Name + T.FieldName;
    T.Index := Query1.FieldCount;
    T.DataSet := Query1;
    Query1.FieldDefs.UpDate;
    Query1.Open;
    end;
    </pre&gt

    Comment


    • #3
      Ich habe mal Interessehalber ALTER TABLE getestet. Bei der Programmausführung (nach Query.open) kommt immer die folgende Fehlermeldung: ENoResultSet - Fehler beim Erstellen des Cursor-Handle.
      Jedoch werden die neuen Felder mit ADD hinzugefügt bzw. auch mit DROP aus der Tabbellenstruktur entfernt

      Comment


      • #4
        Hallo Markus,

        diese Fehlermeldung erhält man immer dann, wenn eine <b>Nicht-SELECT</b>-Anweisung über <b>TQuery.Open</b> ausgeführt wird. Mit Open erwartet TQuery eine Ergebnismenge, die bei ALTER TABLE jedoch nicht aufgebaut wird.

        Um diese Fehlermeldung zu vermeiden, muss anstelle von TQuery.Open die Methode <b>TQuery.Execute</B> aufgerufen werden

        Comment


        • #5
          Danke Andreas

          Comment


          • #6
            Mein Problem konnte mit ALTER TABLE gelöst werden.
            Danke

            Comment

            Working...
            X