Connection par fichier ini

cs_serge99 Messages postés 78 Date d'inscription lundi 29 août 2005 Statut Membre Dernière intervention 14 octobre 2006 - 18 févr. 2006 à 13:59
nourwahiba Messages postés 82 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 23 juin 2011 - 18 févr. 2006 à 15:20
Bonjour,

Je travail sur un application dont la base de données sera palcée dans un répertoire spécifique à un projet donné. Donc, à chaque création d'un projet, une nouvelle base Access sera créer dans un sous dossier. Voila mon problème.; le "path" de ma base étant variable, je me demandais si il ne serai pas plus facile de créer un fichier de connection ini. Cependant, je n'y connait rien. J'ai bien vue sur ce site des sources expliquant comment écrire et lire un fichier ini mais je n'arrive pas à savoir comment l'utiliser. Est-ce que quelqu'un pourrait me donner un exemple d'un applic. donc la BD est ouverte par un fichier ini.

P.S. à l'ouverture de mon applic. j'utilise MKdir pour créer un répertoire "projet" puis , par code, je copie une BD Access que j'appelle "template". Voila.... où, quand et comment dois-je placer le code pour mon fichier ini.

merci énormément ;-)

2 réponses

nourwahiba Messages postés 82 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 23 juin 2011
18 févr. 2006 à 15:06
salam alikoum




1.PrivateDeclareFunction GetPrivateProfileString Lib "kernel32" Alias _


2. "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal _


3. lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString _


4. As String, ByVal nSize As Long, ByVal lpFileName As String) As Long


5.


6.PrivateDeclareFunction WritePrivateProfileString Lib "kernel32" Alias _


7. "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal _


8. lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long


9.


10.PrivateDeclareFunction WritePrivateProfileSection Lib "kernel32" Alias _


11."WritePrivateProfileSectionA" ( _


12. ByVal lpAppName As String, _


13. ByVal lpString As Any, _


14. ByVal lpFileName As String) As Long


15.


16.'Fonction pour lire une valeur dans un fichier INI


17.Function INIRead(Entete As String, Variable As String, Optional Fichier As String) As String


18.Fichier IIf(Fichier "" , App.Path & "" & App.EXEName & ".ini", Fichier)


19. INIRead = String(255, Chr(0))


20. INIRead = Left$(INIRead, GetPrivateProfileString(Entete, ByVal Variable, "" , INIRead, Len(INIRead), Fichier))


21.EndFunction


22.


23.'Fonction pour écrire une valeur dans un fichier INI


24.'La section spécifiée est créée automatiquement si elle n'existe pas déjà


25.Function INIWrite(Entete As String, Variable As String, Valeur As String, Optional Fichier As String) As String


26.Fichier IIf(Fichier "" , App.Path & "" & App.EXEName & ".ini", Fichier)


27. INIWrite = WritePrivateProfileString(Entete, Variable, Valeur, Fichier)


28.EndFunction


29.


30.'Fonction pour supprimer une valeur dans un fichier INI


31.Function INIDelete(Entete As String, Variable As String, Optional Fichier As String) As String


32.Fichier IIf(Fichier "" , App.Path & "" & App.EXEName & ".ini", Fichier)


33.INIDelete = WritePrivateProfileString(Entete, Variable, 0&, Fichier)


34.EndFunction


35.


36.'Fonction pour supprimer une section dans un fichier INI


37.Function INIDeleteSection(Entete As String, Optional Fichier As String) As String


38.Fichier IIf(Fichier "" , App.Path & "" & App.EXEName & ".ini", Fichier)


39. INIDeleteSection = WritePrivateProfileSection(Entete, 0&, Fichier)


40.EndFunction



voila je vous site cette exemple pour vous donner une idée

moi j'utilise un fichier texte pour recuperer le nom de ma base ainsi le nom de mon serveur

procedure pour lire d'un fichier


Function lit_fichier(fichier As String, numligne As Single)
Open fichier For Input As #1
For i = 1 To numligne
Line Input #1, serveur
Line Input #1, base


Next i

Close #1


End Function
FICHIER: le nom du fichier

exemple d'utilisation
: Call lit_fichier(App.Path & "\fichier.txt", 1)

procedure pour ecrire dans un fichier


Function ajoute_au_fichier(fichier, serveur As String, base As String)
Open fichier For Output As #1 ' Ouvre le fichier en écriture.



' Écrit des données séparées par des virgules.
Print #1, serveur
'Write #1, ' Écrit une ligne vierge.
Print #1, base
Close #1
End Function

exemple d'utilisation
Call ajoute_au_fichier(App.Path & "\application.txt", serveur, base)

si vous mal saisie mon application , je suis a votre service

bon courage
0
nourwahiba Messages postés 82 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 23 juin 2011
18 févr. 2006 à 15:20
j'ai fait une petite recherche sur http://znsoft.free.fr/vb9.htm
et voila cet article :


Accés aux fichiers en mode séquentiel :


Un fichier en accès séquentiel permet d'accéder à des ficher dont la structure est composée de lignes de texte, toutes fini par le code ASCII retour chariot + saut de ligne soit char(13) + char(10) en VB. Il y a 3 modes d'accès séquentiel :
Input : lecture seule


Output : accès en écriture, un tel accès détruit le contenu précédant.


Append : accès en écriture après le contenu actuel.


Dim nextline as string
dim canal as byte


Canal = Freefile
Open ' fichier.ini ' For Input as #canal
Do until EOF(canal)
Line Input #canal, nextline
textini.text = textini.text + nextline + vbcrlf
Loop
Close canal


On pourra alors récupérer le contenu de la ligne, connaissant la structure d'un fichier ini :


[Rubrique]


