Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TTable: In vorhandener Datenbank Spalte hinzufügen/löschen (https://www.delphipraxis.net/127022-ttable-vorhandener-datenbank-spalte-hinzufuegen-loeschen.html)

Helmi 6. Jan 2009 18:19

Datenbank: Paradox • Zugriff über: TTable, BDE

TTable: In vorhandener Datenbank Spalte hinzufügen/löschen
 
Hallo,

wie kann ich bei einer TTable ein Feld (Spalte) bei einer schon vorhandenen Datenbank hinzufügen bzw. löschen?

mkinzler 6. Jan 2009 18:24

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Die BDE hab ich gedanklich schon längst begraben, sollte aber mit Table.FieldDefs.Add gehen

Helmi 6. Jan 2009 18:27

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Zitat:

Zitat von mkinzler
Die BDE hab ich gedanklich schon längst begraben, sollte aber mit Table.FieldDefs.Add gehen

Die BDE ist zwar schon alt - aber für meine Zwecke reicht sie vollkommen.

mit Table.FieldDefs.Add füg ich schon welche hinzu. Wenn ich aber danach CreateTable ausführe, werden alle vorhandenen Einträge gelöscht.
Ich will aber nur eine Spalte hinzufügen, ohne die Einträge zu löschen.
Wie kann ich das realisieren?

mkinzler 6. Jan 2009 18:29

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Vielleicht per SQL ( TQuery)

Helmi 6. Jan 2009 18:34

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Zitat:

Zitat von mkinzler
Vielleicht per SQL ( TQuery)

Muss doch auch anders gehen ohne SQL

haentschman 6. Jan 2009 20:54

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
[OT]
Zitat:

Die BDE ist zwar schon alt - aber für meine Zwecke reicht sie vollkommen.
...scheinbar nicht :gruebel:

Versuch mal:

- Table.FieldDefs.Insert(Index) (siehe Hilfe) oder
- Table.FieldDefs.Add(const Name: string; DataType: TFieldType; Size: Integer; Required: Boolean)

:hi:

Helmi 6. Jan 2009 21:01

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Zitat:

Zitat von haentschman
[OT]
Zitat:

Die BDE ist zwar schon alt - aber für meine Zwecke reicht sie vollkommen.
...scheinbar nicht :gruebel:

Nur weil ich eine Frage habe, ist sie nicht für meine Zwecke ausreichend???

Zitat:

Zitat von haentschman
- Table.FieldDefs.Insert(Index) (siehe Hilfe) oder

muss ich mal ausprobieren

Zitat:

Zitat von haentschman
- Table.FieldDefs.Add(const Name: string; DataType: TFieldType; Size: Integer; Required: Boolean)

Zitat:

Zitat von Helmi
mit Table.FieldDefs.Add füg ich schon welche hinzu.


hoika 7. Jan 2009 01:42

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Hallo,

wenn du es dir schwer machen willst,
nimmst du halt TTable.
Unter der folgenden URL gibt es auch ein AddField Bsp.


http://info.borland.com/devsupport/bde/bdeapiex/


Heiko

Helmi 7. Jan 2009 12:30

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Zitat:

Zitat von hoika
Unter der folgenden URL gibt es auch ein AddField Bsp.


http://info.borland.com/devsupport/bde/bdeapiex/

Ich hab da leider keines gefunden - welches meinst du denn explizit?

hoika 7. Jan 2009 12:39

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Hallo,

http://info.borland.com/devsupport/b...structure.html

Example 10


Heiko

Helmi 7. Jan 2009 12:51

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Danke für den Hinweis!

Eine Frage hab ich noch. In dem Code sind folgende Typen angegeben:

Delphi-Quellcode:
 
szName: DBINAME;

Props: CURProps;
hDb: hDBIDb;
TableDesc: CRTblDesc;
pFlds: pFLDDesc;
pOp: pCROpType;
also DBINAME, CURProps, hDBIDb, CRTblDesc, pFLDDesc, pCROpType

Woher bekomm ich die?

hoika 7. Jan 2009 14:20

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Hallo,

meistens ist das die Unit BDE.

Geh einfach mal ein DBTables,
suche nach einer der Strukturen und klicke
auf Ctrl + linke Maustaste.


Heiko

Helmi 7. Jan 2009 14:23

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Zitat:

Zitat von hoika
meistens ist das die Unit BDE.

Extakt diese Unit war es :-)

Danke

hoika 7. Jan 2009 14:53

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Hallo,

