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

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

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

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2   Вниз
  Печать  
Автор Тема: LO Calc падает при обращении к sqlite_sequence БД SQLite из StarBasic  (Прочитано 719 раз)
0 Пользователей и 1 Гость смотрят эту тему.
mikekaganski
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 2 080


« Ответ #15: 30 Апрель 2021, 09:08 »

Следующий псевдокод (некогда) у меня отработал без ошибок:
У меня тоже. Супер! Спасибо.

Позвольте, а как же понимать тогда начальное сообщение:

Для этого до и после исполнения "куска" запрашиваю значение поля "seq" из таблицы "sqlite_sequence" БД SQLite таким образом:
Код:
sSQL = "SELECT seq FROM sqlite_sequence WHERE name = """ & sTablNameInt &""""
oRs = MySet._CreateRowSet(DBName, sSQL)

Я из этого делал вывод, что до и после "исполнения куска" вызывается MySet._CreateRowSet, который каждый раз заново создаёт экземпляр сервиса? Это было не так?
Записан

С уважением,
Михаил Каганский
ost
Форумчанин
***
Offline Offline

Сообщений: 175


« Ответ #16: 30 Апрель 2021, 09:38 »

Было и есть так.
К падению LO приводит повторный (после выполнения вставки в БД записей) вызов функции.

Падает при повторном выполнении:
Код:
DbName = "JRIDp64"
oConn = MySet._ConnectToDataBase(DbName)
sSQL = "SELECT max(ROWID) FROM " & sTablNameInt
oRs = MySet._CreateRowSet(DBName, sSQL)


Код:
Function _CreateRowSet(sDBName, sSQLCommand as String)
'===Функция создает объект RowSet из имени базы и SQLкоманды
RowSet = createUnoService("com.sun.star.sdb.RowSet")
RowSet.DataSourceName = sDBName
RowSet.CommandType = com.sun.star.sdb.CommandType.COMMAND
RowSet.EscapeProcessing=False

RowSet.Command=sSQLCommand
RowSet.execute() ' выполняем
_CreateRowSet=RowSet
End Function '_CreateRowSet
Код:
Function _ConnectToDataBase(sDbName as String) as Object
'===Функция подключения к Базе данных
Dim oDbContext As Object, oDataSource As Object
dbContext=createUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource=dbContext.getByName(sDbName)
oConn=oDataSource.GetConnection("","")
_ConnectToDataBase=oConn
End Function '_ConnectToDataBase


Успешно выполняется:
Код:
DbName = "JRIDp64"
oConn = MySet._ConnectToDataBase(DbName)
sSQL = "SELECT max(ROWID) FROM " & sTablNameInt
oRs = MySet._CreateRowSet1(oConn, sSQL)


Код:
Function _CreateRowSet1(oConnection as Object, sSqlCommand as String)
oStatement = oConnection.createStatement()
oRowSetSeq = oStatement.executeQuery(sSqlCommand)
_CreateRowSetStatement = oRowSetSeq
End Function '_CreateRowSet1

Функция "_ConnectToDataBase" та же.



« Последнее редактирование: 30 Апрель 2021, 09:45 от ost » Записан
Страниц: « 1 2   Вверх
  Печать  
 
Перейти в:  

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