8
juin
2023
Comment exécuter une demande de LibreOffice CaLC à la base de données MySQL?
17:33

Comment exécuter une demande de LibreOffice CaLC à la base de données MySQL?

8 juin 2023 17:33

Dans l'article, je vous dis comment mettre en œuvre le remplissage des tables LibreOffice Calc данными с помощью запроса к LibreOffice BaSE associé à MySQL.

Préface

Comme je l'ai déjà dit, au travail, je dois effectuer une réconciliation entre la table MS Excel et la base de données MySQL. Les tables liées aux liens intermédiaires (externe) sont libreOffice Base. Реализация связи между BaSE et MySQL décrits Dans un article précédent, Ves dont les points doivent être effectués avant d'utiliser les macros CALC avec accès à la base de données.

Le but de cet article - Montrez comment faire une demande de Calc к Base и заполнять ячейки при помощи макросов. Данная статья посвящена "офисному программированию" в электронной таблице LibreOffice Calc и рассчитана на уровень начинающего программиста. Программные средства встроены в пакет LibreOffice. Предполагается, что дополнительные компоненты, MySQL, BaSE et le connecteur, qui sont mentionnés dans les deux articles précédents, sont configurés.

Schéma de connexion d'adhésion LibreOffice CaLC à la base de données MySQL

Ellema

DBMS MySQL <->mysql коннектор ODBC/JDBC <-> LibreOffice Base <-> Libreoffice CaLC

  • L'installation des SGBD MySQL est considérée dans l'article Comment réinstaller MySQL Server
  • Configurer la connexionmysql коннектора ODBC/JDBC и LibreOffice BaSe raconte dans l'article Comment tricoter LibreOffice BaSe avec mysql
  • _ Dans cet article, sera considéré comme une connexion de libreoffice Calc к LibreOffice BaSe et exécution demande SQL avec remplissage Le résultat de la demande Cellule électronique Tableau .

1. Introduction à la programmation LIBreOffice CaLC

Le manuel d'utilisation de LibreOffice est sur un PC local dans le dossier
Documentation SCalc (файл main0000.html)

cd /usr/share/libreoffice/help/ru/text/scalc/
xdg-open main0000.htmL.

Méthode de données externes, proposée dans le certificat Méthode d'insertion , voir le fichier Webquery.htmL.

CD / USr/share/libreoffice/help/ru/text/scalc/Guide
xdg-open webquery.htmL.

Ce n'est pas bon sans programmation, car il pour travailler avec des tables plates à partir des mêmes fichiers Calc / Excel, нас же интересует база данных LibreOffice Base. Поэтому обратился к документации по программированию LibreOffice BaSic

Help.libreoffice.org/latest/ru/text/sbasic/shared/main0601.htmL.

Pour y parvenir à la cellule, une fonction est écrite, par exemple:

Fonction workDay () Diablem sDay As StrInsigne SDAY = "Burning" Si nouskDay(Now) = 1 OR WeekDay (maintenant) = 7 alors sDay="выходной" Terminer si WorkDay=sDay Fonction finale

Élément de menu Service - Macros - Macros Management - Basic - À gauche, sélectionnez notre fichier et sur le clic droit de Create :
Nous soulignons tout - nous le supprimons. Nous insérons le texte - Enregistrer, fermer. Nous proposons le nom du fichier:
1) C.reate_macrO1
2) C.reate_macrO2
3) C.reate_macrO3
4) C.reate_macrO4

Sur la feuille de la cellule, nous écrivons le nom de la fonction avec des supports (dans lesquels les paramètres d'entrée peuvent être transmis),
avant le nom de la fonction dont nous mettons le signe "égal" ("=")
Feuille
Exemple:
= WorkDay ()
Et cliquez sur Entrer. Résultat:
Feuille2

2. Programmation à l'aide de bases de données

2.1 Afficher les noms enregistrés dans le système de base de données LIBreOffice BaSE

Les bases de données enregistrées peuvent être consultées dans le menu de n'importe quel programme à partir du package LibreOffice:
* Service - Paramètres -> *
libreOffice BaSE -> Bases de données **
registerÉlégant

Ajouter à cette liste se déroule dans libreOffice BaSE Lors de la création d'une nouvelle base de données: à la fin du maître, il est demandé - s'il faut enregistrer une base de données dans le système (par défaut - registre ):
registre

Exemples de bases de données:

chemin / home/user/.config/libreoffice/4/user/database/Biblio.odb
Nom BibliograPhy

Dans mon cas, j'ai créé une base de données Calc с таким же именем "primer"

chemin / home/user/primer.odb
Nom Primer

Le nom de la base de données ici peut être indiqué en russe. Aussi le nom de la base de données pour LibreOffice Base может отличаться от имени БД MySQL коннектора ODBC/JDBC).

