Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Automatische Felder in der Access-DB erzeugen (https://www.delphipraxis.net/805-automatische-felder-der-access-db-erzeugen.html)

m-werk 9. Sep 2002 14:14


Automatische Felder in der Access-DB erzeugen
 
Hallo Leute, wie kann ich, wenn ich eine Access-DB habe, und ich aber einige Felder vergessen habe, die aus meinem Programm automatisch hinzufügen?

Es soll so sein, dass wenn ein User das Update meines Programmes installiert und dann im Menüpunkt auf 'Aktualisieren' klickt, dass dann automatisch einige Felder in einer Tabelle in der Datenbank erstellt werden, damit dann das Programm auch richtig läuft und der User auch zugriff auf die Felder hat?

Grund ist der, da ja einige User schon das Programm haben und ich jetzt ein Update machen möchte. Dafür fehlen jetzt aber einige Felder in der Access-DB.

Kann man das überhaupt? Und wenn ja, Wie?

Klabautermann 9. Sep 2002 14:38

Hallo,

ich habe es mit Access noch nicht Probiert, aber generell sollte das kein Problem sein.

Du musst auf jeden Fall den Exclusiven Zugriff auf die Tabelle haben (es darf also keine zweite Connection bestehen).
Danach fährst du ein Querry das so aufgebaut ist:
Code:
ALTER TABLE tabellenname ADD
 (
  Alter NUMERIC
  Nummernschild CHAR(20)
 )
Wenn du pech hast können die Felder bei Acces nur einzeln hinzugefügt werden. In dem Fall musst du es in zwei Querys aufteilen:
Code:
ALTER TABLE tabellenname ADD Alter NUMERIC
ALTER TABLE tabellenname ADD Nummernschild CHAR(20)
Gruß
Klabautermann

m-werk 12. Sep 2002 14:18

Hi, und wie kann ich das mit einem Button verbinden?

Ich möchte auf den Button klicken, und dann sollen die Felder in der Datenbank erzeugt werden. Und weiters soll man, sobald diese erzeugt sind, darauf zugreifen können.

MrSpock 12. Sep 2002 15:28

Hallo m-werk,

das Statement der SQL Eigenschaft einer TQuery Komponente hinzufügen. Die TQuery Komponente mit der Datenbank verbinden. Dann dem OnClick - Ereignis des Schalters den Code:

Code:
qryAdd.ExecSQL;
hinzufügen, wobei du den Namen qryAdd durch den Namen der o.g. TQuery Kompo ersetzen muss.

m-werk 13. Sep 2002 18:30

Hi, ich habe jetzt alles so gemacht, aber nun kommt, wenn ich den Button betätige eine Meldung: Syndaxfehler in Felddefinition.

Ich habe schon vorgefertigte Tabellen in der Access. Ich möchte in der Tabelle 'Kinder' eineFeld 'Zusatz' hinzufügen, der ein Text sein soll.
Weiters möchte ich noch ein Feld 'XY' hinzufügen, der eine Zahl sein soll.

Ich komm nicht dahinter, wie die SQL eigenschaft heißen soll.

MrSpock 13. Sep 2002 20:42

Hallo m-werk,

wann kommt denn der Syntax Fehler?

Der SQL String sollte lauten:

Code:
ALTER TABLE Kinder ADD Zusatz CHAR(20)
und ggf. eine zweite Anweisung:
Code:
ALTER TABLE Kinder ADD XY NUMERIC
Die entsprechende TQuery Kompo muss natürlich mit der Datenbank verbunden sein und kein anderer sollte zu dem Zeitpunkt auf die Daten zugreifen.

m-werk 14. Sep 2002 17:40

So, ich habe es jetzt geschaft.
Ich habe aber bemerkt, dass ich immer nur einen String verwenden kann.
Ich muß aber 9 Felder hinzufügen.

Muß ich jetzt 9 Querys machen? Oder kann ich das irgendwie in einer einzigen auch machen?

Weiters muß ich ein Feld hinzufügen, dass wie folgt aussehen muß:
Feldname: Rundung
Felddatentyp: Zahl
Feldgröße: Double
Format: Standartzahl oder Euro
Dezimalstellenanzeige: 3

Wie bekomme ich das hin?

MrSpock 16. Sep 2002 20:55

Hallo m-werk,

das Feld kannst du mit:

Code:
ALTER TABLE Kinder ADD Rundung NUMERIC
Dabei ist es auch denkbar FLOAT oder MONEY zu nutzen. Letzteres hat aber nur 2 Nachkommastellen.

Du kannst übrigens alles nacheinander in dieselbe TQuery Komponente schreiben. Die SQL Eigenschaft einfach mit Clear löschen, neu setzen und mit ExecSQL ausführen.

Formate kannst du in Delphi über die Field Komponente einstellen, die du über den Feldeditor hinzufügen kannst. Das Format über SQL so einzustellen, dass es beim Öffnen der DB in Access wie von dir gewünscht angezeigt wird, geht nicht.

m-werk 17. Sep 2002 07:11

Hi, also geht das einstellen vom Format wie z.B. 'Standartzahl oder Euro' nicht.

Was bedeutet FLOAT und MONEY?
Money ist mir eigentlich klar. Wie setze ich die in die SQL dazu?

Wie siehts eigentlich mit einem Ja/Neit Wert aus?

Wie soll ich das mir 'Clear' lösen?

Naja, viele fragen aber ich will es ja lernen. Ich werde mir noch diese Woche das Buch 'Datenbankprogrammieren in Delphi 6 kaufen'. Was hälst du davon? Ich glaube, dann wird mir auch einiges klar. Find ich in diesem Buch auch solche Beispiele, wie ich sie in diesem Forum poste?

MrSpock 17. Sep 2002 07:39

Hallo m-werk,

das mit dem Buch ist eine gute Idee. Ich denke, wenn man Datenbankprogrammierung benötigt, sollte man den Grundlagen anfangen und da ist ein gutes Buch viel Wert. Man kann dann auch später gewisse Details einfach noch einmal nachschlagen.

Zitat:

also geht das einstellen vom Format wie z.B. 'Standartzahl oder Euro' nicht.
Solange du über die BDE auf eine Datenbank zugreifst, musst du dich mit "Loacal SQL" begnügen, was eine Untermenge des ANSI-SQL Standards ist. Die Angabe, wie Access Daten aus der Datenbank in einem Formular oder der Tabellenansicht darstellt, kann nicht über SQL festgelegt werden, sondern nur über die Oberfläche selbst. Zeigst du aber den Inhalt der DB in Delphi Komponenten an, kannst du dort das Format z.B. über die Eigenschaft DisplayFormat (siehe Online Hilfe) einstellen.

Zitat:

Was bedeutet FLOAT und MONEY?
Money ist mir eigentlich klar. Wie setze ich die in die SQL dazu?
FLOAT bedeutet einfach nur Gleitkommazahl. Es gibt auch das Format FLOAT(x,y) mit dem man die Genauigkeit der zu speichernden Daten angeben kann. Es ist aber leider so, dass der SQL String an die Datenbank geschickt wird und die diesen dann selbst umsetzt. Und das bedeutet, dass grundsätzlich die Umsetzung unterschiedlich sein kann (z.B. Genauigkeit). Money soll eigentlich 2 Nachkommastellen haben, dBase ersetzt es aber durch Numeric(20,4). Was ich damit sagen will, ist: Probier das Ganze mal mit Access aus und schau dir an, wie Access z.B. MONEY oder FLOAT umsetzt. FLOAT und MONEY sind Typen, die du syntaktisch anstelle von NUMERIC oder CHAR(20) in den o.g. Beispielen benutzen kannst.

Zitat:

Wie siehts eigentlich mit einem Ja/Neit Wert aus?
Das wäre der Typ BOOLEAN. Aber auch hier gilt: Nachprüfen, was die Datenbank daraus macht!

Zitat:

Wie soll ich das mir 'Clear' lösen?
Angenommen deine TQuery heißt qryInsert, dann schreibst du z.B.:

Code:
for i := 1 to 9 do
begin
   qryInsert.Close;
   qryInsert.SQL.Clear;
   qryInsert.SQL.Add(InsertStr[i]);
   qryInsert.ExecSQL
end;
Dabei sollte der Array InsertStr die neun verschiedenen SQL Statements enthalten, also:

InsertStr[1] := 'ALTER TABLE Kinder ADD XY NUMERIC';
InsertStr[2] := ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:41 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz