![]() |
Variable dynamisch übergeben oder so...
Hallo,
ich wusste nicht wie ich das Topic am Besten benennen sollte. Zu meinem Problem: Ich habe eine Funktion, welche dynamisch in einer For-Schleife mehrere Tabellen nach einem CodeMaster in eine Datenbank schreiben soll. Es wird also erst ein Dummy mit entsprechendem Tablename erstellt, dann geprüft welche Felder nach CodeMaster noch hinzugefügt, bzw. gelöscht werden sollen etc... Der Funktion, welche diese Felder ermittelt werden folgende Sachen übergeben:
Delphi-Quellcode:
cm ist hierbei die Variable für den CodeMaster.
GetFieldsToChange(cm, slTStruct, slFields);
Mein Problem nun: Die Codemaster sind in Konstanten gespeichert, welche ihre Bezeichnung durch 'DPv42_' + Tabellennamen erhalten. Ich habe nun lediglich den Tabellennamen, kann mir dann daraus den Konstantennamen für den Codemaster der jeweiligen Tabelle ermitteln. Toll.. Dann hab ich ihn als String vorliegen. Und wie sag ich Delphi jetzt, dass das eigentlich der Name der Konstante ist, welche ich übergeben möchte und kein String? Hoffe, dass ich das Problem verständlich erklärt hab. Gruß Franz |
Re: Variable dynamisch übergeben oder so...
Zitat:
da Delphi keine Namen von Konstanten einkompiliert und demnach diese Namen in der EXE nicht existieren. Du kannst höchstens eine Liste anlegen, mit den Namen (als String) und Verknüpfungen zu den Konstanten (genauer gesagt zu deren Inhalt) und mußt dann in dieser Liste suchen. [edit] grammatik *grrrr* |
Re: Variable dynamisch übergeben oder so...
Hm also sozusagen eine Liste anlegen mit folgendem Aufbau:
Tabelle1 CodeMaster für Tabelle1 Tabelle2 CodeMaster für Tabelle2 Tabelle3 . . . Oder ich schreib ne Funktion die ungefähr so lautet: if Tabelle1 then s := CodeMaster für Tabelle 1 else if Tabelle 2 then s := CodeMaster für Tabelle 2 else.... Aber dann muss ja immer die Funktion abgeändert werden, wenn im Programm eine neue Tabelle hinzukommt oder gelöscht wird :( |
Re: Variable dynamisch übergeben oder so...
Oder eine entsprechende Funktion schreiben in der Art:
Delphi-Quellcode:
Aber schön ist was anderes :roll:
const
MYFIRSTCONST = 1; MYSECONDCONST = 2; function StrToConst(const ConstName: string): DWORD; begin Result := 0; if AnsiLowerCase(ConstName) = 'myfirstconst' then Result := MYFIRSTCONST else if AnsiLowerCase(ConstName) = 'mysecondconst' then Result := MYSECONDCONST else raise Exception.CreateFmt('"%s" ist not a valid constant name.',[ConstName]); end; [edit] Roter Kasten, hallo *klopf* *klopf* [/edit] |
Re: Variable dynamisch übergeben oder so...
Naja das ist ja schonmal eine Antwort, die ich bis auf das Edit sogar verstehe *g*
Ich denke mal, dass ich das Problem wohl so umsetzen werde. Wobei ich mir bei gefühlten 100 Tabellen ja wirklich nen Wolf schreib und schön aussehen tut's auch nicht :( Gruß |
Re: Variable dynamisch übergeben oder so...
[OT] Das Edit bezog sich darauf, dass ich keinen roten Kasten gesehen habe und somit nicht wusste, dass Du bereits etwas gepostet hattest. [/OT]
|
Re: Variable dynamisch übergeben oder so...
Sind die Tabellen fest? Wie sehen diese aus? Evtl. hilft dir eine Ressource weiter ähnlich wie
![]() |
Re: Variable dynamisch übergeben oder so...
Hm ja das könnte mir wirklich helfen, aber jetzt habe ich das andere schon implementiert. Wenns dann irgendwann an die Codeoptimierung geht, dann werde ich mir das nochmal anschauen :)
Danke euch für die Hilfe. Inzwischen läuft das Erstellen der kompletten Datenbankstruktur nach Vorbild des Codemasters ohne Probleme :cheers: |
Re: Variable dynamisch übergeben oder so...
Ich mach es meistens etwa so, wenn ich etwas Derartiges benötige.
Delphi-Quellcode:
So muß man dann nur noch das Array anpassen, wenn sich was ändert und die Funktions bleibt schön übersichtlich.
const MeineKonstanten = array[0..2] of record
Name: String; Wert: Irgendwas; end = ( (Name: 'MYFIRSTCONST '; Wert: ...), (Name: 'MYSECONDCONST '; Wert: ...), (Name: '...'; Wert: ...)); function StrToConst(const ConstName: string): DWORD; var i: Integer; begin for i := 0 to High(MeineKonstanten) do if AnsiSameText(ConstName, MeineKonstanten[i].Name) then begin Result := MeineKonstanten[i].Wert; exit; end; raise Exception.CreateFmt('"%s" ist not a valid constant name.', [ConstName]); end; Bei "Wert", im Array, kannst du dann entweder deine "echte" Konstante angeben oder direkt deren Inhalt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 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