[Gelöst]Fieldbyname

15. September 2010 14:35

Hallo,

wie kann ich ein Feld über den Namen ansprechen ?


In Delphi geht das mit fieldbyname.

Der FeldName liegt als Text vor.


gruss
Jörg
Zuletzt geändert von Jörg Nissen am 16. September 2010 12:35, insgesamt 1-mal geändert.

Re: Fieldbyname

15. September 2010 14:43

Ähm du sprichst bei Records das Feld doch immer über den Namen an?
z.B. für das Feld Name eines Debitoren:
Code:
Debitor."Name" := NeuerDebitorenname;

Re: Fieldbyname

15. September 2010 14:58

Hallo Natalie,

:-?



Delphi
Code:
FeldName = 'MeinFeld'
Table.fieldbyname(FeldName).asString = 'XYZ'


C/AL
?????

Re: Fieldbyname

15. September 2010 15:09

Jörg Nissen hat geschrieben:Delphi
Code:
FeldName = 'MeinFeld'
Table.fieldbyname(FeldName).asString = 'XYZ'


C/AL
?????

Wie oben:
Code:
Table."MeinFeld" := 'XYZ';

Was versuchst du überhaupt?

Re: Fieldbyname

15. September 2010 15:45

Bist du direkt auf dem jeweiligen DataItem reicht sogar nur:

Code:
"MeinFeld" := 'XYZ';


Der Zugriff über den Feldnamen ist im Standard von Navision die bevorzugte Variante.

Schau einfach in einen beliebigen Report im OnAfterGetRecord Trigger von einem beliebigen DataItem.
Dort findest du selten etwas anderes. :wink:

mfg,
winfy

Re: Fieldbyname

15. September 2010 16:02

Ich glaube er meint eher RecordRefs und FieldRefs als Records und Fields.

Re: Fieldbyname

15. September 2010 23:20

Hallo,
habe mein Problem/Aufgabe anders gelöst.

Trotzdem würde mich eine Lösung für obiges interresieren.

Ich habe es anscheinend noch nicht so erklären können das es klar ist.

Neuer Versuch

In einer Textdatei stehen Feldnamen und Werte dazu

Name1, Jörg
city, Musterort
street, Musterstrasse

Die Zieltabelle hat die gleichen Feldnamen ( Name1, city, street )

Nun lese ich die Werte in Variablen ein

Feldname = 'Name1'
Feldwert = 'Jörg'

Klar kann ich jetzt mit
Code:
 If FeldName = 'Name1' Then
    table."Name1" = Feldwert



die Zuweisung machen, aber geht das nicht eleganter ?


in Pascal würde ich das so machen
Code:
table.fieldbyname(Feldname).Astring := Feldwert


Ist nur ein Beispiel um meine Fragestellung zu erläutern.

Gruss Jörg

Re: Fieldbyname

16. September 2010 03:21

Jörg Nissen hat geschrieben:Hallo,
habe mein Problem/Aufgabe anders gelöst.

Trotzdem würde mich eine Lösung für obiges interresieren.

Ich habe es anscheinend noch nicht so erklären können das es klar ist.

Neuer Versuch

In einer Textdatei stehen Feldnamen und Werte dazu

Name1, Jörg
city, Musterort
street, Musterstrasse

Die Zieltabelle hat die gleichen Feldnamen ( Name1, city, street )

Nun lese ich die Werte in Variablen ein

Feldname = 'Name1'
Feldwert = 'Jörg'

Klar kann ich jetzt mit
Code:
 If FeldName = 'Name1' Then
    table."Name1" = Feldwert



die Zuweisung machen, aber geht das nicht eleganter ?


in Pascal würde ich das so machen
Code:
table.fieldbyname(Feldname).Astring := Feldwert


Ist nur ein Beispiel um meine Fragestellung zu erläutern.

Gruss Jörg


Wenn die Textdatei vorhanden ist, dann einfach einen Dataport stricken und Feldname weglassen, nur die Werte in der TXT-Datei drin lassen.
Dann den Dataport importieren lassen z.B. in eine Zwischentabelle, die die gleiche Struktur wie die Endtabelle hat. Und dann die Datenmanipulation mit C/AL in der Zwischentabelle durchführen und am Ende mit TRANSFERFIELDS von Zwischen- zur Endtabelle schaufeln.

Re: Fieldbyname

16. September 2010 08:01

Hallo,

danke für die Antwort. Das is mir bekannt. Das Beispiel diente nur um zu verdeutlichen welche funktionalität ich suchte. Benötigen tat ich Sie woanders für.
Habe ich aber wie gesagt anders gelöst, hätte mich nur Interresiert ob sowas geht.

Gruss
Jörg

Re: Fieldbyname

16. September 2010 08:17

Ich hab eine Idee ;)

Schaut so aus: Du entwirfst eine Funktion welche bei Übergeben eines RecordRefs und des Feldnamens (als String) in der Fieldtabelle nach der entsprechenden Feld-ID sucht und einem FieldRef zuordnet. Die Funktion gibt dann den FieldRef zurück.

Gruß,
Sebastian

Re: Fieldbyname

16. September 2010 12:35

Hallo Sebastian,

ok, so könne das gehen.
Vielen Dank
Jörg