Seite 1 von 1
[Gelöst] Formular mit neuem Datensatz
Verfasst: So, 13.09.2009 16:52
von gigabert
Hallo,
ich hab mal wieder ein kleines Problem. Ich hab ja einen Suchdialog, der von einem Formular per Button gestartet wird. In dem Dialog kann ich die Daten filtern und einen Datensatz auswählen, der dann in meinem Formular angezeigt wird. Jetzt möchte ich aber auch noch, dass ich aus dem Dialog heraus einen neuen Datensatz anlegen kann. Es sollen dann die Daten für den neuen Datensatz übernommen werden, die ich im Suchdialog in die 3 Eingabefelder eingetragen habe (Vorname, Nachname, Nummer). Diese sollen im Formular in den neuen Datensatz eingetragen werden. Im Formular selbst habe ich einen Button, den ich mit einer Aktion "neuer Datensatz" ausstatten kann. Aber wie mache ich das aus dem Dialog heraus? Ich denke mal, das Auslesen der 3 Werte aus dem Dialog ist eher nicht mein Problem. Sondern wie ich das Formular per Basic mit einem neuen Datensatz aufrufe.
Gruss
Bert
Re: Formular mit neuem Datensatz
Verfasst: So, 13.09.2009 18:07
von gigabert
anonym hat geschrieben:Hallo,
nicht böse sein, dass keine Codebeispiele dabei sind.
Hallo,
danke für die Antwort. Da bin ich bestimmt nicht böse...
Also, der Suchdialog zum Suchen von Datensätzen funktioniert eigentlich schon. Ich kann bei Eingaben in die Textfelder die Liste mit den Datensätzen filtern und mit einem Doppelklick wird der ausgewählte Datensatz im Formular angezeigt (als Filter). Leider werden zur Zeit noch die 3 Eingabefelder einzeln zum Filtern ausgewertet, d.h. ich kann diese noch nicht kombinieren. Ich denke, ich werde mir einen Button neben den Feldern anbringen, der mir das Formular mit den 3 eingegebenen Werten vorbelegt (als neuen Datensatz). Das mache ich wohl unabhängig davon, ob beim Filtern im Suchdialog was gefunden wird oder nicht. Ich muss dann nur überprüfen, ob die Felder nicht leer sind, und ob die Nummer nicht schon in der Datenbank vorhanden ist, da diese nur einmal vorkommen darf.
Mein Problem ist jetzt halt, wie ich von dem Dialog aus das Formular so aufrufen kann, dass ein neuer Datensatz angelegt werden kann. Kann ich den Datensatzzeiger nach dem Schliessen des Dialogs dort hinbewegen? Wenn ja, wie?
Gruss
Bert
Re: Formular mit neuem Datensatz
Verfasst: So, 13.09.2009 19:15
von gigabert
Hallo,
so wie ich oben geschrieben hatte, habe ich ein Formular mit der Anbindung an eine Tabelle aus einer Datenbank. In diesem Formular gibt es einen Button "Suche", der dann den Suchdialog öffnet. Der Suchdialog selbst holt sich per Basic-Makro ein Teil der Daten (ID-Nr. Vornname, Nachname und Matrikelnummer), welche alphabetisch (nach Nachname) im Suchdialog in einer ListBox angezeigt werden. Über 3 Eingabefelder kann ich diese Datenmenge filtern, wobei nach jeder Eingabe eines Zeichens die Einträge in der ListBox neu geladen werden und die Ergebnisse somit immer genauer. Durch ein Doppelklick auf einen Datensatz schliesst sich der Dialog, die ID-Nr. wird an das Formular übergeben und die Daten des ausgewählten Datensatzes sind in den Feldern des Formulars vorhanden und können geändert werden. Bisher hatte im Formular einen Button "Neuen Datensatz", welcher die EIngabefelder des Formulars leerte und ein neuer Datensatz eingegeben werden konnte. Nun möchte ich dies aber aus dem Dialog heraus veranlassen, d.h. ein Button, der die 3 eingegebenen Werte nimmt, das Formular für einen neuen Datensatz leert und mit den 3 Werten vorbelegt. Dann sollen die restlichen Daten ins Formular eingetragen werden könne. Hab jetzt mal versucht, das so genau wie möglich zu beschreiben.
Zu Debian: Ich hatte schon mehrmals versucht, von Windows auf Linux umzusteigen, bin aber vorher immer daran gescheitert. Entweder weil ich mich schon so an Windows gewöhnt hatte, oder weil bei Linux irgendwas nicht auf Anhieb funktionierte und ich dann wieder aufgegeben hatte. Debian wurde mir empfohlen, weil es im Gegensatz zu den anderen Distributionen am besten sein sollte. Also am ehesten dem Linux-Anspruch der freien Software entsprechend. Da ich nun etwas unter Debian mit OpenOffice und PostgreSQL entwickeln muss, gibt es eben nun keine Ausrede mehr und ich muss mich da durchkämpfen. Die PostgreSQL-Datenbank ist nicht so das Problem, mit Debian klappt es mittlerweile auch ganz gut. Nur OpenOffice treibt mich so manchmal in die Verzweiflung. Ich finde halt, dass es noch nicht so richtig ausgereift ist. Auch die Dokumentation finde ich etwas mager und kompliziert. Na ja, ich werde aber wohl trotzdem versuchen, mir das alles anzueigenen und zu verstehen.
Gruss
Bert
Re: Formular mit neuem Datensatz
Verfasst: Mo, 14.09.2009 11:16
von gigabert
Hallo,
so ganz klar ist das nun noch nicht. Wie kann ich das Formular von dem Dialog aus leeren und einen neuen Datensatz eingeben? Vom Formular selbst aus kann ich das mit einem Button machen, der die Aktion "neuer Datensatz" hat. Vom Dialog aus brauche ich wohl ein Makro, weiss nun aber nicht, wie der Basic-Code dafür lautet.
Gruss
Bert
Re: Formular mit neuem Datensatz
Verfasst: Mo, 14.09.2009 11:57
von gigabert
anonym hat geschrieben:Du musst doch auf dem Formular einen Button drücken
Hmm, das geht aber nicht, wenn der Dialog geöffnet ist. Ich kann ja erst wieder auf das Formular zugreifen, wenn der Dialog geschlossen ist. Ich möchte ja den Button im Dialog haben und wenn ich die Werte in die 3 Eingabefelder gemacht habe, dann zurück zum Formular und ein neuen Datensatz mit den 3 Werten als Vorbelegung. Ich brauch einfach nur den Basic-Code, wie ich dem Formular sage, dass es nun einen neuen Datensatz anlegt. Da komme ich nicht weiter.
Bert
Re: Formular mit neuem Datensatz
Verfasst: Mo, 14.09.2009 12:01
von gigabert
OK danke, ich muss jetzt leider gleich los. Ich schau mir das dann aber gleich nachher an und melde mich dann wieder...
Gruss
Bert
Re: Formular mit neuem Datensatz
Verfasst: Di, 15.09.2009 17:43
von gigabert
Hallo,
ich hab mir jetzt das Beispiel von dir nochmal genauer angeschaut. Da ist aber eigentlich nur erklärt, wie ich auf die unterschiedlichen Komponenten zugreife. OK, ich hab dann den Zugriff auf das Formular, aber wie lautet der Code, dass ich im Formular einen neuen Datensatz anlege?
Im Moment rufe ich den Dialog mit einem Klick aus dem Formular heraus auf:
Code: Alles auswählen
...
DialogLibraries.LoadLibrary("Standard") 'Dialogbibliothek wird geladen
oSDlg = createUNODialog(DialogLibraries.Standard.PersonSuchen)
sql_init 'füllt das Listenfeld beim ersten Aufruf
oSDlg.execute() 'Dialog anzeigen (nach Beenden des Dialog geht es dort weiter)
...
Nach Schliessen des Dialogs (nur Abbrechen oder auch Übergabe einer ID, mit welcher dann das Formular gefüllt wird) bin ich wieder im Formular. Wie kann ich dem Formular jetzt (nach Schliessen des Dialogs) sagen, hallo, hier kommt ein neuer Datensatz. Das Auslesen der 3 Eingabefelder des Dialogs ist nicht mein Problem. Das bekomme ich hin. Das Formular soll einfach nur das machen, was auch die Aktion "neuer Datensatz" tut, welche ich auf einen Button im Formular legen kann (nämlich die Eingabefelder des Formulars leeren, damit ein neuer Datensatz eingegeben werden kann). Dafür müsste es doch bestimmt nur einen einzigen Befehl geben. Ist mein Problem denn so unverständlich?
Gruss
Bert
Re: Formular mit neuem Datensatz
Verfasst: Di, 15.09.2009 17:53
von gigabert
anonym hat geschrieben:Erstelle Dir auf dem Dialog einen Button "Übernehmen".
Weise diesem Button folgenden Code zu:
- Formular leeren ' Wie man das Formular leert weisst Du schon.
Den drei Steuerelementen auf dem Formular den Text/Wert aus dem Dialog zuweisen.
Den Dialog schließen.
Hallo,
ich glaube, da ist mein Problem genau zu erkennen: Ich kann diesen Button im Dialog erstellen. Kein Problem. Aber ich kann ihm keine einfache Aktion zuweisen, sondern muss ein Makro schreiben, welches diese Schritte macht. Welchen Code schreibe ich für "Formular leeren"?
Gruss
Bert
Re: Formular mit neuem Datensatz
Verfasst: Di, 15.09.2009 22:39
von gigabert
Hallo,
weiss denn niemand, wie es mit Basic möglich ist, das gleiche zu machen wie die Aktion "neuer Datensatz"? Also, dass der Zeiger auf die Datensätze ans Ende springt, das Formular geleert wird und ich einen neuen Datensatz eintragen kann? Nach über 2 Tagen herumprobieren und suchen habe ich jetzt die Methode oForm.afterLast() gefunden. Damit springt der Zeiger wohl auf den Datensatz nach dem letzten. Aber irgendwie wird das Formular nicht geleert und ich kann keinen neuen Datensatz anlegen. So macht das ganze keinen Spass. Aus der Dokumentation werde ich nicht so richtig schlau.
Grrr...
Bert
Re: Formular mit neuem Datensatz
Verfasst: Mi, 16.09.2009 09:23
von eBayer
Hallo Bert,
es wird Dir wohl nichts anderes übrigbleiben, als Dich nun wirklich mal ernsthaft mit Xray zu beschäftigen.
Alles was Du an fehlenden Informationen bemängelst, findest Du dort und kannst es dann mit etwas gutem Willen auch umsetzen.
Hier ein funktionierendes Codeschnipsel zum Thema InsertRow: (habs mir auch über Xray erarbeitet)
Sub neuerArtikel
Dim oForm As Object
oForm = ThisComponent.DrawPage.Forms.getByName("Bestellungen")
oForm.moveToInsertRow() ' mache einen neuen Datensatz auf
oFormt.getByName("ProduktID").value = myProduktID ' Formularfeld füllen
oForm.getByName("ProduktID").commit() ' das ist quasi die Simulation der Eingabetaste
oForm.insertRow() ' speichere den neuen Datensatz
oForm.reload() ' vorsichtshalber neu laden - wäre aber in diesem Beispiel nicht nötig
End Sub
Gruß eBayer
Re: Formular mit neuem Datensatz
Verfasst: Mi, 16.09.2009 09:38
von gigabert
anonym hat geschrieben:Also in der Form:
formular.MoveToInsertRow
Hallo,
das war genau der Befehl, den ich gesucht hatte. Damit funktioniert es prima. Danke nochmal für deine Hilfe...
Bert
Re: Formular mit neuem Datensatz
Verfasst: Mi, 16.09.2009 09:48
von gigabert
eBayer hat geschrieben:Hallo Bert,
es wird Dir wohl nichts anderes übrigbleiben, als Dich nun wirklich mal ernsthaft mit Xray zu beschäftigen.
Alles was Du an fehlenden Informationen bemängelst, findest Du dort und kannst es dann mit etwas gutem Willen auch umsetzen.
Hallo eBayer,
lange nichts mehr von dir gehört. Ich hatte ja versucht, mit xray dem Problem auf die Schliche zu kommen. Leider hatte ich dann dort die Methoden oForm.afterLast() und oForm.reset() gefunden, die zum Teil das machten, was ich brauchte, aber wohl nicht ganz die richtigen waren. Die Informationen, die ich bei xray bekomme, sind für mich eben teilweise noch etwas unverständlich. Selbst mit xray finde ich es ziemlich kompliziert, genaue Infos zu finden. Aber vielleicht wird es noch, wenn ich das nun häufiger einsetze und mich so daran gewöhne. Aber bitte mir nicht unterstellen, es würde mir an gutem Willen oder Ernsthaftigkeit mangeln. Danke auch für den Beispielcode.
Bert