AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Einfügen eines neues Feldes in AdoTable
Thema durchsuchen
Ansicht
Themen-Optionen

Einfügen eines neues Feldes in AdoTable

Ein Thema von DavidKlimas · begonnen am 15. Aug 2018 · letzter Beitrag vom 16. Aug 2018
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Einfügen eines neues Feldes in AdoTable

  Alt 15. Aug 2018, 17:33
Hallo,
hier steht was dazu

http://forums.devshed.com/delphi-pro...le-940196.html
ziemlich weit unten (AdoTable.SQL.Add)

oder hier
https://stackoverflow.com/questions/...able-in-delphi
ganz unten
Heiko

Geändert von hoika (15. Aug 2018 um 17:36 Uhr)
  Mit Zitat antworten Zitat
DavidKlimas

Registriert seit: 24. Sep 2006
Ort: Arlon, Belgien
71 Beiträge
 
#2

AW: Einfügen eines neues Feldes in AdoTable

  Alt 15. Aug 2018, 18:16
Hallo,

TAdoTable hat keine SQL function, und TAdoQTable is wahrscheinliche eine third-party komponente. Die gibt es bei mir nicht.

Nach langen probieren, geht es nun. Die lösung :

Code:
  var
  AdoTable1: TAdoTable;
  AdoConnection: TADOConnection;
  AdoQuery: TAdoQuery;
  Str1: String;

  ...

  If ADOTable1.FieldList.Find(Str1) = nil then
  Begin
    ADOTable1.Active := False;

    AdoConnection := TADOConnection.Create(Form1);
    AdoQuery := TAdoQuery.Create(Form1);
    AdoConnection.ConnectionString := AdoTable1.ConnectionString ;
    AdoConnection.LoginPrompt := False;
    AdoConnection.Connected := True;
    AdoQuery.Connection := AdoConnection;
    AdoQuery.Active := False;
    AdoQuery.SQL.Clear;
    Adoquery.SQL.Add('ALTER TABLE ' + TableName + ' ADD ' + FieldName + ' INTEGER');
    Adoquery.ExecSQL;
    Adoquery.Free;
    AdoConnection.Connected := False;
    AdoConnection.Free;

    AdoTable1.Active := true;
  End;

Geändert von DavidKlimas (15. Aug 2018 um 18:18 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Einfügen eines neues Feldes in AdoTable

  Alt 15. Aug 2018, 18:37
Hallo,
ja, siehe auch mein 2. Link.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.591 Beiträge
 
Delphi 12 Athens
 
#4

AW: Einfügen eines neues Feldes in AdoTable

  Alt 15. Aug 2018, 20:27
AdoQuery.Connection := AdoTable1.Connection;

Und ein paar Ressourcenschutzblöcke können nie schaden. (Try-Finally ab Create bis Free)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.474 Beiträge
 
Delphi 12 Athens
 
#5

AW: Einfügen eines neues Feldes in AdoTable

  Alt 16. Aug 2018, 05:54
Moin...
Ich kann das so nicht stehen lassen...du willst ja aus den Fehlern lernen.

1. Beschäftige dich mal mit Begriff "Owner" http://docwiki.embarcadero.com/Libra...omponent.Owner
2. Beschäftige dich mit dem Begriff "Parent" (für Komponenten) http://docwiki.embarcadero.com/Libra...Control.Parent
3. Warum eine Table? Man kann das auch mit einer Query machen. Im OI trägt man das SQL ein. Vorteil: Wenn man andere Daten braucht, braucht man nur das SQL zu ändern (Bedingungen hinzufügen) und nicht die Komponente tauschen.

Delphi-Quellcode:
var
  AdoQuery1: TAdoQuery; // Auf Grund der Namensgebung sind das Komponenten auf dem Formular. Diese hällt die Gesamtdaten.
  //AdoConnection: TADOConnection; // wie himutsu schon sagte... "Query.Connection := AdoQuery1.Connection"
  
  Str1: String;
private // Abschnitt in der Form
  Query: TAdoQuery; // nicht auf die Form legen! Das nennt man dynamisch erzeugen. Name egal.

  ...

  if AdoQuery1.FieldList.Find(Str1) = nil then
  begin
    AdoQuery1.Close; // kürzer

    Query := TAdoQuery.Create(nil); // Owner = nil weil du gibst das Objekt selbst frei. (Query.Free)
    try
      Query.Connection := AdoQuery1.Connection;
      Query.SQL.Text := 'ALTER TABLE ' + TableName + ' ADD ' + FieldName + ' INTEGER'; // kürzer...Tablename = AdoQuery1
      Query.ExecSQL;
      // ggf. in try/except wenn man auf die Fehler reagieren will
    finally
      Query.Free;
    end;

    AdoQuery1.Open; // kürzer... Wenn du die Query nicht schließt, reicht ein AdoQuery1.Refresh
  end;

Geändert von haentschman (16. Aug 2018 um 05:57 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 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