![]() |
Paradox 7 Tabelle dynamisch aus DB erstellen
Hallo,
ich möchte gerne aus meiner DB, in der Feldname, Typ und Länge gespeichert sind eine DB dynamisch erstellen. Wie mache ich das??? Ich hab schon einmal was vorbereitet, funktioniert aber leider nicht. es kommt ein Fehler. Fehler: Ungültiger Parameter. Kann mir jemand helfen??? Achso DM ist ein Datanmodul. Mit freundlichen Grüßen Christian18 |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Poste doch mal den Code den du bisher hast :)
|
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Schau dir mal
![]() |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Zitat:
ok hier ist mein code:
Delphi-Quellcode:
procedure TFFFeld.BitBtn4Click(Sender: TObject);
var i : Integer; begin // Datenbank Dynamisch erstellen DM.Table1.Active:=false; DM.Table1.DatabaseName:=ExtractFilePath(Application.ExeName)+'\dynamischeDB'; DM.Table1.TableName:=DM.TFormulareFormular.AsString; DM.Table1.TableType:=ttParadox; DM.Table1.FieldDefs.Clear; DM.TFelder.First; for i:=1 to DM.TFelder.RecordCount do begin if DM.TFelderFeld.AsString='T' then begin DM.Table1.FieldDefs.Add(DM.TFelderFeld.AsString, ftString, DM.TFelderLaenge.AsInteger, false); exit; end; if DM.TFelderFeld.AsString='Z' then begin DM.Table1.FieldDefs.Add(DM.TFelderFeld.AsString, ftInteger, DM.TFelderLaenge.AsInteger, false); exit; end; if DM.TFelderFeld.AsString='D' then begin DM.Table1.FieldDefs.Add(DM.TFelderFeld.AsString, ftDate, DM.TFelderLaenge.AsInteger, false); exit; end; DM.TFelder.Next; end; DM.Table1.CreateTable; Close; end; |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Delphi-Quellcode:
Was ist denn TFelder? auch ne Datenbank?
if
DM.TFelderFeld.AsString='T' then Müsste das dann nich etwa so aussehen?
Delphi-Quellcode:
if DM.TFelder.FieldByName('FeldName').asString = 'T' then
|
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Zitat:
Delphi-Quellcode:
if
DM.TFelderFeld.AsString='T' then |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Also bei mir nicht -g-
|
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Zitat:
mit freundlichen grüßen Christian18 |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Das hab ich schon verstanden allerdings musst du ja dem Programm irgendwie sagen in welcher Spalte er denn schauen soll was das fürn Wert ist. Und den Spalten namen schreibst einfach FieldByName('NAME') rein :)
FieldDefs.Add erzeugt übrigens eine neue Spalte in der Datenbank, NICHT eine neue Zeile ... Dafür musste ![]() ![]() |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Zitat:
|
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Ja dann is ok...
Solltest trotzdem mit FieldByName arbeiten sonst wird das wohl nix. |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Hallo Christian,
das hat nichts mit FieldByName zu tun. Eine Tabelle wird z.B. so erzeugt:
Delphi-Quellcode:
D.h. du musst als ersten den Feldnamen angeben und dann den Typ. Mir ist auch noch nicht ganz klar, wo du diese Informationen herholst, was also z.B. DM.TFelderFeld.AsString sein soll?
with Table1.FieldDefs do
begin Clear; Add('Field1', ftInteger, 0, True); Add('Field2', ftString, 30, False); end; Table1.CreateTable; |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Zitat:
Ich redete vom Lesezugriff nicht vom Schreibzugriff :roll: |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Hallo,
ich bins nocheinmal. ich habe jetzt mein Programm noch einmal getestet und festgestellt, dass es an folgenden code liegt:
Delphi-Quellcode:
PS: was habe ich hier alsch gemacht???
if
DM.TFelder.FieldByName('Feld').AsString='T' then DM.Table1.FieldDefs.Add(DM.TFelderFeld.AsString, ftString, DM.TFelderLaenge.AsInteger, False); if DM.TFelder.FieldByName('Feld').AsString='I' then DM.Table1.FieldDefs.Add(DM.TFelderFeld.AsString, ftInteger, DM.TFelderLaenge.AsInteger, False); if DM.TFelder.FieldByName('Feld').AsString='D' then DM.Table1.FieldDefs.Add(DM.TFelderFeld.AsString, ftDate, DM.TFelderLaenge.AsInteger, False); DM.TFelder.Next; Mit freundlichen Grüßen Christian18 |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Delphi-Quellcode:
Du hast da genau den gleichen Fehler drin.
if
DM.TFelder.FieldByName('Feld').AsString='T' then ==> DM.Table1.FieldDefs.Add(DM.TFelderFeld.AsString, ftString, DM.TFelderLaenge.AsInteger, False); if DM.TFelder.FieldByName('Feld').AsString='I' then ==> DM.Table1.FieldDefs.Add(DM.TFelderFeld.AsString, ftInteger, DM.TFelderLaenge.AsInteger, False); if DM.TFelder.FieldByName('Feld').AsString='D' then ==> DM.Table1.FieldDefs.Add(DM.TFelderFeld.AsString, ftDate, DM.TFelderLaenge.AsInteger, False); DM.TFelderFeld.asString => DM.TFelder.FieldByName('Feld').asString :) |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Zitat:
um noch mal zu dieser zeiel zu sagen. DM.Table1.FieldDefs.Add(DM.TFelderFeld.AsString, ftInteger, DM.TFelderLaenge.AsInteger, false); Dm ist bei mir ein Datenmodul. ich habe eine DB die heißt Formulare in dieser Db sind die namen der Formulare gespeichert. dann habe ich auch noch eine Db die heißt Felder. in dieser DB wird gespeichert: - Name des Feldes, - Typ des Feldes, - länge des Feldes. und jetzt will ich dynamisch eine DB erstellen. der name der Tabelle die erstellt werden soll wird aus der DB Formulare geholt. und welche felder in dieser DB enthalten sein sollen, dass wird auch aus einer DB geholt. Aus der Datenbank Felder. Also mit DM.TFelderfeld.AsString damit hole ich die daten aus der DB. Ich hoffe ich konnte meine Problematik ein bisschen verständlicher machen. mit fruendlichen grüßen Christian18 |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Kann man da nicht auch einen SQL-Befehl CREATE TABLE benutzen?
|
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Hallo Christian,
jetzt habe ich verstanden, was du willst. Ein Fehler ist, dass du die eine Schleife benutzt (for i:=1 to ...) und dann noch mit First und next durch die Datenmenge läufst.
Delphi-Quellcode:
So sollte es funktionieren.
DM.Table1.FieldDefs.Clear;
DM.TFelder.First; while NOT DM.TFelder.Eof do begin if DM.TFelderFeld.AsString='T' then DM.Table1.FieldDefs.Add(DM.TFelderFeld.AsString, ftString, DM.TFelderLaenge.AsInteger, false) else if DM.TFelderFeld.AsString='Z' then DM.Table1.FieldDefs.Add(DM.TFelderFeld.AsString, ftInteger, DM.TFelderLaenge.AsInteger, false) else if DM.TFelderFeld.AsString='D' then DM.Table1.FieldDefs.Add(DM.TFelderFeld.AsString, ftDate, DM.TFelderLaenge.AsInteger, false); DM.TFelder.Next; end; DM.Table1.CreateTable; |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
hi,
versteh ich irgendwie nicht meine schleife macht doch eigentlich auch nicht anderes als deine oder??? mfg christian18 |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
es kommt trotz deiner anderen schleife immer noch der gleiche fehler. der fehler war ungültiger Parameter. ich sitze jetzt schon den ganzen tag an dieser kleien procedure. ich weiß auch nicht was ich immer falsch mache.
mfg christian18 |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
achso einz vieleicht noch hier einmal ein aktueller quellcode:
Delphi-Quellcode:
procedure TFFFeld.BitBtn4Click(Sender: TObject);
var i : Integer; begin // Datenbank Dynamisch erstellen DM.Table1.Active:=False; DM.Table1.DatabaseName:=ExtractFilePath(Application.ExeName) + 'dynamischeDB\'; DM.Table1.TableName:=DM.TFormulareFormular.AsString; DM.Table1.TableType:=ttParadox; DM.Table1.FieldDefs.Clear; DM.TFelder.First; while NOT DM.TFelder.Eof do begin if DM.TFelderFeld.AsString='T' then DM.Table1.FieldDefs.Add(DM.TFelderFeld.AsString, ftString, DM.TFelderLaenge.AsInteger, false) else if DM.TFelderFeld.AsString='Z' then DM.Table1.FieldDefs.Add(DM.TFelderFeld.AsString, ftInteger, DM.TFelderLaenge.AsInteger, false) else if DM.TFelderFeld.AsString='D' then DM.Table1.FieldDefs.Add(DM.TFelderFeld.AsString, ftDate, DM.TFelderLaenge.AsInteger, false); DM.TFelder.Next; end; DM.Table1.CreateTable; DM.Table1.CreateTable; end; |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Hallo Christian,
du hast Recht dein Code macht das gleiche. War nur etwas ungewöhnlich. Es liegt glaube ich an der Länge der Felder. Für Integer und Date muss glaube ich immer 0 übergeben werden. [zusatz] Du kannst zumindest bei D7 die letzten beiden Parameter auch weglassen. Sie haben default Werte für alles außer Strings. Außerdem gibt es die neue Funkion AddFieldDefs [/zusatz] |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
hallo Mr. Spock,
wenn in der erstellten DB das Feld vom Typ datum oder integer ist, dann habe ich das so gemacht das, das jeweilige längen Feld auf 0 gesetz wird. also das kann es dann auch nicht sein. |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Hallo Christian,
gehe die Schleife einmal Schritt für Schritt durch und überpüfe die Werte für Feld und Laenge an der Stelle, an der der Fehler auftritt. Könnte es sein, das keine Bedingung erfüllt ist, weil z.B. 'T ' (mit blank) in der Tabelle steht und deshalb FieldDefs leer ist, wenn die Tabelle erstellt werden soll? |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Hallo,
der fehler tritt immer bei Create table auf. Die Idee mit der Schleife hatte ich auch schon. :) MFG Christian18 |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Hallo Christian,
hat einer der Namen Umlaute oder Sonderzeichen? Hänge doch einmal die Tabelle TFelder an, dann probier ich das mal aus. Bist du auch sicher, dass die Tabelle noch nicht existiert? |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Liste der Anhänge anzeigen (Anzahl: 1)
hier die tabelle TFelder
|
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Zitat:
|
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Hallo Christian,
ich muss Morgen auf Dienstreise und kann mir das erst übermorgen genauer anschauen. Aber ich bin sicher, das das lösbar ist. |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Hallo Christian,
Feldnamen dürfen nicht mit einer Ziffer beginnen! |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Hallo Christian,
ist das Problem jetzt gelöst? |
Re: Paradox 7 Tabelle dynamisch aus DB erstellen
Zitat:
ich habe das Problem jetzt gelöst. Es lag an den Entscheidungen. ich habe es jetzt mit case gemacht und jetzt funktioniert es. Mit freundlichen Grüßen Christian18 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12: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