Page 2 sur 3
Publié : jeu. 20/mars/2008 14:40
par djmcg
Merci lionel_om, ces chouette.
Mais de nouveau même problème.
On dirais que je n'arrive pas a mettre l'odbc en route.
Je travaille avec PB 4.10 que je viens de télécharger me décidant enfin a m'y mettre après d'ailleurs quelques temps que je me le suis procuré.
j'ulise donc la fonction UseODBCDatabase() pour initialisé l'ODBC suivant l'aide et Resultat contient sistématiquement 0. Donc, je peux pas aller plus loin.
D'ou pourrait venir le problème ?
Tous les exemples trouvé, me donne la même chose.
Pourtant access 2000 fonctionne sur mon system et ce n'est pas une version pirate. Je crois savoir que le moteur est le 4.
Qui peut encore m'aider ?
Merci
Jean-Marie
Publié : ven. 21/mars/2008 17:30
par lionel_om
Donne un bout de code pour vérifier...
Sinon :
- le chemin d'acces au fichier est bien correcte ?
- Est-ce que tu as bien fermé Access avant d'exécuter ton prog ?
- Essaye de sauvegarder ta Base Access dans un format différent, je veux dire de la convertir: mode de compatibilité. Il me semble que j'ai déja eu ce pb. Faut la sauvée en version 97 je pense
Lio
Publié : ven. 21/mars/2008 21:33
par djmcg
oh oh,
Merci.
Je crois que je viens de mettre le doigt sur une solution.
J'étudie la possibilité puis-je viens l'exposé.
pour les futur débutants comme mois.
Parce-que la j'ai vraiment séché merci.
Merci pour ton aide.
Jean-Marie
Publié : lun. 24/mars/2008 15:32
par Kayne
Je n'arrive a faire fonctionner aucun de tes codes.
Code : Tout sélectionner
Enumeration 1
#ODBC_ADD_DSN ; Add a new user Data source.
#ODBC_CONFIG_DSN ; Configure (modify) an existing user Data source.
#ODBC_REMOVE_DSN ; Remove an existing user Data source.
#ODBC_ADD_SYS_DSN ; Add a new system Data source.
#ODBC_CONFIG_SYS_DSN ; Modify an existing system Data source.
#ODBC_REMOVE_SYS_DSN ; Remove an existing system Data source.
#ODBC_REMOVE_DEFAULT_DSN ; Remove the default data source specification section from the system information.
EndEnumeration
#ODBC_DRIVER_MSACCESS = "Microsoft Access Driver (*.mdb)"
Procedure.l MSAccess_AddConnection(name.s, database.s)
Protected attrs.s
attrs + "UID=" + ";"
attrs + "PWD=" + ";"
attrs + "DSN=" + name + ";"
attrs + "DBQ=" + database + ";"
attrs + "FIL=" + "MS Access;"
attrs + "Driver=" + "ODBCJT32.DLL;"
attrs + "DefaultDir=" + GetPathPart(database) + ";"
attrs + "Description=" + FormatDate("Créé le %dd-%mm-%yyyy, %hh:%ii:%ss;", Date())
ReplaceString(attrs, ";", #NULL$, 2)
ProcedureReturn SQLConfigDataSource_(#Null, #ODBC_ADD_DSN, #ODBC_DRIVER_MSACCESS, attrs)
EndProcedure
InitDatabase()
MSAccess_AddConnection("mabase","C:\Documents and Settings\Hugo\Bureau\mabase.mdb")
If OpenDatabase(1,"mabase","","") = 0
MessageRequester("Erreur","impossible d'ouvrir la base")
Else
MessageRequester("Info","Ok tout marche")
EndIf
La base ne peut jamais s'ouvrir et rien n'apparait dans l'Administrateur de source de donnée ODBC.
Publié : mar. 25/mars/2008 9:03
par lionel_om
Regarde les pistes que j'ai noté lors d emon dernier post...
Publié : mar. 25/mars/2008 15:44
par djmcg
Je crois que je m'en suis sorti.
Je suis entraint de tester.
JM
Publié : mar. 25/mars/2008 18:45
par Kayne
lionel_om a écrit :Donne un bout de code pour vérifier...
Ca c'est fait
lionel_om a écrit :- le chemin d'acces au fichier est bien correcte ?
Oui il est correct il y a bien une base de donnée mabase.mdb sur mon bureau
lionel_om a écrit :- Est-ce que tu as bien fermé Access avant d'exécuter ton prog ?
Oui il est fermé
lionel_om a écrit :- Essaye de sauvegarder ta Base Access dans un format différent, je veux dire de la convertir: mode de compatibilité. Il me semble que j'ai déja eu ce pb. Faut la sauvée en version 97 je pense
C'est ici que je comprend pas bien et ou il pourrait y avoir un pb. J'ai la version 2003 de acces (et 3.94 de pure),j'ouvre acces, je vais dans créer une nouvelle base de donnée puis a gauche base de donnée vide. Ensuite je met le fichier sur le bureau avec pour nom mabase et je choisi pour format mdb.
J'ai que le choix entre ça ou .mdw et .mda.
Et si c'était pour prendre une ancienne version, ca parait bizarre que la nouvelle version réduise le nombre de possibilitée.
Si tu pouvais m'aider je te serais reconnaissant.
(Ps: et si on pouvais faire un échange de lien, de ton site vers ma page de tutoriels purebasic .. Je te serait encore plus reconnaissant

)
Publié : jeu. 27/mars/2008 17:50
par lionel_om
Kayne a écrit :C'est ici que je comprend pas bien et ou il pourrait y avoir un pb. J'ai la version 2003 de acces (et 3.94 de pure),j'ouvre acces, je vais dans créer une nouvelle base de donnée puis a gauche base de donnée vide. Ensuite je met le fichier sur le bureau avec pour nom mabase et je choisi pour format mdb.
J'ai que le choix entre ça ou .mdw et .mda.
Et si c'était pour prendre une ancienne version, ca parait bizarre que la nouvelle version réduise le nombre de possibilitée.
Si tu pouvais m'aider je te serais reconnaissant.
Pour le format MDB c'est bon.
Mais ce "format" a évolué depuis Access 97. Et il me semble qu'il faut migrer vers une BDD Access 97 pour que PB puisse l'ouvrir. Par défaut, Access te crée une BDD de dernière génération. A toi de la convertir. C'est dans la de menu (mais je ne sais plus où et je ne suis pas en mesure de chercher n'ayant pas l'install avec moi).
Sinon attend les pistes de 'djmcg'.
Lio

Publié : jeu. 27/mars/2008 17:54
par Kayne
ok merci de ta réponse
Publié : ven. 28/mars/2008 0:42
par djmcg
Voila, j'arrive.
Je met en place le texte source et je vous le met.
J'ai du repartir d'un exemple dépouillé. Parce-que je n'y comprenait rien.
Et toujours maintenant. Si ce n'est que j'arrive a me connecter a une base existante que j'ai mis en place avec access 2000.
Dès que je peux je le met sur le site.
A bientôt.
Jean-Marie
PS.: Ma lenteur est du au fait que j'ai encore une étudiante qui a un travaille monstre. Ce n'est pas évident de ce lever a 5 heure du matin pour avoir l'ordi. Sachant que je souffre de douleur chronique au dos. J'ai parfois très difficile de me mettre a travailler.

Publié : ven. 28/mars/2008 9:17
par Kayne
Je l'ai converti en version 97 ça marche toujours pas ...
J'attends avec impatience les pistes de djmc ...
Publié : lun. 31/mars/2008 10:55
par djmcg
Bonjour a tous.
Voici enfin le code que je qualifie de minimum pour ouvrir une base de donnée ACCESS existante. Je doit ce code de plusieurs source mais c'est l'aide GL Gillou
http://lggillou.vbc3.com/index.php qui m'a transmit ce code minimum. Je l'en remercie. Je ne met pas de commentaire expliquant les procédure, parce-que je ne comprend pas tous et ma littérature ne me permet pas d'approfondir le sujet. Je ne connaît pas n'on plus l'anglais. Voici le code :
Code : Tout sélectionner
;- Constantes
; ----------
#ODBC_ADD_DSN = 1 ; Add Data source
#ODBC_CONFIG_DSN = 2 ; Configure (edit) Data source
#ODBC_REMOVE_DSN = 3 ; Remove Data source
#DataBase = 1
#DSN = "PureBasic_DSN"
#Driver = "Microsoft Access Driver (*.mdb)"
;- Variables
; ---------
File.s = "C:\MesProgrammes\LeBoulanger\LeBoulanger.mdb"
;- Procedures
; ----------
;** On ouvre la connection
; ----------------------
Procedure Makeconnection(Driver.s,Attributes.s)
result=OpenLibrary(1,"ODBCCP32.DLL")
If result <> 0
result = CallFunction(1, "SQLConfigDataSource", 0,#ODBC_ADD_DSN,Driver.s,@Attributes)
NewResult=SQLConfigDataSource_(0,#ODBC_ADD_DSN,Driver.s,@Attributes)
CloseLibrary(1)
EndIf
ProcedureReturn result
EndProcedure ; fin de MakeConnection
;===============================================================================
;** On ferme la connection
; ----------------------
Procedure DeleteConnection(Driver.s,DSN.s)
result=OpenLibrary(1,"ODBCCP32.DLL")
If result
strAttributes.s = "DSN="+DSN
result = CallFunction(1, "SQLConfigDataSource", 0,#ODBC_REMOVE_DSN,Driver,strAttributes )
CloseLibrary(1)
If result
ProcedureReturn 1
EndIf
EndIf
EndProcedure ; fin de DeleteConnection
;*******************************************************************************
;- Programme
; ---------
UseODBCDatabase()
If (Makeconnection(#Driver, "DSN="+#DSN+";Description=Access File;DBQ="+File+";"))
Database = OpenDatabase(#DataBase, #DSN, "", "")
If Database <> 0
MessageRequester("LeBoulanger", "ok "+Str(Database)) ; C'est cette ligne qui me permet de croire que ma base est ouverte.
EndIf
DeleteConnection(#Driver, #DSN) ; je la referme de suite. Je travaille sur la séquence qui va lire les données de ma table.
EndIf
Voila pour moi la suite, c'est lire, écrire, modifier, supprimer des enregistrements.
Je tiens à remercier tous ceux qui ici et sur d'autres forum prennent le temps de répondre aux question pas toujours très bien formuler. Merci pour votre AIDE.
Cela m'intéresserait que mes code soit vu et " critiquer " dans le bon sens du terme. Avis au candidat mentor. Je crois que je vais ouvrir un petit site ou je mettre les codes a disposition et au moins a vue.
Je peux utiliser le logo purebasic ? bien sûr en y indiquant les précautions qui s'impose. A savoir par exemple que PureBasic n'est en rien responsable de ce que j'écrit. J'ai d'autres question, conseil mais je vais les mettre dans hors sujet.
MERCI pour votre aide.
A bientôt.
Jean-Marie
j'allais oublié :
Il faut peut-être préciser, que je travaille sous Win Xp Pro, Que l'access sur ma machine est l'office 2000. Je crois que le moteur JET est le 4.0., PureBasic 4.10 et le jaPBe 3.8.3.697. Que j'ai laissé mes base d'origine.
Voila si vous avez besoin d'autres chose, posé votre question et je répondrait. Enfin si je sais.
Publié : lun. 31/mars/2008 17:32
par Kayne
Excellent, ca marche pour moi
Publié : lun. 31/mars/2008 21:01
par lionel_om
Bizarre :
Code : Tout sélectionner
Procedure Makeconnection(Driver.s,Attributes.s)
result=OpenLibrary(1,"ODBCCP32.DLL")
If result <> 0
result = CallFunction(1, "SQLConfigDataSource", 0,#ODBC_ADD_DSN,Driver.s,@Attributes)
NewResult=SQLConfigDataSource_(0,#ODBC_ADD_DSN,Driver.s,@Attributes)
CloseLibrary(1)
EndIf
ProcedureReturn result
EndProcedure ; fin de MakeConnection
Cette fonction appelle deux fois la mm fonction : "SQLConfigDataSource()", l'une de Windows, l'autre de la DLL (sans doute la mm).
Pouvez vous tester les deux valeurs "result" et "NewResult". Théoriquement, vous pouvez virer l'appelle de la DLL. Sinon c'est l'appel à la fonction SQLConfigDataSource_().
Et dans la procédure DeleteConnection() cet appel en doublons n'y est pas... Doit y avoir des choses qui restent à la fin...
Je vous conseille de jeter quelques coups d'oeils avant d'utiliser ça comme ça...
Lio

Publié : mer. 02/avr./2008 8:27
par djmcg
Merci pour votre aide.
En ce qui me concerne, la connections base de donnée est un sujet peux connu de moi. J'ai même un peux difficile de comprendre. Je n'ai jamais trouvé de tutoriel simple sur ce sujet.
Temps que je ne comprend pas mieux ce que cette procédure fait, je préfère pas y toucher pour l'instant.
Pouvez vous tester les deux valeurs "result" et "NewResult". Théoriquement, vous pouvez virer l'appelle de la DLL. Sinon c'est l'appel à la fonction SQLConfigDataSource_().
Quand au double appel de SQLConfigDataSource_() je me suis en effet posé la question sans pouvoir y remédier.
Il faut juste souligner que je retrouve cela dans plusieurs exemple. Voir par exemple "basic univers".
A noter que si je supprime l'appel a la DLL cela ne semble plus fonctionner.
Merci
Jean-Marie