Boa tarde,
Esta ligação TRAVA com outra aplicação concorrente por exemplo “delphi client aplication com Firebird”! Estou a usar o ODBC free.
A ligação ODBC está assim “**localhost/3050:**c:\trab\fb30\dados\MeusDados.Fdb”. portanto o “data engine” fala com o server a ligação “não” é embebed
Porém trava/Lock !?
Coisa mais estranha, já que da documentação do FB3.0 resulta que podem estar em rede um numero ilimitado de engines/users!? Se bem percebo nenhum usa exclusivamente a Database.FDB
Será que alguém pode ajudar-me. O codigo tal qual está:
DatabaseContext = createUnoService(“com.sun.star.sdb.DatabaseContext”)
DataSource = DatabaseContext.getByName(“GestACRA”) ’ Com ODBC porque persiste o problema do acesso directo via LibreOfice 7.5.3
Connection = DataSource.ConnectWithCompletion(InteractionHandler) ’ PopUp User: ??? /Pwd: *******
'Consulta:
oQuery = Connection.createStatement()
oQuery.ResultSetType = com.sun.star.sdbc.ResultSetType.SCROLL_INSENSITIVE
oQuery = Connection.createStatement()
’
oQuery.ResultSetType = com.sun.star.sdbc.ResultSetType.SCROLL_INSENSITIVE
sText = InputBox ("Id. N.º ",“NIF da Empresa: !”) ’ NIF , DscEntidad etc… qq campo da consulta
Não haverá algo como:(?)oQuery.CreateParameter seguido de Parameter.Add(Parm1…2…3) <== onde poderia ver isso ando um tanto perdido
sDSCENTIDAD = “’”+ CStr(sText) +"’" ’ Da I nputBox na verdade aqui precisava era um ou parâmetro
sSql = " SELECT FIRST 1 DISTINCT E.CENTIDAD_ID , E.DSCENTIDAD , " & _
" E.TPMORA || ’ ’ || E.MORADA ||’, N.º: '|| COALESCE ( E.NPOLICIA , E.ANDAR , ‘S/’ ) Morada, " & _
" L.CPALFA AS CPALFA , E.NIF, E.USERID " & _
" FROM EMPRESAS E , LOCART L " & _
" WHERE E.CP4=L.CP4 AND E.CP3= L.CP3 AND E.NIF IS NOT NULL AND E.NIF <> ‘’ " & _
" AND NIF = " +sDSCENTIDAD & _
" ORDER BY E.DSCENTIDAD "
nota: também dá para fazer assim : " AND NIF = :NIF " & _
mas de seguida há que fazer sSql = Replace(sSql, “:NIF”,sText) ’ e, tantas vezes tantas quantos os parâmetros! Qualquer interface assume que =:Parametro?
oQuery.Add.parameter ?!?oResult = oQuery.executeQuery(sSql)
If Not IsNull(oResult) Then
while oResult.next()
txtNomeEmp.Text = oResult.getString(2) ' Nome da Empresa
txtMoradaEmp.Text = oResult.getString(3) ' Morada
txtCPALFAEmp.Text = oResult.getString(4) ' Código Postal /Zip Code
’ E, assim completo a morada da carta
wend
End If
Connection.close()
Funciona, mas com conflitos sempre tenho outra aplicação concorrente a usar a mesma base!?
É que não faz sentido ter 2 bases, como é bom de ver uma para lidar com o LibreOffice e outra
com o meu cliente em delphi ou lazarus?!
Alguém me dá uma ajuda? Obrigado