Maintenant, la base de données LibreOffice Base зарегистрирована в системе. К ней можно делать запросы из электронной таблицы LibreOffice CaLc.

2.2. Utilisation de LibreOffice Calc для доступа к БД - макрос BaSic

Fonction SelPrice (ID) Unrror GoTo ErrorHandler Diablem dbContext, oDataSource, db, pstmT, Oresult, S. S = "" Si ce n'est pas un ismest (ID) alors dbContext = createUnoService("com.sun.star.sdb.Databasecontext ") DyerneataSource=dbContext.getByName("primer") Db = odataSourCe.getConnection ("", "") SQL = BuildSelectPrice (ID) Si sql "" alors TVPmt=db.prepareStatemEnt (SQL) ORESULT = PSTmt.executeQuery () Faire white oreult.next Si (s "") alors S = S + "," Terminer si S = S + ORESULT.getString (1) Boucle db.close db.dispose () Endire Endire Selprice = S. Retour E.rrorHandler: Fonction finale Fonction buildSelectPrice (id) SQL DIM Sql = "" Si ce n'est pas un ismest (ID) alors SQL = "SELECT Price FROM offers WHERE offer_id = "+ id Endire buildSelectPrice=sql Fonction finale

2.3. Utilisation de macros sur une feuille de calcul

Dans la cellule B2, nous écrivons un appel macro:
= Selprice (A2)

où A1 contient la maison d'édition (par exemple, 1). Dans la cellule C.alc будет выведена цена из базы данных LibreOffice BaSE, qui est associé à la base de données MySQL.
Le résultat lors de l'exécution d'une demande de sélection avec un paramètre d'entrée

2.4 Utilisation de plusieurs champs dans la demande de sélection

Code:

