Fichier ini

marwouch Messages postés 10 Statut Membre -  
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour,

PCn.Execute "CREATE SCHEMA 'marwa';"
a = ini.GetSections(App.Path & "\configini")
AA = Split(a, Chr(0))
For i = 0 To UBound(AA)
key = ini.GetKeysInSection(AA(i), App.Path & "\configini")
champ = Split(key, Chr(0))
For j = 0 To UBound(champ)
val = ini.GetKeyValue(AA(i), champ(j), App.Path & "\configini")
PCn.Execute "CREATE TABLE 'marwa'. 'AA(i)'(champ(j) val PRIMARY KEY ('champ(0)'));"
Next j
Next i

j'utilise mysql 5.1 et workbench 5.2 CE
j'ai un erreur dans la requête de création des tables qui m'a cassé la tête(syntaxe)
S.V.P,si quelqu'un a une idée........

A voir également:

10 réponses

lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Je connais aussi très bien les appel à un fichier INI en VB6, mais sans connaitre ta classe c'est pas possible de trouver l'erreur.
Tu peu mettre le code de ta classe ?
A+
2
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Bonjour,
Je connais pas ton langage mais je connais bien les INI, tu ne devrais pas mettre..
a = ini.GetSections(App.Path & "\configini.INI")

A+
Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
1
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Y a BEAUCOUP plus simple que ça pour accéder aux fichiers INI.
Je fais petite recherche dans mes archives et te colle un BAS. Mais pas tout de suite (pas le temps maintenant).
1
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Voir la démo que j'ai ajouter
A+
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Ton projet est dans quel répertoire et le fichier fichier INI il est Où ?
Avec ta classe pas moyen d'ouvrir un INI ailleurs que dans le Root. et avec un autre nom que celui du projet et il me semble que c'est ça que tu veux faire.
ÉDIT : La fonction GetSection retourne toujours zéro
Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
1
marwouch Messages postés 10 Statut Membre
 
j'utilise vb6
0
marwouch Messages postés 10 Statut Membre
 
bon j'utilise un module classe appelé clsINI pour la gestion du fichier ini
après, dans ma forme j'ai mis Dim ini As New clsINI
pour que je puisse utiliser les différentes fonctions de ce module
0
marwouch Messages postés 10 Statut Membre
 
je suis sur que code du classe est juste parceque je l'ai testé,mais je veux créer une table dont les champs sont les keys du fichier ini et les types des champs sont les valeurs de ces keys,pour ce la j'ai crée les boucles for.
en tous cas voici le code du classe:

'********************************************************************************

Option Explicit

'The two API calls to read and write from the INI file
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 AppName$, ByVal KeyName$, ByVal keydefault$, ByVal FileName$)

'the INI file's path
Private var_INIFile As String
'What to return if no data is found
Private var_DefaultRetVal As String

Private Sub Class_Initialize()
    'when the object is created we set the default file name
    ResetINIFilePath
    'our default for no data is "" (vbNullString)
    var_DefaultRetVal = ""
End Sub

Private Sub primeINIFile()
    'Priming the INI file stops the API calls from complaining if the file doesn't exist
    'I'm pretty sure there is a better way to do this but for the sake of
    'ease I just open the INIFile for append (so we don't screw with the data
    'already in it) and then close it right away. If the file was already there nothing
    'happens otherwise the file gets created
    Open var_INIFile For Append As #1
    Close #1
End Sub

'****************************** Start Let Properties ******************************
Public Property Let INIFile(ByVal INIFileIn As String)
    'set the INI path
    var_INIFile = INIFileIn
End Property

Public Property Let DefaultReturnValue(ByVal RetVal As String)
    'set the default return value
    var_DefaultRetVal = RetVal
End Property
'****************************** End Let Properties ******************************

'****************************** Start Get Properties ******************************
Public Property Get INIFile() As String
    'return the INI path
    INIFile = var_INIFile
End Property

Public Property Get DefaultReturnValue() As String
    'return the default retun value
    DefaultReturnValue = var_DefaultRetVal
End Property
'****************************** End Get Properties ******************************

