AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Automatische Felder in der Access-DB erzeugen
Thema durchsuchen
Ansicht
Themen-Optionen

Automatische Felder in der Access-DB erzeugen

Ein Thema von m-werk · begonnen am 9. Sep 2002 · letzter Beitrag vom 1. Okt 2002
Antwort Antwort
Seite 2 von 4     12 34      
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#11
  Alt 17. Sep 2002, 09:23
Also sollte der SQL-String in der ADOQuery so aussehen:

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

und der Code für den Button sieht so aus, wie bei dir beschrieben.

Dann muß ich nur noch die DBEdit-Felder so Formatieren, wie ich sie berauche.

Kann ich die DBEdit-Felder schon in mein Programm einbauen obwohl zuerst in der Datenbank selbst die Felder noch gar nicht vorhanden sind?

Ich möchte es ja so machen, dass wenn ein User das Programm installiert, er dann zuerst das DB-Update Button klickt damit die Datenbank auf den neuesten Stand ist.
Und jetzt kann der User auch schon in die Felder was eintragen, die neu sind.
Die Felder sind aber ja schon vorher drinn.

Kann ich das so ohneweiters machen, oder gibts da einen konflikt, weil ja die Felder in der Datenbank noch nicht existieren?[/code]
Grüße, m-werk
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#12
  Alt 17. Sep 2002, 10:39
Hallo m-werk,

damit es nicht so kompliziert wird, würde ich ein kleines Programm schreiben, dass nur die Tabelle anpasst, d.h. die Felder hinzufügt.

Das eigentliche Programm sollte dann die bereits angepasste Tabelle voraussetzen.

Ansonsten ist deine vorgeschlagene Vorgehensweise korrekt.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#13
  Alt 17. Sep 2002, 19:12
Ich hab jetzt alles so gemacht. Ich hab ein eigenes Programm erstellt. Nun hab ich probleme mit dem Button.

Code:
procedure TForm1.Button1Click(Sender: TObject);
var i : string;
begin
  for i := 1 to 4 do
  begin
    DataModule2.ADOQuery1.Close;
    DataModule2.ADOQuery1.SQL.Clear;
    DataModule2.ADOQuery1.SQL.Add(InsertStr[i]);
    DataModule2.ADOQuery1.ExecSQL
end;
Es kommt immer die Meldung:
FOR-Schleifenvariable muß von ordinalem Typ sein
Undefinierter Bezeichner: 'InsertStr'

Was hab ich da vergessen?


Weiters: Wie kann ich es anstellen, dass das Programm automatisch beim 1. Start des eigentlichen Programmes gestartet wird, und dann nie wieder.

Denn wenn einmal die Felder in der DB sind, dann werd ich nicht nochmal das Programm starten. Wie muß ich da vorgehen?
Grüße, m-werk
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#14
  Alt 18. Sep 2002, 07:26
Hallo m-werk,

du hast ja nur eine Schleife , und dort steht nur eine Variable und die heißt i. I darf nicht als String, sondern muss als Integer (oder SmallInt) deklariert werden. Dann funktioniert es.

Zum Thema automatisches Starten guckst du hier
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#15
  Alt 19. Sep 2002, 09:51
Das mit dem Start ist mir schon bekannt, aber ich möchte ja, dass diese exe-Datei nur beim 1. Start erfolgt. Mit diesem Code erfolgt sie bei Jedem Start.
Grüße, m-werk
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#16
  Alt 19. Sep 2002, 11:06
Hallo m-werk,

frag doch in der Schleife nach, ob das Feld existiert:

Code:
procedure TForm1.Button1Click(Sender: TObject);
var i : string;
begin
  for i := 1 to 4 do
  begin
    if Not DataModule2.TheTable.FindField(FeldName[i]) then
    begin
       DataModule2.ADOQuery1.Close;
       DataModule2.ADOQuery1.SQL.Clear;
       DataModule2.ADOQuery1.SQL.Add(InsertStr[i]);
       DataModule2.ADOQuery1.ExecSQL
     end
   end
end;
Dabei ist FeldName ein Array, der die Namen der neuen Felder enthält und TheTable der Name des Tabellenobjekts, das auf die zu ändernde Tabell zeigt. Dann kann das Programm beliebig oft gestartet werden, ohne etwas kaputt zu machen. Ich würde aber noch eine Meldung ausgeben, wieviele Felder hinzugefügt worden sind.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#17
  Alt 19. Sep 2002, 13:01
Das ist super. Muß ich gleich, wenn ich wieder mal zeit habe, das ausprobieren.

Eine Frage noch?
Was beideutet ARRAY?
Wie meinst du das mit ARRAY?
Grüße, m-werk
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#18
  Alt 19. Sep 2002, 13:37
Hallo m-werk,

genauso wie bei InsertStr.

Du kannst es als Variable oder als typisierte Konstante deklarieren.

Also z.B.:

Code:
const
   FeldName : array[1..4] of String = ('Kinder', 'Geld', 'BlaBla', 'Hallo');
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#19
  Alt 19. Sep 2002, 13:41
Ahh, so etwas ähnliches habe ich bei einer Berechnung gemacht:

Edit1 + Edit2 - Edit3 usw.

Code:
const
   FeldName : array[1..4] of String = ('Kinder', 'Geld', 'BlaBla', 'Hallo');
Das was in der Klammer steht, sind die Datenfelder und wo setze ich diesen Code ein?
Grüße, m-werk
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#20
  Alt 19. Sep 2002, 14:49
Hallo m-werk,

irgendwo im Sichtbereich der Stelle, an der du darauf zugreifst.

Also z.B.:


Code:
procedure TForm1.Button1Click(Sender: TObject);
const
   FeldName : array[1..4] of String = ('Kinder', 'Geld', 'BlaBla', 'Hallo');
var i : string;
begin
  for i := 1 to 4 do
  begin
    if Not DataModule2.TheTable.FindField(FeldName[i]) then
    begin
       DataModule2.ADOQuery1.Close;
       DataModule2.ADOQuery1.SQL.Clear;
       DataModule2.ADOQuery1.SQL.Add(InsertStr[i]);
       DataModule2.ADOQuery1.ExecSQL
     end
   end
end;
Greifst du auch noch an anderen Stellen darauf zu, dann musst du die Deklaration z.B. for die Klassendeklaration der unit schreiben.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 01:17 Uhr.
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