Como adaptar o exemplo do Grafeno para usar C/Query e não Planinha

’ oIntervalo = oPlan.getCellRangeByPosition(0,1,3,UltimaLinha(oPlan))
no meu caso é oResult = oQuery.executeQuery(sSql) não uma planilha
como faria para determinar o intervalo
*** oIntervalo = {oResult.Colcount ()-1, oResult.RowCount() }? ***

oTabela = oDialogo.getControl(“Tabela”).Model
oDadosTab = oTabela.GridDataModel
oDadosTab.removeAllRows
’ É aqui que tudo me falha
mDados = oIntervalo.DataArray o meu dilema é como determinar o intervalo do DataArray
o meu oResult acima tem dados
If Not IsNull(oResult) Then
while oResult.next()
msgBox “NIF: " +oResult.getLong(“NIF”) +”|" & _
“ID: " +oResult.getInt(1) +”|" & _
“DSCENTIDAD: " + oResult.getString(2) +”|" & _
oResult.getString(4)
wend
End If

Alguém poderia ajudar ? O Grafeno estaria disponivel para perder 5minutos e ma dar uma dica?
Obrigado

Por favor, poste arquivo exemplo a fim de facilitar o auxílio.

1 Like

Obrigado
REM ***** BASIC *****

Dim oDialogo As Object
Dim oTabela As Object

Sub pick_city_list

Dim oForm as Object
dIM oKeyEvent AS oBJECT
Dim countryText as string
Dim cityList as Object
Dim cityBox as Object
Dim oCountryList as Object
Dim oCountryBox as Object
Dim idebugCode as integer
Dim DatabaseContext As Object
Dim DataSource As Object
Dim Connection As Object
Dim InteractionHandler as Object
Dim Statement As Object
Dim ResultSet As Object
Dim Names As Object
Dim I As Integer
Dim sDSCENTIDAD As String

Dim oQuery, oResult As Object
Dim sSql As String

’ oKeyEvent = createUnoService(“com.sun.star.awt.Key”)

REM Determine if the countrylist text box has a value

oForm = ThisComponent.DrawPage.Forms.GetByName(“dsPhotoInfo”)
oCountryBox = oForm.getByName(“birthCountry”)

IF oCountryBox.text <> “” THEN

’ Connect to database

DatabaseContext = createUnoService(“com.sun.star.sdb.DatabaseContext”)
Names = DatabaseContext.getElementNames()
’ For I = 0 To UBound ( Names())
’ MsgBox Names(I)
’ Next I
DataSource = DatabaseContext.getByName(“GestACRA”) 'C:\Users\MREIS\Documents\GestACRA.odb
If Not DataSource.IsPasswordRequired Then
Connection = DataSource.GetConnection(“SYSDBA”,“minhachave****”)
Else
InteractionHandler = createUnoService(“com.sun.star.sdb.InteractionHandler”)
Connection = DataSource.ConnectWithCompletion(InteractionHandler)
End If
ELSE
Print “No Country”
EXIT SUB
ENDIF
’ Controle-tabela-dialogo.ods

DialogLibraries.LoadLibrary(“Standard”)
‘Usando a variável declarada no começo do módulo’
oDialogo = CreateUnoDialog( DialogLibraries.Standard.getByName(“Dialog1”) )

'Criar controle tabela
oTabela = oDialogo.Model.createInstance(“com.sun.star.awt.grid.UnoControlGridModel”)
with oTabela
.PositionX = 10
.PositionY = 10
.Width = 171
.Height = 85
end with

oColunas = oTabela.ColumnModel
oCol = oColunas.createColumn()
oCol.Title = " NIF "
oCol.ColumnWidth = 12 ‘Definir largura’
oCol.Flexibility = False ‘Para fixar largura’
oColunas.addColumn(oCol)

oColunas = oTabela.ColumnModel
oCol = oColunas.createColumn()
oCol.Title = " C.ID "
oCol.ColumnWidth = 10 ‘Definir largura’
oCol.Flexibility = False ‘Para fixar largura’
oColunas.addColumn(oCol)

oColunas = oTabela.ColumnModel
oCol = oColunas.createColumn()
oCol.Title = " Desc.Empresa "
oCol.ColumnWidth = 45 ‘Definir largura’
oCol.Flexibility = False ‘Para fixar largura’
oColunas.addColumn(oCol)

oColunas = oTabela.ColumnModel
oCol = oColunas.createColumn()
oCol.Title = " Morada "
oCol.ColumnWidth = 45 ‘Definir largura’
oCol.Flexibility = False ‘Para fixar largura’
oColunas.addColumn(oCol)

‘Inserir o controle tabela no diálogo’
oDialogo.Model.insertByName(“Tabela”, oTabela)

oQuery = Connection.createStatement()
'This allows forward & back scrolling & the necessary checking of ‘isBeforeFirst’
oQuery.ResultSetType = com.sun.star.sdbc.ResultSetType.SCROLL_INSENSITIVE

’ Talvez c/ uma inpubox pq a tabela ainda é grande e só quero pegar parte para ficar mais leve
sDSCENTIDAD = “‘TAP’”
'deveria ser parâmetro **:**DSCENTIDAD ainda não descobri com fazer.

‘Tem como passar parâmetros para o Sql aqui
’ colunas 0 1 2 3 etc…
sSql = "Select FIRST 10 CENTIDAD_ID,DSCENTIDAD, NIF, TPMORA||’ '||MORADA AS MORADA " & _
" From Empresas E WHERE E.DSCENTIDAD CONTAINING upper("+sDSCENTIDAD +")"

oResult = oQuery.executeQuery(sSql)

oTabela = oDialogo.getControl(“Tabela”).Model
oDadosTab = oTabela.GridDataModel
oDadosTab.removeAllRows
’ No exemplo do o Grafeno usa uma Planilha e se bem percebo vai pegar as colunas 0, 1, 3, Ultima(linha)
’ Numa DB Table que método ou função substiui o código da linha abaixo :
’ oIntervalo = oPlan.getCellRangeByPosition(0,1,3,UltimaLinha(oPlan))
oIntervalo = oResult.??? Deve ter como fazer aqui para carregar as colunas a pegar e o Cursor LastRecord
mDados = oIntervalo.DataArray

For i= 0 to UBound( mDados)
oDadosTab.addRow("", mDados(i)) '// Só agora vai carregar os dados! Sto Deu, no Delphi faço isto com 3/4 Cliks Em 20 minutos e fica um primor…
’ aqui sou um novato é só arranhar mas tem que ser!
Next i
’ Esta parte aqui é só para testes??? REMOVER:
If Not IsNull(oResult) Then
while oResult.next() ’ Tem dados…
msgBox “NIF: " +oResult.getLong(“NIF”) +”|" & _
“ID: " +oResult.getInt(1) +”|#|" & _
“DSCENTIDAD: " + oResult.getString(2) +”|" & _
oResult.getString(4)
wend
End If
Connection.close()

End Sub ’
Quem puder ajudar agradecido.

Felipe Alé via Ask LibreOffice <noreply@ask.libreoffice.org> escreveu no dia sexta, 30/09/2022 à(s) 20:52:

.
Tem sim. Porém, é um pouco complexo.
.
Talvez os arquivos postados no tópico abaixo solucionem a questão em alguma medida. Dê uma olhada, por favor.

.
Já sei como funciona melhor o objeto oResult retornado da query, porém, a leitura dos dados demanda uma curva de aprendizagem alta com matrizes.