PDA

Vollständige Version anzeigen : Feldnamen zur Laufzeit ändern


Michael
05.06.2012, 09:25
Hallo ich stehe vor folgender Aufgabe.
Ich habe zwei Tabelle:
Ueberschrift und Daten.
In der Tabelle Ueberschrift steht die Zuordnung zu den entsprechenden Felder in der Tabelle Daten.
Die Verknüpfung erfolgt über folgender Felder:
Tabelle --> Ueberschrift = ID_Chargen_Ueberschrift
Tabelle --> Daten = ID_Chargen_Ueberschrift

Ich möchte jetzt zur Laufzeit die Überschriften entsprechend austauschen.
Beispiel:
In der Tabelle Ueberschrift steht bei "ID_Chargen_Ueberschrift" in der Zuordnung "421" im Feld Var_01 = Lfd. Teilenummer pro Tag.

Wenn ich jetzt eine Abfrage ausführe, soll im Feld "Var_01" der Feldname "Lfd. Teilenummer pro Tag" stehe.

Im Anhang sind die beiden Tabellen enthalten.

Hoffe ich habe alles erklärt und verständlich ausgedrückt.
Michael

Atrus2711
05.06.2012, 09:31
Hi,

du könntest beide Tabelle per Recordset auslesen. Aus der einen ermittelst du über rstFields(x).Name den zu übersetzenden Feldnamen, aus dem anderen über rst.Fields(x).Value den gewünschten Feldnamen. Diese beiden Werte nutzt du, um eine Abfrage-SQL zusammenzusetzen, die jeden alten Feldnamen den neuen Feldnamen als Alias übergibt.

Schema:
SELECT
AlterFeldname1 AS NeuerFeldname1,
AlterFeldname2 AS NeuerFeldname2,
AlterFeldname3 AS NeuerFeldname3
FROM Quelltabelle
AlterFeldname und NeuerFeldname sind dabei die aus den Recordsets ausgelesenen Werte.

Nebenbei gesagt: das Datenmodell, das sowas erfordert, ist grottig.

Michael
05.06.2012, 09:58
Danke für deine Antwort. Aber das verstehe ich nicht so recht.
Kannst du mir das vielleicht etwas näher erklären.

mfg,
Michael

Anne Berg
05.06.2012, 10:02
Hallo,

wen interessiert der Feldname in einer Abfrage, du zeigst die Daten doch sicherlich in einem Formular an, oder?!

Michael
05.06.2012, 14:48
Hallo, ich zeige die Daten nur in einem Ecxeldownload an. In einem Formular oder Bericht ..... oder, oder wäre das kein Problem.

Anne Berg
05.06.2012, 15:34
Hallo,

du kannst aber pro Abfrage nur eine Überschrift erzeugen, musst also die Datenauszüge getrennt nach "ID_Chargen_Ueberschrift" ausführen - ist dir das klar?

Da du in einer Abfrage aus Datensätzen keine Feldbezeichnungen herleiten kannst, musst du den SQL-Code jeweils dynamisch per VBA zusammensetzen.
Hier mal ein Beispiel:Sub CreateSQL(pID As Long)
Dim rs As Recordset, fld As Field, i As Integer
Dim strSQL As String, strFeldListe As String
Set rs = CurrentDb.OpenRecordset("Select * From UEberschrift Where ID_Chargen_Ueberschrift = '" & pID & "'")
Do While Not rs.EOF
For Each fld In rs.Fields
If fld.Name Like "var*" And Not IsNull(fld.Value) Then
strFeldListe = strFeldListe & ", " & fld.Name & " AS [" & fld.Value & "]"
End If
Next fld
rs.MoveNext
Loop
strSQL = "Select ID, ID_Chargen_Ueberschrift, Sachnummer, Customer, MGRNR, Daten_TimeStamp, Cre_TimeStamp"
strSQL = strSQL & strFeldListe & " From Daten Where ID_Chargen_Ueberschrift = '" & pID & "'"
Debug.Print strSQL
CurrentDb.QueryDefs("expQuery").SQL = strSQL
DoCmd.TransferSpreadsheet acExport, , "expQuery", "c:\temp\export.xls", True
End Sub
Dabei wird vorausgesetzt, dass es eine Abfrage namens "expQuery" gibt, deren Code vor dem Export immer wieder neu eingestellt wird.
Wird der Code nicht in der Überschriftentabelle gefunden, so werden die Var-Felder ausgelassen. Ob das Sinn macht oder ob das abgefangen werden muss, darfst du entscheiden. ;)

Michael
05.06.2012, 18:06
Hallo Anne ich habe das jetzt so übernommen und in ein Formular eingebaut.
Es kommt je doch zu einer Fehlermeldung "Laufzeitfehler 3126".
Unzulässiges Einklammern des Namens 'Lfd. Teilenummer pro Tag'

Ich blick das nicht....
Michael

Anne Berg
05.06.2012, 18:19
Hallo Michael,

die Fehlermeldung ist irreführend, die "Einklammerung" der Feldnamen ist wegen der Leerstellen nämlich zwingend erforderlich,
aber ein Punkt wie in "Lfd. Teilenummer" ist da offensichtlich nicht erlaubt, darauf musst du also verzichten.