ADOTable et valeur par défaut

Signaler
Messages postés
129
Date d'inscription
mercredi 4 février 2004
Statut
Membre
Dernière intervention
25 juillet 2012
-
informatixo
Messages postés
129
Date d'inscription
mercredi 4 février 2004
Statut
Membre
Dernière intervention
25 juillet 2012
-
Bonsoir le forum,

Je voudrais savoir s'il est possible de récupérer la valeur par défaut d'un champ Access (celle qui est paramétrée dans Access lors de la création des champs d'une table) avec un ADOTable ?

J'ai longuement cherché mais je n'ai pas trouvé. J'ai vu qu'il existait la propriété "Value", "Required" (qui correspond à l'option "Null interdit" dans Access) mais je n'ai rien sur la "valeur par défaut".

Sinon j'avais pensé à utiliser le composant serveur "TAccessApplication" mais là ça sent l'usine à gaz.

Merci d'avance pour l'aide que vous pourrez m'apporter.

Cordialement,
informatixo

Que la force soit avec vous !

1 réponse

Messages postés
129
Date d'inscription
mercredi 4 février 2004
Statut
Membre
Dernière intervention
25 juillet 2012
1
Bonsoir le forum,

J'ai trouvé une solution de contournement qui fonctionne mais qui n'est pas très pratique, mais bon, elle a moins le mérite de fonctionner.

Avant d'arriver à cette solution, j'ai commencé par essayer d'utiliser le composant serveur "TAccessApplication" mais j'ai rencontré des erreurs inattendues propres à Delphi 2005 sur ce genre de composant et j'ai donc du rapidement oublier cette idée.

Après quelques recherches supplémentaires, je me suis orienté vers VBA d'Access car l'utilisation de DAO permet d'accéder aux valeurs par défaut des champs.

Cette solution ne m'a pas satisfait car elle nécessitait de toujours faire suivre un module.bas dans chaque base de données Access afin de générer des fichiers ini contenant les valeurs par défaut pour pouvoir y accéder depuis Delphi.

J'en suis donc arrivé à la solution imparfaite, mais fonctionnelle, d'un script de type "VBScript" que je lance depuis Delphi grâce à la commande "ShellExecute" et qui me génère mes fichiers ini contenant les valeurs par défaut.

J'utilise cette commande avec 3 arguments, le premier avec le chemin et le nom de la base de données source, le deuxième avec le chemin et le nom de la base de données de destination et le dernier avec le chemin où doivent être stockés les fichiers ini.

Ainsi, je peux accéder aux valeurs et les contrôler depuis Delphi sans être dépendant d'un module à insérer dans chaque base de données.

J'avais peut-être espéré que "Mauricio" aurait eu une idée à ce sujet car il est performant dans les bases de données (que les autres membres ne se voient pas offensés mais c'est le seul que je connaisse dans ce domaine) quoique son dada soit plutôt le "Bde" que les composants ADO je crois.

Je vais donc donner mon script pour ceux qui rencontreront ce type de problème et qui chercherait une solution de contournement. Le voici :

If wscript.Arguments.Count = 3 Then

    ' Déclarations des variables et objets
    Dim Access, BaseDeDonnees, Table, Champ
    Dim strNomFichier, strSection, strCle, strValeur
    Dim ficFso, ficFichier
    Dim booErreurDetectee

    MsgBox "Début de la sauvegarde des valeurs par défaut. Veuillez attendre le message de confirmation de la fin de la sauvegarde.", vbInformation + vbOKOnly, "Information sur la sauvegarde"

    On Error Resume Next
    ' Gestion des valeurs par défaut de la base de données source.
   
    ' Permet de prendre la base de données courante comme base de données de travail.
    booErreurDetectee = False
    Set Access = CreateObject("Access.Application")
    Access.Visible = False
    Access.OpenCurrentDatabase(wscript.Arguments(0))
    Access.Visible = False
    Set BaseDeDonnees = Access.CurrentDb()
    Access.Visible = False
    If Err <> 0 then
        booErreurDetectee = True
    End If
   
    ' Chemin et nom du fichier ini.
    strNomFichier = wscript.Arguments(2) & "ValeurParDéfautSource.ini"

    ' Permet de créer le fichier ini source qui va recevoir les valeurs par défaut.
    Set ficFso = CreateObject("Scripting.FileSystemObject")
    Set ficFichier = ficFso.CreateTextFile(strNomFichier, True)
    If Err <> 0 then
        booErreurDetectee = True
    End If
   
    ' Cette boucle permet de parcourir toutes les tables et tous les champs de chaque table à la recherche
    ' d'une valeur par défaut et de l'enregistrer dans un fichier ini.
    For Each Table In BaseDeDonnees.TableDefs
        If Left(Table.Name, 4) <> "MSys" Then
            strSection = Table.Name
            ficFichier.WriteLine("[" & strSection & "]")
            If Err <> 0 then
                booErreurDetectee = True
            End If
            For Each Champ In Table.Fields
                If Champ.DefaultValue <> "" Then
                    ' Permet de récupérer et d'écrire les valeurs par défaut.
                    strCle = Champ.Name
                    strValeur = Champ.DefaultValue
                    ficFichier.WriteLine(strCle & "=" & strValeur)
                    If Err <> 0 then
                        booErreurDetectee = True
                    End If
                End If
            Next
           
            ' Permet de sauter une ligne.
            ficFichier.WriteLine("")
        End If
    Next

    ficFichier.Close
    Access.CloseCurrentDatabase
    Access.Quit
    Set Access = Nothing
    Set BaseDeDonnees = Nothing
    Set ficFso = Nothing
    Set ficFichier = Nothing   

    ' Gestion des valeurs par défaut de la base de données destination.
   
    ' Permet de prendre la base de données courante comme base de données de travail.
    Set Access = CreateObject("Access.Application")
    Access.Visible = False
    Access.OpenCurrentDatabase(wscript.Arguments(1))
    Set BaseDeDonnees = Access.CurrentDb()
    If Err <> 0 then
        booErreurDetectee = True
    End If

    ' Chemin et nom du fichier ini.
    strNomFichier = wscript.Arguments(2) & "ValeurParDéfautDestination.ini"

    ' Permet de créer le fichier ini destination qui va recevoir les valeurs par défaut.
    Set ficFso = CreateObject("Scripting.FileSystemObject")
    Set ficFichier = ficFso.CreateTextFile(strNomFichier, True)
    If Err <> 0 then
        booErreurDetectee = True
    End If

    ' Cette boucle permet de parcourir toutes les tables et tous les champs de chaque table à la recherche
    ' d'une valeur par défaut et de l'enregistrer dans un fichier ini.
    For Each Table In BaseDeDonnees.TableDefs
        If Left(Table.Name, 4) <> "MSys" Then
            strSection = Table.Name
            ficFichier.WriteLine("[" & strSection & "]")
            If Err <> 0 then
                booErreurDetectee = True
            End If
            For Each Champ In Table.Fields
                If Champ.DefaultValue <> "" Then
                    ' Permet de récupérer et d'écrire les valeurs par défaut.
                    strCle = Champ.Name
                    strValeur = Champ.DefaultValue
                    ficFichier.WriteLine(strCle & "=" & strValeur)
                    If Err <> 0 then
                        booErreurDetectee = True
                    End If
                End If
            Next
           
            ' Permet de sauter une ligne.
            ficFichier.WriteLine("")
        End If
    Next

    ficFichier.Close
    Access.CloseCurrentDatabase
    Access.Quit
    Set Access = Nothing
    Set BaseDeDonnees = Nothing
    Set ficFso = Nothing
    Set ficFichier = Nothing
   
    ' Gestion de la fin d'exécution du script lorsqu'il n'y a pas eu d'erreur.
    If Not booErreurDetectee Then
        ' Chemin et nom du fichier ini.
        strNomFichier = wscript.Arguments(2) & "EtatScript.ini"
       
        ' Permet de créer le fichier ini qui va recevoir l'état indiquant que le script est fini.
        Set ficFso = CreateObject("Scripting.FileSystemObject")
        Set ficFichier = ficFso.CreateTextFile(strNomFichier, True)
       
        ' Permet d'écrire les valeurs dans le fichier ini.
        ficFichier.WriteLine("[Script]")
        ficFichier.WriteLine("Fin=1")   
       
        MsgBox "Fin de la sauvegarde des valeurs par défaut.", vbInformation + vbOKOnly, "Information sur la sauvegarde"
    Else ' Ici nous sommes dans le cas où il y a une erreur.
        ' Chemin et nom du fichier ini.
        strNomFichier = wscript.Arguments(2) & "EtatScript.ini"
       
        ' Permet de créer le fichier ini qui va recevoir l'état indiquant que le script est fini.
        Set ficFso = CreateObject("Scripting.FileSystemObject")
        Set ficFichier = ficFso.CreateTextFile(strNomFichier, True)
       
        ' Permet d'écrire les valeurs dans le fichier ini.
        ficFichier.WriteLine("[Script]")
        ficFichier.WriteLine("Fin=0")

        MsgBox "Erreur lors de la sauvegarde des valeurs par défaut.", vbCritical + vbOKOnly, "Erreur lors de la sauvegarde"
    End If
   
    ficFichier.Close
    Access.CloseCurrentDatabase
    Access.Quit
    Set Access = Nothing
    Set BaseDeDonnees = Nothing
    Set ficFso = Nothing
    Set ficFichier = Nothing
End if

Comme je n'ai pas encore trouvé de réponse à ma question et que ma solution ne permet que de contourner le problème, je ne mettrais pas ce post en "Résolu".

Si d'autres personnes ont une autre approche du problème, une critique ou bien un commentaire à faire, je serais content de pouvoir lire leurs points de vue. C'est toujours que plus enrichissant.

Cordialement,
informatixo

Que la force soit avec vous !