LO Calc падает при обращении к sqlite_sequence БД SQLite из StarBasic

Автор ost, 29 апреля 2021, 06:31

0 Пользователи и 1 гость просматривают эту тему.

mikekaganski

Цитата: ost от 30 апреля 2021, 08:50
Цитата: economist от 29 апреля 2021, 13:36Следующий псевдокод (некогда) у меня отработал без ошибок:
У меня тоже. Супер! Спасибо.

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

Цитата: ost от 29 апреля 2021, 06:31
Для этого до и после исполнения "куска" запрашиваю значение поля "seq" из таблицы "sqlite_sequence" БД SQLite таким образом:

sSQL = "SELECT seq FROM sqlite_sequence WHERE name = """ & sTablNameInt &""""
oRs = MySet._CreateRowSet(DBName, sSQL)


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

ost

#16
Было и есть так.
К падению 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" та же.