hallo zusammen!
eins vorweg: habe wenig ahnung von makros und habe das folgende makro aus einem buch modifiziert.
habe folgendes problem: in einem dialog sollen 2 listboxen erstellt werden, wobei die inhalte aus einer mysql-datenbank stammen.
mit der listbox, in der die Personennamen erscheinen, hat das auch soweit geklappt. versuche ich jedoch vorher noch die andere listbox mit den firmennamen zu füllen gibt es folgende fehlermeldung (stelle im Code mit ******* markiert):
"es ist eine exception aufgetreten Type: com.star.lang.DisposedException"
hier einmal mein basiccode:
Sub DialogStart
Dim objDatabaseContext As Object
Dim objDataSource As Object
Dim objConnection As Object
Dim objInteractionHandler as Object
Dim objStatement As Object
Dim objStatement1 As Object
Dim objResultSet As Object
Dim objResultSet1 As Object
Dim strListe() As String
Dim i As integer
Dim j As integer
i = 1
j = 1
objDatabaseContext = _
createUnoService("com.sun.star.sdb.DatabaseContext")
objDataSource = objDatabaseContext.getByName("Linux4")
If Not objDataSource.IsPasswordRequired Then
objConnection = objDataSource.GetConnection("","")
Else
objInteractionHandler = _
createUnoService("com.sun.star.sdb.InteractionHandler")
objConnection = _
objDataSource.ConnectWithCompletion(objInteractionHandler)
End If
objStatement = objConnection.createStatement()
objResultSet = _
objStatement.executeQuery("Select `Name` FROM `Daten`.`Personen` `Personen` Order By `Name` Asc")
objResultSet1 = _
objStatement.executeQuery("Select `NA1` FROM `Daten`.`Firmen` `Firmen` Order By `NA1` Asc")
DialogLibraries.LoadLibrary("Standard")
Dlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
Dlg.Title = "Personenauswahl"
If Not IsNull(objResultSet) Then
While objResultSet.next **********************************
Dlg.getControl("ListBox1").addItem(objResultSet.getString(1),i)
i = i+1
Wend
End If
If Not IsNull(objResult1) Then
While objResultSet1.next
Dlg.getControl("Listbox2").addItem(objResultSet1.getString(1),j)
j = j+1
Wend
End If
Dlg.Execute()
objResultset.Close()
objStatement.Close()
objConnection.Close()
End Sub
kann mir da jemand weiterhelfen?
und wie kriege ich es anschließend hin, dass er nur die personen aufführt, die zur oben ausgewählten firma gehören? die personen sind über die "id" mit den firmen verknüpft.
gruß
jens
Listeneinträge aus Datenbank einfügen
Moderator: Moderatoren
Listeneinträge aus Datenbank einfügen
Zuletzt geändert von jecu am Mi, 21.12.2005 13:28, insgesamt 1-mal geändert.
hier vielleicht noch kurz der funktionierende code:
REM ***** BASIC *****
Sub DialogStart
Dim objDatabaseContext As Object
Dim objDataSource As Object
Dim objConnection As Object
Dim objInteractionHandler as Object
Dim objStatement As Object
Dim objStatement1 As Object
Dim objResultSet As Object
Dim objResultSet1 As Object
Dim strListe() As String
Dim i As integer
Dim j As integer
i = 1
j = 1
objDatabaseContext = _
createUnoService("com.sun.star.sdb.DatabaseContext")
objDataSource = objDatabaseContext.getByName("Linux4")
If Not objDataSource.IsPasswordRequired Then
objConnection = objDataSource.GetConnection("","")
Else
objInteractionHandler = _
createUnoService("com.sun.star.sdb.InteractionHandler")
objConnection = _
objDataSource.ConnectWithCompletion(objInteractionHandler)
End If
objStatement = objConnection.createStatement()
objResultSet = _
objStatement.executeQuery("Select `Name` FROM `Daten`.`Personen` `Personen` Order By `Name` Asc")
DialogLibraries.LoadLibrary("Standard")
Dlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
Dlg.Title = "Personenauswahl"
If Not IsNull(objResultSet) Then
While objResultSet.next
Dlg.getControl("ListBox1").addItem(objResultSet.getString(1),i)
i = i+1
Wend
End If
Dlg.Execute()
objResultset.Close()
objStatement.Close()
objConnection.Close()
End Sub
REM ***** BASIC *****
Sub DialogStart
Dim objDatabaseContext As Object
Dim objDataSource As Object
Dim objConnection As Object
Dim objInteractionHandler as Object
Dim objStatement As Object
Dim objStatement1 As Object
Dim objResultSet As Object
Dim objResultSet1 As Object
Dim strListe() As String
Dim i As integer
Dim j As integer
i = 1
j = 1
objDatabaseContext = _
createUnoService("com.sun.star.sdb.DatabaseContext")
objDataSource = objDatabaseContext.getByName("Linux4")
If Not objDataSource.IsPasswordRequired Then
objConnection = objDataSource.GetConnection("","")
Else
objInteractionHandler = _
createUnoService("com.sun.star.sdb.InteractionHandler")
objConnection = _
objDataSource.ConnectWithCompletion(objInteractionHandler)
End If
objStatement = objConnection.createStatement()
objResultSet = _
objStatement.executeQuery("Select `Name` FROM `Daten`.`Personen` `Personen` Order By `Name` Asc")
DialogLibraries.LoadLibrary("Standard")
Dlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
Dlg.Title = "Personenauswahl"
If Not IsNull(objResultSet) Then
While objResultSet.next
Dlg.getControl("ListBox1").addItem(objResultSet.getString(1),i)
i = i+1
Wend
End If
Dlg.Execute()
objResultset.Close()
objStatement.Close()
objConnection.Close()
End Sub
nach einigem basteln hab ich diesen funktionierenden code herausgefunden:
Sub DialogStart
Dim objDatabaseContext As Object
Dim objDataSource As Object
Dim objConnection As Object
Dim objConnection1 As Object
Dim objInteractionHandler as Object
Dim objStatement As Object
Dim objStatement1 As Object
Dim objResultSet As Object
Dim objResultSet1 As Object
Dim i As integer
Dim j As integer
i = 1
j = 1
objDatabaseContext = _
createUnoService("com.sun.star.sdb.DatabaseContext")
objDataSource = objDatabaseContext.getByName("Linux4")
If Not objDataSource.IsPasswordRequired Then
objConnection = objDataSource.GetConnection("","")
Else
objInteractionHandler = _
createUnoService("com.sun.star.sdb.InteractionHandler")
objConnection = _
objDataSource.ConnectWithCompletion(objInteractionHandler)
End If
objStatement = objConnection.createStatement()
objResultSet = _
objStatement.executeQuery("Select `Name` FROM `Daten`.`Personen` `Personen` Order By `Name` Asc")
objConnection1 = _
objDataSource.ConnectWithCompletion(objInteractionHandler)
objStatement1 = objConnection1.createStatement()
objResultSet1 = _
objStatement1.executeQuery("Select `NA1` FROM `Daten`.`Firmen` `Firmen` Order By `NA1` Asc")
DialogLibraries.LoadLibrary("Standard")
Dlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
Dlg.Title = "Personenauswahl"
If Not IsNull(objResultSet) Then
While objResultSet.next
Dlg.getControl("ListBox1").addItem(objResultSet.getString(1),i)
i = i+1
Wend
End If
If Not IsNull(objResultSet1) Then
While objResultSet1.next
Dlg.getControl("ListBox2").addItem(objResultSet1.getString(1),j)
j = j+1
Wend
End If
Dlg.Execute()
objResultset.Close()
objResultset1.Close()
objStatement.Close()
objConnection.Close()
End Sub
wahrscheinlich etwas umständlich, kenne mich aber wie gesagt kaum mit makros aus.
aber jetzt stellt sich für mich immer noch das 2. problem: wie kann ich es denn erreichen, dass in der 2. listbox nur die personen angezeigt werden, die zu der firma gehören, die in der 1. listbox ausgewählt wurden? Personen sind über eine id miteinander verknüpft.
ich weiß zwar ungefähr, wie ich markierte einträge aus einer listbox auslesen kann, aber wie bekomme ich denn die variable in den sql-code für die 2. listbox?
bin froh um jeden ratschlag!
gruß
jens
Sub DialogStart
Dim objDatabaseContext As Object
Dim objDataSource As Object
Dim objConnection As Object
Dim objConnection1 As Object
Dim objInteractionHandler as Object
Dim objStatement As Object
Dim objStatement1 As Object
Dim objResultSet As Object
Dim objResultSet1 As Object
Dim i As integer
Dim j As integer
i = 1
j = 1
objDatabaseContext = _
createUnoService("com.sun.star.sdb.DatabaseContext")
objDataSource = objDatabaseContext.getByName("Linux4")
If Not objDataSource.IsPasswordRequired Then
objConnection = objDataSource.GetConnection("","")
Else
objInteractionHandler = _
createUnoService("com.sun.star.sdb.InteractionHandler")
objConnection = _
objDataSource.ConnectWithCompletion(objInteractionHandler)
End If
objStatement = objConnection.createStatement()
objResultSet = _
objStatement.executeQuery("Select `Name` FROM `Daten`.`Personen` `Personen` Order By `Name` Asc")
objConnection1 = _
objDataSource.ConnectWithCompletion(objInteractionHandler)
objStatement1 = objConnection1.createStatement()
objResultSet1 = _
objStatement1.executeQuery("Select `NA1` FROM `Daten`.`Firmen` `Firmen` Order By `NA1` Asc")
DialogLibraries.LoadLibrary("Standard")
Dlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
Dlg.Title = "Personenauswahl"
If Not IsNull(objResultSet) Then
While objResultSet.next
Dlg.getControl("ListBox1").addItem(objResultSet.getString(1),i)
i = i+1
Wend
End If
If Not IsNull(objResultSet1) Then
While objResultSet1.next
Dlg.getControl("ListBox2").addItem(objResultSet1.getString(1),j)
j = j+1
Wend
End If
Dlg.Execute()
objResultset.Close()
objResultset1.Close()
objStatement.Close()
objConnection.Close()
End Sub
wahrscheinlich etwas umständlich, kenne mich aber wie gesagt kaum mit makros aus.

