![]() |
Hi, ich komm einfach nicht dahinter:
Code:
So sieht jetzt mein code aus.
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; 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? |
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:
Naja und der 2. Fehler ist doch offensichtlich :roll:
...
if DataModule2.ADOSFinanzierung.FindField(FeldName[i])=NIL then ... Na wo is denn da der InsertStr Array :mrgreen: |
Hi, ist der Code nun richtig?
Code:
Wenn ich jetzt den Button klicke, dann kommt folgende Fehlermeldung:
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; 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. |
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. |
Hi, ich bin jetzt leider mit deiner Antwort nicht zurechtgekommen. Hab nicht ganz kapiert, wie du das meinst!
|
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; |
Ich habe auch in der Query so einen SQL-String
ALTER TABLE..... Bleibt dieser Bestehen? |
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: ). |
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? |
Hallo m-werk,
kannste einfach erweitern :mrgreen: . |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:05 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