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

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

21 Ноябрь 2017, 16:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Проблема сохранения данных в базе, после выполнения макроса  (Прочитано 240 раз)
0 Пользователей и 1 Гость смотрят эту тему.
AlexWorkStream
Новичок
*
Offline Offline

Сообщений: 45


« Стартовое сообщение: 13 Ноябрь 2017, 13:07 »

Столкнулся с интересной проблемой, после выполнения макроса
Код:
Sub InsertIntoBase

Dim oSheet, oRangeAddress, db, oStatement, i%, col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, oSql$

oSheet=ThisComponent.CurrentSelection.getSpreadsheet
oRangeAddress=oSheet.getCellRangeByName("A2").RangeAddress
db=ConnectToDataBase("КАТАЛОГ_Новая_База")
oStatement=db.createStatement

For i=oRangeAddress.startRow To oRangeAddress.EndRow
col1=oSheet.getCellByPosition(0,i).Value
col2=oSheet.getCellByPosition(1,i).String
col3=oSheet.getCellByPosition(2,i).String
col4=oSheet.getCellByPosition(3,i).String
col5=oSheet.getCellByPosition(4,i).String
col6=oSheet.getCellByPosition(5,i).String
col7=oSheet.getCellByPosition(6,i).String
col8=oSheet.getCellByPosition(7,i).Value
col9=oSheet.getCellByPosition(8,i).String
col10=oSheet.getCellByPosition(9,i).String


oSql="INSERT INTO ""Категории"" " & "(""ID"",""Категории (рус)"",...) values " & _
"(" & col1 & ",...)"

oResult=oStatement.executeQuery(oSql)
Next
DisconnectFromDataBase(db)
End Sub


'функция подключения к базе
Function ConnectToDataBase(dbName$) As Object

Dim dbContext As Object, oDataSource As Object
dbContext=createUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource=dbContext.getByName(dbName)
ConnectToDataBase=oDataSource.GetConnection("","")

End Function


'процедура отключения
Sub DisconnectFromDataBase(db As Object)

db.close
db.dispose()

End Sub

после закрытия Calc - данные в базе не сохраняются. Но если, после выполнения скрипта, открыть базу отдельно или по ctrl+shift+F4, тогда все сохраниться (ничего не делая, просто открыть и закрыть).

Может кто сталкивался с данной проблемой?
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 359


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 13 Ноябрь 2017, 13:28 »

А почему для INSERT используется executeQuery?..
Здесь пишут, что
Цитата:
XResultSet    executeQuery () raises (SQLException)
    executes the SQL query in this PreparedStatement object and returns the result set generated by the query. More...
 
long    executeUpdate () raises (SQLException)
    executes the SQL INSERT, UPDATE or DELETE statement in this com::sun::star::sdbc::PreparedStatement object. More...
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
AlexWorkStream
Новичок
*
Offline Offline

Сообщений: 45


« Ответ #2: 13 Ноябрь 2017, 14:05 »

А почему для INSERT используется executeQuery?..
С Update - все тоже самое. База не обновляется, пока ее не запустишь.
Получается как-то хитро, после выполнения макроса и обновления диапазонов, в которые импортируются данные из базы, так вот в этих диапазонах данные появляются, но после закрытия документа - все исчезает...
Записан
mikekaganski
Ветеран
*****
Offline Offline

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


« Ответ #3: 13 Ноябрь 2017, 14:41 »

oDataSource.flush() ?
Записан

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

Сообщений: 45


« Ответ #4: 13 Ноябрь 2017, 15:04 »

oDataSource.flush() ?
Если не трудно, подскажите где это использовать?
Записан
mikekaganski
Ветеран
*****
Offline Offline

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


« Ответ #5: 13 Ноябрь 2017, 15:06 »

Я просто предположил, исходя из API. Если это оно, то его нужно использовать в DisconnectFromDataBase
Записан

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

Сообщений: 45


« Ответ #6: 13 Ноябрь 2017, 16:06 »

Если это оно, то его нужно использовать в DisconnectFromDataBase
Спасибо, теперь все сохраняется. Получилось так:
Код:
Sub DisconnectFromDataBase(db As Object)

db.flush()
db.close
db.dispose()

End Sub
Только теперь вопрос, нужен ли dispose()?
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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