Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Variable dynamisch übergeben oder so... (https://www.delphipraxis.net/148267-variable-dynamisch-uebergeben-oder-so.html)

Ducksoul 26. Feb 2010 09:49


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:
GetFieldsToChange(cm, slTStruct, slFields);
cm ist hierbei die Variable für den CodeMaster.
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

himitsu 26. Feb 2010 09:53

Re: Variable dynamisch übergeben oder so...
 
Zitat:

Zitat von Ducksoul
Und wie sag ich Delphi jetzt, dass das eigentlich der Name der Konstante ist, welche ich übergeben möchte und kein String?

Garnicht,

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*

Ducksoul 26. Feb 2010 10:03

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 :(

DeddyH 26. Feb 2010 10:04

Re: Variable dynamisch übergeben oder so...
 
Oder eine entsprechende Funktion schreiben in der Art:
Delphi-Quellcode:
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;
Aber schön ist was anderes :roll:

[edit] Roter Kasten, hallo *klopf* *klopf* [/edit]

Ducksoul 26. Feb 2010 10:16

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ß

DeddyH 26. Feb 2010 10:18

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]

sirius 26. Feb 2010 10:32

Re: Variable dynamisch übergeben oder so...
 
Sind die Tabellen fest? Wie sehen diese aus? Evtl. hilft dir eine Ressource weiter ähnlich wie hier.

Ducksoul 26. Feb 2010 13:01

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:

himitsu 26. Feb 2010 13:11

Re: Variable dynamisch übergeben oder so...
 
Ich mach es meistens etwa so, wenn ich etwas Derartiges benötige.
Delphi-Quellcode:
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;
So muß man dann nur noch das Array anpassen, wenn sich was ändert und die Funktions bleibt schön übersichtlich.

Bei "Wert", im Array, kannst du dann entweder deine "echte" Konstante angeben oder direkt deren Inhalt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 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