[Résolu][Base] Comment utiliser la propriété ControlDefault
Modérateur : Vilains modOOs
Règles du forum
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
-
- Membre cOOnfirmé
- Messages : 297
- Inscription : 09 sept. 2010 19:06
[Résolu][Base] Comment utiliser la propriété ControlDefault
Bonsoir à tous,
Mon problème : je bute sur l'utilisation de la propriété 'ControlDefault' d'un champ.
Explication : j'ai un champ parasité avec une valeur par défaut du nombre 6, j'ai besoin de passer cette valeur à null par macro et non manuellement (corriger le champ serait trop simple). Mon code plante à la ligne 37, avez-vous une idée?
Un seul post dans le forum avec ControlDefault mais non significatif.
Merci par avance
Mon problème : je bute sur l'utilisation de la propriété 'ControlDefault' d'un champ.
Explication : j'ai un champ parasité avec une valeur par défaut du nombre 6, j'ai besoin de passer cette valeur à null par macro et non manuellement (corriger le champ serait trop simple). Mon code plante à la ligne 37, avez-vous une idée?
Un seul post dans le forum avec ControlDefault mais non significatif.
Merci par avance
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par plonge le 14 sept. 2019 14:48, modifié 1 fois.
LO version 7.4.5.1 sous windows 10 et 11 standard, java 1.8.0_341
-
- RespOOnsable forum
- Messages : 9254
- Inscription : 28 août 2010 08:45
Re: [Base] Comment utiliser la propriété ControlDefault
Bonjour,
Votre dernier message attend une suite.
Pensez-y afin de ne pas laisser en suspens un sujet que vous avez ouvert.
Votre dernier message attend une suite.
Pensez-y afin de ne pas laisser en suspens un sujet que vous avez ouvert.
Ajout : Message privé reçu de plonge le 10 Sep 2019 21:05
|
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
-
- IdOOle de la suite
- Messages : 25181
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Base] Comment utiliser la propriété ControlDefault
Comme d'habitude, on n'a pas forcément envie de télécharger moult documents.
Donc, nous faciliter le travail est un minimum qui se concrétise par :
Donc, nous faciliter le travail est un minimum qui se concrétise par :
- insérer dans le corps du message le code de la macro exposant le problème
- fournir un mode pas-à-pas permettant de reproduire ce qui a été fait ou ce que vous cherchez à faire pour arriver au problème
- ajouter des copies écran (situation avant / après) si cela permet de mieux comprendre
D'un champ QUOI ? Précise de quel type de contrôle de formulaire il s'agit.plonge a écrit :je bute sur l'utilisation de la propriété 'ControlDefault' d'un champ
-
- Membre cOOnfirmé
- Messages : 297
- Inscription : 09 sept. 2010 19:06
Re: [Base] Comment utiliser la propriété ControlDefault
Bonsoir Dude,
Je ne comprend vraiment pas ta demande?
1: la macro? Il n'y en a qu'une dans le fichier il suffit de la regarder.
2: pas à pas? Il suffit de lancer la macro pour voir que la ligne 37 bloque (en plus c'est précisé).
3: copie d'écran? le message, tu le vois en faisant fonctionner le code.
Tout est dit dans la ligne 37.
Le champ: voir ligne 37 champ DS valeur défaut = 6
Le formulaire ou le control?? Je ne veux nullement changer un contrôle de formulaire??
Précisions si tu ne comprend pas: il s'agit seulement de compléter ma ligne 37 de code pour que celle-ci change la valeur 6 à null du champ DS de la table tb_famille en utilisant du code rien d'autre. ControlDefault est donné par xray (que tu peux activer). pour te rendre compte.
Suis je claire pour toi.
A+
Je ne comprend vraiment pas ta demande?
1: la macro? Il n'y en a qu'une dans le fichier il suffit de la regarder.
2: pas à pas? Il suffit de lancer la macro pour voir que la ligne 37 bloque (en plus c'est précisé).
3: copie d'écran? le message, tu le vois en faisant fonctionner le code.
Tout est dit dans la ligne 37.
Le champ: voir ligne 37 champ DS valeur défaut = 6
Le formulaire ou le control?? Je ne veux nullement changer un contrôle de formulaire??
Précisions si tu ne comprend pas: il s'agit seulement de compléter ma ligne 37 de code pour que celle-ci change la valeur 6 à null du champ DS de la table tb_famille en utilisant du code rien d'autre. ControlDefault est donné par xray (que tu peux activer). pour te rendre compte.
Suis je claire pour toi.
A+
LO version 7.4.5.1 sous windows 10 et 11 standard, java 1.8.0_341
-
- IdOOle de la suite
- Messages : 25181
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Base] Comment utiliser la propriété ControlDefault
Qu'est ce que tu ne comprends pas dans :plonge a écrit :Je ne comprend vraiment pas ta demande?
Donc merci de publier le code de cette fameuse macro dans un message.Dude a écrit :on n'a pas forcément envie de télécharger moult documents
-
- Membre cOOnfirmé
- Messages : 297
- Inscription : 09 sept. 2010 19:06
Re: [Base] Comment utiliser la propriété ControlDefault
Re,
Cette discussion devient complétement stérile!
Le code pour le voir tu ouvre tout simplement le fichier joint 'ControlDefault.odb' joint au message de tête. C'est pourtant simple!
Je ne vois pas pourquoi tu ne veux pas ouvrir ce fichier???? Puisque de toute façon il faudra l'ouvrir pour résoudre le problème.
Néanmoins pour faire plaisir à Mr Dude , je vais publier ce code.
Dans ton prochain post ne me demande pas aussi de mettre la réponse, je ne l'ai pas.
Cette discussion devient complétement stérile!
Le code pour le voir tu ouvre tout simplement le fichier joint 'ControlDefault.odb' joint au message de tête. C'est pourtant simple!
Je ne vois pas pourquoi tu ne veux pas ouvrir ce fichier???? Puisque de toute façon il faudra l'ouvrir pour résoudre le problème.
Néanmoins pour faire plaisir à Mr Dude , je vais publier ce code.
Code : Tout sélectionner
Sub Modif()
Dim LaTable As String, listeNoms() As String, Latable1 As String
Dim maRequete As Object, lesTables As Object, uneTable As Object, lesColonnes As Object, laColonne As Object, Statement As Object, instrSQL As Object
Dim reponse As Boolean
Dim t As Long, i As Long, nombreColonnes As Long
Dim maConnexion AS Object
Dim props(0) As New com.sun.star.beans.PropertyValue
ThisDatabaseDocument.CurrentController.connect("","")
maConnexion = ThisDatabasedocument.CurrentController.ActiveConnection
lesTables = maConnexion.Tables
listeNoms = LesTables.getElementNames
t = 0
Do
If t = 1 Then
Exit Do
Else
Endif
If t = 0 Then
LaTable1 = "tb_famille"
LaTable = LaTable1
Else
Endif
reponse = LesTables.hasByName (LaTable)
If reponse then
uneTable = LesTables.getByName(LaTable)
lesColonnes = uneTable.Columns
nombreColonnes = lesColonnes.Count
for i = 0 to nombreColonnes -1
laColonne = lesColonnes(i)
If lacolonne.Name = "DS" Then
'xray lacolonne
' Ci-dessous il faut utiliser la propriété ControlDefault pour passer le valeur 6 à NULL mais comment???
instrSQL = "ALTER TABLE """ & LaTable & """ALTER COLUMN ""DS"" ControlDefault NULL"
maRequete = maconnexion.createStatement()
maRequete.executeUpdate(instrSQL)
maRequete.Close
MsgBox "Mise à jour -DS- faite. " & LaTable ' pour test
Exit Sub
End If
next i
Else
MsgBox("La table " & LaTable & " n'existe pas", 48, " ")
Exit Sub
Endif
T = T + 1
Loop
LesTables.refresh() 'A placer après chaque insertion dans une table
End Sub
LO version 7.4.5.1 sous windows 10 et 11 standard, java 1.8.0_341
-
- IdOOle de la suite
- Messages : 25181
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Base] Comment utiliser la propriété ControlDefault
Peut-être que si tu répondais aux autres sur ce forum, tu comprendrais.plonge a écrit :Je ne vois pas pourquoi tu ne veux pas ouvrir ce fichier????
Chaque semaine, tu as 100 questions donc je te laisse faire le calcul du nombre de documents à inspecter.
Revenons à ton code (enfin) publié, je vois ceci :
Code : Tout sélectionner
instrSQL = "ALTER TABLE """ & LaTable & """ALTER COLUMN ""DS"" ControlDefault NULL"
C'est une instruction SQL que je prends la peine de tester : Que dit le message d'erreur : ControlDefault n'existe pas en SQL
Où as-tu été pêcher ça ?
La syntaxe pour ALTER TABLE est à relire : http://hsqldb.org/doc/1.8/guide/ch09.ht ... le-section
Conclusion : pas besoin de télécharger quoi que ce soit.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
-
- Membre cOOnfirmé
- Messages : 297
- Inscription : 09 sept. 2010 19:06
Re: [Base] Comment utiliser la propriété ControlDefault
Re,
Si toi tu veux passer tes journées sur le forum c'est ton problème.
Je n'est pas attendu ton post pour répondre à des questions.
Mais bref ces remarques c'est toujours stérile, j'en revient à la question de base.
Je répète je suis OBLIGE de passer par du code.
avec xray laColonne
Si j'ai confondu les propriétés ou les colonnes il suffit de le dire.
S'obstiner à ne pas vouloir ouvrir un fichier à pour l'instant seulement servi à encombré le serveur de 5 messages inutiles.
Si toi tu veux passer tes journées sur le forum c'est ton problème.
Je n'est pas attendu ton post pour répondre à des questions.
Mais bref ces remarques c'est toujours stérile, j'en revient à la question de base.
Je répète je suis OBLIGE de passer par du code.
iciDude a écrit :Que dit le message d'erreur : ControlDefault n'existe pas en SQL
Où as-tu été pêcher ça ?
avec xray laColonne
Si j'ai confondu les propriétés ou les colonnes il suffit de le dire.
S'obstiner à ne pas vouloir ouvrir un fichier à pour l'instant seulement servi à encombré le serveur de 5 messages inutiles.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LO version 7.4.5.1 sous windows 10 et 11 standard, java 1.8.0_341
-
- IdOOle de la suite
- Messages : 25181
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Base] Comment utiliser la propriété ControlDefault
Tu mélanges des pommes et des bananes.
En l’occurrence, le langage SQL et l'accès à l'API.
Bis repetitae :
En l’occurrence, le langage SQL et l'accès à l'API.
Bis repetitae :
Une simple requête UPDATE permet de réinitialiser le champ de colonne à NULL.Dude a écrit :La syntaxe pour ALTER TABLE est à relire : http://hsqldb.org/doc/1.8/guide/ch09.ht ... le-section
-
- Membre cOOnfirmé
- Messages : 297
- Inscription : 09 sept. 2010 19:06
Re: [Base] Comment utiliser la propriété ControlDefault
Bon on reprend:
Pourquoi j'ai besoin de passer la valeur défaut du champ à nul par une macro et non par le SQL, par UPDATE ou autre.
Des tables existantes 'tb_famille' sont alimentées par un formulaire qui affecte ou non un '6' dans le champ 'DS' en fonction de certains critéres.
Mais comme le champ 'DS' contient la valeur par défaut ''6' celle-ci est affectée d'office au champ 'DS sans distinction.
Ces tables je ne les maîtrises pas. Donc je ne peux pas les corrigées directement.
Pour les corriger je suis obligé de mettre à disposition une nouvelle version des bases sans données, qui contient une procédure automatique de migration des tables avec données, alimentées par l'utilisateur final qui m'est inconnu. Les tables migrées contenant donc toujours des '6' dans tous les champs.
Ensuite dans cette nouvelle version dés que les anciennes tables sont incorporées dans la nouvelle version, je purge par macro automatique les tables des '6' parasites.
A ce moment l'utilisateur à retrouver une table correcte sous réserve que dans la macro j'ai pu effacer la valeur défaut '6' sinon, dés qu'il alimentera à nouveau la table le '6' sera mis sans distinction dans tous les champs'DS'.
D'où l'obligation de faire cela pour M A C R O.
Suis-je clair!
Pourquoi j'ai besoin de passer la valeur défaut du champ à nul par une macro et non par le SQL, par UPDATE ou autre.
Des tables existantes 'tb_famille' sont alimentées par un formulaire qui affecte ou non un '6' dans le champ 'DS' en fonction de certains critéres.
Mais comme le champ 'DS' contient la valeur par défaut ''6' celle-ci est affectée d'office au champ 'DS sans distinction.
Ces tables je ne les maîtrises pas. Donc je ne peux pas les corrigées directement.
Pour les corriger je suis obligé de mettre à disposition une nouvelle version des bases sans données, qui contient une procédure automatique de migration des tables avec données, alimentées par l'utilisateur final qui m'est inconnu. Les tables migrées contenant donc toujours des '6' dans tous les champs.
Ensuite dans cette nouvelle version dés que les anciennes tables sont incorporées dans la nouvelle version, je purge par macro automatique les tables des '6' parasites.
A ce moment l'utilisateur à retrouver une table correcte sous réserve que dans la macro j'ai pu effacer la valeur défaut '6' sinon, dés qu'il alimentera à nouveau la table le '6' sera mis sans distinction dans tous les champs'DS'.
D'où l'obligation de faire cela pour M A C R O.
Suis-je clair!
Dernière modification par plonge le 12 sept. 2019 19:36, modifié 1 fois.
LO version 7.4.5.1 sous windows 10 et 11 standard, java 1.8.0_341
-
- IdOOle de la suite
- Messages : 25181
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Base] Comment utiliser la propriété ControlDefault
Oui, très clair.
Donc, tu passes ta requête UPDATE par macro.
Comme tu le fais dans le code que tu exposes où tu lances ton ALTER TABLE.
Donc, tu passes ta requête UPDATE par macro.
Comme tu le fais dans le code que tu exposes où tu lances ton ALTER TABLE.
-
- Membre cOOnfirmé
- Messages : 297
- Inscription : 09 sept. 2010 19:06
Re: [Base] Comment utiliser la propriété ControlDefault
UPDATE ne marche pas pour résoudre le problème ci-dessus.
Si le code ci-dessous que j'ai écrit permet de purger le champ 'DS' du '6' indésirable, il ne permet nullement de supprimer la valeur par défaut du champ d'origine de la table.
C'est cela qu'il faut remettre à null, sinon l'erreur persiste.
Si le code ci-dessous que j'ai écrit permet de purger le champ 'DS' du '6' indésirable, il ne permet nullement de supprimer la valeur par défaut du champ d'origine de la table.
Code : Tout sélectionner
Sub Modifier
maConnexion = ThisDatabasedocument.CurrentController.ActiveConnection
Statement = maConnexion.createStatement()
instrSQL = "UPDATE ""tb_famille"" SET ""DS"" = NULL WHERE ""GENRE"" = 'AN' "
maRequete = maConnexion.createStatement()
nbLignesEcrites = maRequete.executeUpdate(instrSQL)
instrSQL = "UPDATE ""tb_famille"" SET ""DS"" = NULL WHERE ""GENRE"" = 'DC' "
maRequete = maConnexion.createStatement()
nbLignesEcrites = maRequete.executeUpdate(instrSQL)
instrSQL = "UPDATE ""tb_famille"" SET ""DS"" = NULL WHERE ""GENRE"" = 'SD' "
maRequete = maConnexion.createStatement()
nbLignesEcrites = maRequete.executeUpdate(instrSQL)
'MsgBox("Nombre d'enregistrements modifiés : " & nbLignesEcrites)
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LO version 7.4.5.1 sous windows 10 et 11 standard, java 1.8.0_341
-
- ManitOOu
- Messages : 2744
- Inscription : 16 avr. 2010 13:31
Re: [Base] Comment utiliser la propriété ControlDefault
Bonjour,
Avant tout je précise que Base n'est pas du tout mon terrain de jeu habituel
apparemment ça fonctionne (le champs se remet bien à zéro) mais j'aimerai que tu confirmes (ou pas) au cas où un truc m'échappe dans la compréhension du pb.
ensuite, si j'alimente la table manuellement, la valeur par défaut se met bien à zéro.
Ton code complet modifié en conséquence :
Avant tout je précise que Base n'est pas du tout mon terrain de jeu habituel
est-ce que tu peux tester :plonge a écrit :C'est cela qu'il faut remettre à null, sinon l'erreur persiste.
Code : Tout sélectionner
lacolonne.ControlDefault = ""
Ton code complet modifié en conséquence :
Code : Tout sélectionner
REM ***** BASIC *****
Option explicit
Sub Modif()
Dim LaTable As String, listeNoms() As String, Latable1 As String
Dim maRequete As Object, lesTables As Object, uneTable As Object, lesColonnes As Object, laColonne As Object, Statement As Object, instrSQL As Object
Dim reponse As Boolean
Dim t As Long, i As Long, nombreColonnes As Long
Dim maConnexion AS Object
Dim props(0) As New com.sun.star.beans.PropertyValue
ThisDatabaseDocument.CurrentController.connect("","")
maConnexion = ThisDatabasedocument.CurrentController.ActiveConnection
lesTables = maConnexion.Tables
listeNoms = LesTables.getElementNames
t = 0
Do
If t = 1 Then
Exit Do
Else
Endif
If t = 0 Then
LaTable1 = "tb_famille"
LaTable = LaTable1
Else
Endif
reponse = LesTables.hasByName (LaTable)
If reponse then
uneTable = LesTables.getByName(LaTable)
lesColonnes = uneTable.Columns
nombreColonnes = lesColonnes.Count
for i = 0 to nombreColonnes -1
laColonne = lesColonnes(i)
If lacolonne.Name = "DS" Then
lacolonne.ControlDefault = ""
Exit Sub
End If
next i
Else
MsgBox("La table " & LaTable & " n'existe pas", 48, " ")
Exit Sub
Endif
T = T + 1
Loop
LesTables.refresh() 'A placer après chaque insertion dans une table
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
AOO
LibreOffice
Debian 10 et 11
-
- Membre cOOnfirmé
- Messages : 297
- Inscription : 09 sept. 2010 19:06
Re: [Base] Comment utiliser la propriété ControlDefault
Bonsoir OOotremer971,
Brovo bien compris le problème, heureusement que tu dis ne pas être familiarisé avec base Le code marche bien et s'incorpore bien dans l'ensemble de ma procédure.
Si tu regarde l'image xray ci-dessus, c'est bien sur 'ControlDefault' qu'il fallait agir. Mais dans le fichier en tête j'ai mal interprété l'information. J'ai essayé d'agir sur le champ alors qu'il fallait agir sur la colonne.
Je laisse ce fil ouvert jusqu'à demain, si tu veux ajouter qq chose.
Encore merci.
Cordialement, plonge
Brovo bien compris le problème, heureusement que tu dis ne pas être familiarisé avec base Le code marche bien et s'incorpore bien dans l'ensemble de ma procédure.
Si tu regarde l'image xray ci-dessus, c'est bien sur 'ControlDefault' qu'il fallait agir. Mais dans le fichier en tête j'ai mal interprété l'information. J'ai essayé d'agir sur le champ alors qu'il fallait agir sur la colonne.
Code : Tout sélectionner
instrSQL = "ALTER TABLE """ & LaTable & """ALTER COLUMN ""DS"" ControlDefault NULL"
Encore merci.
Cordialement, plonge
LO version 7.4.5.1 sous windows 10 et 11 standard, java 1.8.0_341
-
- IdOOle de la suite
- Messages : 25181
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Base] Comment utiliser la propriété ControlDefault
Ca ne marche pas car il faut d'abord altérer la table pour que la colonne accepte le NULL.plonge a écrit :UPDATE ne marche pas pour résoudre le problème ci-dessus.
En clair et comme dit plus haut, deux requêtes SQL et 10 lignes de code plus tard :
Code : Tout sélectionner
Sub Modif()
sUrl = ThisDatabaseDocument.URL
oDC = CreateUnoService("com.sun.star.sdb.DatabaseContext")
oSrc = oDC.getByName(sUrl)
oDB = oSrc.getConnection("","")
oCnx = oDB.createStatement()
sReq = "alter table ""tb_famille"" alter column ""DS"" SET DEFAULT NULL"
sRet = oCnx.executeUpdate(sReq)
sReq = "update ""tb_famille"" set ""DS""=NULL"
sRet = oCnx.executeUpdate(sReq)
oCnx.dispose
msgbox "Nombre de MàJ : " & sRet
End Sub
Ce qui peut s'avérer coûteux dans le cas où le volume de données dans la table est important.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
-
- Membre cOOnfirmé
- Messages : 297
- Inscription : 09 sept. 2010 19:06
Re: [Base] Comment utiliser la propriété ControlDefault
Pourquoi compliquer les choses alors, que je demandais simplement de compléter ma macro de base ce qu'à bien compris OOotremer971.
LO version 7.4.5.1 sous windows 10 et 11 standard, java 1.8.0_341
-
- IdOOle de la suite
- Messages : 25181
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Base] Comment utiliser la propriété ControlDefault
En quoi ces 10 lignes de code sont plus compliquées ?
Je n'ai fait que corriger ta mauvaise syntaxe d'altération de table et la compléter par une mise à jour SQL.
Rien de plus simple.
Je n'ai fait que corriger ta mauvaise syntaxe d'altération de table et la compléter par une mise à jour SQL.
Rien de plus simple.
-
- Membre cOOnfirmé
- Messages : 297
- Inscription : 09 sept. 2010 19:06
Re: [Base] Comment utiliser la propriété ControlDefault
No comment.
LO version 7.4.5.1 sous windows 10 et 11 standard, java 1.8.0_341