Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi D7 Tabellenfeld per Variable ansprechen (https://www.delphipraxis.net/187531-d7-tabellenfeld-per-variable-ansprechen.html)

beanbear6 7. Dez 2015 04:44

Datenbank: dbase • Version: 5 • Zugriff über: Table

D7 Tabellenfeld per Variable ansprechen
 
Hallo zusammen,
ich such ne Möglichkeit, Datenbankfelder per Variable anzusprechen. Beispiel: Ich hab die Felder Feld1 bis Feld 12. Nun möchte ich das Feld mit dem Befehl: Table1.FieldByName('Feld'+Variable).AsInteger ansprechen. Variable ist dabei die Zahl 1 bis 12. Gibt es da ne Möglichkeit? Ich hab schon gegoogled aber ich finde leider nichts darüber... Bitte Euch um Hilfe.
Gruß beanbear

frankyboy1974 7. Dez 2015 04:58

AW: D7 Tabellenfeld per Variable ansprechen
 
hallo,

ich bin mir nicht sicher, ob dass das Problem ist, aber eigentlich sollte doch wohl

Delphi-Quellcode:
for i:= 1 to 12 do begin
  Table1.FieldByName('Feld'+inttostr(i)).AsInteger:=??;
end;
funktionieren.

mfg

Dejan Vu 7. Dez 2015 06:29

AW: D7 Tabellenfeld per Variable ansprechen
 
Viel Spaß, wenn Du den Feldnamen mal aussagekräftigere Namen spendieren willst. Pack den Zugriff auf die Felder per Index wenigstens in eine Funktion, sodaß etwaige Änderungen (an den Feldnamen) im Code nur an einer stelle vorgenommen bzw. nachgezogen werden müssen.

frankyboy1974 7. Dez 2015 07:31

AW: D7 Tabellenfeld per Variable ansprechen
 
hallo,

ich hab mal für eine öffentlich-rechtliche Versicherung programmiert, die hatten die Tabellen durchnummeriert:lol:. Am Ende ist ja nunmal der Weg das Ziel, und wenn es etwas länger dauert, hat dass eben auch gewisse Vorteile.:roteyes:

mfg

p80286 7. Dez 2015 07:53

AW: D7 Tabellenfeld per Variable ansprechen
 
Es soll ja Umgebungen geben, in denen Namen wie z.B. Messung1,Messung2..Messung12 durchaus descriptiv und allgemeinverständlich sind. Trotzdem werde ich das Gefühl nicht los, daß hier die z.B. mit "Feld2" die zufälliger weise an zweiter Stelle in der Darstellung stehende Tabellenspalte angesprochen werden soll. Ein solches Vorgehen ist allerdings sehr kurzsichtig.

Falls unbedingt der Zugriff über Feld1..FeldN möglich sein soll, würde ich "Übersetzungstabellen" nutzen, also etwa so:
Code:
'SQLTEXT:='select '+Feldname[1]+Feldname[2]...
Gruß
K-H

baumina 7. Dez 2015 07:58

AW: D7 Tabellenfeld per Variable ansprechen
 
Man könnte evtl. auch statt über den Namen über
Delphi-Quellcode:
Fields[i]
gehen.

Perlsau 7. Dez 2015 08:54

AW: D7 Tabellenfeld per Variable ansprechen
 
Es gibt durchaus Fälle, in denen diese Durchnumerierung der Feldbezeichner bereits beim Entwurf des Datenbank-Designs Sinn macht. So speichere ich beispielsweise die Breite von Grid-Spalten in einer solchen Struktur. Das Setzen der Spaltenbreiten wie auch das Zurückschreiben in die DB kann ich dann ganz einfach in einer Schleife absolvieren:
Delphi-Quellcode:
Var
  i,z : Integer;
  Aus : String;
begin
  ...
  z := DbGrid_LogAccess.Columns.Count;
  If z > 0 Then
  For i := 0 To z-1 Do
  Begin
    Aus := 'LOG_' + GLD.Plus_String(IntToStr(i),GLD.N,2);
    DbGrid_LogAccess.Columns[i].Width := DatMod.Qset_BTab.FieldByName(Aus).AsInteger; // beim Einlesen aus der DB
    // DatMod.Qset_BTab.FieldByName(Aus).AsInteger := DbGrid_LogAccess.Columns[i].Width; // beim Speichern in die DB (mit Shift-Alt-R gedreht)
  End;
  ...
Bei sehr vielen Spalten, sagen wir mal so ab 30 aufwärts, ist es mir dann aber doch zu aufwendig, 30 Felder in der DB anzulegen. Hier verwende ich dann nur ein VarChar-Feld, in das die Spaltenbreiten des Grids durch Semikolon getrennt eingetragen werden. Eine Zuweisung an die DelimitedText-Eigenschaft einer Stringliste trennt mir diese Werte wieder sauber auf. Aber das ist dann ein anderes Thema ...

jobo 7. Dez 2015 11:45

AW: D7 Tabellenfeld per Variable ansprechen
 
Ich finde, das ist keine gutes Beispiel für durchnummerierte Feldnamen. Es skaliert überhaupt nicht. Die Spalteneigenschaften kann man besser per Liste verwalten, die beliebig lang sein kann. Dann hat man die Chance auf einen universellen Mechanismus.
Ich bin mir aber auch nicht sicher, ob es überhaupt ein gutes Beispiel dafür gibt.
Ich selbst verwende eine Tabelle mit durchnummerierten Feldnamen nur in einem Anwendungsfall manchmal für adhoc Datenimporte unbekannten Formats. Aber auch das ist nichts, was ich unbdeingt empfehlen würde.

Perlsau 7. Dez 2015 12:10

AW: D7 Tabellenfeld per Variable ansprechen
 
  • Wo habe ich behauptet, ein gutes Beispiel liefern zu wollen?
  • Wie ist denn "ein gutes Beispiel" definiert?
  • Was verstehst du unter "es skaliert überhaupt nicht"?
  • Wieso eine Liste und wie lege ich eine Liste in einer Datenbank an?
  • Und wieso muß ich meine Spaltenbreiten mit einem universellen Mechanismus verwalten?
  • Die Feldnamen korresponieren mit dem jeweiligen Spalten-Index. Was soll daran verkehrt sein?
  • Was hat das alles mit dem eigentlichen Thema zu tun?

p80286 7. Dez 2015 12:48

AW: D7 Tabellenfeld per Variable ansprechen
 
Zitat:

Zitat von Perlsau (Beitrag 1323651)
  • ...
  • Was hat das alles mit dem eigentlichen Thema zu tun?

Ich denke, dies soll ein Hinweis sein, daß eine Feld/Spaltenbenennung a'la "Feld1","Feld2" etc. nicht so optimal ist. Und daß der TE sich besser davon Lösen sollte.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 Uhr.
Seite 1 von 2  1 2      

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