Bonjour
J'ais fait pas mal de petites appli avec des bases acces.
J'ais utilisé du code trouver sur CodeArchiv (PureArea.net)
Utilisation d'odbc via la dll "ODBCCP32.DLL"
tu devra ecrire les requette en SQL
Exemple de code avec creation de lien odbc
si le lien odbc existe deja sur le micro seul des fonctions
pure sont necessaires.
Attention ce code ne marche pas tel que ! il faut une base acces etc ..
c'est juste un exemple !
Code : Tout sélectionner
#ODBCLibrary = 1 ; constante : Numero de dll ouverte en cours
#StringMemory = 1 ; constante : Numero de "AllocateMemory" en cours
;======================================================================================================================================================
; Procedure de Creation d'une source de donnée Utilisateur
;======================================================================================================================================================
Procedure.l MakeConnection(Driver.s, strAttributes.s)
Result = OpenLibrary(#ODBCLibrary, "ODBCCP32.DLL") ; Ouverture de la dll
If Result ; Si la dll est ouverte on continue
MyMemory = AllocateMemory(Len(strAttributes)) ; Allocation de la plage memoire
CopyMemory(@strAttributes, MyMemory, Len(strAttributes)) ; Copie des infos de la base de donnée "chaine" dans la plage memoire
For L = 1 To Len(strAttributes) ; Check the string in the memory space now
If PeekB(MyMemory + L - 1) = Asc(";") ; If you find a semicolon anywhere in the string
PokeB(MyMemory + L - 1, 0) ; Replace it with an empty character as the driver doesn't use it
EndIf ; End the current check
Next L ; Check the next byte
Result = CallFunction(1, "SQLConfigDataSource", 0, 1, Driver, MyMemory) ; Call the function you need from the ODBC library with the right details
FreeMemory(MyMemory) ; Liberation de la memoire
CloseLibrary(#ODBCLibrary) ; Fermeture de la dll
If Result ; Si la fonction de la dll fontionne elle renvoie 1
ProcedureReturn 1 ; et la procedure purebasic renvoie aussi 1 !
EndIf
EndIf ; Fin de la procedure
EndProcedure
Procedure DeleteConnection(Driver.s,name.s)
Result=OpenLibrary(#ODBCLibrary,"ODBCCP32.DLL")
If Result
strAttributes.s = "DSN="+ name
Result = CallFunction(1, "SQLConfigDataSource", 0,#ODBC_REMOVE_SYS_DSN,Driver,strAttributes)
CloseLibrary(#ODBCLibrary)
If Result
ProcedureReturn 1;MessageRequester("Info","DSN Delete",0)
EndIf
EndIf
EndProcedure
;======================================================================================================================================================
; debut du programme
;======================================================================================================================================================
;- Creation de la source de donnée Utilisateur (Mise en forme)
Driver.s = "Microsoft Access Driver (*.mdb)" ; Driver pour Acces
name.s = "MA_BASE" ; Nom de la source de donnée utilisateur ( DSN )
databasename.s = "\\chemin de la base\BASE_DE_DONNEES.mdb" ; Nom de la base ( avec chemin )
sysdbname.s = "\\chemin de la base \BASE_SYS.MDW" ; Nom de la base system ( avec chemin )
uid.s = "" ; Login Utilisateur
pwd.s = "" ; Mot de passe
strAttributes.s ="Server=APServer;Description=" + name + ";DSN=" + name + ";DBQ=" + databasename + ";SystemDB=" + sysdbname +";UID=" + uid + ";PWD=" + pwd + ";"
resultat=MakeConnection(Driver.s, strAttributes.s) ; Appel de la procedure
;===================== init du module base de données pour PureBasic ========================
If InitDatabase() = 0
MessageRequester("Erreur", "Pas de drivers ODBC", 0)
End
EndIf
; ======================= Ouverture de la console ===========================
OpenConsole()
ConsoleTitle("Recherche de code insee")
; ===================== Creation des variables ==============================
Utilisateur$ = "USER"
MotdePasse$ = "******"
ODBCDatabaseName$ = "MA_BASE"
LIBELLE_COMMUNE$.s
CODE_COMMUNE$.s
LenMax.l
Lentest.l = 0
Recherche$=""
PrintN("")
;=============== Demande entrez criteres de recherche ======================
Print("Entrez un masque de recherche ( 3 caracteres au moins !) : ")
Recherche$=Input()
;=========== Mise en forme du texte de la variable Request$ ===============
Request$ = "SELECT * FROM REF_COMMUNE WHERE LIBELLE LIKE '%" + Recherche$ + "%' ORDER BY LIBELLE"
;======================== Ouverture avec test de la base de donnée avec purebasic ! ===============
If OpenDatabase(0, ODBCDatabaseName$, Utilisateur$, MotdePasse$) = 0
MessageRequester("Erreur", "Impossible d'ouvrir Base de donnee",0)
End
EndIf
;===================== envoie d'une requette SQL avec test =================
If DatabaseQuery(Request$)=0
MessageRequester("Erreur", "erreur dans la requette SQL",0)
CloseDatabase(0)
End
EndIf
ClearConsole()
PrintN("")
PrintN("")
;============ Recherche du NB de carractere le plus long du champ LIBELLE =======
While NextDatabaseRow()
LIBELLE_COMMUNE$= GetDatabaseString(1)
Lentest=Len(LIBELLE_COMMUNE$)
If Lentest > LenMax
LenMax = Lentest
EndIf
Wend
;===================== envoie d'une requette SQL avec test =================
;=============== Relance de la même requette que plus haut ! ================
If DatabaseQuery(Request$)=0
MessageRequester("Erreur", "erreur dans la requette",0)
CloseDatabase(0)
End
EndIf
;========================= Mise en forme et affichage des libelle commune ==================
coul=4
While NextDatabaseRow()
LIBELLE_COMMUNE$ = GetDatabaseString(1)
CODE_COMMUNE$ = GetDatabaseString(0)
Repeat
LIBELLE_COMMUNE$ = LIBELLE_COMMUNE$ + "." ; Boucle ajout de "."
Until Len(LIBELLE_COMMUNE$) > (LenMax + 4)
ConsoleColor(15,coul)
PrintN(LIBELLE_COMMUNE$ + CODE_COMMUNE$)
If coul = 4
coul = 9
Else
coul = 4
EndIf
Wend
CloseDatabase(0)
resultat = DeleteConnection(Driver.s,name.s) ; destruction du lien ODBC
;
PrintN("")
PrintN("")
PrintN("Fin du programme [ENTER] pour Quitter !")
val$=Input()
End
; ExecutableFormat=Console