XML et requete SQL

macflyFR Messages postés 15 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 17 juillet 2003 - 2 juil. 2003 à 11:18
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 - 10 juil. 2003 à 14:42
Bonjour,

jai une base de données SQL server en local (MSDE) et je souhaiterais pouvoir créer un fichier xml a partir d'une requete, en utilisant les fonctions xml de sql server.

mon code ne marche pas et se présente comme ceci (il y a certainement des fautes enormes mais je ne suis pas tres doué en vb) :

Set FSys = CreateObject("Scripting.FileSystemObject")

Set ficBase = FSys.CreateTextFile("chemin\nomfichier.xml")

Set oSvroot = CreateObject("SQLDMO.SQLServer")

On Error GoTo WriteError

'Timeout de connexion (en secondes)
oSvroot.LoginTimeout = 60

'Connexion
oSvroot.Connect "(local)", "sa", motdepasse

Query = "select * from Tablequejeveuxrecuperer for XML AUTO"

result = oSvroot.ExecuteQuery(Query)

Open DataFile For Output As 1
Print #1, result
Close #1

MsgBox "Le fichier XML a été généré et se trouve dans le dossier " & DataDir, vbInformation, "Réussite"

Exit Sub

WriteError:

MsgBox "Erreur d'écriture dans le fichier XML", vbExclamation, "Echec"
MsgBox result, vbInformation, "Réussite"

Si qq'un pouvait m'aider je le remercie par avance

++

MF

13 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
2 juil. 2003 à 13:53
J'ai refais tout ton code :-) desolé

Private Sub Command1_Click()
Dim FSys As New FileSystemObject
'Dim ts As TextStream
Dim nomfichier As String
Dim strconn As String

Dim connado As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim cmd As New ADODB.Command
On Error GoTo WriteError

nomfichier = "c:\nomfichier.xml"
FSys.DeleteFile (nomfichier)

'Connexion

strconn = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=ESSAI_VB;Data Source=ZEUS;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=nombaseMSDE;Use Encryption for Data=False;Tag with column collation when possible=False"
connado.Open strconn
query = "select * from client for XML AUTO"
cmd.ActiveConnection = connado
cmd.CommandText = query
Set rs = cmd.Execute

rs.Save nomfichier, adPersistXML
connado.Close

MsgBox "Le fichier XML a été généré et se trouve dans " & nomfichier, vbInformation, "Réussite"

Exit Sub

Donc il faut ajouter
les references a ado
microsoft data access object library 2.*
scritping runtime

et voila le result un beau fichier xml

le pb il n'est pas exploitable par d'autre programme a moins de decouvrir le format

dommage

Il est possible de le reprendre avec

Private Function GetVBOSPData() As ADODB.Recordset
Dim strConnect As String
strConnect = "Provider=MSPersist"
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open nomfichier", strconn
Set GetVBOSPData= rs
End Function

VOila
0
macflyFR Messages postés 15 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 17 juillet 2003 1
2 juil. 2003 à 15:07
Merci pour ton code
le mien etait effectivement assez laid...

Par contre, j'y suis depuis un petit moment et jai qq pb pour faire fonctionner ton code...
Peut etre que les parametres de connexion que je mets son faux..

Provider= SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog= MABASE ;Data Source =MABASE;Use Procedure for Prepare= 1;Auto Translate=True;Packet Size=4096;Workstation ID MONSERVEUR ;Use Encryption for Data =False;Tag with column collation when possible=False"