Fonction BuildSelectoffrPrice(id, status) SQL DIM Sql = "" Sinon Ismissing (ID)and Not IsMissing(staTus) alors SQL = "SELECT`price` FROM `offers` WHERE `offer_id` = " + id + " AND `display` = " + status Endire buildSelectOfferPrICE = SQL Fonction finale Fonction SelectactualPrice (ID, statut) unrror goto laBel Diablem dbContext, oDataSource, db, pstmT, Oresult, S. S = "" Sinon Ismissing (ID)and Not IsMissing(staTus) alors dbContext = createUnoService("com.sun.star.sdb.Databasecontext ") DyerneataSource=dbContext.getByName("primer") Db = odataSourCe.getConnection ("", "") SQL = BuildSelectofferPrice(id, status) Si sql "" alors TVPmt=db.prepareStatemEnt (SQL) ORESULT = PSTmt.executeQuery () Faire white oreult.next Si (s "") alors S = S + "," Terminer si S = S + ORESULT.getString (1) Boucle db.close db.dispose () Endire Endire SelectactualPrice = S. Étiquette: Fonction finale Le résultat est ci-dessous (dans la première colonne, le paramètre de fonction de déplacementay=1, а во втором display = 0): ![Le résultat lors de l'exécution d'une demande de sélection avec deux paramètres d'entrée](select-2params.png?lightbox&classes=img-zoomable "Результат при выполнении запроса SELECT с двумя входными параметрами") ### Débogage macro ЕслEt il sera nécessaire que vous puissiez définir le point d'arrêt dans le code macro et démarrer ** Données - le contenu de la cellule - Count (F9) **. Le curseur s'arrêtera au point d'arrêt. Ensuite, vous pouvez effectuer des opérateurs intégrés en étapes en utilisant la clé ** F8 ** - "Step avec une aspiration" ou ** Shift + F8 ** - "Étape avec le contournement." Pour voir l'erreur, vous devez définir un symbole de commentaire - apostrophe, si la fonction a une ligne ** 'sur error goto label** и сохранить макрос Файл - Сохранить. Затем нажимаем F9 и F8. Имена зарегистрированных баз данных можно увидеть после выполнения оператора `dbContext=createUnoService("com.sun.star.sdb.DatabaseContext")` - с помощью просмотра переменной объекта `dbContext`, в поле которого `ElementNamES` Valeurs de chaîne visibles des bases de données. Si lors de l'exécution de l'opérateur DB = ODataSource.getConnection("","") выдается исключение "[unixODBC][DriverManager]Data source name not found and no default driver specified at" , такое бывает когда файл базы \*.ODB, к которой обращаемся, к которой обращаемся, перенесён от другого пользователя. В ней некорректно настроена связь в Сервис-Связи. Проще удалить файл Libre Office Base (\*.ODB) и создать новый файл БД Base. В которой корректно настроить связь на коннектор ODBC/JDBC et le nom de la source de données sur cet ordinateur: ** Enregistrement d'une nouvelle base de données dans LibreOffice BaS, installation de communication avec une source ODBC externe ** 1. Courir libreOffice BaSE 2. Dans le maître "Connectez-vous avec la base de données existante" 3. ODBC 4. Suivant 5. Nom de la source ODBC - OK - OK 6. Suivant 7. Le nom de l'utilisateur est vide. Test de connexion. 8. Prêt 9. Indiquez le nom et l'emplacement de la base 10. Сохранить ! Cela est dit en détail dans l'article [Comment tricoter LibreOffice BaSe avec mysql](/kak-svyazat-libreoffice-base-s-mysql). Maintenant, la connexion fonctionne - dans la fenêtre LibreOffice Base видны таблицы внешней базы данных, и из CaLa macro LC démarre sans erreur. . Choisissez en base сохранить _"Файл" - "Сохранить как"_, сохраняем файл Base \*.ODB в домашнем каталоге пользователя с понятным именем. В Calc - соответственно, сохраняем электронную таблицу с макросами CaLc au fichier \ *. Ods. ### Informations de référence (Manuel d'utilisation pour la programmation) Documentation en LIBreOffice BaSic est sur le disque cd /usr/share/libreoffice/help/ru/text/sbasic/shared/ xdg-open main0601.htmL. Certificat LibreOffice BaSIC sur Internet, avec un exemple de connexion de base de données: *[Basic_guide](https://wiki.documentfoundation.org/Documentation/BASIC_Guide) Aide sur les objets uno: cd /usr/share/libreoffice/help/ru/text/sbasic/shared/ xdg-open uno_objects.html Certificat de contact de bases de données dans LibreOffice * [Documentfoundation.org -> DatabaSE_ACCESS](https://wiki.documentfoundation.org/Documentation/DevGuide/Database_Access) Certificat LibreOffice по источникам баз данных Data SourCES: * [Documentfoundation.org -> Data_Sources_in_LibrEoffice](https://wiki.documentfoundation.org/Documentation/DevGuide/Database_Access#Data_Sources_in_LibreOffice) ### Conclusion Demandes de libreOffice Calc к БД LibreOffice BaSe et plus loin au travail de MySQL. ### Autres liens, matériel de référence: Guide d'objet DBContext = CreateUnoService("com.sun.star.sdb.Databasecontext ") est donné dans des articles en anglais: * OpenOffice [D.ata SourCés](https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide/Data_Sources) * LibreOffice [D.atabase_Access#Databasecontex](https://wiki.documentfoundation.org/Documentation/DevGuide/Database_Access#DatabaseContext) * Exemples de code source [OpenOffice DatabaAccès SE](https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide/Database_Access) ---- ### Ajout. Remarque sur le stockage des macros Les macros peuvent être stockées dans le tableau très robuste Calc (\*.ODS), либо в общем хранилище макросов пользователя. Рекомендую первый способ, т.к. такие файлы можно переносить между дисками ПК или между пользователями без потери макросов. Второй способ - макросы хранятся в хранилище и утрачиваются при сбое жесткого диска ПК (т.к. в ODS файлах не при способе №2 они содержатся, это является проблемой). Поэтому лучше хранить макросы в ODS-файлах, а не в разделе "Мои макросы и диалоги" редактора BaSic.

Publications connexes