Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

23 Март 2019, 06:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Message: [OOoBase] Отсутствует подключение к базе данных..  (Прочитано 221 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Kadet
Форумчанин
***
Offline Offline

Сообщений: 65


« Стартовое сообщение: 13 Март 2019, 17:20 »

Столкнулся с непонятным явлением. Может кто подскажет?
LO 6.2. OC Win 10 x64. Внешняя база Firebird 3.0, подключённая через ODBC.

Всё работает, "крутится вертится". Запросы выполняются, и SELECT и INSERT/UPDATE. В общем, как бы всё нормально.
Запускаю макрос, который сначала добавляет данные в таблицу (делает SQL поочерёдно delete, a затем insert). Этот шаг проходит без ошибок. А потом макрос должен открывать отчёт (report). И вот тут на строке oDoc.open сообщает, что нет подключения к базе данных.
Код:
Ошибка времени выполнения Basic.
Вызвано исключение
Type: com.sun.star.lang.WrappedTargetException
Message:
TargetException:
  Type: com.sun.star.sdbc.SQLException
  Message: [OOoBase] Отсутствует подключение к базе данных..

Код макроса:
Код:
Sub OpenReportZajavka(oEvent)
Dim oDoc
ON ERROR GOTO ErrRepZaj:
ZAKSaveNewPoz(oEvent)      'Процедура, где выполняются delete и insert
oDoc = ThisDatabaseDocument.ReportDocuments.GetByName("Заявка_на_производство")
oDoc.open                          'Тут выбрасывает ошибку
ErrRepZaj:
ON ERROR GOTO 0
End Sub
Не понятно почему и чего оно хочет. Вроде бы при работе с внешней базой имеется как бы две базы: внешняя Firebird и база LO .odb. Однако, SQL запросы говорят, что с подключением к FB всё нормально, а нормальное формирование oDoc говорит, что вроде бы и с  .odb всё нормально.
Причём появляется эта проблема не всегда, но часто.

Где копать?
« Последнее редактирование: 13 Март 2019, 18:01 от Kadet » Записан
Kadet
Форумчанин
***
Offline Offline

Сообщений: 65


« Ответ #1: 13 Март 2019, 18:38 »

Вместо простого варианта открытия отчёта пришлось делать сложно. (Эти функции я подсмотрел где-то здесь, только переработал малость).
Пока работает, завтра основательно протестирую, но непонимание причин всё же осталось.
Код:
Sub OpenReportZajavka(oEvent)
Dim oDoc
Dim oForm
Dim oDocDB
ON ERROR GOTO ErrRepZaj:
ZAKSaveNewPoz(oEvent)
' oDoc = ThisDatabaseDocument.ReportDocuments.GetByName("Заявка_на_производство")
' oDoc.open
sRepName$="Заявка_на_производство"
OpenReportDB(sDBURL, sRepName$)

ErrRepZaj:
ON ERROR GOTO 0
End Sub

'********************************************
Function OpenReportDB(sDBURL$, sRepName$)
Dim oDBDoc
Dim oRepDef
Dim oRepDocs
Dim oRepDoc
Dim oCon
Dim oBaseContext
Dim oDataBase
Dim InteractionHandler

Dim oParms() As New com.sun.star.beans.PropertyValue

oDBDoc = ThisDatabaseDocument
oRepDocs = oDBDoc.getReportDocuments()
oRepDef = oDBDoc.getReportDocuments().getByName(sRepName)

oBaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")

oDataBase = oBaseContext.getByName(sDBURL$)

InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")  
oCon = oDataBase.ConnectWithCompletion(InteractionHandler)

   AppendProperty(oParms(), "OpenMode", "open")
AppendProperty(oParms(), "ActiveConnection", oCon)

oRepDoc = oRepDocs.loadComponentFromURL(sRepName$, "", 0, oParms())

OpenReportDB() = oRepDoc

End Function

'*************************************************************
Function CreateProperty(sName$, oValue) As com.sun.star.beans.PropertyValue
Dim oProperty As New com.sun.star.beans.PropertyValue
oProperty.Name = sName
oProperty.Value = oValue
CreateProperty() = oProperty
End Function

'*********************************************************
Sub AppendProperty(oProperties(), sName As String, ByVal oValue)
AppendToArray(oProperties(), CreateProperty(sName, oValue))
End Sub

'*******************************************************
Sub AppendToArray(oData(), ByVal x)
Dim iUB As Integer 'The upper bound of the array.
Dim iLB As Integer 'The lower bound of the array.
iUB = UBound(oData()) + 1
iLB = LBound(oData())
ReDim Preserve oData(iLB To iUB)
oData(iUB) = x
End Sub
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!