ADODC et app.apth ???

Résolu
Galaad9999 Messages postés 27 Date d'inscription mardi 27 juillet 2010 Statut Membre Dernière intervention 27 août 2010 - 9 août 2010 à 18:16
Galaad9999 Messages postés 27 Date d'inscription mardi 27 juillet 2010 Statut Membre Dernière intervention 27 août 2010 - 12 août 2010 à 17:14
Bonjour,

J'utilise actuellement sur ma feuille (form VB6) un composant adodc.
Lors de la création de ce dernier, je remplis, en cliquant sur les '...' de la propriété ConnectionString dans la fenêtre Propriété du composant, les différentes propriétés que sont ConnectionString, RecordSource et CommandType.

Mon problème est le suivant, la propriété ConnectionString est complétée via un Browse, de ce fait, il ne m'est pas possible de changer la DB de place.

En fait, je crée cette appli sur 2 PC différents (maison et boulot) et je suis alors obliger de simuler un drive H: (comme au boulot);

Comment faire dés lors pour pouvoir changer mon appli de répertoire (sans me soucié de la DB puisqu'elle se trouve dans le même répertoire que l'appli) ?

J'ai chercher pas mal en fait, mais il semblerait que cette méthode de création soit moins utilisée que celle qui consiste à créer une instanciation de la classe "connexion", idem pour le RecordSource, etc....

Voilà j'espère être assez clair.....


"There are 10 kinds of people. Those who understand binary notation, and those who do not."

10 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
10 août 2010 à 01:17
Génère ta chaine de connexion comme ça :
Public Function Db_GetConnString(Optional FileName As String =  "") As String
 Dim S As String
 S = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=@path;User Id=admin;Password=;"
 If FileName "" Then FileName App.EXEName & ".mdb"
 S = Replace(S, "@path", App.Path & "" & FileName)
 Db_GetConnString = S
End Function


Et dans ton Form_Load :
Private Sub Form_Load
 Me.Adodc1.ConnectionString  = Db_GetConnString("tonFichier.mdb")
 Me.Adodc1.Refresh
End Sub


Truc à ne pas oublier : tu dois effacer la propriété ConnectionString de l'objet dans l'IDE de VB6.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
3
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
12 août 2010 à 09:21
Pour t'éclairer un peu,[list][*] Database.AffectAdodc Me.Adodc, "SELECT * FROM Users;" : j'utilise la sub du module Database en lui passant en référence l'objet Adodc du formulaire sur lequel on se trouve et le query SQL à lui donner.[*] rs.Close: Set rs = Nothing : là j'ai effectivement mis deux commandes sur une ligne. rs.Close libère les ressources utilisées à l'exécution du query et Set rs = Nothing détruit l'objet et libère la mémoire qui lui était allouée./list

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
3
Galaad9999 Messages postés 27 Date d'inscription mardi 27 juillet 2010 Statut Membre Dernière intervention 27 août 2010
11 août 2010 à 01:07
Bonjour,

Un tout grand merci . Réponse Acceptée

Surement à bientôt
0
Galaad9999 Messages postés 27 Date d'inscription mardi 27 juillet 2010 Statut Membre Dernière intervention 27 août 2010
11 août 2010 à 02:34
Bon voilà,

Cela fonctionne très bien (comme dit ci-dessus), toutefois, il subsiste un petit souci. Il semblerait en effet que lors du load de la feuille, un check soit déjà fait (par le système). Apparement si un (ou plus) composant de la feuille est lié à ADODC1, il donne un message d'erreur
"[Microsoft][OBDC Driver Manager] Data source name not found and no default driver specified"
Alors, typiquement il ne trouve pas la DB, ensuite il rentre véritablement dans le form load (vive le debbugging ), et là il continue sans souci, affecte correctement le ConnectionString, etc.... Le système fait-il lui même un pré-checking ? peut-on faire un Bypass de ce message d'erreur ? Ou enfin, un petit truc qui tue et qui n'est qu'un détails à corriger ?


