ADO HELPER - CLASSE D'AIDE MANIPULATION DE BASES DE DONNÉES ACCESS MYSQL SQLSERV

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 17 déc. 2007 à 09:00
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 30 sept. 2008 à 14:23
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45093-ado-helper-classe-d-aide-manipulation-de-bases-de-donnees-access-mysql-sqlserver-module-de-classe

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
30 sept. 2008 à 14:23
Fremarx -> merci :p

"- Où puis je trouver ma BDD sachant que j'utilise Easyphp pour le faire?"
=> comment çà "où"? physiquement tes bases en local sont dans le dossier d'easy-php, dans 'bin\database' je crois (je n'ai plus easyphp sur mon poste), dans un dossier à leur nom, contenant 2 à 3 fichiers par base

"- Est ce que le client aura besoin que je lui installe Easyphp"
=> le but des bases à connexion distante étant une base à joindre en lan ou en wan, le client n'a que besoin du MDAC pour le fonctionnement d'ADO, mais pas des outils d'administration ni d'un quelconque moteur

"- Dois je à chaque exécution lancer Easyphp?"
=> le poste serveur doit en effet avoir le MOTEUR MySQL de lancé.
il ne faut pas oublier qu'easyPHP n'est pas un moteur mais un PACK contenant le moteur PHP, le moteur mySQL, et des outils d'administration

d'autres packs existent (comme WAMP que je préfère personnellement pour le php). il n'y a pas forcément besoin de lancer tout le pack, c'est surtout le moteur MySQL qui doit être démarré
cs_Fremarx Messages postés 53 Date d'inscription vendredi 31 mars 2006 Statut Membre Dernière intervention 23 août 2010
30 sept. 2008 à 10:23
Très propre et très pro je me demande si nous autres arriverons à un tel niveau de programmation un jour.

Juste pour te dire que ton travail m'ôte une épine du pied je cherchais depuis belle lurette comment faire ce genre connexions.

Un question je ne sais pas si il faudrait la posée mais je le fais néanmoins. Je veux faire un programme avec comme pour BDD MYSQL, ma question est la suivante
- Où puis je trouver ma BDD sachant que j'utilise Easyphp pour le faire?
- Est ce que le client aura besoin que je lui installe Easyphp avant que le programme ne fonctionne correctement?
- Dois je à chaque exécution lancer Easyphp?
D'avance merci pour ton aide et merci pour ta source qui est très bien fournie.
ingstat Messages postés 49 Date d'inscription vendredi 15 août 2008 Statut Membre Dernière intervention 10 septembre 2008
2 sept. 2008 à 11:57
Impecable,
t vraiment le boss.
Merci pour ce travail
cs_pluplu Messages postés 615 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 4 juillet 2012
13 juin 2008 à 22:45
Merci PCPT, je vais réessayer tout cela
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
8 juin 2008 à 22:23
pluplu -> je repassais par là....
j'ai testé en posant un DataCombo (MSDATLST.OCX), le code suivant fonctionne :

AfAdo.SqlRequest = "SELECT * FROM `MOTS`;"
AfAdo.SqlExecute
Set DataCombo1.RowSource = Frm_Main.AfAdo.RSObjRecordSet(1)
DataCombo1.ListField = "Lib_Mot"