aber jetzt stellt sich für mich immer noch das 2. problem: wie kann ich es denn erreichen, dass in der 2. listbox nur die personen angezeigt werden, die zu der firma gehören, die in der 1. listbox ausgewählt wurden? Personen sind über eine id miteinander verknüpft.
ich weiß zwar ungefähr, wie ich markierte einträge aus einer listbox auslesen kann, aber wie bekomme ich denn die variable in den sql-code für die 2. listbox?
bin froh um jeden ratschlag!
gruß
jens
nach einigem basteln hab ich diesen funktionierenden code herausgefunden:
Sub DialogStart
Dim objDatabaseContext As Object
Dim objDataSource As Object
Dim objConnection As Object
Dim objConnection1 As Object
Dim objInteractionHandler as Object
Dim objStatement As Object
Dim objStatement1 As Object
Dim objResultSet As Object
Dim objResultSet1 As Object
Dim i As integer
Dim j As integer
i = 1
j = 1
objDatabaseContext = _
createUnoService("com.sun.star.sdb.DatabaseContext")
objDataSource = objDatabaseContext.getByName("Linux4")
If Not objDataSource.IsPasswordRequired Then
objConnection = objDataSource.GetConnection("","")
Else
objInteractionHandler = _
createUnoService("com.sun.star.sdb.InteractionHandler")
objConnection = _
objDataSource.ConnectWithCompletion(objInteractionHandler)
End If
objStatement = objConnection.createStatement()
objResultSet = _
objStatement.executeQuery("Select `Name` FROM `Daten`.`Personen` `Personen` Order By `Name` Asc")
objConnection1 = _
objDataSource.ConnectWithCompletion(objInteractionHandler)
objStatement1 = objConnection1.createStatement()
objResultSet1 = _
objStatement1.executeQuery("Select `NA1` FROM `Daten`.`Firmen` `Firmen` Order By `NA1` Asc")
DialogLibraries.LoadLibrary("Standard")
Dlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
Dlg.Title = "Personenauswahl"
If Not IsNull(objResultSet) Then
While objResultSet.next
Dlg.getControl("ListBox1").addItem(objResultSet.getString(1),i)
i = i+1
Wend
End If
If Not IsNull(objResultSet1) Then
While objResultSet1.next
Dlg.getControl("ListBox2").addItem(objResultSet1.getString(1),j)
j = j+1
Wend
End If
Dlg.Execute()
objResultset.Close()
objResultset1.Close()
objStatement.Close()
objConnection.Close()
End Sub
wahrscheinlich etwas umständlich, kenne mich aber wie gesagt kaum mit makros aus.
aber jetzt stellt sich für mich immer noch das 2. problem: wie kann ich es denn erreichen, dass in der 2. listbox nur die personen angezeigt werden, die zu der firma gehören, die in der 1. listbox ausgewählt wurden? Personen sind über eine id miteinander verknüpft.
ich weiß zwar ungefähr, wie ich markierte einträge aus einer listbox auslesen kann, aber wie bekomme ich denn die variable in den sql-code für die 2. listbox?
bin froh um jeden ratschlag!
gruß
jens
Sub DialogStart
Dim objDatabaseContext As Object
Dim objDataSource As Object
Dim objConnection As Object
Dim objConnection1 As Object
Dim objInteractionHandler as Object
Dim objStatement As Object
Dim objStatement1 As Object
Dim objResultSet As Object
Dim objResultSet1 As Object
Dim i As integer
Dim j As integer
i = 1
j = 1
objDatabaseContext = _
createUnoService("com.sun.star.sdb.DatabaseContext")
objDataSource = objDatabaseContext.getByName("Linux4")
If Not objDataSource.IsPasswordRequired Then
objConnection = objDataSource.GetConnection("","")
Else
objInteractionHandler = _
createUnoService("com.sun.star.sdb.InteractionHandler")
objConnection = _
objDataSource.ConnectWithCompletion(objInteractionHandler)
End If
objStatement = objConnection.createStatement()
objResultSet = _
objStatement.executeQuery("Select `Name` FROM `Daten`.`Personen` `Personen` Order By `Name` Asc")
objConnection1 = _
objDataSource.ConnectWithCompletion(objInteractionHandler)
objStatement1 = objConnection1.createStatement()
objResultSet1 = _
objStatement1.executeQuery("Select `NA1` FROM `Daten`.`Firmen` `Firmen` Order By `NA1` Asc")
DialogLibraries.LoadLibrary("Standard")
Dlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
Dlg.Title = "Personenauswahl"
If Not IsNull(objResultSet) Then
While objResultSet.next
Dlg.getControl("ListBox1").addItem(objResultSet.getString(1),i)
i = i+1
Wend
End If
If Not IsNull(objResultSet1) Then
While objResultSet1.next
Dlg.getControl("ListBox2").addItem(objResultSet1.getString(1),j)
j = j+1
Wend
End If
Dlg.Execute()
objResultset.Close()
objResultset1.Close()
objStatement.Close()
objConnection.Close()
End Sub
wahrscheinlich etwas umständlich, kenne mich aber wie gesagt kaum mit makros aus.

aber jetzt stellt sich für mich immer noch das 2. problem: wie kann ich es denn erreichen, dass in der 2. listbox nur die personen angezeigt werden, die zu der firma gehören, die in der 1. listbox ausgewählt wurden? Personen sind über eine id miteinander verknüpft.
ich weiß zwar ungefähr, wie ich markierte einträge aus einer listbox auslesen kann, aber wie bekomme ich denn die variable in den sql-code für die 2. listbox?
bin froh um jeden ratschlag!
gruß
jens