"There are 10 kinds of people. Those who understand binary notation, and those who do not."
0

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

Posez votre question
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
11 août 2010 à 12:07
Essaie de remettre les propriétés de liaison des contrôles à zéro et de les affecter dans le Form_Load ...

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
Galaad9999 Messages postés 27 Date d'inscription mardi 27 juillet 2010 Statut Membre Dernière intervention 27 août 2010
11 août 2010 à 23:30
grrrr ...

Alors voilà j'essaie ta proposition et malheureusement "Compile Error : Method or data member not found".... le debbugger se place sur .DataSource

J'ai donc supprime les propriétés DataField et DataSource et je les ai codé au form_load. Je mets ci-dessous les détails de ma manip pour un seul des composants :

Private Sub Form_Load()
Dim intCount As Integer
frmNewDoc.adoInfoDoc.ConnectionString = DBConnectionString()
frmNewDoc.adoInfoDoc.Refresh
txtProjectName.DataSource = Me.adoInfoDoc
txtProjectName.DataField = "fldProject"

frmNewDoc.adoInfoDoc.Recordset.AddNew

Encore merci pour ta patience

"There are 10 kinds of people. Those who understand binary notation, and those who do not."
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
12 août 2010 à 02:04
Oublie alors l'affectation dynamique de ces propriétés ... As-tu fait comme dans DbExample pour les propriétés de l'ADODC ?

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
Galaad9999 Messages postés 27 Date d'inscription mardi 27 juillet 2010 Statut Membre Dernière intervention 27 août 2010
12 août 2010 à 02:52
Non, comme j'avais commencé avec une méthode quelque peu différente..... Et qui semblait plus simple (ce n'est peut-être que mon impression). J'ai aussi quelques soucis avec certaines méthodes que tu utilises. Par exemple, je ne vois pas très bien à quoi correspond chaque élément d'un ligne comme celle-ci :
Database.AffectAdodc Me.Adodc, "SELECT * FROM Users;" == Pour le SELECT ok, mais ne connaissant pas du tout cette syntaxe le reste m'échappe.... Ou bien, est-ce un truc de vieux barroudeur de mettre tout sur une ligne au lieu de 2 ou 3 ?

Comme j'aime être clair et bien comprendre se que je fais, je détails plus chaque ligne de mon code (amateur je le rappel, puisque je ne suis pas developpeur) Voir exemple ci dessous :

Private Sub Form_Load()
Dim intCount As Integer
frmNewDoc.adoInfoDoc.ConnectionString = DBConnectionString()
frmNewDoc.adoInfoDoc.Refresh
frmNewDoc.adoInfoDoc.Recordset.AddNew
frmNewDoc.adoInfoDoc.RecordSource = " SELECT * FROM tblInfoDoc"
intCount = frmNewDoc.adoInfoDoc.Recordset.RecordCount
End Sub

Du coup, quand je me retrouve avec rs.close: set rs=nothing , bien que dans ce cas, je vois le résultat, la syntaxe m'échappe, cela représente-t-il aussi 2 lignes de code en une ?

Voilà, merci d'avance

"There are 10 kinds of people. Those who understand binary notation, and those who do not."
0
Galaad9999 Messages postés 27 Date d'inscription mardi 27 juillet 2010 Statut Membre Dernière intervention 27 août 2010
12 août 2010 à 04:51
Bon, ici aussi, j'avance, il s'agisait d'une Valeur que j'avais oublié d'enlever des prorpiétés. un jour, Toujours...mais je progresse

"There are 10 kinds of people. Those who understand binary notation, and those who do not."
0
Galaad9999 Messages postés 27 Date d'inscription mardi 27 juillet 2010 Statut Membre Dernière intervention 27 août 2010
12 août 2010 à 17:14
Ok merci, cela en aidera aussi d'autre qui débutent.


"There are 10 kinds of people. Those who understand binary notation, and those who do not."
0
Rejoignez-nous