Delphi-PRAXiS
Seite 3 von 4     123 4      

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 20. Sep 2002 17:32

Hi, ich komm einfach nicht dahinter:

Code:
procedure TForm1.Button1Click(Sender: TObject);
const
   FeldName : array[1..4] of String = ('Rueckzahlung', 'Kreditwaehrung', 'Zinssatz1', 'Zinssatzgebunden');
   var i : Integer;
begin
  for i := 1 to 4 do
  begin
    if Not DataModule2.ADOSFinanzierung.FindField(FeldName[i]) then
    begin
       DataModule2.ADOQuery1.Close;
       DataModule2.ADOQuery1.SQL.Clear;
       DataModule2.ADOQuery1.SQL.Add(InsertStr[i]);
       DataModule2.ADOQuery1.ExecSQL
     end;
   end;
end;
So sieht jetzt mein code aus.

Nun kommen aber wieder folgende Fehlermeldungen:
[Fehler] DBUpdate.pas(42): Operator ist auf diesen Operandentyp nicht anwendbar
Dies kommt bei der zeile:
if Not DataModule2.ADOSFinanzierung.FindField(FeldName[i]) then

[Fehler] DBUpdate.pas(46): Undefinierter Bezeichner: 'InsertStr'

Was ist da jetzt noch los?

MrSpock 20. Sep 2002 19:02

Hallo m-werk,

OK, war mein Fehler. FindField gibt kein True oder False zurück, sondern das Feld, sofern es gefunden wurde, sonst NIL.

Der Code muss also so aussehen:

Code:
...
if DataModule2.ADOSFinanzierung.FindField(FeldName[i])=NIL then
...
Naja und der 2. Fehler ist doch offensichtlich :roll:

Na wo is denn da der InsertStr Array :mrgreen:

m-werk 23. Sep 2002 16:42

Hi, ist der Code nun richtig?

Code:
procedure TKundendaten.Button3Click(Sender: TObject);
const
   FeldName : array[1..4] of String = ('Rueckzahlung', 'Kreditwaehrung', 'Zinssatz1', 'Zinssatzgebunden');
   var i : Integer;
       InsertStr : String;
begin
  for i := 1 to 4 do
  begin
    if DM.ADOSFinanzierung.FindField(FeldName[i])=NIL then
    begin
       DM.QueryFinanzierung.Close;
       DM.QueryFinanzierung.SQL.Clear;
       DM.QueryFinanzierung.SQL.Add(InsertStr[i]);
       DM.QueryFinanzierung.ExecSQL
     end;
   end;
end;
Wenn ich jetzt den Button klicke, dann kommt folgende Fehlermeldung:
Zugriffsverletzung bei Adresse 004FE3E7 in Modul 'Kundenverwaltung.exe'. Lesen von Adresse 00000000.

Ich hab mir auch die Datenbank dann angesehen, und hab aber keine Felder gefunden, die neu sein sollten.

MrSpock 23. Sep 2002 19:25

Hallo m-werk,

wenn du InsertStr lokal deklarierst wie in einem Code gezeigt, dann musst du natürlich auch die Werte für InsertStr[1] bis InsertStr[4] setzen. Du könntest das ebenfalls als typisierte Konstante machen. Oder durch 4 Zuweisungen, wie irgendwo oben beschrieben.

m-werk 24. Sep 2002 07:12

Hi, ich bin jetzt leider mit deiner Antwort nicht zurechtgekommen. Hab nicht ganz kapiert, wie du das meinst!

MrSpock 24. Sep 2002 12:12

Hallo m-werk,

guckst du hier:

Code:
procedure TKundendaten.Button3Click(Sender: TObject);
const
   FeldName : array[1..4] of String = ('Rueckzahlung', 'Kreditwaehrung', 'Zinssatz1', 'Zinssatzgebunden');

   InsertStr : array[1..4] of String =
               ('ALTER TABLE Kinder ADD XY NUMERIC',
                'ALTER TABLE Kinder ADD ...',
                 ...);
var
   i : Integer;  
begin
  for i := 1 to 4 do
  begin
    if DM.ADOSFinanzierung.FindField(FeldName[i])=NIL then
    begin
       DM.QueryFinanzierung.Close;
       DM.QueryFinanzierung.SQL.Clear;
       DM.QueryFinanzierung.SQL.Add(InsertStr[i]);
       DM.QueryFinanzierung.ExecSQL
     end;
   end;
end;

m-werk 24. Sep 2002 12:44

Ich habe auch in der Query so einen SQL-String

ALTER TABLE.....


Bleibt dieser Bestehen?

MrSpock 24. Sep 2002 16:20

Hallo m-werk,

wenn die Query nur durch Drücken des Schalters Button3 ausgeführt wird, wird der String dort überschrieben. Dann kann das SQL Feld leer bleiben (macht aber auch nix, wenn es nicht leer ist :mrgreen: ).

m-werk 25. Sep 2002 15:22

Danke für die Antwort.

Was ist eigentlich, wenn ich später wieder Felder in die Datenbank einfügen möchte?

Kann ich da ganz normal den Code erweitern und es werden dann nur die Felder eingefügt, die noch nicht existieren oder muß ich da was neu machen?

MrSpock 25. Sep 2002 16:14

Hallo m-werk,

kannste einfach erweitern :mrgreen: .


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:05 Uhr.
Seite 3 von 4     123 4      

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