Hi Peter, On Tue, Nov 05, 2013 at 03:12:45PM +0100, Peter Eberlein wrote: > Hi, > > in the gui there's a command "Data into fields" for a selected row in > Database sources. Any ideas how to get the selected row (bookmark of > the resultset) into these fields with api? I remember that Fernand > asked Frank S. a similar question, but didn't found it anymore.
AFAIK there is no API for that, but you can dispatch the UNO command with the proper arguments sequence; see the attached example, it uses record numbers instead of bookmarks, but it should work with bookmarks too (set "BookmarkSelection" to True). Regards -- Ariel Constenla-Haile La Plata, Argentina
REM ***** BASIC *****
Option Explicit
Sub Main
Dim oDoc as Object
Dim oFrame as Object
Dim oURLTransformer as Object
Dim oURL as new com.sun.star.util.URL
Dim oDispatch as Object
oDoc =
StarDesktop.loadComponentFromURL("private:factory/swriter","_default",com.sun.star.frame.FrameSearchFlag.ALL,Array())
oFrame = oDoc.getCurrentController().getFrame()
oURLTransformer = CreateUnoService("com.sun.star.util.URLTransformer")
oURL.Complete = ".uno:DataSourceBrowser/InsertContent"
oURLTransformer.parseStrict(oURL)
oDispatch =
oFrame.queryDispatch(oURL,"_self",com.sun.star.frame.FrameSearchFlag.SELF)
If IsNULL(oDispatch) Then
Exit Sub
End If
Dim oMasters as Object
Dim oMasterID as Object
Dim oMasterAuthor as Object
Dim sMasterID$
Dim sMasterAuthor$
sMasterID =
"com.sun.star.text.fieldmaster.DataBase.Bibliography.biblio.Identifier"
sMasterAuthor =
"com.sun.star.text.fieldmaster.DataBase.Bibliography.biblio.Author"
oMasters = oDoc.getTextFieldMasters()
If oMasters.hasByName(sMasterID) Then
oMasterID = oMasters.getByName(sMasterID)
Else
oMasterID =
oDoc.createInstance("com.sun.star.text.fieldmaster.Database")
With oMasterID
.DataBaseName = "Bibliography"
.DataCommandType = com.sun.star.sdb.CommandType.TABLE
.DataTableName = "biblio"
.DataColumnName = "Identifier"
End With
End If
If oMasters.hasByName(sMasterAuthor) Then
oMasterAuthor = oMasters.getByName(sMasterAuthor)
Else
oMasterAuthor =
oDoc.createInstance("com.sun.star.text.fieldmaster.Database")
With oMasterAuthor
.DataBaseName = "Bibliography"
.DataCommandType = com.sun.star.sdb.CommandType.TABLE
.DataTableName = "biblio"
.DataColumnName = "Author"
End With
End If
Dim oText as Object
Dim oCursor as Object
oText = oDoc.getText()
oCursor = oText.createTextCursor()
oText.insertString(oCursor, "Test:", False )
oText.insertControlCharacter(oCursor,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK,False
)
Dim nFields%
Dim oField as Object
For nFields = 0 To 3
oText.insertString(oCursor, CStr(nFields + 1) + ": [", False )
oField =
oDoc.createInstance("com.sun.star.text.textfield.Database")
oField.attachTextFieldMaster(oMasterID)
oText.insertTextContent(oCursor, oField, False )
oText.insertString(oCursor, "] ", False )
oField =
oDoc.createInstance("com.sun.star.text.textfield.Database")
oField.attachTextFieldMaster(oMasterAuthor)
oText.insertTextContent(oCursor, oField, False )
oField =
oDoc.createInstance("com.sun.star.text.textfield.DatabaseNextSet")
oField.DataBaseName = "Bibliography"
oField.DataCommandType = com.sun.star.sdb.CommandType.TABLE
oField.DataTableName = "biblio"
oField.Condition = "TRUE"
oText.insertTextContent(oCursor, oField, False )
oText.insertString(oCursor, ".", False )
oText.insertControlCharacter(oCursor,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK,False
)
Next
Dim oDS as Object
Dim oConnection as Object
Dim oDatabaseContext as Object
Dim oStatement as Object
Dim oResultSet as Object
oDatabaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDS = oDatabaseContext.getByName("Bibliography")
oConnection = oDS.getConnection("","")
oStatement = oConnection.createStatement()
oResultSet = oStatement.executeQuery("SELECT * FROM ""biblio""")
'Selection - a sequence of Any
' record numbers or bookmars
Dim aSelection(3) as Variant
'index in the rowset starts at 1
aSelection(0) = 8
aSelection(1) = 5
aSelection(2) = 1
aSelection(3) = 3
' see documentation in ::com::sun::star::sdb::DataAccessDescriptor
Dim aDispatchArgs(6) as new com.sun.star.beans.PropertyValue
aDispatchArgs(0).Name = "DataSourceName"
aDispatchArgs(0).Value = "Bibliography"
aDispatchArgs(1).Name = "ActiveConnection"
aDispatchArgs(1).Value = oConnection
aDispatchArgs(2).Name = "Command"
aDispatchArgs(2).Value = "biblio"
aDispatchArgs(3).Name = "CommandType"
aDispatchArgs(3).Value = com.sun.star.sdb.CommandType.TABLE
aDispatchArgs(4).Name = "Cursor"
aDispatchArgs(4).Value = oResultSet
aDispatchArgs(5).Name = "Selection"
aDispatchArgs(5).Value = CreateUnoValue("[]any", aSelection)
aDispatchArgs(6).Name = "BookmarkSelection"
aDispatchArgs(6).Value = False ' = we use record numbers in "Selection"
oDispatch.dispatch(oURL, aDispatchArgs)
End Sub
pgpz15Qo7TbOb.pgp
Description: PGP signature