Public Sub ResetINIFilePath()
    'this sets the INI file to the programs path and exe name but adds a .ini on the end
    'ex: the program c:\iniTest\test.exe would have the INI file c:\iniTest\test.ini
    'this set up makes for easy refrence to the file
    
    'if we are running in the root folder app.path will have a \ on the end.
    If Right(App.Path, 1) = "\" Then
        var_INIFile = "C:\" & App.EXEName & ".ini"
    Else 'Otherwise we need to add our own.
        var_INIFile = "C:\" & App.EXEName & ".ini"
    End If
End Sub

'****************************** Start Create Methods ******************************
Public Sub CreateKeyValue(ByVal section As String, ByVal key As String, ByVal value As String, Optional ByVal INIFileLoc As String)
'************************************************************
'This little block of code is in all the sub and functions
'that use the INI file. Since there is a file variable that
'is set by default and can be modified by the user the
'INIFileLoc parameter is optional. This block of code checks
'to see if the argument was passed. If it was the UseFile var
'is set to the passed file if not it is set to the local file
'variable.
    Dim UseFile As String
    
    If IsMissing(INIFileLoc) Or INIFileLoc = "" Then
        UseFile = var_INIFile
    Else
        UseFile = INIFileLoc
    End If
'************************************************************
    'Debug.Print value
    'call the write profile string with all the parameters
    WritePrivateProfileString section, key, value, UseFile
End Sub

Public Sub CreateKey(ByVal section As String, ByVal key As String, Optional ByVal INIFileLoc As String)
    Dim UseFile As String
    
    If IsMissing(INIFileLoc) Or INIFileLoc = "" Then
        UseFile = var_INIFile
    Else
        UseFile = INIFileLoc
    End If
    
    'call the write profile string but since we only want to create a key but
    'not give it a value we pass "" (vbNullString) for the value
    WritePrivateProfileString section, key, "", UseFile
End Sub
'****************************** End Create Methods ******************************

'****************************** Start Get Methods ******************************
Public Function GetKeyValue(ByVal section As String, ByVal key As String, Optional ByVal INIFileLoc As String, Optional Default$) As String
    Dim RetVal As String
    Dim KeyLen As Integer
    Dim UseFile As String
    
    If IsMissing(INIFileLoc) Or INIFileLoc = "" Then
        UseFile = var_INIFile
    Else
        UseFile = INIFileLoc
    End If
    
    'call our priming function to be sure the file exists
    'primeINIFile
    
    'ok I just choose 255 as a nice number for the max length of data being retrieved
    'I think you can change it and the API calls will still work. It just creates a
    'string of that length in memory for the API call to write the results of it's action
    
    'to if the key is not found the contents of var_DefaultRetVal are returned
    RetVal = String$(255, 0)
    KeyLen = GetPrivateProfileString(section, key, Default, RetVal, Len(RetVal), UseFile)
    
    'return a null string if the return has 0 length
    If KeyLen = 0 Then
        GetKeyValue = Default
        
    Else ' or the key's value
        GetKeyValue = Left$(RetVal, KeyLen)
    End If
End Function

Public Function GetKeysInSection(ByVal section As String, Optional ByVal INIFileLoc As String) As String
    Dim RetVal As String
    Dim KeyLen As Integer
    Dim UseFile As String
    
    If IsMissing(INIFileLoc) Or INIFileLoc = "" Then
        UseFile = var_INIFile
    Else
        UseFile = INIFileLoc
    End If
    
    'prime the INI to make sure it exists
    primeINIFile
    
    'since we could have a lot of keys in one section we are going to use a 1024 char buffer
    RetVal = String$(1024, 0)
    KeyLen = GetPrivateProfileString(section, vbNullString, var_DefaultRetVal, RetVal, Len(RetVal), UseFile)
    
    'if no keys are found then return "" (vbNullString)
    If KeyLen = 0 Then
        GetKeysInSection = ""
    Else
        'if the retval is > 0 then return the results
        'since we are getting multiple keys but returning them as one string the
        'programer should use the split() function in the returned value with
        'chr$(0) being the delimiter
        GetKeysInSection = Left$(RetVal, KeyLen - 1)
    End If
End Function

Public Function GetSections(Optional ByVal INIFileLoc As String) As String
    Dim RetVal As String
    Dim KeyLen As Integer
    Dim UseFile As String
    
    If IsMissing(INIFileLoc) Or INIFileLoc = "" Then
        UseFile = var_INIFile
    Else
        UseFile = INIFileLoc
    End If
    
    'prime the INI to make sure it exists
    primeINIFile
    
    'since we could have a lot of sections in one file we are going to use a 1024 char buffer
    RetVal = String$(2000, 0)
    KeyLen = GetPrivateProfileString(vbNullString, vbNullString, var_DefaultRetVal, RetVal, Len(RetVal), UseFile)
    
    'if no sections are found then return "" (vbNullString)
    If KeyLen = 0 Then
        GetSections = ""
    Else
        'if the retval is > 0 then return the results
        'since we are getting multiple sections but returning them as one string the
        'programer should use the split() function in the returned value with
        'chr$(0) being the delimiter
        GetSections = Left$(RetVal, KeyLen - 1)
    End If
End Function
'****************************** End Get Methods ******************************

'****************************** Start Delete Methods ******************************
Public Sub DeleteKeyValue(ByVal section As String, ByVal key As String, Optional ByVal INIFileLoc As String)
    Dim UseFile As String
    
    If IsMissing(INIFileLoc) Or INIFileLoc = "" Then
        UseFile = var_INIFile
    Else
        UseFile = INIFileLoc
    End If
    
    'to delete the key's value just write a null string to it
    WritePrivateProfileString section, key, "", UseFile
End Sub

Public Sub DeleteKey(ByVal section As String, ByVal key As String, Optional ByVal INIFileLoc As String)
    Dim UseFile As String
    
    If IsMissing(INIFileLoc) Or INIFileLoc = "" Then
        UseFile = var_INIFile
    Else
        UseFile = INIFileLoc
    End If
    
    'to delete a key use the actual vbnullstring object ... for some reason
    'it behaves differently that passing the API ""
    WritePrivateProfileString section, key, vbNullString, UseFile
End Sub

Public Sub DeleteSection(ByVal section As String, Optional ByVal INIFileLoc As String)
    Dim UseFile As String
    
    If IsMissing(INIFileLoc) Or INIFileLoc = "" Then
        UseFile = var_INIFile
    Else
        UseFile = INIFileLoc
    End If
    
    'to delete a section it's the same thing as a key but we write a vbNullString
    'to the key name and value
    WritePrivateProfileString section, vbNullString, vbNullString, UseFile
End Sub
'****************************** End Delete Methods ******************************

'****************************** Start Rename Methods ******************************
Public Sub RenameKey(ByVal section As String, ByVal CurrentKey As String, ByVal NewKey As String, Optional ByVal INIFileLoc As String)
    Dim UseFile As String
    
    If IsMissing(INIFileLoc) Or INIFileLoc = "" Then
        UseFile = var_INIFile
    Else
        UseFile = INIFileLoc
    End If
    
    'make sure the file exists
    primeINIFile
    
    'woohoo code reuse!
    'get the value and create the new key
    CreateKeyValue section, NewKey, GetKeyValue(section, CurrentKey, UseFile), UseFile
    'delete the old key
    DeleteKey section, CurrentKey, UseFile
End Sub

Public Sub RenameSection(ByVal CurrentSection As String, ByVal NewSection As String, Optional ByVal INIFileLoc As String)
    Dim KeyList() As String
    Dim KeyCount As Integer
    Dim index As Integer
    Dim UseFile As String
    
    If IsMissing(INIFileLoc) Or INIFileLoc = "" Then
        UseFile = var_INIFile
    Else
        UseFile = INIFileLoc
    End If
    
    'makle sure the file exists
    primeINIFile
    
    'renaming a section works the same way.
    'we get all the key names into an array
    KeyList = Split(GetKeysInSection(CurrentSection, UseFile), Chr$(0))
    'get the number of keys
    KeyCount = UBound(KeyList)
    
    'for each key in the array
    For index = 0 To KeyCount
        'create the new key in the new section
        CreateKeyValue NewSection, KeyList(index), GetKeyValue(CurrentSection, KeyList(index), UseFile), UseFile
    Next index
    
    'delete the old section
    DeleteSection CurrentSection, UseFile
End Sub
'****************************** End Rename Methods ******************************

0
marwouch Messages postés 10 Statut Membre
 
merci bq pour votre attention
0
marwouch Messages postés 10 Statut Membre
 
oui c'est très utile mais,est ce que vous pouvez me corriger la requête?
0