und nun sieh mal dazu das an:

Delphi-Quellcode:
with Query do
begin
  SQL.Clear;
  SQL.Add('alter table table1 add name(char(50)');
  ExecSQL,
end;

Heiko

Helmi 7. Jan 2009 15:03

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Zitat:

Zitat von hoika
Hallo,

und nun sieh mal dazu das an:

Delphi-Quellcode:
with Query do
begin
  SQL.Clear;
  SQL.Add('alter table table1 add name(char(50)');
  ExecSQL,
end;

Ja - schaut natürlich einfacher aus.

Nur hab ich damit ein paar Probleme:

1. Mein Datenbankname ändert sich - das heisst, ich hab mehrere Datenbanken (davon ist aber nur immer Eine offen)
2. Meine Datenbanken sind nicht im gleichen Ordner wie die Exe, sondern in einem Unterordner.

Ich hab deinen Code mal getestet, table1 gegen eine von mir gerade geöffnete Datenbank ersetzt.
Nur bekomm ich dann einen Fehler:

Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Schulungsmanager.exe ist eine Exception der Klasse EDBEngineError aufgetreten. Meldung: 'Tabelle nicht vorhanden
Datei oder Verzeichnis nicht vorhanden
Datei: E:\Schulungsmanager\Programm\Schulungsindex.DB
Datei: E:\Schulungsmanager\Programm\Schulungsindex.DBF
Datei: E:\Schulungsmanager\Programm\Schulungsindex.txt
Datei: E:\Schulungsmanager\Programm\Schulungsindex'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
Ganz klar natürlich, weil die nicht im Ordner "Programm" liegt, sondern bei mir unter "E:\Schulungsmanager\Programm\Datenbank".

[Edit]
Kann es sein, dass in deinem SQL-Text eine geschlossene Klammer fehlt?

mkinzler 7. Jan 2009 15:11

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Delphi-Quellcode:
with Query do
begin
  SQL.Text := 'alter table table1 add name char(50);';
  ExecSQL;
end;

khh 7. Jan 2009 15:15

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Zitat:

Zitat von Helmi
Zitat:

Zitat von hoika
Hallo,

und nun sieh mal dazu das an:

Delphi-Quellcode:
with Query do
begin
  SQL.Clear;
  SQL.Add('alter table table1 add name(char(50)');
  ExecSQL,
end;

Ja - schaut natürlich einfacher aus.

Nur hab ich damit ein paar Probleme:

1. Mein Datenbankname ändert sich - das heisst, ich hab mehrere Datenbanken (davon ist aber nur immer Eine offen)
2. Meine Datenbanken sind nicht im gleichen Ordner wie die Exe, sondern in einem Unterordner.

Ich hab deinen Code mal getestet, table1 gegen eine von mir gerade geöffnete Datenbank ersetzt.
Nur bekomm ich dann einen Fehler:

Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Schulungsmanager.exe ist eine Exception der Klasse EDBEngineError aufgetreten. Meldung: 'Tabelle nicht vorhanden
Datei oder Verzeichnis nicht vorhanden
Datei: E:\Schulungsmanager\Programm\Schulungsindex.DB
Datei: E:\Schulungsmanager\Programm\Schulungsindex.DBF
Datei: E:\Schulungsmanager\Programm\Schulungsindex.txt
Datei: E:\Schulungsmanager\Programm\Schulungsindex'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
Ganz klar natürlich, weil die nicht im Ordner "Programm" liegt, sondern bei mir unter "E:\Schulungsmanager\Programm\Datenbank".

[Edit]
Kann es sein, dass in deinem SQL-Text eine geschlossene Klammer fehlt?

kann es sein, dass du Datenbank mit Tabelle verwechselt hast?

Gruss Kh

Helmi 7. Jan 2009 15:18

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Zitat:

Zitat von khh
kann es sein, dass du Datenbank mit Tabelle verwechselt hast?

Ich denke, man merkt, dass ich kaum was mit Datenbanken zuvor zu tun hatte :-)
Ja - ich denke dass ich Datenbank mit Tabelle verwechsle

hoika 7. Jan 2009 15:18

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Hallo,

> Kann es sein, dass in deinem SQL-Text eine geschlossene Klammer fehlt? >

na ein bissel Arbeit solltest du auch haben ;)
Delphi-Quellcode:
with Query do
begin
  DataBaseName:= 'c:\blabla\bla';
  SQL.Clear;
  SQL.Add('alter table table1 add name(char(50))');
  ExecSQL,