mot_clef= valeur


Grâce à une fonction utilisateur :


Function lectureINI(rubr As String, motclef As String) As String


Dim pos1, pos2, pos3
canal = FreeFile
Open "fichier.ini" For Input As canal
Do Until EOF(canal)
Line Input #canal, nextline
inivar = inivar + nextline + vbCRLF
Loop
Close canal
lectureINI = vbNullstring
rubr = "[" + rubr + "]"
pos1 = InStr(1, inivar, rubr) + Len(rubr) + 2
motclef = motclef + "="
pos2 = InStr(pos1, inivar, motclef) + Len(motclef) 'position du début de la réponse
pos3 = InStr(pos2, inivar, Chr(13)) 'position de la fin de la réponse
lectureINI = Mid(inivar, pos2, pos3 - pos2)
End Function


Qui s'utilise de la façon suivante :


valeur = lectureNI(" rubrique ", "Motclef")


On pourra ainsi écrire et modifier un fichier ini :


Function (ou sub) EcritureINI(rubr As String, motclef As String, param As string)


dim canal as byte
canal8 = FreeFile
Open "fichier.ini" For Input As canal8
Do Until EOF(canal8)
Line Input #canal8, nextline
inivar = inivar + nextline + vbCRLF
Loop
Close canal
rubr = "[" + rubr + "]"
pos1 = InStr(1, inivar, rubr) + Len(rubr) + 2
motclef= motclef + "="
pos2 = InStr(pos1, inivar, motclef) + Len( motclef)
pos3 = InStr(pos2, inivar, Chr(13))
inivar = Left(inivar, pos2 - 1) + param + Mid(inivar, pos3)
Close
canal = FreeFile
Open "fichier.ini" For Output As canal
Print #canal, inivar
Close canal
End Function





Le début reprend lectureINI. Celle là s'utilise de la façon suivante:


Newini = EcritureINI ("rubrique", "mot_clef", nouvelle valeur de typer chaine, ou str(valeur non chaine) )


Accés aux fichiers en mode Aléatoire :


Un fichier en accès aléatoire (appelé aussi accès direct ) est composé d’enregistrements ayant tous la même structure (même suite de même type d’une même longueur).
Pour cela, il faut définir un Type personnalisé de la façon suivante (de préférence à Général à Déclarations) :


Private type un_perso


Nom as string * 20
Prénom as String * 15
Age as Integer
Adresse as string * 80
End type


On pourra alors déclarer des variables de type un_perso de la sorte :


Dim perso as un_perso


Dim canal as byte
Canal = Freefile
Open "c:\mesprogs\classe.dat" For Random as canal len = len(perso)'Ouvre le fichier c:\mesprogs\classe.dat en accès aléatoire avec une longueur d'enregistrement égale à la longueur de la variable





Les Action de lecture/écriture se font là aussi grâce à Get et Put :


Get canal, 5, élève1 'Lit le 5ème enregistrement et la place dans élève1
Put canal, 1, élève1 'Ecrit le contenu de élève1 en première position de "classe.dat"


On peut noter que le premier élément d'un fichier porte l'indice 1 et non pas 0.


Et en finissant on ferme grâce à la commande :


Close canal 'ferme canal


Ou envcore


Close'ferme tous les fichiers ouverts. A utiliser avec parcimonie car elle pourrait fermer un fichier que l'on souhaite garder ouvert. Utile dans le Unload du projet pour s'assurer que tous les fichier sont bien fermés à la sortie du programme


Lire et écrire dans un fichier .ini grâce aux API windows :



Les fichiers .ini sont des fichiers texte utilisés pour enregistrer les options d'un programme. Ils sont composés de sections, qui contiennent des clés auxquelles on peut donner une valeur. Par exemple :

[Affichage]
State =Maximized
Left=50
Top=80
[Sauvegarde]
Confirm=True
Auto=False

Pour pouvoir respectivement lire et écrire dans un fichier .ini, voici les décarations que vous devez ajouter dans votre module :Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, _
ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" _
(ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, _
ByVal lpFileName As String) As Long

Voici ci-dessous la fonction qui écrira une valeur pour la clé et dans la section indiquée. Notez que vous n'avez pas besoin de créer le fichier s'il n'existe pas, car la fonction WritePrivateProfileString le fait pour vous.Private Function EcritDansFichierIni(Section As String, Cle As String, _
Valeur As String, Fichier As String) As Long
EcritDansFichierIni = WritePrivateProfileString(Section, Cle, Valeur, Fichier)
End Function

Et voyons maintenant la fonction qui nous retournera la valeur d'une clé dans une section donnée. ValeurParDefaut contient la valeur qui devra nous être retournée si le fichier n'existe pas, ou si aucune valeur n'a été spécifiée pour la clé demandée :Private Function LitDansFichierIni(Section As String, Cle As String, Fichier As String, _
Optional ValeurParDefaut As String = "") As String

Dim strReturn As String
strReturn = String(255, 0)
GetPrivateProfileString Section, Cle, ValeurParDefaut, strReturn, Len(strReturn), Fichier
LitDansFichierIni = Left(strReturn, InStr(strReturn, Chr(0)) - 1)

End Function

Le code nécessaire pour écrire la section [Affichage] du fichier donné en exemple sera :EcritDansFichierIni "Affichage", "State", "Maximized", "c:\config.ini"
EcritDansFichierIni "Affichage", "Left", "50", "c:\config.ini"
EcritDansFichierIni "Affichage", "Top", "80", "c:\config.ini"

Et nous pourrons lire la valeur donnée à la clef "Left" avec :LeftParam = LitDansFichierIni("Affichage", "Left", "c:\config.ini", 100)
0
Rejoignez-nous