++ pluplu ^^
steavelawson Messages postés 4 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 29 mai 2008
29 mai 2008 à 19:35
bon finalement, après discussion avec le boss, il a décidé de repasser au DAO, plutôt que de poursuivre avec ADO. je vais continuer à chercher pour ma curiosité personnelle en son temps un peu plus tard!
et merci encore de m'avoir accordé un peu de ton temps.
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
29 mai 2008 à 15:50
à mon avis (mais pas certain, je ne touche pas trop à VBA et n'ai même pas le 2003 pour tester) tu as 2 références à ADO, peut-être une 2.5 et une 2.6, ou un truc dans ce goût là...

décoche les références ADO et recoche uniquement la bonne.

sous VB6, code fonctionnel avec ADO 2.7, 2.8 et 2.81
nb : 2.81 = 2.80 + sp1
(pas testé avec des versions antérieures)

tu peux éventuellement tester ta version MDAC avec ce snippet :
http://www.codyx.org/snippet_connaitre-version-mdac-installe_511.aspx

si ton MDAC n'est pas récent :
http://www.microsoft.com/downloads/details.aspx?displaylang=fr&FamilyID=6c050fe3-c795-4b7d-b037-185d0506396c

++
steavelawson Messages postés 4 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 29 mai 2008
29 mai 2008 à 15:23
il y a un petit souci dans la définition de la classe AfCls_ADO:
dans la section classe/objet tu as défini l'instruction suivante:Dim oStream As ADODB.Stream en regardant dans l'inspecteur d'objets ADODB, le membre Stream n'y est pas :(
qu'est ce qui pourrait faire l'affaire dans le modèle objet d'access2003?
l'autre souci c'est que je coche les références exigées, mais elles sont systématiquement décochées et j'ai un messagebox qui dit "nom de module, de projet ou de biblio déja utilisé" :(
merci d'avance...
steavelawson Messages postés 4 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 29 mai 2008
29 mai 2008 à 13:58
effectivement les classes n'ont pas besoin d'être changé, mais quant aux *.frm je vais les reconstituer manuellement pour les refaire dans access 2003.
bon je potasse ca vite, vite , mon bosse me harcele
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
28 mai 2008 à 19:25
ce qui pose problème est que mon projet est en VB6, access "pur" c'est du VBA ;)

néanmoins je ne pense pas que la classe ait besoin de modif pour être compatible, du moment que tu charges les bonnes références (précisées dans l'entête)

plus d'infos sur le contenu des sources :
http://www.vbfrance.com/doc/faq.aspx#vb_src

++ et merci pour ton comm ;)
steavelawson Messages postés 4 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 29 mai 2008
28 mai 2008 à 19:09
Fantastique boulot!! merci beaucoup, pour moi qui suis habitué à windev, ca me fait du dépaysement de bosser sous access(stage oblige). j'ai un développement en cours qui m'oblige à en passer par l'ADO; donc je potasse au possible ton oeuvre; néanmoins j'ai un petit souci. les *.frm posent pb à l'ouverture sous access 2003; j'ai pas encore bien capté ce qui se semble poser problème :((
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
16 mars 2008 à 23:24
salut Pluplu, merci pour ton comm.

umm, j'ai pas trop l'habitude d'utiliser d'objets pour faire les liaisons (d'où la classe...) donc :s

si tu peux me faire parvenir un projet complet (DBCombo <> DataCombo, etc....), je regarderai en détail.

à savoir que la classe renvoie tant un objet Recordset que Connection donc théoriquement tout est faisable ;)

++
cs_pluplu Messages postés 615 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 4 juillet 2012
16 mars 2008 à 22:48
Salut PCPT,

Génial ta classe pour simplifier la connexion entre divers bases de données. J'essaie par contre de relier un listfield d'un datacombo à un objet AfCls_ADO, et c'est un peu plus galère ça semble fonctionner pour la propriété ListField, mais je ne parviens pas pour la propriété Rowsource aurais tu une idée ??

DbcCategory.RowSource = MyAdo.RSObjRecordSet(1).??
DbcCategory.ListField = MyAdo.RSObjRecordSet(1).Fields![Category]
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
13 janv. 2008 à 20:17
Salut PCPT,

Pas eu vraiment bien le temps de bien regarder ta source en profondeur, mais déjà au niveau de la présentation du code c'est impécable(comme dans ton habitude)et au niveau fonctionnel pas encore fait tous les tests mais déjà, je peux dire que ta source va m'en faire voir de toutes les couleurs(dans le bon sens)...Je ne peux juste dire que c'est une source très bien pensée et réfléchie qui auras un avantage certains pour les débutants comme moi, même si la source et du niveau Initié(ce qui est normal), en la prenant tranquillement, je pense que l'on peut faire des sources plus très intéréssante et bien posée.

En tout cas un grand merci de ce que tu apportes aux débutants qui veulent se lancer dans les Bdd comme "moi"...

Et....effectivement c'est une belle surprise !

Notes : Le seul "truc" ((rien d'insurmontable),mais c'est moi...j'ai pas de chance..lol...tu le sais...lol..), faut lancer l'application en 1024*768...bouhhhh, mon 1024*768 il n'existe plus...

A+
Exploreur
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
13 janv. 2008 à 18:00
voilà une MAJ relativement importante, SQLSERVER200 est maintenant totalement fonctionnel et intégré, tant pour les créations de tables, listings de champs, requêtes, taille, duplication, compaquetage etc....
MYSQL a aussi bien évolué

j'ai aussi revu disons.. toute la todolist, voir le détail dans la source.

j'ai changé le niveau (1 vers 2) parce que c'est pas forcément si évident de s'y retrouver dans ces 1700 lignes....

pour rappel, le principal intérêt et de pouvoir communiquer avec des bases de types différents sans avoir à changer son code.

c'est à dire qu'il y aurait juste une ou 2 propriétés à changer (genre l'IP, le mot de passe) et rien d'autre, sacré gain, de temps non ^^

pour le moment la classe semble rencontrer un problème avec SQLSERVER2005 (délai dépassé mais je pense que l'erreur est fausse), je m'y pencherai plus tard

n'hésitez pas à tester et à me demander d'autres types de bases (fox, oracle, etc...) en précisant alors comment me procurer le moteur et/ou une base exemple pour les tests

++ ;)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 janv. 2008 à 15:05
j'ai fait ca pour access effectivement, pour un truc bien précis...
dans l'absolu, faudrait utiliser une belle requete CREATE TABLE.

actuellement, ca m'est utile pour mettre au point mes etats crystal.

je créé mes données, je les stockes dans une base access pour pouvoir relancer encore et encore mon état, même sans VB ouvert.
en 'production', j'envoie directement un recordset a mon etat, plus besoin de table. le coté éphémère de la chose a fait que je ne me suis pas cassé la tête avec une requete.
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 janv. 2008 à 14:59
Renfield -> dommage, apparemment seul access supporte '.Append ObjTable'
je continue mes recherches...
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
18 déc. 2007 à 20:08
j'adapterai dans la prochaine maj, merci ;)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 déc. 2007 à 19:41
par ADOX

Public Sub CreateTableFromRS(ByRef vsName As String, ByRef voRs As ADODB.Recordset)
Dim oCat As ADOX.Catalog
Dim oTable As ADOX.Table
Dim oField As ADODB.Field
Dim oColumn As ADOX.Column
Dim oRs As ADODB.Recordset
Set oCat = New Catalog
Set oCat.ActiveConnection = moConn

On Local Error Resume Next
oCat.Tables.Delete (vsName)
On Local Error GoTo 0

Set oTable = New Table
oTable.Name = vsName

oCat.Tables.Append oTable

For Each oField In voRs.Fields
Set oColumn = New Column
oColumn.Name = oField.Name
oColumn.Attributes = adColNullable
oColumn.Type = oField.Type
oColumn.DefinedSize = oField.DefinedSize
oTable.Columns.Append oColumn
Next oField

Set oRs = Me.OpenRecordset(vsName, adCmdTable, adLockOptimistic)

voRs.MoveFirst
Do Until voRs.EOF
oRs.AddNew
For Each oField In voRs.Fields
If Not IsNull(oField.Value) Then
oRs.Fields(oField.Name).Value = oField.Value
End If
Next oField
oRs.Update
voRs.MoveNext
Loop
oRs.Close
End Sub
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
17 déc. 2007 à 17:31
salut,
merci pour vos comms ;)

Rey -> pas bête pour créer une table depuis un RS. je mets dans la TODO ;)
par contre comment récupères-tu les types des champs?

pour les transactions, à ma connaissances ACCESS ne les supporte pas
on verra pour SQLSERVER
et pour MYSQL il faut que le serveur ne soit pas en autocommit (ce qui se change par la commande SET AUTOCOMMIT=0, supportée par l'execution simple de requête) et que la base le supporte
plus d'infos ici : http://dev.mysql.com/doc/refman/5.0/fr/commit.html

++ ;)
cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 mai 2015 4
17 déc. 2007 à 11:09
Bonjour

je suis entierement d'accord avec Exploreur,trés trés utile est super bien commenté.
@plus
petchy
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
17 déc. 2007 à 09:07
Salut PCPT,

Ouahhhhhh ! C'est ce qui s'appelle une source(comme les autres aussi !), très très utile....Et bien, voilà une source qui est bien posée, organisée, et très bien expliquée ! Les débutants comme moi, vont pouvoir atteindre un certains "niveau" dans la conception de source en relation avec les Bdd...

C'est super cool d'avoir fait cela...De plus encore une source qui est à la hauteur de son auteur !

Bon, j'arrête là les compliments et les félicitations...lol..(mais ils sont mérités), car j'ai une source à décortiquer !

Passe de bonnes fêtes....

A+
Exploreur
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 déc. 2007 à 09:00
dans une classe similaire que j'ai faite, j'ai mis une fonction pratique pour réaliser des etats... pendant la conception de ceux-ci, je créé une table a partir d'un RecordSet.

est-ce que l'on peut utiliser des transactions ?
Rejoignez-nous