Re: [de-users] Re: Listbox per Makro Wert zuweisen
Hallo Winfroed, > > Wert des ersten Eintrags holen > oListBox = DlgFormDB.getControl(ListBoxName) > sFirstItem = oListBox.getItem(0) > [aus: FormWizard] > > Listbox füllen > oListBox.addItem( "a", 0 ) > Leider nicht. Ich habe einen neuen Wert über ein Textfeld in die Datenbank eingegeben. Die Listbox, die aus der Datenbank ihre Werte erhält, wird nach der Eingabe aktualisiert. Jetzt möchte ich erreichen, dass die Listbox auch gleich auf den neu eingegebenen Wert springt. oListBox.SelectItem("Test2",True) funktioniert bei mir nicht. Im Endeffekt will ich also im Idealfall eine ComboBox haben, deren Auswahlfelder aber ergänzt werden, wenn das gewünschte nicht dabei ist. Die Ergänzungen sollen in die Datenbank geschrieben werden, das damit verknüpfte ID-Feld in die Tabelle, in der die ListBox eigentlich steht. > > > Tipp: in der Bibliothek "Tools" sind viele Hilfsfunktionen > (=Beispiele) für die Arbeit mit Listboxen > > Tipp: > http://extensions.services.openoffice.org/project/OOoBTL2 > Gibt alle vorhandenen BASIC-Module aus allen installierten > Bibliotheken in ein Writer-Dokument aus. > > Hilft beim Lesen :-) > > Generiert aus dem Text der hier installierten Basic-Module ein etwa > 800 Seiten Writer-Dokument in ca. 4 Sekunden***; inkl. > Inhaltsverzeichnis. > Den Tips werde ich nachgehen. Vielen Dank. Gruß Robert - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [de-users] Re: Listbox per Makro Wert zuweisen
Hallo Robert > > oListBox.SelectItem("Test2",True) > > funktioniert bei mir nicht. > > Im Endeffekt will ich also im Idealfall eine ComboBox haben, deren > Auswahlfelder aber ergänzt werden, wenn das gewünschte nicht dabei ist. Die > Ergänzungen sollen in die Datenbank geschrieben werden, das damit > verknüpfte ID-Feld in die Tabelle, in der die ListBox eigentlich steht. > Leider habe ich aus deiner Schilderung exakt schliessen können, ob du ein Dialog oder ein Formular zum eingeben der Daten benutzt. 1. Wenn du einen Dialog benutzt (was ich eher auschliesse, da du von wenig Makrokenntnissen sprichst): Einfach im Sub, der das ganze Speichert den Sub einfügen, der das ganze aktualisiert. Du kannst natürlich auch dem Feld, wo neue Daten eingegeben werden, den Sub "Aktualisieren" nach der Eingabe zuweisen. Dazu mit der Rechten Maustaste auf das Feld klicken (da wo die neuen Daten eingegeben werden) -> Eingenschaften -> Ereignisse -> Text modifiziert -> Zuweisen. Dann den Sub, denn du gemacht hast auswählen. 2. Wenn du ein Formular benutzt hast, sollte eigentlich das gleiche gehen wie beim Dialog. Ich vermute zwar dass du mit einem Formular arbeitest, muss dir aber gestehen dass ich selber mit Dialogen arbeite. Zwar muss man dort alle Funktionen für die Datenbank selber schreiben, dafür ist der Lerneffekt wesentlich grösser. Ich hoffe dir ein wenig geholfen zu haben, sonst meldest du dich einfach nochmals. Gruss Reto - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [de-users] Re: Listbox per Makro Wert zuweisen
Hallo Reto, > > 1. Wenn du einen Dialog benutzt (was ich eher auschliesse, da du von wenig > Makrokenntnissen sprichst): > > Einfach im Sub, der das ganze Speichert den Sub einfügen, der das ganze > aktualisiert. Du kannst natürlich auch dem Feld, wo neue Daten eingegeben > werden, den Sub "Aktualisieren" nach der Eingabe zuweisen. Dazu mit der > Rechten Maustaste auf das Feld klicken (da wo die neuen Daten eingegeben > werden) -> Eingenschaften -> Ereignisse -> Text modifiziert -> Zuweisen. > Dann den Sub, denn du gemacht hast auswählen. Das Speichern und aktualiereien schaffe ich ja - nur nicht das Umstellen der Listbox auf den 'richtigen' Datensatz. Siehe dazu unten. > > 2. Wenn du ein Formular benutzt hast, sollte eigentlich das gleiche gehen > wie beim Dialog. Ich vermute zwar dass du mit einem Formular arbeitest, > muss dir aber gestehen dass ich selber mit Dialogen arbeite. Zwar muss man > dort alle Funktionen für die Datenbank selber schreiben, dafür ist der > Lerneffekt wesentlich grösser. > Ja, ich arbeite mit Formularen. Es gibt ein Formularblatt, auf dem mehrere Formulare nebeneinander existieren. Das Ganze ergibt eine kleine Bibliotheksverwaltung. In dem Hauptformular werden Kategorie, Ort usw. aus Listboxen ausgewählt, die Listen durch Datenbankabfragen erhalten. Fehlt ein Ort, so gebe ich diesen in einem Formular, das neben dem anderen liegt (kein Unterformular, aber auf demselben Blatt - für den Anwender nicht als 2. Formular sichtbar) in ein Textfeld ein. Ich speichere und aktualisiere den Inhalt der Listbox mit Hilfe eines Makros. In dem Textfeld steht jetzt z.B. "Düsseldorf" - auch nach der Speicherung, habe ich also nicht auf "neuer Datensatz" weitergeschaltet. In der Listbox ist jetzt auch "Düsseldorf" enthalten, aber leider wird es nicht sofort angezeigt. Stattdessen steht da noch "Dortmund", nachdem der Benutzer vorher gemerkt hat, dass eben "Düsseldorf" nicht in der Auswahl ist. Jetzt muss der Benutzer also wieder zur Listbox und die auf "Düsseldorf" umstellen. Und da fände ich es natürlich bedienungsfreundlicher, wenn eben durch das Makro auch direkt die Listbox auf "Düsseldorf" umgestellt würde. Und genau das schaffe ich nicht. Gruß Robert - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
AW: Re: [de-users] Re: Listbox per Makro Wert zuweisen
Hallo Robert Tut mir leid, habe wohl deine Frage falsch verstanden: >Und da fände ich es natürlich bedienungsfreundlicher, wenn eben durch das >Makro auch direkt die Listbox auf "Düsseldorf" umgestellt würde. Und genau >das schaffe ich nicht. Du must das die Listbox ansprechen. Du musst zuerst den im Formular, wo neue Datensätze erstellt werden können, die Eingabe erfassen und diesen Text dann im zweiten Formular aus der Listbox selektieren. (Vergiss nicht, bevor du diesen Skript ausführen kannst, muss du die Listbox aktualisieren, da sonst der Eintrag nicht gefunden werden kann.) Sub aktualisieren 'Variablendeklaration: Dim oDoc as Object 'Enthält das Dokument Dim oDraw as Object 'Enthält die Drawpage Dim oForms as Object'Alle Formulare der Drawpage Dim oForm as Object 'Das Formular Dim oElements as Object 'Das Steuerelement Dim sEingabe as String 'Neu eingegebener Text 'Im Formular den Text auslesen, der neu eingegeben wurde. oDoc = ThisComponent oDraw = oDoc.drawpage oForms = oDraw.getForms oForm = oForms.GetByName("MainForm") oElement = oForm.getByName("Textfield1") sEingabe = oElement.Text 'Im zweiten Formular den Text eintragen. oDoc = ThisComponent oDraw = oDoc.drawpage oForms = oDraw.getForms oForm = oForms.GetByName("MainForm2") oElement = oForm.getByName("ListBox1") oElement.selectItem(sEingabe,True) End Sub Am Besten du kopierst das ganze mal in dein Makro, dann kannst du es auch lesen (die farbliche Darstellung hilft dabei). Du musst natürlich MainForm, Textfield1,MainForm2,ListBox1 durch die entsprechenden Namen in deinem Formular (bzw. zwei Formularen) ersetzten. So ich hoffe dir jetzt geholfen zu haben. Sollte es nicht klappen, so weisst du ja, wo du weiterfragen kannst. Gruss Reto - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: AW: Re: [de-users] Re: Listbox per Makro Wert zuweisen
Hallo Reto, vielen Dank für die Hilfe: Ich habe einmal vermerkt, bis wohin ich schon gekommen bin - und was einfach nur mit einer Fehlermeldung quittiert wird: > > Du must das die Listbox ansprechen. Du musst zuerst den im > Formular, wo neue Datensätze erstellt werden können, die Eingabe > erfassen und diesen Text dann im zweiten Formular aus der Listbox > selektieren. (Vergiss nicht, bevor du diesen Skript ausführen kannst, > muss du die Listbox aktualisieren, da sonst der Eintrag nicht > gefunden werden kann.) > > Sub aktualisieren > 'Variablendeklaration: > Dim oDoc as Object > 'Enthält das Dokument > Dim oDraw as Object > 'Enthält die Drawpage > Dim oForms as Object'Alle > Formulare der Drawpage > Dim oForm as Object 'Das > Formular > Dim oElements as Object 'Das > Steuerelement > Dim sEingabe as String 'Neu > eingegebener Text > 'Im Formular den Text auslesen, der neu eingegeben wurde. > oDoc = ThisComponent > oDraw = oDoc.drawpage > oForms = oDraw.getForms > oForm = oForms.GetByName("MainForm") > oElement = oForm.getByName("Textfield1") > sEingabe = oElement.Text > 'Im zweiten Formular den Text eintragen. > oDoc = ThisComponent > oDraw = oDoc.drawpage > oForms = oDraw.getForms > oForm = oForms.GetByName("MainForm2") > oElement = oForm.getByName("ListBox1") Das Element ist in der Listbox, kann ich auswählen. Die Listbox kann ich auch ansprechen. Den Eingabestring kann ich auch mit einer Messagebox auf den Schirm holen. Den momentan angezeigten String der Listbox auch. > oElement.selectItem(sEingabe,True) Aber genau an dieser Postition streikt Das Formular, wirft Base nur eine Methode aus, die nicht passt (ich habe im Augenblick Office bereits runtergefahren - aber setelectItem habe ich nach den Befehlen aus der Website von Michael Dannenhöfer versucht. Nur tut's das nicht. Anscheinend ist da ein Unterschied zwischen ListBoxen ohne und ListBoxen mit Datenbankanbindungen. > End Sub > > Am Besten du kopierst das ganze mal in dein Makro, dann kannst du > es auch lesen (die farbliche Darstellung hilft dabei). > Du musst natürlich MainForm, Textfield1,MainForm2,ListBox1 durch > die entsprechenden Namen in deinem Formular (bzw. zwei Formularen) > ersetzten. Klar, haben alle unterschiedliche Namen. Ich habe zwar mit OpenOffice-Basic noch nicht so viel zu tun gehabt, aber schon viele Webformulare für MySQL-Datenbanken erstellt - und da ein Feld nach der ID zu suchen, wenn es doch viel besser benannt werden kann, ist ja auch ein Glücksgeschäft. Ich werd's morgen noch einmal mit Deinem Original versuchen - rechne aber mit demselben Scheitern, da auch Xray den Befehl selectItem bei der Listbox gar nicht als verfügbar auflistet. Trotzdem vielen Dank für die Hilfe. Gruß Robert - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: AW: Re: [de-users] Re: Listbox per Makro Wert zuweisen
Hallo Robert > > oElement.selectItem(sEingabe,True) > > Aber genau an dieser Postition streikt Das Formular, wirft Base nur eine > Methode aus, die nicht passt (ich habe im Augenblick Office bereits > runtergefahren - aber setelectItem habe ich nach den Befehlen aus der > Website von Michael Dannenhöfer versucht. Nur tut's das nicht. Anscheinend > ist da ein Unterschied zwischen ListBoxen ohne und ListBoxen mit > Datenbankanbindungen. Villeicht kannst du es auch mal mit selectItemsPos(ipos,True) versuchen. Du musst ipos durch einen Integer ersetzten, also einer Zahl. zb: oElement.selectItemsPos(1,True) Es ist mit klar dass du die Postion nicht weisst, aber es würde mich wunder nehmen, ob es so funktioniert. Wenn es auf diese Weise funktioniert müsste man eine Schleife basteln, die die Richtige Position ausgiebt. Aber auch dabei könnte ich dir behilflich sein. Ich würde auf jeden Fall mal versuchen, das ganze so wie ich vorhin beschrieben habe, einzusetzten. Gruss Reto - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: AW: Re: [de-users] Re: Listbox per Makro Wert zuweisen
> Hallo Reto, > > > Villeicht kannst du es auch mal mit selectItemsPos(ipos,True) versuchen. > > Du musst ipos durch einen Integer ersetzten, also einer Zahl. zb: > > > > oElement.selectItemsPos(1,True) > > Das habe ich sofort probiert. Neuen Ort "Köln" eingegeben, Makro läuft bis > zu selectItemsPos(1,True) > bzw > selectItemPos(1,True) > durch - dann die Meldung: "Eigenschaft oder Methode nicht gefunden" Bist du dir sicher dass du das richtige Objekt ansprichst? Ich habe die Vermutung dass du ein Falsches Objekt versuchts zu verändern. zB ein Textfeld auf deinem Formular > "Köln" ist in der Liste neu aufgetaucht, der Ort mit der ID 1 (die > weitergegeben wird) ist belegt, falls das Ganze nach der Sortierung in der > Listbox und nicht nach dem damit verknüpften Wert läuft: mehr als 1 Ort ist > auch vorhanden - aber eben nichts. > Die eingegebene Nummer ist die Position in der Liste und hat mit der ID des Datensatzes nichts zu tun. >Ich glaube, ich werde das einmal ohne Datenbankanbindung >probieren, um wenigstens zu sehen, ob es so funktioniert. Für mich ist das >dann zwar unbrauchbar, aber irgendwie finde ich auch dafür einen Workaround. Naja unbrauchbar würde ich das ganze dann nicht nennen. Speichere doch mal eine Kopie des Formulars und fülle die Auswahlbox mit vorgeschriebenen werten (So dass sie nicht mehr mit der Datenbank in Verbindung stehen). Versuche dann mal ob du die Selektion per Makro ändern kannst. Solltest du so Erfolg haben, wirst du sicher den Fehler, der sich eingeschlichen hat, finden. Wenn es sich bei dieser Sache um keine geheime Sache handelt kannst du mir die Datei auch zusenden, ich würde mir das ganze gerne Mal anschauen. (Privat zusenden) Gruss Reto - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: AW: Re: [de-users] Re: Listbox per Makro Wert zuweisen
Hallo Reto, > > Villeicht kannst du es auch mal mit selectItemsPos(ipos,True) versuchen. Du > musst ipos durch einen Integer ersetzten, also einer Zahl. zb: > > oElement.selectItemsPos(1,True) > Das habe ich sofort probiert. Neuen Ort "Köln" eingegeben, Makro läuft bis zu selectItemsPos(1,True) bzw selectItemPos(1,True) durch - dann die Meldung: "Eigenschaft oder Methode nicht gefunden" "Köln" ist in der Liste neu aufgetaucht, der Ort mit der ID 1 (die weitergegeben wird) ist belegt, falls das Ganze nach der Sortierung in der Listbox und nicht nach dem damit verknüpften Wert läuft: mehr als 1 Ort ist auch vorhanden - aber eben nichts. Irgendwo scheine ich mit den Makros sowieso auf Kriegsfuß zu stehen. Starte ich mein Formular, so gibt Base (bzw. das integrierte Writerformular) auch hin und wieder aus, dass ein Script nicht definiert ist - obwohl es im Dokument selbst liegt, aber eben vom Formular aus unerreichbar erscheint. Jetzt gerade erscheint beim Aufruf von Xray (um die mit der ListBox verknüpften Methoden zu finden), dass die Funktion nicht definiert ist ... Mir ist diese Makrowelt zu undurchschaubar. Was ich genau weiß, als ich mit Xray die Methoden auflistete: selectItemPos und selectItem und wie sie alle so schön auf Michael Dannenhöfers Seite für Listboxen, werden von Xray nicht aufgelistet und werfen bei mir entsprechend nur Fehler auf. Ich glaube, ich werde das einmal ohne Datenbankanbindung probieren, um wenigstens zu sehen, ob es so funktioniert. Für mich ist das dann zwar unbrauchbar, aber irgendwie finde ich auch dafür einen Workaround. Gruß Robert - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]