end;
Übrigens funktioniert der Befehl nur, wenn die Tabelle geschlossen ist
(das alter table oder DbiDoRestructure braucht exclusiven Zugriff)


Heiko

Helmi 7. Jan 2009 16:54

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Ich traus mir ja kaum zu schreiben, aber ich hab mit mir selbst gerungen, und auch gewonnen, und hab jetzt Query eingesetzt.

Soweit geht das ja ganz gut, nur wollt ich den SQL-Text mit Variablen versehen.
Dazu hab ich folgendes gebaut:

Delphi-Quellcode:
Query.SQL.Add(Format('alter table %s add %s(char(%s))', [Datenbank, Spalte, Laenge]));

Leider bekomm ich aber diese Fehlermeldung:
Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Schulungsmanager.exe ist eine Exception der Klasse EDBEngineError aufgetreten. Meldung: 'Ungültiges Schlüsselwort
Symbol-String: (char(50))
Zeilennummer: 1'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
Was mach ich falsch?

DeddyH 7. Jan 2009 16:56

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Von welchem Typ ist Laenge?

Helmi 7. Jan 2009 16:58

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Sorry - vergaß zu sagen, dass alles drei Variablen (Datenbank, Spalte, Laenge) vom Typ String sind

hoika 7. Jan 2009 17:04

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Hallo,

Delphi-Quellcode:
Query.SQL.Add(Format('alter table %s add %s char(%s)', [Datenbank, Spalte, Laenge]));

Heiko

mkinzler 7. Jan 2009 17:08

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Warum macht ihr immer .Clear()/.Add() statt .Text?

DeddyH 7. Jan 2009 17:09

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Wenn man nach Codezeilen bezahlt wird, macht man das so ;)

Helmi 7. Jan 2009 17:22

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Zitat:

Zitat von mkinzler
Warum macht ihr immer .Clear()/.Add() statt .Text?

Frag nicht mich - ich bin heut so damit SQL-technisch erzogen worden *grins* :lol:

Aber du hast recht - ist einfacher

hoika 7. Jan 2009 17:26

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Hallo,

mit Clear / Add kann man die SQL-Statements schön in einer Schleife zusammenbauen.


Heiko

mkinzler 7. Jan 2009 17:27

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Geht bei direkter Zuweisung zu .Text doch auch

hoika 7. Jan 2009 17:48

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Hallo,

sieht aber nicht so schön aus ;)


Heiko

Helmi 7. Jan 2009 18:36

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Eine Frage hätt ich noch:

Wie kann ich eine Spalte wieder löschen?

DeddyH 7. Jan 2009 18:38

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
SQL-Code:
ALTER TABLE Tabelle DROP Feld

Helmi 7. Jan 2009 18:42

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
oh - danke :-)

[Edit]
Auch auf die Gefahr hin, geprügelt zu werden, aber gibts irgendwo ne Übersicht der SQL-Befehle?

DeddyH 7. Jan 2009 19:12

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Nur eine Seite von vielen: http://www.sql-und-xml.de/sql-tutorial/

mkinzler 7. Jan 2009 19:19

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Für Paradox
http://www.thedbcommunity.com/index....=107&Itemid=46

Helmi 7. Jan 2009 19:23

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Merci :-)

hoika 7. Jan 2009 19:51

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Hallo,

SQL-Code:
alter table table_1 drop field_name

Heiko

[edit=mkinzler] Danke für die vergessenen Tags, so kann ich die Funktion testen :zwinker: Mfg, mkinzler[/edit]

DeddyH 7. Jan 2009 19:57

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Bissel spät, wie :mrgreen:?

hoika 7. Jan 2009 20:15

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Hallo,

;(


Heiko

maladarse 19. Jan 2009 14:56

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
Frage:will mit turbo delphi datenbank erstellen
wenn:
with Query do
begin
SQL.Text := 'alter table table1 add name char(50);';
ExecSQL;
end;

dann erscheint die spalte erst, wenn das programm neu gestartet wird. wieso?

haentschman 19. Jan 2009 15:04

Re: TTable: In vorhandener Datenbank Spalte hinzufügen/lösch
 
...in Glaskugel schau... 8)

ich vermute mal, daß das Feld zwar in der Datenbank (Tabelle) hinzugefügt wurde aber in deiner Query (für die Visualisierung) noch der alte Bestand liegt.

:gruebel: Query aktualisieren bzw neu öffnen.

:hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:22 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz