AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Variablenname als String auslesen?
Thema durchsuchen
Ansicht
Themen-Optionen

Variablenname als String auslesen?

Ein Thema von ernschd · begonnen am 14. Okt 2009 · letzter Beitrag vom 14. Okt 2009
Antwort Antwort
ernschd

Registriert seit: 16. Jan 2008
165 Beiträge
 
Delphi XE8 Professional
 
#1

Variablenname als String auslesen?

  Alt 14. Okt 2009, 11:45
Problem:

Ich habe eine MySQL-Datenbank, die ich mit Mysql direct von Cristian Nicola anspreche.
Zuerst habe ich die "bequeme" Variante mit FieldValueByName('string') zum Lesen des Feldinhaltes verwendet. Dies ist unter anderem auch sinnvoll, wenn sich die Struktur der Datenbank ändert, z.B. durch hinzufügen eines Feldes.

Dann habe ich gemerkt, dass FieldValue(integer) schneller ist (in meinem Fall um 1 Sekunde).
Dies ist auch nachvollziehbar, da FieldValueByName den Datensatz in einer Schleife durchgeht, bis es den passenden Eintrag gefunden hat.

Aus diesem Grunde habe ich mir überlegt, zuerst die Feldnamen der Datenbank auszulesen.

Nun kann ich die entsprechenden Feldnamen Integervariablen zuordnen, mit welchen ich dann FieldValue bequem aufrufen kann.
Kurzes Bsp:
Delphi-Quellcode:
var i, KdNr : Integer;
    test : String;
begin
    // Feldnamen lesen
    FResult := FMysql.query('SHOW COLUMNS FROM `Tabelle`;', true, ex);
    for i := 0 to FResult.RowsCount-1 do begin
        if FResult.FieldValue(0) = 'KdNrthen KdNr:= i; // KdNr ist jetzt z.B. 3
    end;

    FResult := FMysql.query('SELECT * FROM `Tabelle`;', true, ex);
    test := FResult.FieldValue(KdNr); // test enthält jetzt den Inhalt des Feldes Kundennummer

end;
Ich hoffe, mein Vorhaben ist bis hierher verständlich.
Nun suche ich jedoch noch nach einer schöneren Möglichkeit zur Zuordnung der Integervariablen zu den Feldnamen.
Gibt es vielleicht die Möglichkeit, den Namen einer Variable als String auszulesen? Vielleicht
if FResult.FieldValue(0) = KdNr.Name then KdNr:= i; Als Programmierer bin ich ja naturgemäß faul und würde gerne nur die Variablen mit den Feldnamen als Bezeichnung deklarieren.
Wahrscheinlich hat sich mittlerweile mein Hirn schon verknotet, darum sehe ich bestimmt den Wald vor lauter Bäumen nicht mehr.

Andere/bessere Möglichkeiten? Arrays, Records o.ä.?

Bin für jeden Vorschlag dankbar.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Variablenname als String auslesen?

  Alt 14. Okt 2009, 11:50
Zitat:
ch habe eine MySQL-Datenbank,..
Rat mal, welche Sparte da die passende wäre?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#3

Re: Variablenname als String auslesen?

  Alt 14. Okt 2009, 11:54
Nein, Variablennamen kann es garnicht als String geben, da der Kompiler nur die Speicheradresse einkompiliert ... die Namen sind also NUR im Qelltext, für uns Programmierer sichtbar.


Wenn du beim Programmieren die Strucktur schon kennst, dann kannst du doch für jedes Feld eine Variable anlegen

> entweder als Einzelvariablen oder ein einem Record, bzw. Object


Ansonsten gäbe es noch assoziative Arrays bzw. Listen, aber da hast du dann wieder dein altes Problem zurück, denn da muß ja auch wieder der Name in einer Liste gesucht werden.


[add]
Zitat:
Rat mal, welche Sparte da die passende wäre?
nja, aber hier geht es doch mehr um das Speicherproblem von Variablen
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

