[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.
camil
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 28 mai 2019 08:53

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

Message par camil »

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 modification par camil le 01 juil. 2019 10:02, modifié 1 fois.
LibreOffice 6.3.5 X64 - Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25173
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: Interdire caractère dans champ texte

Message par Dude »

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/v ... 18&t=49582
plonge
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 297
Inscription : 09 sept. 2010 19:06

Re: Interdire caractère dans champ texte

Message par plonge »

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

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 vous 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 7.4.5.1 sous windows 10 et 11 standard, java 1.8.0_341
camil
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 28 mai 2019 08:53

Re: Interdire caractère dans champ texte

Message par camil »

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/v ... 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/v ... =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 modification par camil le 01 juil. 2019 11:48, modifié 1 fois.
LibreOffice 6.3.5 X64 - Windows 10
camil
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 28 mai 2019 08:53

Re: Interdire caractère dans champ texte

Message par camil »


La modération vous 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.3.5 X64 - Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25173
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: Interdire caractère dans champ texte

Message par Dude »

camil a écrit : pour voir si il y a un gain de volume sur la base.
Déjà expliqué ici : https://forum.openoffice.org/fr/forum/v ... =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.
camil
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 28 mai 2019 08:53

Re: Interdire caractère dans champ texte

Message par camil »

Dude a écrit :Déjà expliqué ici : https://forum.openoffice.org/fr/forum/v ... =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.3.5 X64 - Windows 10