PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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és53Date d'inscriptionvendredi 31 mars 2006StatutMembreDernière intervention23 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és49Date d'inscriptionvendredi 15 août 2008StatutMembreDernière intervention10 septembre 2008 2 sept. 2008 à 11:57
Impecable,
t vraiment le boss.
Merci pour ce travail
cs_pluplu
Messages postés615Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention 4 juillet 2012 13 juin 2008 à 22:45
Merci PCPT, je vais réessayer tout cela
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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és4Date d'inscriptionmercredi 28 mai 2008StatutMembreDernière intervention29 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és13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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)
steavelawson
Messages postés4Date d'inscriptionmercredi 28 mai 2008StatutMembreDernière intervention29 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és4Date d'inscriptionmercredi 28 mai 2008StatutMembreDernière intervention29 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és13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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)
steavelawson
Messages postés4Date d'inscriptionmercredi 28 mai 2008StatutMembreDernière intervention29 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és13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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és615Date d'inscriptionmercredi 18 décembre 2002StatutMembreDerniè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 ??
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 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és13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 3 janv. 2008 à 14:59
Renfield -> dommage, apparemment seul access supporte '.Append ObjTable'
je continue mes recherches...
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 18 déc. 2007 à 20:08
j'adapterai dans la prochaine maj, merci ;)
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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és710Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention19 mai 20154 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és4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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.
30 sept. 2008 à 14:23
"- 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é
30 sept. 2008 à 10:23
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.
2 sept. 2008 à 11:57
t vraiment le boss.
Merci pour ce travail
13 juin 2008 à 22:45
8 juin 2008 à 22:23
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 ^^
29 mai 2008 à 19:35
et merci encore de m'avoir accordé un peu de ton temps.
29 mai 2008 à 15:50
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
++
29 mai 2008 à 15:23
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...
29 mai 2008 à 13:58
bon je potasse ca vite, vite , mon bosse me harcele
28 mai 2008 à 19:25
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 ;)
28 mai 2008 à 19:09
16 mars 2008 à 23:24
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 ;)
++
16 mars 2008 à 22:48
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]
13 janv. 2008 à 20:17
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
13 janv. 2008 à 18:00
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
++ ;)
3 janv. 2008 à 15:05
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.
3 janv. 2008 à 14:59
je continue mes recherches...
18 déc. 2007 à 20:08
17 déc. 2007 à 19:41
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
17 déc. 2007 à 17:31
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
++ ;)
17 déc. 2007 à 11:09
je suis entierement d'accord avec Exploreur,trés trés utile est super bien commenté.
@plus
petchy
17 déc. 2007 à 09:07
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
17 déc. 2007 à 09:00
est-ce que l'on peut utiliser des transactions ?