HFanny
Messages postés699Date d'inscriptionmercredi 19 février 2003StatutMembreDernière intervention13 mai 2011
-
23 sept. 2004 à 15:27
nichola54
Messages postés5Date d'inscriptionmercredi 19 janvier 2005StatutMembreDernière intervention23 février 2005
-
23 févr. 2005 à 10:01
Bonjour :) ,
j'ai un petit problème et mes recherches pour trouver une solution n'ont pas été fructueuses pour le moment.
Je dois accéder à une base SQLServer à distance, et je n'y parviens pas :sad) .
(C'est ma première tentative de connexion à une base de données distante, et avec ADO).
Le code que j'ai trouvé sur le net (et que je n'arrive pas à faire fonctionner) est le suivant :
Module Module1
Public cn As New ADODB.Connection
Public rs As New ADODB.Recordset
Sub Main()
Dim NombreEnregs As Long
Dim i As Long
Dim nb As Integer
On Error GoTo erreur
'Connexion à la base de données
cn = New ADODB.Connection
rs = New ADODB.Recordset
With cn
.Provider = "SQLOLEDB.1"
.ConnectionString = "driver=SQLOLEDB;" & "server=XXX.XXX.XXX.XXX;uid=XXX;pwd=XXX;database=Northwind"
End With
Console.WriteLine("Connexion ok")
cn.Open()
'ne passe pas le open :sad)
Console.WriteLine("Ouverture ok")
'cn.DefaultDatabase = "Northwind"
'Console.WriteLine("Default database ok")
Call rs.Open("MSysTables", cn, , ADODB.LockTypeEnum.adLockOptimistic)
Console.WriteLine("Recordset ok")
'On récupère le nombre d'enregistrement dans le recordset
nb = rs.RecordCount
'On passe chaque enregistrement en revue pour récupérer le nom de chaque table
For i = 1 To NombreEnregs
Console.WriteLine(rs.Fields("TableName").Value)
rs.MoveNext()
Next
Console.Read()
Exit Sub
erreur:
Console.WriteLine("ERREUR" & Err.Description)
Console.Read()
End Sub
End Module
Je voudrais juste réussir à me connecter (enfin, pour l'instant !).
Si l'un de vous pouvait me venir en aide (avec un exemple de code qui fonctionne par exemple ;) ), je lui en serais réellement reconnaissante car c'est un projet à faire pour mon boulot qui est assez important (et pressant).
nichola54
Messages postés5Date d'inscriptionmercredi 19 janvier 2005StatutMembreDernière intervention23 février 2005 24 janv. 2005 à 18:06
Salut fanny
Est ce que aurais mis à jour ton programme car je dois effectuer une transaction à distance sur sql server via VB. le pb c'est que je ne suis pas reconnu sur le réseau Aurait tu une idée d'ou cela peut venir .
Merci Nichola54
HFanny
Messages postés699Date d'inscriptionmercredi 19 février 2003StatutMembreDernière intervention13 mai 201120 25 janv. 2005 à 09:07
Salut Nicholas,
Tu dis que tu n'es pas reconnu sur le réseau, est-ce que tu pourrais mettre ici ton code et le message d'erreur que tu reçois, ainsi que la ligne à laquelle ton programme bloque ?
Car là, je ne vois pas trop d'où peut venir le problème, si tu as mis le bon login/mot de passe ainsi que la bonne URL de ton serveur, tu devrais parvenir à te connecter.
Ou bien il faut voir du côté administration du serveur si celui-ci accepte les connexions à distance.
nichola54
Messages postés5Date d'inscriptionmercredi 19 janvier 2005StatutMembreDernière intervention23 février 2005 25 janv. 2005 à 10:43
Salut fanny et merci de prendre part à mon pb.
Private Material As Database
Private cmdsql As String
Private Sub Command1_Click()
Material.Close
Form1.Hide
End Sub
Module Module1
Public cn As New ADODB.Connection
Public rs As New ADODB.Recordset
Sub Main()
Dim NombreEnregs As Long
Dim i As Long
Dim nb As Integer
On Error GoTo erreur
'Connexion à la base de données
cn = New ODBC.Connection
rs = New ODBC.Recordset
With cn
.Provider = "SQLOLEDB.1"
.ConnectionString = "driver=SQLOLEDB;"
"server=193.55.104.241;uid=sa;pwd=sqlserver;database=mesmaterial"
End With
Console.WriteLine ("Connexion ok")
cn.Open()
'ne passe pas le open
Console.WriteLine ("Ouverture ok")
'cn.DefaultDatabase = "Northwind"
'Console.WriteLine("Default database ok")
Call rs.Open("MSysTables", cn, , ADODB.LockTypeEnum.adLockOptimistic)
Console.WriteLine ("Recordset ok")
'On récupère le nombre d'enregistrement dans le recordset
nb = rs.RecordCount
'On passe chaque enregistrement en revue pour récupérer le nom de chaque table
For i = 1 To NombreEnregs
Console.WriteLine (rs.Fields("TableName").Value)
rs.MoveNext()
Next
Console.Read()
Exit Sub
erreur: Console.WriteLine ("ERREUR" & Err.Description)
Console.Read()
End Sub
End Module
Voila la ligne problématique souligné et en italique: car cette ligne fonctionne avec une base local !!
HFanny
Messages postés699Date d'inscriptionmercredi 19 février 2003StatutMembreDernière intervention13 mai 201120 25 janv. 2005 à 16:42
En fait, il faut que tu utilises l'objet cn, qui correspond à ta connexion, pour exécuter ta requête.
Comme là tu n'as pas besoin de récupérer un RecordSet, tu dois utiliser la méthode .Execute.
Il faut que tu fasses donc quelque chose du genre :
Public cn As New ADODB.Connection
Sub Text1_Change()
'Connexion à la base de données
cn = New ODBC.Connection
With cn
.Provider = "SQLOLEDB.1"
.ConnectionString = "driver=SQLOLEDB;"
"server=193.55.104.241;uid=sa;pwd=sqlserver;database=mesmaterial"
End With
cn.Open()
cn.Execute ("INSERT INTO Material_lot(Status, etat_actuel)......")
End Sub
Bon, je n'ai pas pu tester car je n'ai pas de VB sous la main.
Mais dis moi si ça t'aide.
Pour débuguer un programme, n'oublies pas de te servir du mode débuggueur qui peut être pratique.
nichola54
Messages postés5Date d'inscriptionmercredi 19 janvier 2005StatutMembreDernière intervention23 février 2005 25 janv. 2005 à 18:18
Bonsoir.
Maintenant g réussi la connexion via odbc mais je narrive tjs pas à échanger les données depuis ma forme. (type defini par l'utilisateur non défini) voila le nouveau message que g pourtant g selectionner tous les fichiers .dll mais il me jette encore !.
la je ne comprend plus, j'arrive meme à planter VB !
HFanny
Messages postés699Date d'inscriptionmercredi 19 février 2003StatutMembreDernière intervention13 mai 201120 26 janv. 2005 à 08:18
A quel endroit te met-il "type défini par l'utilisateur non défini" ?
Est-ce que tu pourrais mettre les lignes de code qui correspondent à cette erreur ?
Peut être que tu utilises une méthode sur un objet qui ne la possède pas, ou quelque chose comme cela.
nichola54
Messages postés5Date d'inscriptionmercredi 19 janvier 2005StatutMembreDernière intervention23 février 2005 26 janv. 2005 à 12:16
Salut fanny voici le morceau de prog qui ne fonctionne pas
Sub Text1_Change()
'Connexion à la base de données
cn = New ODBC.Connection 'voila la ligne récalcitrante'
With cn
.Provider = "SQLOLEDB.1"
.ConnectionString = "driver=SQLOLEDB;"
End With
cn.Open()
cn.Execute ("INSERT INTO Material_lot(Status, etat_actuel)Values ('deflt2','" & Text2.Text & "')"
material.Execute cmdsql
End Sub
HFanny
Messages postés699Date d'inscriptionmercredi 19 février 2003StatutMembreDernière intervention13 mai 201120 26 janv. 2005 à 17:07
As tu bien déclaré cn comme cela ?
Public cn As New ADODB.Connection
Il faut que ton programme connaisse le type de cn avant que tu puisses lui donner une valeur.
Si ce n'est pas ça, je t'avouerais que je ne sais pas trop.
Je te conseille de poster ta question dans le forum pour qu'elle apparaisse dans les premières.
Ainsi, d'autres personnes pourront participer et tu auras plus de chance d'avoir une bonne réponse [;)].
nichola54
Messages postés5Date d'inscriptionmercredi 19 janvier 2005StatutMembreDernière intervention23 février 2005 23 févr. 2005 à 10:01
Salut Fanny
désolé de ne pas avoir répondu plus tot mais g la solution de mon probléme je la met sur le forum comme ca tt elle sera visible de tous @+ bonne continuation