(en sachant que sous sql server, ma base s'appelle "personnes", que sous odbc, elle s'appelle "AP", et que mon serveur est local (c'est un serveur MSDE) )

merci pour ton aide

A+

MF
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
2 juil. 2003 à 15:25
Provider= SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=ESSAI_VB;Data Source=ZEUS;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=ZEUS;Use Encryption for Data=False;Tag with column collation when possible=False

Voila la chaine de connexion que j'ai

ZEUS c'est le nom que je'ai pour MSCDE
ESSAI_VB c'est le nom de la BDD que j'ai créer avec .NET
(je ne sais pas comment mettre des données de dans autrement)

Excuse tu peux le faire avec le data environnement

Ajoute dataenv dans le projet
connection --> propriétés

Selection du driver oledb sql server

ensuite onglet "connexion" tu mets le nom de ta MCDSE
clique sur l'icone dans le systray
le nom du serveur apparait

ensuite tu choisis ta base
combo tu bas

tu gere ton mdp et login "moi c'est NT ...." pour pas m'emmerdé

tu teste la connection
si ok tout marche super :-)

sinon il faut reflechir

ensuite tu recuperes la chaine de connection par copier coller (facile)

et tu la mais dans le code.

et la le prog marche

(le vb vient de s'ecraser)
Je voulais voir comment mettre des données dedans mais je ne sais plus ou ne connais pas la methode avec VB.

Si tu me rafraichis la memoire je suis preneur :-)

J'espere que ca va marcher ???

A+
0
macflyFR Messages postés 15 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 17 juillet 2003 1
2 juil. 2003 à 15:51
ok je te remercie...

comme ca fait un moment que je fais des essais, j'avais deja creer ma connexion par le data env ... je n'ai eu qu'a récupérer la chaine de connexion et ca marche !

En ce qui concerne ta question sur comment mettre des données dans la chaine de connexion (si jai bien compris),
je ne peux malheureusement pas t'aider

merci pour tout

a+

MF
0

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

Posez votre question
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
2 juil. 2003 à 16:01
La question n'est pas ca c'est pas le but de la chaine de connexion.

La Question est comment utiliser mcse sans utiliser .net

et

comment l'utiliser voir les données en conception
ajouter des tables
des bases des colonnes
avec vb mais sans code.

Comme avec access (tu vois le genre)
j'ai cru avoir vu ca un jour (pour gerer une autre base access?)
l'interface dans VB mais je sais plus comment y aller

Voila la question

Il y a peut etre un module d'admin visuel ou textuel comme sql
entreprise manger chez oracle ou autre independent de vb.

Pour l'utiliser avec d'autre langage.

(Pour etre plus clair comment tu fais pour gerer ta base)
Moi j'utilise vs.net mais avoir les 2 env ouvert c'est un peu lourd.

Merci.
0
macflyFR Messages postés 15 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 17 juillet 2003 1
2 juil. 2003 à 16:21
A priori j'ai la reponse a ta question :
qd tu as créé une connexion dans ton data env, tu peux créer des commandes.
Et dans les propriétés de ta commande, quand tu selectionnes instruction sql , tu peux cliquer sur générateur sql...
la, s'affiche un tableau avec toutes tes données et de quoi les gérer.
(un peu comme sous excel puisque tu peux modifer ton tableau de données etc...)

A+

MF
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
2 juil. 2003 à 16:41
Ok ca devait etre ca mais mon vb ne veut pas trouver l'active X c'est pas grave.

Mon systeme est sur le point de rendre l'ame mais j'ai la flemme de l'installer :-)

Et tu le gere comment sans VB?
0
macflyFR Messages postés 15 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 17 juillet 2003 1
2 juil. 2003 à 16:51
a vrai dire je le gere pas sans vb puisque c'est une appli developpée en vb qui permet de creer des enregistrements, de les modifer etc...
enfin sinon jai qd meme un petit prog ("vsqlw") qui me permet de faire des requetes sql sur ma base ; mais je m'en sers peu.
voila

a+

MF
0
macflyFR Messages postés 15 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 17 juillet 2003 1
3 juil. 2003 à 11:18
dis moi, je peux te redemander de l aide ?

il faudrait que je puisse faire l'inverse maintenant...cad, a partir d'un fichier xml exporté de ma base, il faut que je puisse le réintégrer dans ma base...(en faisant soit creation soit maj de la table dans ma requete)
si tu peux m'aider rapidement ce serait tres sympa ..
mais si tu as autre chose a faire je comprendrai tres bien

a bientot

MF
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
3 juil. 2003 à 11:29
Je t'ai donner la solution hier je crois
j'en suis presque sur car j'ai cherché par curiosité hier la méthode :-)

Je repetes

dim rs as new adodb.recordset
rs.open "monfichier.xml"

insert into ... values ( " & rs!num & ")"

et apres tes champs de rs t'en fait ce que tu veux
0
macflyFR Messages postés 15 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 17 juillet 2003 1
3 juil. 2003 à 11:32
ah ok
merci
ben jai pas le souvenir d'avoir vu ca hier mais je me trompe peut etre

a +

MF
0
macflyFR Messages postés 15 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 17 juillet 2003 1
10 juil. 2003 à 14:37
Bonjour

excuse moi de te redéranger mais jai encore qq pbs et peut etre que tu connais la réponse...
(jai posé la question sur le forum mais aucune reponse....)

je récupère des données XML dans un recordset de la maniere suivante:

Dim rs As New adodb.Recordset

rs.open fichierXML

j'aimerais ensuite pouvoir insérer directement les données du recordset dans ma base de données SLQ server.

merci de m'aider

MF
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
10 juil. 2003 à 14:42
repondu :-)
0
Rejoignez-nous