[Résolu]Interdire caractère dans champ texte

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur: Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.

[Résolu]Interdire caractère dans champ texte

Messagepar camil » 28 Juin 2019 09:15

Bonjour,
Je prépare une exportation de mes tables en fichiers csv délimités par point-virgule; comme j'ai des champs [VARCHAR] je voudrais interdire la saisie du point-virgule dans ceux-ci - Point-virgule ou autre caractère choisi.
Existe-t-il une méthode simple ou dois-je passer par une macro qui contrôle les caractères après chaque saisie ?
Je ne demande pas la macro, juste savoir si c'est possible autrement.
Merci d'avance
Dernière édition par camil le 01 Juil 2019 11:02, édité 1 fois.
LibreOffice 6.1.6.3 X64 - Windows 10
camil
Membre lOOyal
Membre lOOyal
 
Message(s) : 33
Inscrit le : 28 Mai 2019 09:53

Re: Interdire caractère dans champ texte

Messagepar Dude » 28 Juin 2019 16:52

Déjà à l'origine, le séparateur dans un CSV, c'est la virgule.
Si tu lis la définition dans Wikipédia, tu verras que pour contourner le problème, les champs texte doivent être délimités par des guillemets.
Et si le champ lui-même des guillemets, ils sont doublés.

L'export de table en CSV est disponible via une extension : https://forum.openoffice.org/fr/forum/viewtopic.php?f=18&t=49582
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 20920
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: Interdire caractère dans champ texte

Messagepar plonge » 30 Juin 2019 07:39

Bonjour camil,
Si tu veux t'orienter sur une macro, voici un bout de code qui contrôle avant une action si un caractère interdit existe (ici = ?). Le code est activé par un bouton avec l'événement Exécuter l'action. Le champ à contrôler est dans une grille.
A tester
Code : Tout sélectionner   AgrandirRéduire
Sub CaractInterdits(oEv as Object)
Dim oGrille as Object,oForm As Object
Dim propFich(0) As New com.sun.star.beans.PropertyValue
Dim sRep as String, strQR as String
Dim intx As Variant
Dim LaDate As String, sInput As String
Dim iPos As Integer, iPosN As Integer
   sRep = getDirectory(ThisDatabaseDocument.getURL)
   sRep = sRep & "S-rép1/S-s-Rép2/"   ' chaîne des s/rép pour la recherche (si nécessaire)
   oForm = oEv.Source.Model.Parent
   oGrille = oForm.getByName("MainForm_Grid")
' On teste déjà les données à la recherche de caractères interdits
   MsgBox ("Reherche des caractéres interdits. ",0,) = 0
   With oForm
      .AfterLast
      .beforeFirst
      For intx = 0 to .Rowcount -1
         .next
         strQR = oGrille.getByName("Nom de la grille").CurrentValue
         sInput = strQR
         iPos = Instr(sInput,"?")   '? est le caractére interdit recherché
         If iPos > 0 Then   'si oui on sort
            iposN = Instr(sInput, "Né(e)"   ' champ de la recherche
            iPosN = iPosN - 2
            LaDate = Left(sInput, iPosN)
            MsgBox ("Caractère interdit détecté = ?  dans " & LaDate & "  Vous devez fermer le formulaire, modifier votre saisie et recommencer! " , 16,) = 6
            Exit Sub
         End If
      Next
   End With            
End Sub

Function getDirectory(URLPath As String) As String
Dim parts As Variant
   parts = split(URLPath, "/")
   parts(UBound(parts())) = ""
   getDirectory = join(parts, "/")
End Function


La modération a écrit:ne pas poursuivre ici.
Nous vous rappelons que cette section n'est pas dédiée aux macros.
Lorsque vous avez une proposition en ce sens, merci d'orienter le demandeur vers la section appropriée sans donner de réponse ici.
LO version 6073 et 6262 sous windows 10 standard, java 1.8.0_221
plonge
Membre cOOnfirmé
Membre cOOnfirmé
 
Message(s) : 270
Inscrit le : 09 Sep 2010 20:06

Re: Interdire caractère dans champ texte

Messagepar camil » 01 Juil 2019 10:56

Dude a écrit:Déjà à l'origine, le séparateur dans un CSV, c'est la virgule.
Si tu lis la définition dans Wikipédia, tu verras que pour contourner le problème, les champs texte doivent être délimités par des guillemets.
Et si le champ lui-même des guillemets, ils sont doublés.
Bon d'accord, C de CSV signifie comma, je n'avais jamais fait le rapprochement... C'est vrai que lorsqu'on importe un csv LibreOffice demande de préciser le caractère délimitant.
J'arrête donc d'appeller csv le fichier que je veux produire, ça sera un TXT - Pour l'instant j'ai choisi le chr(124), je ne sais pas quel nom il porte, celui-là;
Dude a écrit:L'export de table en CSV est disponible via une extension : https://forum.openoffice.org/fr/forum/viewtopic.php?f=18&t=49582
Je ne veux pas utiliser une extension mais une macro.
En fait je bricole suite à ce fil :https://forum.openoffice.org/fr/forum/viewtopic.php?f=9&t=60451 - J'utilise Firebird intégré.
Je veux un bouton dans un formulaire qui enchaîne "Export vers TXT - Vider les tables - Réimport des données", pour voir si il y a un gain de volume sur la base.
Je viens juste de réussir l'export, me reste à faire l'import, je ne peux rien en dire de plus à cet instant. J'irai là-bas dire ce que ça donne quand j'aurai bouclé.
Dernière édition par camil le 01 Juil 2019 12:48, édité 1 fois.
LibreOffice 6.1.6.3 X64 - Windows 10
camil
Membre lOOyal
Membre lOOyal
 
Message(s) : 33
Inscrit le : 28 Mai 2019 09:53

Re: Interdire caractère dans champ texte

Messagepar camil » 01 Juil 2019 11:02


La modération a écrit:ne pas poursuivre ici.
Nous vous rappelons que cette section n'est pas dédiée aux macros.
Lorsque vous avez une proposition en ce sens, merci d'orienter le demandeur vers la section appropriée sans donner de réponse ici.
Je n'avais pas prêté attention à votre message.
Je suis là parce que je bataille avec Firebird, mais j'arrête le tir ici...

Merci à plonge pour le bout de code, il va m'être utile
LibreOffice 6.1.6.3 X64 - Windows 10
camil
Membre lOOyal
Membre lOOyal
 
Message(s) : 33
Inscrit le : 28 Mai 2019 09:53

Re: Interdire caractère dans champ texte

Messagepar Dude » 02 Juil 2019 13:29

camil a écrit: pour voir si il y a un gain de volume sur la base.

Déjà expliqué ici : viewtopic.php?f=9&t=60451
La documentation de FireBird sur GFix mentionne qu'il n'y a pas besoin de compresser.
La méthode de nettoyage consiste simplement à effectuer une sauvegarde de la base de données.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 20920
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: Interdire caractère dans champ texte

Messagepar camil » 03 Juil 2019 07:53

Dude a écrit:Déjà expliqué ici : viewtopic.php?f=9&t=60451
Oui, je surveille ce sujet aussi.
Dude a écrit:La méthode de nettoyage consiste simplement à effectuer une sauvegarde de la base de données.
Mais je ne vois pas comment sauvegarder une base intégrée.
LibreOffice 6.1.6.3 X64 - Windows 10
camil
Membre lOOyal
Membre lOOyal
 
Message(s) : 33
Inscrit le : 28 Mai 2019 09:53


Retour vers Base de données

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)