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

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

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

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2 3 »   Вниз
  Печать  
Автор Тема: Макрос копирования строки Calc в базу данных  (Прочитано 1086 раз)
0 Пользователей и 1 Гость смотрят эту тему.
AlexWorkStream
Новичок
*
Offline Offline

Сообщений: 47


« Ответ #15: 29 Сентябрь 2017, 13:28 »

поставьте птичку "Сохранить форматирование"
Оказывается все так просто ))). Спасибо, все работает.
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 314


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #16: 29 Сентябрь 2017, 13:34 »

А заодно подумайте о других птичках в этом окошке, может пригодятся.
Записан

AlexWorkStream
Новичок
*
Offline Offline

Сообщений: 47


« Ответ #17: 29 Сентябрь 2017, 13:44 »

Так, а теперь вылезла следующая проблема. Каким образом сменить тип столбца в готовой базе данных с date на integer? При смене - предлагает только удалить и создать новый столбец.
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 314


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #18: 29 Сентябрь 2017, 13:46 »

Сделайте заново таблицу в базе.
Записан

AlexWorkStream
Новичок
*
Offline Offline

Сообщений: 47


« Ответ #19: 29 Сентябрь 2017, 13:48 »

Это понятно, но я думал есть иные способы...
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 314


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #20: 29 Сентябрь 2017, 13:55 »

В офисной базе нет, но переделать таблицу в базе не сложно. Из старой таблицы переносите данные в кальк, создаёте новую пустую таблицу в базе и перетягиваете данные из калька в новую таблицу в базе. Мастер спросит "что перенести?", указываете "только данные".
Записан

economist
Ветеран
*****
Offline Offline

Сообщений: 761


« Ответ #21: 29 Сентябрь 2017, 14:50 »

Если движок СУБД HSQLDB - нужно очень внимательно создавать таблицы. Тот случай когда 7 раз отмерь - 1 раз отрежь. Ошибка с CDate связана 99% именно с типом столбца в Base.

Лучше всего создавать таблицы SQL-инструкцией CREATE TABLE... не полагаясь на конструктор-дизайнер. Созданные таблицы изменению не подлежат, создавайте в них столбцы "на будущее", не стесняясь их называть Rezerv1, Rezerv2 итп.

А еще - бойтесь HSQLDB - это база со странностями: только монопольный режим, нет ODBC-драйверов и грабельки повсюду. Из другого (не OpenOffice|LibreOffice) приложения - положить данные в HSQLDB очень сложно. Это как веганство/сыроедение, жить можно но...

Я не слышал ни об одной реальной HSQLDB-базе размером больше 1 Гб, даже об "учебных" не слышал. В то же время в BASE файлик odb, сcылающийся на SQLite через ODBC - у меня размером 6 Гб и работает быстрее чем то же самое, хранимое в не-файловых MySQL, PostgreSQL, FireBird (также в odb черезх ODBC). HSQL умер уже при размере 100 Мбайт, и это не только мой опыт.  
« Последнее редактирование: 29 Сентябрь 2017, 14:58 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
AlexWorkStream
Новичок
*
Offline Offline

Сообщений: 47


« Ответ #22: 29 Сентябрь 2017, 15:42 »

col1=oSheet.getCellByPosition(0,i).String   'первый столбец текущей строки
col2=oSheet.getCellByPosition(1,i).Value    'второй столбец текущей строки
col3=oSheet.getCellByPosition(2,i).Value    'третий столбец текущей строки
А если мне надо портировать текст, тогда как с этим быть?
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 314


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #23: 29 Сентябрь 2017, 17:14 »

col1=oSheet.getCellByPosition(0,i).String   'первый столбец текущей строки
col2=oSheet.getCellByPosition(1,i).Value    'второй столбец текущей строки
col3=oSheet.getCellByPosition(2,i).Value    'третий столбец текущей строки
А если мне надо портировать текст, тогда как с этим быть?
Я не понял вопрос Непонимающий

Первая строка в приведённом примере извлекает данные из ячейки Calc как текст (.String), а вторая и третья как значение (.Value), если в ячейке не число, то его числовое значение равно нулю.

При вставке данных в базу нужно следить чтобы данные соответствовали заявленным типам, если нужно, преобразовать типы перед вставкой.
Записан

AlexWorkStream
Новичок
*
Offline Offline

Сообщений: 47


« Ответ #24: 29 Сентябрь 2017, 18:57 »

извлекает данные из ячейки Calc как текст (.String), а вторая и третья как значение (.Value)
В том-то и дело, что при изменении на .String - выдает ошибку:

Ошибка времени выполнения BASIC.
Вызвано исключение
Type: com.sun.star.sdbc.SQLException
Message: Column not found: ПРИ.

В данном случае в ячейке текст - "при", в базе поле определено как ТЕКСТ(VARCHAR), но вставить текст не получается.
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 314


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #25: 29 Сентябрь 2017, 19:24 »

Message: Column not found: ПРИ.
Тут ясно сказано, что столбец по имени "ПРИ" не найден. Запрос состоит из перечисления столбцов и соответствующих им данных. Вы наверно, где-то ошиблись в запросе, поэтому данные воспринимаются как имя несуществующего столбца.
Записан

AlexWorkStream
Новичок
*
Offline Offline

Сообщений: 47


« Ответ #26: 29 Сентябрь 2017, 20:34 »

Вы наверно, где-то ошиблись в запросе
Перепроверил много раз, но так и не понял где ошибка. Если поменять .String на .Value и сменить в ячейках текст на значения, то все работает, а с текстом такая проблема...

Ниже пример макроса
Код:
Sub InsertIntoBase
Dim oSheet, oRange, db, oStatement, i%, col1, col2, col3, oSql$

oSheet=ThisComponent.CurrentSelection.getSpreadsheet    'лист на котором выделен диапазон с данными
oRange=ThisComponent.CurrentSelection.getRangeAddress   'выделенный диапазон любое число строк
db=ConnectToDataBase("КАТАЛОГ_Новая_База")   'Имя подключаемой базы
oStatement=db.createStatement

For i=oRange.startRow To oRange.EndRow
col1=oSheet.getCellByPosition(0,i).String   'первый столбец текущей строки
col2=oSheet.getCellByPosition(1,i).Value    'второй столбец текущей строки
col3=oSheet.getCellByPosition(2,i).String    'третий столбец текущей строки

'в запросе ниже заменить названия таблицы и полей
oSql="INSERT INTO ""КАТАЛОГ"" " & "(""ID"",""Дата создания"",""Составные артикула 1"") values " & _
"(" & col1 & "," & col2 & "," & col3 & ")"

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
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 314


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #27: 29 Сентябрь 2017, 20:47 »

Выложите на форум базу и документ кальк, если они большие, удалите лишнее, оставьте по десять строк.
Записан

AlexWorkStream
Новичок
*
Offline Offline

Сообщений: 47


« Ответ #28: 29 Сентябрь 2017, 20:49 »

Выложите на форум базу и документ
Ок, завтра выложу...
Записан
AlexWorkStream
Новичок
*
Offline Offline

Сообщений: 47


« Ответ #29: 30 Сентябрь 2017, 09:00 »

Выложите на форум базу и документ кальк
Сделал новый образец, но все равно ошибка столбца...

* База данных.odb (2.77 Кб - загружено 3 раз.)
* Таблица.ods (11.53 Кб - загружено 3 раз.)
Записан
Страниц: « 1 2 3 »   Вверх
  Печать  
 
Перейти в:  

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