Re: Variablenname als String auslesen?

  Alt 14. Okt 2009, 12:25
Solang die Abfrage nicht dynamisch ist - würd ich die Felder persistent machen, dann kannst du direkt darauf zugreifen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Variablenname als String auslesen?

  Alt 14. Okt 2009, 12:40
Etwas-OT:
Zitat von ernschd:
Dann habe ich gemerkt, dass FieldValue(integer) schneller ist (in meinem Fall um 1 Sekunde).
Dies ist auch nachvollziehbar, da FieldValueByName den Datensatz in einer Schleife durchgeht, bis es den passenden Eintrag gefunden hat.
Ist das echt normal bei MySQL? Das kann doch nicht wahr sein. Oder liegt das an den verwendeten Komponenten?

Sherlock
Oliver
  Mit Zitat antworten Zitat
ernschd

Registriert seit: 16. Jan 2008
165 Beiträge
 
Delphi XE8 Professional
 
#6

Re: Variablenname als String auslesen?

  Alt 14. Okt 2009, 12:43
Das hat nichts mit MySQL zu tun, sondern nur mit den Prozeduren von Mysql direct.
Man könnte also sagen, es betrifft nur die Komponenten.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#7

Re: Variablenname als String auslesen?

  Alt 14. Okt 2009, 12:48
PS: du kannst auch die Felder direkt bei der Anfrage vorgeben

SELECT `Feld1`, `Feld2`, `Feld3` FROM `Tabelle` mit mysql_fetch_assoc wird dann standardmäßig ein assoziatives Array angelegt, wo alle Werte in der angegebenen Reihenfolge doppelt drinnen sind

einmal mit Namen und dann nochmal je mit Index
Code:
$Result = mysql_fetch_assoc(...);

also $Result['Feld2'] == $Result[1]
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
ernschd

Registriert seit: 16. Jan 2008
165 Beiträge
 
Delphi XE8 Professional
 
#8

Re: Variablenname als String auslesen?

  Alt 14. Okt 2009, 13:15
Zuerst mal danke.

Anscheinend ist es leider nicht möglich, ohne einen größeren Aufwand zu betreiben.

Hier habe ich einen Artikel über die Lösung meines Problems in VB6 gefunden:
Variable in VB 6.0 verwenden deren Namen als Zeichenketten bekannt sind
Hierzu wird eine Klasse verwenden, um Zugriff auf die benötigten Eigenschaften zu erhalten.

@Stevie: Kannst Du mir das bitte genauer erklären, was Du damit meinst? Ich kann doch auf die Felder direkt zugreifen, allerdings mit geringerer Performance als über den Feldindex.
@himitsu: mysql_fetch_assoc kann ich mit Mysql direct leider nicht verwenden.
@Luckie: ich finde auch, dass mein Problem ein Grundsätzliches ist und im Prinzip eher nichts mit Datenbanken zu tun hat.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#9

Re: Variablenname als String auslesen?

  Alt 14. Okt 2009, 13:21
Zitat von ernschd:
@himitsu: mysql_fetch_assoc kann ich mit Mysql direct leider nicht verwenden.
gibt es da denn nicht eine entsprechende Funktion ähnlicher Eigenschafft?

[add]
also versuch es doch mal mit einer "direkten" Abfrage wie in meinem Beitrag #7 erwähnt

und greif dann via FResult.FieldValue(idx) auf die Felder zu ... diese sollten dann doch in der Reihenfolge wie in deiner Abfrage drinstehn.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
ernschd

Registriert seit: 16. Jan 2008
165 Beiträge
 
Delphi XE8 Professional
 
#10

Re: Variablenname als String auslesen?

  Alt 14. Okt 2009, 14:08
Leider gibt es nichts entsprechendes wie mysql_fetch_assoc.

Die Idee mit der direkten Abfrage ist nicht schlecht, aber ich mache u.a. auch dynamische Abfragen (mittels einer Suchmaske), von daher fällt das auch flach.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 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