Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

einem Formular programmatisch Steuerelemente zufügen

Begonnen von datekk, Juni 19, 2019, 11:26:16

⏪ vorheriges - nächstes ⏩

datekk

Servus :)

Ich möchte eine Daten-Import-Funktion meiner Anwendung zufügen. Aus einer Exceltabelle werden die Datensätze in ein Recordset übernommen. Dabei kann die Anzahl der Tabellenspalten variieren. Das Recordset soll dann in einem Endlosformular dargestellt werden. Soweit kein Problem. ABER:

Das Formular soll sich dynamisch nach der Anzahl der Spalten anpassen. Heißt, in der aktuellen Variante besteht das Formular aus einem Textfeld, dessen Bezeichnungsfeld und einem Kombifeld. Diese drei Felder sind mit dem Layout "Tabelle" (Menü Anordnen>Tabelle>Tabelle) angelegt. Bedeutet: Im Detailbereich ist das Textfeld (txt1), im Formularkopf das Bezeichnungsfeld (bez1) und darüber noch das Kombifeld (kombi1).

Ich möchte nun dieser "Tabelle" je nach Anzahl der Spalten (Fields) im Recordset weitere "Spalten" zufügen.

Händisch würde ich jetzt auf das Textfeld klicken, dann im Menü auf Anordnen>Rechts einfügen klicken und dann die Steuerelemente zufügen und auf die neuen, leeren "EmptyCell"s schieben.

Wie ist dies programmatisch möglich?

Folgender Ablauf müsste irgendwie umgesetzt werden:

- erstes Textfeld fokusieren
- Aktion "Rechts einfügen"
- Name der neuen EmptyCell neben dem Kombinationsfeld müsste ermittelt werden (zB "EmptyCell10")
- ein neues Kombifeld müsste in EmptyCell10 eingefügt werden
- ein neues Bezeichnungsfeld müsste in EmptyCell11 eingefügt werden
- ein neues Textfeld müsste in EmptyCell12 eingefügt werden

Danach müsste nun das neue Textfeld in EmptyCell12 fokusiert werden und wieder die Aktion "Rechts einfügen" ausgeführt werden usw.

Das Ganze so lange nach der Anzahl der Spalten im Recordset.

(Wie) ist das umsetzbar?

LG
datekk


vorhandene Textfeld fokusiert werden, dann müsste die Aktion "Rechts einfügen" ausgewählt werden,

Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

markusxy

Ein Weg:
Du erstellst genug Controls, die du dann zur Laufzeit je nach Bedarf per Code sichtbar stellst und positionierst.






ebs17

ZitatWie ist das umsetzbar?
Gegenfrage: Was hast Du (neues) gekonnt, wenn Du Deine Exceltabelle in einem Formular anschauen kannst? Eine Verarbeitung der neuen unbekannten Felder designst Du dann auch während der Laufzeit (mit ebensolchem Können)?

Wenn man wegen ein paar zusätzlicher Daten neu-/umprogrammieren muss, hat man etwas falsch gemacht.

ZitatEmptyCell10, EmptyCell11, EmptyCell12, EmptyCell156,  ...
Führe ein Unpivot aus und verwende somit in der DB-Tabelle DB-gemäße Strukturen.
Mit freundlichem Glück Auf!

Eberhard

datekk

Danke für Eure Antworten :)

@ebs17: mhhh. Ich weiß nicht, ob ich Deine Antwort so richtig verstehe...
Ein Import via Excel Tabelle bedingt ja immer die Sache, dass ich nicht weiß, welche Felder die Tabelle aufweist. Wohl aber weiß ich, welche Datenbankfelder ich habe. Ich muss also einer Excel Tabelle welche Name, Straße, Postleitzahl, Ort und Telefon hat die entsprechenden Datenbankfelder zuweisen. Also meine Anwendung muss wissen, welches Datenbankfeld dem Field(0) meines Recordsets (in diesem liegt die Excel) zugewiesen werden muss. Dementsprechend brauche ich erst eine Ansicht der Daten um dann die Zuweisung (z.B. mittels Kombi-Steuerelement) durchführen zu können.

Ich habe das Ganze jetzt erstmal so gelöst, dass die Mitarbeiter eine "Vorlagen-Excel" erhalten haben und diese dann entsprechend meiner Vorgaben füllen. Das klappt ganz prima. Die alte Sache wäre dann ein "nice to have".

Ich will da auch nix umprogrammieren oder so... es soll ja so programmiert sein, dass das Formular dynamische Felder bekommt, so wie ich es oben geschrieben habe.

@markus888: ein sehr guter Ansatz.... Lieben Dank... Das könnte schon die Lösung sein. Ich probiere das mal aus und melde mich hierzu demnächst wieder :)
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

ebs17

ZitatAlso meine Anwendung muss wissen, welches Datenbankfeld dem Field(0) meines Recordsets (in diesem liegt die Excel) zugewiesen werden muss.
Das würde ich Automatismus nennen (den zu bevorzugenden Normalfall). Da müssen aber Zuordnungen automatisch über Bezeichnungen oder Feldreihenfolgen ermittelbar sein, mit Riesenaufwand und hohem Fehlerpotential eventuell auch zusätzlich über Feldinhalte.

Da merkt man schon, dass eine standardisierte gleichbleibende Datenquelle der einfachste und fehlerunanfälligste Ansatz ist. Sicherstellen kann man das durch Vorlagen in Excel oder auch (kostenlose Runtimes erleichtern das) über Eingabe-Access-DB's.

ZitatWohl aber weiß ich, welche Datenbankfelder ich habe.
Mit der "fixierten" weil geplanten Datenbanktabelle fällt doch die gewünschte Dynamik in den Eimer. Das einzige was man bräuchte, wäre die Zuordnung von DB-Tabellen-Feld zu angebotener Excelspalte. Da die Feldanzahl der DB-Tabelle konstant(?) bleibt, braucht man da auch keine Formulardynamik während der Laufzeit, sondern eine feste Anzahl an Kombinationsfeldern zu Auswahl und Zuordnung macht es auch.

Im Ergebnis musst Du nur in der Datenherkunft der Kombinationsfelder die Spaltennamen der Exceltabelle zur Auswahl anbieten. Je nach dem, wie die Exceltabelle verfügbar gemacht wird, genügt da schon als Datenherkunftstyp die Feldliste.
Mit freundlichem Glück Auf!

Eberhard