Formular mit bestimmtem Datensatz anzeigen
Moderator: Moderatoren
Formular mit bestimmtem Datensatz anzeigen
Hallo,
ich hab mal wieder ein kleines Problemchen. Und zwar öffne ich aus einem Formular heraus einen Suchdialog. In diesem kann ich nach Personen suchen und diese gefiltert in einem Listenfeld anzeigen lassen. Ich hab es nun hingekriegt, dass ich die ID des selektierten Datensatzes geliefert bekomme. Nun möchte ich mit einem Klick auf einen Button (im Dialog) die Daten dieses Datensatzes im Formular angezeigt haben. Wie muss ich da vorgehen? Gibt es eine Möglichkeit, dass der Dialog beim Beenden einen Rückgabewert an das Formular übergibt und dieses sich dann mit der übergebenen ID aktualisiert? Oder muss ich ein Makro schreiben, welches auf den Button im Dialog gelegt wird, und das Formular dann aktualisiert? Aber wie rufe ich dann das vorherige Formular mit der übergebenen ID auf? Das Formular ist ja nach Schliessen des Dialogs sowieso immer noch da. Ich steh gerade auf dem Schlauch und bräuchte mal einen Tipp, in welche Richtung ich mich bewegen muss bzw. wo ich Beispiele für so etwas finde.
Viele Grüsse
Bert
ich hab mal wieder ein kleines Problemchen. Und zwar öffne ich aus einem Formular heraus einen Suchdialog. In diesem kann ich nach Personen suchen und diese gefiltert in einem Listenfeld anzeigen lassen. Ich hab es nun hingekriegt, dass ich die ID des selektierten Datensatzes geliefert bekomme. Nun möchte ich mit einem Klick auf einen Button (im Dialog) die Daten dieses Datensatzes im Formular angezeigt haben. Wie muss ich da vorgehen? Gibt es eine Möglichkeit, dass der Dialog beim Beenden einen Rückgabewert an das Formular übergibt und dieses sich dann mit der übergebenen ID aktualisiert? Oder muss ich ein Makro schreiben, welches auf den Button im Dialog gelegt wird, und das Formular dann aktualisiert? Aber wie rufe ich dann das vorherige Formular mit der übergebenen ID auf? Das Formular ist ja nach Schliessen des Dialogs sowieso immer noch da. Ich steh gerade auf dem Schlauch und bräuchte mal einen Tipp, in welche Richtung ich mich bewegen muss bzw. wo ich Beispiele für so etwas finde.
Viele Grüsse
Bert
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
Re: Formular mit bestimmtem Datensatz anzeigen
Hallo Bert,
ich habe sowas bereits gebaut.
Voraussetzung ist, daß Du das aufrufende Formular in einer Globalen Variablen speicherst oder daß Du es als Parameter dem Sub für den Dialog übergibst..... bei mir ist es "oMainForm".
Wenn ich die passende Auswahl getätigt habe, suche ich mir über die id die absolute Satznummer, mit der ich dann das aufrufende Formular aktualisiere.
Alles klar?
Gruß eBayer
Sub setParentRow
Dim oStatement As Object, oRecordSet As Object, oForm As Object
Dim nRow As Integer, nID AS Integer
oForm = ThisComponent.drawpage.forms.getByName("Teamauswahl")
nID = oForm.getString (9)
' aktuellen Datensatz ermitteln, falls Auswahlfenster sortiert oder gefiltert wurde
oStatement = oVerbindung.createStatement
sSQL = "SELECT id AS id FROM tisch.team"
oRecordSet = oStatement.executeQuery( sSQL )
If Not IsNull(oRecordSet) Then
Do While oRecordset.next
if oRecordset.getString(1) = nID then
nRow = oRecordSet.getRow()
oMainForm.absolute(nRow) ' hier wird das aufrufende Formular positioniert!
Exit Do
end if
Loop
End If
oRecordSet.close()
oStatement.close()
' hier müsste dann vermutlich der Dialog geschlossen werden!
end Sub
ich habe sowas bereits gebaut.
Voraussetzung ist, daß Du das aufrufende Formular in einer Globalen Variablen speicherst oder daß Du es als Parameter dem Sub für den Dialog übergibst..... bei mir ist es "oMainForm".
Wenn ich die passende Auswahl getätigt habe, suche ich mir über die id die absolute Satznummer, mit der ich dann das aufrufende Formular aktualisiere.
Alles klar?
Gruß eBayer
Sub setParentRow
Dim oStatement As Object, oRecordSet As Object, oForm As Object
Dim nRow As Integer, nID AS Integer
oForm = ThisComponent.drawpage.forms.getByName("Teamauswahl")
nID = oForm.getString (9)
' aktuellen Datensatz ermitteln, falls Auswahlfenster sortiert oder gefiltert wurde
oStatement = oVerbindung.createStatement
sSQL = "SELECT id AS id FROM tisch.team"
oRecordSet = oStatement.executeQuery( sSQL )
If Not IsNull(oRecordSet) Then
Do While oRecordset.next
if oRecordset.getString(1) = nID then
nRow = oRecordSet.getRow()
oMainForm.absolute(nRow) ' hier wird das aufrufende Formular positioniert!
Exit Do
end if
Loop
End If
oRecordSet.close()
oStatement.close()
' hier müsste dann vermutlich der Dialog geschlossen werden!
end Sub
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Re: Formular mit bestimmtem Datensatz anzeigen
Hm, ich weiss nicht genau, ob ich das jetzt richtig verstanden habe. Ich versuch das mal zu rekapitulieren.
Du hast ein Formular (oMainForm), welches als global festgelegt ist. Aus diesem rufst du einen Dialog auf. Soll das dieser sein: oForm = ThisComponent.drawpage.forms.getByName("Teamauswahl") Das wäre aber ein Formular und kein Dialog, oder? Na ja, wahrscheinlich egal. Und dann liest du aus oForm die ID aus. Ist das die ID aus der Datenbank, also der Primärschlüssel des Datensatzes, welcher in oForm angezeigt wird? Danach gehst du alle IDs in der Tabelle durch und vergleichst, ob diese nID damit identisch ist, und holst dir die absolute Satznummer. Dann lässt du dir diesen Datensatz im Formular anzeigen.
Scheint mir etwas zu übertrieben zu sein, alle Datensätze zu durchlaufen. Die ID des gesuchten Datensatzes ist ja bekannt. Die habe ich aus den Daten eines Listenfeldes bzw. des Arrays, welches die Daten für das Listenfeld enthält. Ich müsste nur diese ID dem Formular mitteilen, damit es sich dann aktualisieren kann. Ich hab bei meiner Suche vielleicht eine Lösungsmöglichkeit entdeckt. Mit Command kann ich dem Formular SQL-Befehle übergeben. Ich müsste dann nur noch dynamisch die ID an das SELECT hinten mit WHERE id = dranhängen. Evtl. auch noch ein reload des Formulars. Hab das auch mal mit fest eingetragener ID-Nummer probiert, aber ich bekam ne Meldung, dass die Tabelle nicht existiert. Scheint mir ein SQL-Problem zu sein.
Viele Grüsse
Bert
Du hast ein Formular (oMainForm), welches als global festgelegt ist. Aus diesem rufst du einen Dialog auf. Soll das dieser sein: oForm = ThisComponent.drawpage.forms.getByName("Teamauswahl") Das wäre aber ein Formular und kein Dialog, oder? Na ja, wahrscheinlich egal. Und dann liest du aus oForm die ID aus. Ist das die ID aus der Datenbank, also der Primärschlüssel des Datensatzes, welcher in oForm angezeigt wird? Danach gehst du alle IDs in der Tabelle durch und vergleichst, ob diese nID damit identisch ist, und holst dir die absolute Satznummer. Dann lässt du dir diesen Datensatz im Formular anzeigen.
Scheint mir etwas zu übertrieben zu sein, alle Datensätze zu durchlaufen. Die ID des gesuchten Datensatzes ist ja bekannt. Die habe ich aus den Daten eines Listenfeldes bzw. des Arrays, welches die Daten für das Listenfeld enthält. Ich müsste nur diese ID dem Formular mitteilen, damit es sich dann aktualisieren kann. Ich hab bei meiner Suche vielleicht eine Lösungsmöglichkeit entdeckt. Mit Command kann ich dem Formular SQL-Befehle übergeben. Ich müsste dann nur noch dynamisch die ID an das SELECT hinten mit WHERE id = dranhängen. Evtl. auch noch ein reload des Formulars. Hab das auch mal mit fest eingetragener ID-Nummer probiert, aber ich bekam ne Meldung, dass die Tabelle nicht existiert. Scheint mir ein SQL-Problem zu sein.
Code: Alles auswählen
Sub datenAktualisieren
oForm = ThisComponent.drawpage.forms.getByName("MainForm")
oForm.Command = "SELECT * FROM ""01_Stamm"" WHERE ""stamm_ID""=" & 4
oForm.reload()
End Sub
Bert
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
Re: Formular mit bestimmtem Datensatz anzeigen
Hallo Bert,
Du hast das richtig gesehen... in meinem Fall ist es ein Formular. Aber das ist letztendlich egal.
In meinem Fall glaubte ich, durch alle ID's durchlaufen zu müssen, weil bei gesetztem Filter oder Sortierung die Satznummer nicht mehr passt.
Wesentlich ist jedenfalls, daß Du aus dem aufgerufenen Dialog oder Formular heraus das aufrufende aktualisierst. Und das ging für mich am einfachsten, wie ich es Dir geschrieben habe. Bei einem Dialog wäre es genaugenommen noch einfacher, weil der ja im Regelfall modal ist. Das bedeutet, nach Beendigung des Dialogs machst Du genau an der Stelle weiter, wo Du ihn aufgerufen hast denn dort bist Du ja in Deinem Ausgangsformular und Du hast die volle Kontrolle.
Bei einem Formular ist es komplizierter - da ist die globale Variable und die Positionierung des Ausgangsformulars aus dem aufgerufenen Formular heraus vermutlich nicht zu umgehen.
Dein Ansatz, mit command ein select-Statement auszuführen liest sich gut. Falls das so funktioniert, würde es auch meine Logik vereinfachen. Ich vermute allerdings, daß in diesem Fall das select-Statement wie ein Filter wirkt, was ein weiterblättern durch die Tabelle dann ja wohl verhindern würde.
Trotzdem wäre ich Dir dankbar, wenn Du mich über das Ergebnis auf dem laufenden halten würdest.
Ich habe halt das programmiert, was ich zu der Zeit kannte und zum Erfolg führte. Aber man lernt ja nicht aus!
Gruß eBayer
Du hast das richtig gesehen... in meinem Fall ist es ein Formular. Aber das ist letztendlich egal.
In meinem Fall glaubte ich, durch alle ID's durchlaufen zu müssen, weil bei gesetztem Filter oder Sortierung die Satznummer nicht mehr passt.
Wesentlich ist jedenfalls, daß Du aus dem aufgerufenen Dialog oder Formular heraus das aufrufende aktualisierst. Und das ging für mich am einfachsten, wie ich es Dir geschrieben habe. Bei einem Dialog wäre es genaugenommen noch einfacher, weil der ja im Regelfall modal ist. Das bedeutet, nach Beendigung des Dialogs machst Du genau an der Stelle weiter, wo Du ihn aufgerufen hast denn dort bist Du ja in Deinem Ausgangsformular und Du hast die volle Kontrolle.
Bei einem Formular ist es komplizierter - da ist die globale Variable und die Positionierung des Ausgangsformulars aus dem aufgerufenen Formular heraus vermutlich nicht zu umgehen.
Dein Ansatz, mit command ein select-Statement auszuführen liest sich gut. Falls das so funktioniert, würde es auch meine Logik vereinfachen. Ich vermute allerdings, daß in diesem Fall das select-Statement wie ein Filter wirkt, was ein weiterblättern durch die Tabelle dann ja wohl verhindern würde.
Trotzdem wäre ich Dir dankbar, wenn Du mich über das Ergebnis auf dem laufenden halten würdest.
Ich habe halt das programmiert, was ich zu der Zeit kannte und zum Erfolg führte. Aber man lernt ja nicht aus!
Gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Re: Formular mit bestimmtem Datensatz anzeigen
Der Tipp mit dem Code, der nach dem Schliessen des Dialogs weitergeht, hört sich aber auch nicht schlecht an. Ich muss jetzt aber erst mal weiter probieren, warum das SELECT nicht funktioniert und mir eine Messagebox sagt, es gäbe solch eine Tabelle garnicht. Wie gesagt, ich vermute da ein SQL-Problem. Ich melde mich dann, sobald ich da weiter bin.
Gruss
Bert
Gruss
Bert
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
Re: Formular mit bestimmtem Datensatz anzeigen
Hmm, hab gerade problemlos per Konsole mit dem SELECT auf die Datenbank zugegriffen. Scheint also korrekter SQL-Code zu sein. Dann müsste das Problem vielleicht doch in Basic liegen. Vielleicht muss vor dem "Command" noch eine Datenverbindung hergestellt werden, oder ist die schon automatisch vorhanden?
Gruss
Bert
Gruss
Bert
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
-
- ***
- Beiträge: 62
- Registriert: Di, 20.03.2007 11:41
Re: Formular mit bestimmtem Datensatz anzeigen
Hallo Bert,
mit Command habe ich auch schon gearbeitet. Das funktioniert auf jeden Fall. Da mir Dein SQL-Befehl auch in Ordnung zu sein scheint, vermute ich mal, dass du nur den folgenden Befehl vor oForm.Command setzen musst:
Das entspricht bei den Eigenschaften des Formulars Art des Inhalts: SQL. Das steht bei Dir bestimmt noch auf Tabelle.
Da Du auch mit PostgreSQL arbeitest, habe ich noch einen Tipp für Dich. Den SQL-String kannst Du auch einfach so schreiben:
Jedenfalls klappt es bei mir so auch und es ist übersichtlicher.
Viele Grüße
Christiana
mit Command habe ich auch schon gearbeitet. Das funktioniert auf jeden Fall. Da mir Dein SQL-Befehl auch in Ordnung zu sein scheint, vermute ich mal, dass du nur den folgenden Befehl vor oForm.Command setzen musst:
Code: Alles auswählen
oForm.CommandType = 2
Da Du auch mit PostgreSQL arbeitest, habe ich noch einen Tipp für Dich. Den SQL-String kannst Du auch einfach so schreiben:
Code: Alles auswählen
"SELECT * FROM 01_Stamm WHERE stamm_ID = " & 4
Jedenfalls klappt es bei mir so auch und es ist übersichtlicher.
Viele Grüße
Christiana
OOo 3.1 mit WIN XP SP 3 und PostgreSQL 8.2
Re: Formular mit bestimmtem Datensatz anzeigen
Hallo Christiana,
danke für diese Tipps. Werde ich gleich mal probieren. Die Schreibweise mit dem PostgreSQL hatte ich mir so angewöhnt, weil die Datenbank selbst beim anlegen der Tabellen auf die Anführungszeichen bestanden hatte. Ansonsten hätte es mir die Tabellennamen alle in Kleinbuchstaben umgewandelt. Scheint aber dann wohl in OpenOffice nicht notwendig zu sein.
Das mit dem "CommandType" hab ich auch gerade in Krumbeins BASIC-Buch gefunden:
Werde ich später mal weiter testen. Muss jetzt mal kurz weg.
Bis später
Bert
danke für diese Tipps. Werde ich gleich mal probieren. Die Schreibweise mit dem PostgreSQL hatte ich mir so angewöhnt, weil die Datenbank selbst beim anlegen der Tabellen auf die Anführungszeichen bestanden hatte. Ansonsten hätte es mir die Tabellennamen alle in Kleinbuchstaben umgewandelt. Scheint aber dann wohl in OpenOffice nicht notwendig zu sein.
Das mit dem "CommandType" hab ich auch gerade in Krumbeins BASIC-Buch gefunden:
Code: Alles auswählen
Sub Tabelle_aktualisieren(sSQL as string)
oDoc = thisComponent
oForm = oDoc.drawpage.Forms.getByName("Formular1")
oForm.command = sSQL
oForm.CommandType = com.sun.star.sdb.CommadType.COMMAND
oForm.reload()
End Sub
Bis später
Bert
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
-
- ***
- Beiträge: 62
- Registriert: Di, 20.03.2007 11:41
Re: Formular mit bestimmtem Datensatz anzeigen
Hallo Bert,
Christiana
Oh, diesen Zusammenhang kannte ich nicht, weil wir generell alle Tabellennamen klein schreiben. Da wirst du wohl doch bei Deiner Schreibweise bleiben müssen.gigabert hat geschrieben:Die Schreibweise mit dem PostgreSQL hatte ich mir so angewöhnt, weil die Datenbank selbst beim anlegen der Tabellen auf die Anführungszeichen bestanden hatte. Ansonsten hätte es mir die Tabellennamen alle in Kleinbuchstaben umgewandelt. Scheint aber dann wohl in OpenOffice nicht notwendig zu sein.
Christiana
OOo 3.1 mit WIN XP SP 3 und PostgreSQL 8.2
Re: Formular mit bestimmtem Datensatz anzeigen
Hallo Bert,
ich habs jetzt mal getestet.
Wenn Du mit "Form.command" ein SQL-Statement absetzt, wird dem Formular praktisch ein neues Recordset zugewiesen, welches sich natürlich nur auf die Auswahl im SQL-Statement bezieht. Es hat dann im Prinzip die gleiche Wirkung, wie eine Filterbedingung.
Allerdings kannst Du den Filter eben nicht wieder aufheben, wie es bei einer Filterbedingung möglich ist. Wenn Du nur genau den EINEN Datensatz sehen willst, ist es ok. Wenn Du aber nur positionieren willst, ohne die Manövrierfähigkeit des Formulars einzuschränken, funktioniert das eben nicht!
Trotzdem eine ganz hilfreiche Erfahrung.
Gruß eBayer
ich habs jetzt mal getestet.
Wenn Du mit "Form.command" ein SQL-Statement absetzt, wird dem Formular praktisch ein neues Recordset zugewiesen, welches sich natürlich nur auf die Auswahl im SQL-Statement bezieht. Es hat dann im Prinzip die gleiche Wirkung, wie eine Filterbedingung.
Allerdings kannst Du den Filter eben nicht wieder aufheben, wie es bei einer Filterbedingung möglich ist. Wenn Du nur genau den EINEN Datensatz sehen willst, ist es ok. Wenn Du aber nur positionieren willst, ohne die Manövrierfähigkeit des Formulars einzuschränken, funktioniert das eben nicht!
Trotzdem eine ganz hilfreiche Erfahrung.
Gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Re: Formular mit bestimmtem Datensatz anzeigen
Hallo eBayer,
da hast du natürlich Recht. Das ist auf jeden Fall ein Problem. Es müsste irgendwie die Möglichkeit geben, innerhalb des Resultsets des Formulars direkt an den Datensatz zu springen, den ich (per ID) ausgewählt habe. Vielleicht ist deine Idee mit dem "oMainForm.absolute(nRow)" doch garnicht so falsch. Auch wenn es mir ziemlich umständlich erscheint. Kann man denn das Resultset nicht irgendwie anders noch ansteuern? Mit der Navigation des Formulares geht es doch auch.
Ich hab gerade eben mal das mit dem weiteren Code nach dem Schliessen des Dialoges getestet. Das scheint zu klappen. So kann man einen Wert (z.B. die ID eines selektierten Datensatzes in einem Listenfeld) in das aufrufende Formular übernehmen, wenn dieser Wert global definiert ist, im Dialog gesetzt wird und nach dem execute des Dialogs im Formular ausgewertet wird.
So langsam macht mir das Spass. Da wird sich doch bestimmt noch eine bessere Lösung finden...
Viele Grüsse
Bert
da hast du natürlich Recht. Das ist auf jeden Fall ein Problem. Es müsste irgendwie die Möglichkeit geben, innerhalb des Resultsets des Formulars direkt an den Datensatz zu springen, den ich (per ID) ausgewählt habe. Vielleicht ist deine Idee mit dem "oMainForm.absolute(nRow)" doch garnicht so falsch. Auch wenn es mir ziemlich umständlich erscheint. Kann man denn das Resultset nicht irgendwie anders noch ansteuern? Mit der Navigation des Formulares geht es doch auch.
Ich hab gerade eben mal das mit dem weiteren Code nach dem Schliessen des Dialoges getestet. Das scheint zu klappen. So kann man einen Wert (z.B. die ID eines selektierten Datensatzes in einem Listenfeld) in das aufrufende Formular übernehmen, wenn dieser Wert global definiert ist, im Dialog gesetzt wird und nach dem execute des Dialogs im Formular ausgewertet wird.
So langsam macht mir das Spass. Da wird sich doch bestimmt noch eine bessere Lösung finden...
Viele Grüsse
Bert
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
-
- ***
- Beiträge: 62
- Registriert: Di, 20.03.2007 11:41
Re: Formular mit bestimmtem Datensatz anzeigen
Hallo Bert,
mir ist noch eine andere Variante eingefallen. Du kannst natürlich auch direkt einen Filter setzen, den Du dann auch wieder aufheben kannst, z.B. über das Steuerelement ”Navigationsleiste“ oder über ein Makro, indem Du oForm.ApplyFilter wieder auf false setzt.
Weiterhin viel Spaß beim Testen
Christiana
mir ist noch eine andere Variante eingefallen. Du kannst natürlich auch direkt einen Filter setzen, den Du dann auch wieder aufheben kannst, z.B. über das Steuerelement ”Navigationsleiste“ oder über ein Makro, indem Du oForm.ApplyFilter wieder auf false setzt.
Code: Alles auswählen
Sub datenAktualisieren
oForm.CommandType = 0 REM Tabelle
oForm = ThisComponent.drawpage.forms.getByName("MainForm")
oForm.Command = ""01_Stamm"
oForm.ApplyFilter = true
oForm.Filter = ""stamm_ID""=" & 4
oForm.reload()
End Sub
Christiana
OOo 3.1 mit WIN XP SP 3 und PostgreSQL 8.2
Re: Formular mit bestimmtem Datensatz anzeigen
Hallo Bert, hallo Christiana,
wenn die von mir zuerst vorgeschlagene Lösung zu aufwändig scheint, bleibt als praktikabelste Lösung meines Erachtens tatsächlich noch der Vorschlag von Christiana mit dem Filter. Im Gegensatz zur vorher diskutierten Variante kann man immerhin den Filter dann per Knopfdruck aufheben.
Meine erste Variante ist sicher auch nicht für ein größeres Datenvolumen (vielleicht > 5000) geeignet. Vorher kann ich kaum eine Verzögerung erkennen, weil sich doch alles überwiegend im gepufferten Memorybereich abspielt.
Trotzdem...... es macht Spaß, gemeinsam Lösungswege zu suchen und zu finden.
Gruß eBayer
wenn die von mir zuerst vorgeschlagene Lösung zu aufwändig scheint, bleibt als praktikabelste Lösung meines Erachtens tatsächlich noch der Vorschlag von Christiana mit dem Filter. Im Gegensatz zur vorher diskutierten Variante kann man immerhin den Filter dann per Knopfdruck aufheben.
Meine erste Variante ist sicher auch nicht für ein größeres Datenvolumen (vielleicht > 5000) geeignet. Vorher kann ich kaum eine Verzögerung erkennen, weil sich doch alles überwiegend im gepufferten Memorybereich abspielt.
Trotzdem...... es macht Spaß, gemeinsam Lösungswege zu suchen und zu finden.
Gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Re: Formular mit bestimmtem Datensatz anzeigen
Hallo Christiana,
das mit dem Filter werde ich gleich mal testen. Das hört sich auf jeden Fall so an, als müsste es funktionieren.
Hallo eBayer,
deine Lösung funktioniert, aber doch widerspricht sie ein bisschen meinem Verständnis von Datenbanken, wenn man alle Datensätze durchgehen und vergleichen muss, bis man den richtigen gefunden hat. So etwas sollte eigentlich ein DBMS für einen machen :-; Klar, ich benutze lieber eine funktionierende Möglichkeit, als keine zu haben und oft gibt es auch mehrere Wege, die zum Ziel führen. Ich kann dann ja mal hier reinschreiben, wie ich das mit den Filtern umgesetzt habe.
Viele Grüsse
Bert
das mit dem Filter werde ich gleich mal testen. Das hört sich auf jeden Fall so an, als müsste es funktionieren.
Hallo eBayer,
deine Lösung funktioniert, aber doch widerspricht sie ein bisschen meinem Verständnis von Datenbanken, wenn man alle Datensätze durchgehen und vergleichen muss, bis man den richtigen gefunden hat. So etwas sollte eigentlich ein DBMS für einen machen :-; Klar, ich benutze lieber eine funktionierende Möglichkeit, als keine zu haben und oft gibt es auch mehrere Wege, die zum Ziel führen. Ich kann dann ja mal hier reinschreiben, wie ich das mit den Filtern umgesetzt habe.
Viele Grüsse
Bert
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
Re: Formular mit bestimmtem Datensatz anzeigen
OK, nach langem Herumprobieren bezüglich der korrekten SQL-Schreibweise hab ich es wohl nun geschafft.
Mit einem Button im Hauptformular wird der Suchdialog aufgerufen:
Beim execute bleibt der Code stehen und geht an dieser Stelle nach dem Beenden des Dialoges weiter mit der Aktualisierung des angezeigten Datensatzes im Hauptformular. Der Wert nSelected wird im Dialog aus dem selektierten Datensatz des Listenfeldes ausgelesen und beinhaltet die ID-Nummer.
Command und CommandType brauche ich da wohl garnicht, da ich den Filter ja direkt im Formular anwende. Und bei Christianas Code war ein kleiner Fehler drin: der Filter muss zuerst formuliert werden, bevor er angewandt wird. Jetzt muss ich nur noch schauen, wo ich das einbaue, damit der Filter wieder aufgehoben wird.
Viele Grüsse
Bert
Mit einem Button im Hauptformular wird der Suchdialog aufgerufen:
Code: Alles auswählen
Sub Personensuche_dlg
DialogLibraries.LoadLibrary("Standard") 'Dialogbibliothek wird geladen
oSDlg = createUNODialog(DialogLibraries.Standard.PersonSuchen)
sql_init 'füllt das Listenfeld beim ersten Aufruf
oSDlg.execute()
datenAktualisieren(nSelected)
End Sub
Code: Alles auswählen
Sub datenAktualisieren(nSelect_ID)
oForm = ThisComponent.drawpage.forms.getByName("MainForm")
oForm.Filter = (" ""stamm_ID"" = " & nSelect_ID)
oForm.ApplyFilter = true
oForm.reload()
End Sub
Viele Grüsse
Bert
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3