Hallo Freunde,
Ich habe ein Hauptformular und ein Unterformular als Endlos, in dem man Ersatzteile eintragen kann. Nun habe ich ein zweites Unterformular als Endlos eingebaut, in dem eine vorgefertigte Ersatzeilliste eingepflegt ist, die möchte ich nun per Button an das erste Unterformular übergeben. Der Aufbau beider UF sind gleich.
Der Sinn: Im ersten UF werden alle Teile eingetragen, die zusätzlich benötigt werden und in dem "neuen" UF sind schon die Ersatzteile drin, die bei jeder Reparatur benötigt werden. Für meine Zwecke so gewollt. Könnt Ihr mir bitte helfen.
Vielen Dank schonmal ;D
Mit einer Anfügeabfrage (INSERT INTO ...) der DS in UFo2 in die DS-Herkunft von UFo1.
Hallo und vielen Dank für die rasche Antwort.
Deine Lösung mag der richtige Weg zu sein aber in meinem Fall geht das nicht so. Die Daten UF2 müssen erst in das UF1 kopiert werden. Wenn dann die Ersatzteile aus UF1 bestellt werden (bei Button), dann werden diese Daten auch erst in die Tabelle gespeichert und das Formular UF1 wird wieder leer sein, die Daten aus UF2 bleiben immer als Vorlage erhalten. Die Bestellten Daten sind zugehörig mit der jeweiligen ID des zugrundeliegenden Objekt. Wenn ich die "Vorlage Ersatzteilliste" in die Tabelle schieben würde kann ich nicht zugehörig zu der jeweiligen ID speichern.
Ich hoffe das Ihr mich versteht :D
Hallo,
warum soll das nicht gehen? Die Insert-Abfrage kann (muss!) den Primärschlüsselwert des HFO-DS zusätzlich zu den restlichen "Ersatzteil"-Feldern erhalten und an das Fremdschlüsselfeld übergeben.
Ausführen im HFO:
Dim strSQL as String
If not Isnull(Me!BestID) Then
strSQL="Insert into tbl_BestellDetails (BestID_f, ErsatzTeilID_f, Feld2, Feld3) Select " & Me!BestID & ", ErsatzTeilID, Feld2, Feld3 From tbl_Ersatzteile"
Currentdb.Execute strSQL,dbFailOnError
Me.Refresh ' Me.Requery
End If
Nach dem Insert muss ein Requery (evtl. reicht ein Refresh) auf das HFO abgesetzt werden.
Zitat
dann werden diese Daten auch erst in die Tabelle gespeichert
Wie machst Du das? Handelt es sich um ungebundene Formulare?
Guten Morgen.
Da warst du ein paar Minuten schneller, ich wollte mich gerade für den Quatsch den ich geschrieben habe entschuldigen ;D ;D. Klar werden die Daten, die ich im UF1 eingetragen habe ja in der Tabelle eingetragen, in die gleiche Tabelle muss ich auch die neuen Teile aus UF2 schieben.
Sorry nochmal.
Ich werde es heute Vormittag umsetzen.
Danke nochmal
Hilfe.... Probleme ....
Ich bin jetzt schon seit einigen Tagen daran aber ich bekomme die Insert Abfrage nicht hin. Bevor ich das jetzt unverständlich erkläre habe ich kurz eine kleine DB mit meinem Problem erstellt.
Unten kann man mit der Navigationsschaltfläche 3 verschiedene Geräte (Fahrzeuge ) auswählen, zu jedem kann man Ersatzteile bestellen und beim betätigen der Schaltfläche "Set anzeigen" kommt das zugehörige Set zu dem jeweils ausgewähltem Fabrikat (Golf, Fabia,Mondeo). In diesem UF möchte ich mit der Schaltfläche " Set zur Bestellung (links) hinzufügen" dass diese voreingestellten Ersatzteile in das linke Formular geschoben werden( in die Tabelle: BestelltesMaterial) und dann mit Refresh zum anzeigen bringen. Das ist mein Problem.... den Rest und Sinnigkeit dieser Methode ist schon für meine Zwecke passend.
Hallo,
das Datenmodell bedarf der gründlichen Überarbeitung.
In der Tabelle "Materialset" ist nur der Fremdschlüssel zum Fabrikat (ist das nicht eher das Modell) zu speichern, der Hersteller ist hier überflüssig.
Bei den Materialdaten ist nur das Fabrikat notwendig, der Hersteller kann auch entfallen.
Du solltest auch vollständige Beziehungen anlegen. Eine Datenbank ohne Beziehungen ist ein Datenhaufen, aber keine Datenbank. Und Texte sind als Primärschlüssel ungeeignet, besser iste s auch hier einen Autowert zu verwenden und die Gerätenummer zusätzlich zu speichern.
Die DB halte ich in dieser Form für ungeeignet. Hier musst Du noch mal ran.
Anbei mal ein Bild der Beziehungen wie das aussehen könnte.
Hallo Klaus, danke für die rasche Antwort.
Wie gesagt handelt es sich mit der Angehangenen "DB" nur zum veranschaulichen, ich dachte es ist besser "erklärt" wenn man was sieht was ich möchte. Die "MaterialSet" Liste wird nicht wirklich wachsen, da für meine Anwendung nur 3-5 kleine Listen (jeweils max 10 Artikel) angelegt werden. Na, dann lasse ich es einfach und wir müssen halt die paar Nummern einzeln eingeben.
Vielen Dank für deine Antwort, bis dann mal.... werde mich bestimmt wieder in der nächsten Zeit bei Euch melden. ;D
Hallo,
schade für meine Arbeit, war halt für die Katz. :(
Nein..... Nochmals Vielen Dank dafür. Ich werde mir das zu Herzen nehmen, versprochen.
Wenn eine Bestellung nicht durch betriebsinterne Regelungen abgedeckt ist, wird ein Bestellvorgang samt Details normalerweise einen viel weiteren Umfang annehmen, als sie Klaus hier grob dargestellt hat. Die Details würden aus dem Pool-Materialset für ein Modell mit Mengenangabe gespeist und nicht frei zusammengewürfelt werden können. Dabei wären weder Preise noch Liefertermine berücksichtigt.
Aber vielleicht ist meine Vorstellung von Bestellung auch etwas realitätsfern. :)
Nein, Ihr habt ja alle recht.
Das Formular "Bestellungen" dient NUR als Bestellvorlage, die eine andere Abteilung bekommt. Die Artikel werden Betriebsbedingt ausgeklammert (Teile auf Lager, Teile bei Hersteller X und Teile bei Hersteller Y bestellt bzw besorgt). Es werden keine Preise und keine Liefertermine oder andere Details benötigt. Meine "DB", die nicht so ist wie eine Perfekte DB sein soll, ist für unsere Zwecke ausreichend. Ich / wir nutzen diese um uns eine Erleichterung zu schaffen. Leider "Bastle" ich nur und schuster mir die "DB" so zurecht dass sie läuft. Klar kann man das besser machen aber was soll ich sagen, das kann ich nicht. Bin aber froh dass es solche Menschen gibt, wie Ihr, die das können.
Das ist kein Meckern !!! Ehrlich nicht !!! Finde es super dass es euch gibt und Ihr habt mir sehr sehr viel geholfen und dafür bin ich auch dankbar und verneige mich vor Euch.
Alles Cool 8) ;D
@Iceman,
die perfekte DB wird es wohl kaum geben. Und ein Insider weiß immer besten, welche Objekte und Vorgänge für seine Zwecke in der DB gespeichert werden sollen und müssen. D. h. konkret, wenn die andere Abteilung mit Deinen Angaben zur Bestellung zufriedenstellend arbeiten kann, liegt auch keine Not vor, ein komplettes Bestellsystem zu integrieren.
Auch ich habe vor weit mehr als 20 Jahren angefangen mit Datenbanken (manchmal auch etwas planlos) zu basteln, die damals ihren Zweck erfüllt haben. Vieles davon würde ich heutzutage anders gestalten - aber neue Erkenntnis erwirbt man sich im Laufe der Zeit, diedann bei anderen neuen Projekten mit einfließen. Und schließlich soll ja noch kein Meister vom Himmel gefallen sein.
Dumm und richtig ärgerlich wird's aber dann, wenn man viel Zeit und Energie in ein Projekt investiert hat und erst viel zu spät bemerkt, dass das Tabellengerüst wackelig ist und geändert werden muss. Denn dann sind vermutlich die meisten Formulare und Berichte kaum mehr zu gebrauchen. Deshalb weisen ja auch Klaus, Harald, Franz, Ekkehard und viele andere Helfer hier Forum lieber einmal mehr auf ein merkwürdig erscheinendes Datenmodell hin, als den Entwickler in eine Grube fallen zu lassen. Du würdest Dich bestimmt auch nicht gern unter einer Hebebühne bewegen, wenn Du nicht von deren Stabilität uberzeugt bist.
In diesem Sinne noch ein schönes Wochenende.
Hallo zusammen, das habe ich auch so verstanden und sollte auch kein Vorwurf sein und bin auch echt froh das auch darauf hingewiesen wird, leider läuft das "Programm" schon länger und ich habe nicht wirklich die Möglichkeit dies alles nächträglich zu ändern. Wünsche Euch noch einen guten Wochenstart.
Gruß Udo
Hallo zusammen.
Wie kann ich aus einem "Ufo2" ein anderes "Ufo1" setFocus stellen.
Aufbau:
Hauptformular: "RegisterformularTechnik" darin ein Registerformular "RegisterStr0" in einem Reiter liegen beide Ufo1 "FormularMaterialeingabe2" und ein zweites Ufo2 "MaterialSet". Wenn ich die Daten von Ufo2 in Ufo1 schieben möchte, muss ich bevor ich den Recordset laufen lasse das Ufo1 auf setFocus bringen. Meine Überlegung war
Private Sub AnUfo1Senden_Click()
Me!Forms!RegisterformularTechnik!Forms!RegisterStr0!Forms!FormularMaterialeingabe2.SetFocus '<----- kommt aber nicht zum Focus
Dim rs As DAO.Recordset
Set rs = Me.Parent!FormularMaterialeingabe2.Form.Recordset.Clone()
With Me.Recordset.Clone()
Do Until .EOF
rs.AddNew
rs![GeräteNummer] = Me.Parent.[GeräteNummer]
rs!Artikel = !Artikel
rs!Anzahl = !Anzahl
rs!Bezeichnung = !Bezeichnung
rs!Hersteller = !Hersteller
rs.Update
.MoveNext
Loop
End With
Me.Parent.FormularMaterialeingabe2.Form.Requery
End Sub
Hallo,
wozu brauchst Du das SetFocus?
Wenn, dann so:
Me!RegisterformularTechnik!FormularMaterialeingabe2.SetFocus
rot: Name des UFO-Steuerelementes, das das Formular "FormularMaterialeingabe2" anzeigt.
Hallo Franz.
Ich habe bei http://www.donkarl.com?FAQ4.2
Um den Fokus auf ein Element im Ufo setzen zu können, oder z.B. die Methode GoToRecord im Ufo anwenden zu können, ist es notwendig, vorher den Fokus auf das Ufo-Steuerelement im Hauptformular zu setzen
gelesen.
Auf welches Steuerelement muss ich denn den Focus setzen ? Ich dachte mir das es reicht das Formular nur auf SetFocus zu setzen um die Daten vom Ufo2 in Ufo1 zu schreiben
Private Sub AnUfo1Senden_Click()
befindet sich im Ufo2
Klar steht das in der Beschreibung von donkarl aber ich bekomme das nicht hin. Ich hatte zum testen ein Textfeld angelegt und versucht das zum Focus zu bringen.
Mit Me.Parent.SetFocuswird der Fokus auf das Hauptformular gelegt.
Mit Me.Parent.NameDesZielUFO.SetFocuswird das Ziel-Unterformularsteuerelement fokussiert.
Mit Me.Parent.NameDesZielUFO.Form.NameDesSteuerelements.SetFocuswird das Steuerelement im Zielunterformular fokussiert.
Zusammengefasst: With Me.Parent
.SetFocus
.NameDesZielUFO.SetFocus
.NameDesZielUFO.Form.NameDesSteuerelements.SetFocus
End With
Hallo Udo,
Vielleicht hilft dir dieser Tipp.
Benenne das U-Formular mit dem Prefix "uf_FormName" und das
U-Steuerelement auf dem HFo mit dem Prefix "uc_FormName".
Dann kommst du da nicht mit durcheinander und weisst was zusammengehört.
gruss ekkehard
Hallo zusammen.
Vielen Dank für den Code und die gute Erklärung und danke für den Hinweis das Formular umzubenennen. Das Umbenennen werde ich noch machen. Den Code habe ich eingebaut und den Focus auf das Formular bekommen.
Der Recordset läuft aber nicht durch, habe eine MsgBox nach und nach eingesetzt um zu sehen an welcher Stelle er hängen bleibt.
Private Sub SetSenden_Click()
With Me.Parent
.SetFocus
.FormularMaterialeingabe2.SetFocus
'.FormularMaterialeingabe2.Form.Anzahl2.SetFocus <---- Anzahl2 war zum testen ob der Focus in Ufo2 kommt.
End With
Dim rs As DAO.Recordset
Set rs = Me.Parent.FormularMaterialeingabe2.Form.Recordset.Clone()
With Me.Recordset.Clone()
Do Until .EOF
rs.AddNew
rs![GeräteNummer] = Me.Parent.[GeräteNummer]
rs!Artikel = !Artikel
rs!Hersteller = !Hersteller
rs!Bezeichnung = !Bezeichnung
MsgBox "bis hier bekomme ich Meldung der MsgBox"
rs.Update
.MoveNext
Loop
End With
Me.Parent.FormularMaterialeingabe2.Form.Requery
End Sub
was ist da falsch ?
Hallo,
die Angabe der Fehlermeldung wäre sinnvoller...
Wenn rs.Update abbricht, dann dürfte das Recordset nicht aktualisierbar sein, bzw. es liegt ein Index-Konflikt vor, z. B. wenn Feld "Gerätenummer" einen eindeutigen Index besitzt und mehrmals gespeichert werden soll.
... und für die geschilderte Szenerie muss auch kein Fokus irgendwo hingesetzt werden.
Hallo zusammen,
@Franz: Kommt keine Fehlermeldung, wird nur nicht gespeichert bzw bleibt da hängen weil die MsgBox nicht anspricht.
@Lachtaube: ok, dann weis ich auch nicht weiter.
Aber danke für eure Unterstützung.
Gruß Udo
Ich habe gerade eine kleine Test DB mit den gleichen Bedingungen erstellt HFO, RegisterFO,UFO1 und UFO2 ............ mist, da funktioniert alles. dann mache ich mich mal auf die Suche.
Gruß Udo
Sooooooo, ich habe den Fehler bzw die Ursache gefunden.... Das Formular war beschädigt. Habe ein neues erstellt und 1 zu 1 alles übernommen und es Funktioniert.