Макрос копирования строки Calc в базу данных

Автор AlexWorkStream, 20 сентября 2017, 15:22

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

JohnSUN

Разумеется, ошибка.
Текст запроса выглядит как
INSERT INTO "Таблица1" ("ID","Число 1","Число 2","Текст") values (1,2,3,Привет)
"Привет" - это строка, значит нужно её взять в одиночные кавычки
INSERT INTO "Таблица1" ("ID","Число 1","Число 2","Текст") values (1,2,3,'Привет')
Сделать это можно или в коде, как рекомендовал rami ("красные кавычки"), или вписав эти одинарные кавычки прямо в ячейку (т.е. не просто Привет, а 'Привет', как на картинке
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

economist

#31
Кстати, еще один довод за другие движки СУБД/RDBMS в OpenOffice|LibreOffice BASE, с отказом от "встроенного" в неё HSQLDB.

С той же SQLite - в кавычки нужно брать только явные строковые литералы типа 'Привет' из поста выше , а имена таблиц, полей и их псевдонимы без пробелов (даже на русском!) - прекрасно обходятся без дурацких кавычек!


INSERT INTO Таблица1 (ID, Число1, Число2, Текст) values (1,2,3, 'Привет')


Это преимущество выражается в одном простом наблюдении:

Количество нажатий клавиш клавиатуры при написании SQL-запроса - при использовании SQLite в 2(!) раза меньше, чем в HSQLDB. Скорость получения готового запроса - в 1,5 раза быстрее. А число ошибок - ниже в 3 раза. Проверено электроникой, то есть экспериментально.

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

AlexWorkStream


ArsKam

Здравствуйте!
Прошу извинить, если не по теме.
Можно ли скопировать строку (или часть) поиском в папке с ods-файлами?
ВПР же не ищет по закрытым и нескольким файлам.
По примеру того, как работает grep в linux, findstr.exe в windows или select-string в powershell.
Возможен ли такой макрос в Basic, заполняющий строку по искомому значению в 1м столбце рабочего файла?
Или макрос на Python или создать БД из целевых файлов и обрабатывать средствами LO Base?

economist

Непонятно что за ODS и почему их много. Если ODS-ки регулярно правятся - то простейший макрос при закрытии сбросит лист в TXT с заменой, незаметно для пользователя .
А затем уже grep / findstr.exe / select-string.

С этими же TXT можно сделать ODB-базу данных (подключив папку через ODBC/ISAM - каждый файл окажется отдельной таблицей в ней), и использовать всю мощь SQL для отбора строк. Для объединения таблиц будет достаточно простого запроса типа:

SELECT * FROM Книга1 WHERE ФИО="Иванов"
UNION
SELECT * FROM Книга2 WHERE ФИО="Иванов"

Если Python - то библиотека типа pyexcel-ods https://pypi.org/project/pyexcel-ods/
Производительность её не знаю, но если как у openpyxl для XLSX - то там все превосходно.
Если что-то нужно делать с данными - стоит читать сразу в Pandas, есть библа для ODS.

Есть и консольные утилиты для вытаскивания текста из ODS, например тут в обсуждении: https://www.dokuwiki.org/plugin:docsearch?s[]=docsearch&s[]=plugin   
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

ArsKam

Спасибо.
Думаю, широко я размахнулся)
Цитата: economist от 12 декабря 2019, 21:47Непонятно что за ODS и почему их много. Если ODS-ки регулярно правятся
ods-таблицы с дневным распределением товара в кол-ве за год или два, как архив. Моя задача скопировать последнее распределение по каждой товарной позиции при новом поступлении.
Цитата: economist от 12 декабря 2019, 21:47можно сделать ODB-базу данных (подключив папку через ODBC/ISAM - каждый файл окажется отдельной таблицей в ней), и использовать всю мощь SQL для отбора строк. Для объединения таблиц будет достаточно простого запроса типа:

SELECT * FROM Книга1 WHERE ФИО="Иванов"
UNION
SELECT * FROM Книга2 WHERE ФИО="Иванов"

Наверное, как для малознающего, будет проще импортировать эти таблицы в новую базу в LO Base, но 1я пробная попытка не удалась.

economist

Цитата: ArsKam от 13 декабря 2019, 09:01ods-таблицы с дневным распределением товара в кол-ве за год или два, как архив. Моя задача скопировать последнее распределение по каждой товарной позиции при новом поступлении.

Выложите короткий файл-пример. ODS может ссылаться сам на себя и выводить "последнее":
- формулами
- макросами
- SQL-запросом через ODB к самому себе 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

ArsKam

#37
пока ищу нужный товар программой DocFetcher (раньше искал встроенным поиском Windows), вручную открываю последний файл с ним и копипастаю распределение. Потом из него тоже буду копипастить, когда придёт новый номер издания.