Conectar a banco "externo" via Basic

Olá a todos! Uso o LO 4.4.7.2, com banco HSQLDB externo, em Ubuntu 12.04.

Preciso rodar uma consulta contra este banco a partir de um módulo BASIC. Eu consegui escrever a consulta apelando para este código:

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("DVMan")

If Not DataSource.IsPasswordRequired Then
  Connection = DataSource.GetConnection("","")
Else
  InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
  Connection = DataSource.ConnectWithCompletion(InteractionHandler)
End If

Statement = Connection.createStatement()
ResultSet = Statement.executeQuery("SELECT * FROM TB_DBT_DBTYPE") 

If Not IsNull(ResultSet) Then
  While ResultSet.next
    MsgBox ResultSet.getString(1) +" - " + ResultSet.getString(2)
  Wend
End If

Apesar de funcionar, ele depende de o banco de dados estar “registrado” no LO. Pergunta: há como estabelecer uma conexão com um banco, e depois rodar SQL contra ele, sem que ele esteja registrado no LibreOffice?

Preciso disso porque não quero depender que o cliente no qual o Base vai ser executado dependa de registrar o banco.

Grato pela atenção,

Fábio

Olá,


É possível estabelecer uma conexão com um banco não registrado ao se fornecer o caminho completo (incluindo o nome do arquivo mais extensão) ao método **getByName()** do **DatabaseContext**. O caminho deve estar no formato URL, então utiliza-se a função **convertToURL()**:
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
sCaminho = convertToURL( "/home/Nome_Usuário/Documentos/Exemplo.odb" )
DataSource = DatabaseContext.getByName( sCaminho )

Atte,

Obrigado de novo, Grafeno. Ainda não testei, mas pelo que eu aprendi sobre registrar bases, deve funcionar. :wink: (Inclusive estou vendo que precisarei montar o caminho, já que ora rodo numa máquina, ora em outra.