Need help - accés a une base SQL avec programme VB

Signaler
Messages postés
12
Date d'inscription
dimanche 8 avril 2007
Statut
Membre
Dernière intervention
16 mai 2007
-
Messages postés
7
Date d'inscription
jeudi 16 février 2006
Statut
Membre
Dernière intervention
24 novembre 2008
-
Salut tout le monde.


Je suis un gros débutant sur visual basic, et j'aurais besoin de votre aide.


Je suis actuellement en stage dans une boutique d'un marchand
e-commerce, et je doit leur réaliser un programme VB permettant de
mettre en ligne sur leur site des nouveaux articles. Pour celà je doit
ajouter l'articles à la base de données SQL.


je recherche donc les codes VB permettant d'exécuter des requêtes sur
une base de données SQL. j'en ai déjà trouvé quelque uns sur le site
mais je n'ai réussi a en faire fonctionner aucuns ( big noob inside ! ).


Pour l'instant ( afin de réduire la difficulté et mieux comprendre
comment ca marche ) je cherche juste a me connecter a une base SQL en
local sur ma machine réalisée avec easyphp.

Je souhaite réaliser un petit programme VB avec juste un "button" ( bouton ) et un "textbox" ( zone de texte ).

Lorsque je clic sur le bouton je souhaiterais établir une connexion
avec ma base SQL et lui envoyer la commande suivante :"SELECT * FROM
`columns_priv`" puis récupérer le résultat de cette commande dans la
textbox


Pouriez vous svp me fournir les codes nécessaire a la réalisation de ce petit programme ? D'avance merci.

19 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
111
Hum, créer un programme VB pour faire cela me paraît peu pratique : il faudra que le programme soit utilisé sur le réseau local de la base de données => si l'entreprise utilise un hébergeur pour stocker la base, c'est raté, tu ne pourras pas accèder à la base MySQL...

Sinon, regarde dans les sources du site, il y en a plein qui te montreront comment se connecter à une base de données, récupèrer des infos, et faire des requêtes dessus !
Messages postés
12
Date d'inscription
dimanche 8 avril 2007
Statut
Membre
Dernière intervention
16 mai 2007

pourquoi est ce qu'on ne pourais le faire que en local ? Je ne voit pas ou il peut y avoir un problème pour le faire a distance.
Le site avec sa base SQL est hébergé sur un serveur distant.

Aurais tu stp des liens vers les codes VB intéressant du site pour faire mon petit programme ? y'en a tèlement !

ps : ADO c'est quoi au juste ? je retrouve souvent ca dans les codes
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
111
Tout simplement pour des raisons de sécurité : pouvoir accèder à la base de données depuis l'extérieur, c'est une faille de sécurité non négligeable !!! En tout cas, très peu de serveur mutualisé accepte ce genre d'opérations !

Perso, je serais toi, je proposerai à ton maitre de stage de faire une interface php plutôt que de faire le prog vb, ainsi tu n'aurais pas ce genre de contrainte, et surtout, cela permettrait à n'importe quelle personne autorisée à ajouter des articles à la base.

En ce qui concerne ta demande de programme, je vais pas faire la recherche à ta place, mais voici quelques sources qui devraient t'intéresser :
http://www.vbfrance.com/codes/VB-MYQSL_38227.aspx
http://www.vbfrance.com/codes/PROGRAMME-POSSEDE-INTERFACE-WINDOWS-XP-AFFICHE-TABLE-PARTIR_23808.aspx

ADO est une librairie développée par Microsoft pour accèder à des bases de données. L'avantage, c'est que tu as une approche objet, ce qui, en théorie, rend l'utilisation des bases de données plus simples. ADO permet de se connecter à de nombreux format de bases de données, et permet de faire des requêtes SQL entre autre.
Messages postés
12
Date d'inscription
dimanche 8 avril 2007
Statut
Membre
Dernière intervention
16 mai 2007

Pour l'accés distant et la sécurité y'a des login et des mot de passe pour ca ! aucun souci de ce coté là !
si on ne pouvais pas y accéder a distance comment voudrais tu que l'on puisse mettre en ligne des nouveaux articles sur le site même en php ? ou même permmettre a des clients de créer un compte , etc... ? tout ca ce fait par des ajouts sur la base SQL.

Pour l'interface php on l'a déjà de base avec OS-commerce , mais elle n'est du tout pratique d'utilisation et est assez lente , c'est pour celà que je doit faire un programme. Ce programme aurra aussi , et surtout le gros avantage de permmettre de préparer des nouveaux articles en étant hors ligne puis de tous les envoyer d'un seul coup une fois en ligne ! ce programme sera aussi a moitié client FTP puisqu'il faudra qu'il puisse mettre en ligne les photos des articles.

merci pour les liens et pour la description d' ADO ;)
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
111
Si tu utilise php, tu peux héberger tes pages php sur le même serveur que la base, donc aucun problème. Renseigne toi avant de te lancer dans la programmation si tu peux bien
avoir accès à la base à distance ! Même avec un login et mot de passe,
je le répète, très peu d'hébergeur mutualisés acceptent ce genre de
connection !

Tu verra lorsque tu en arrivera à essayer de te connecter à ta base de toute façon, c'est juste un avertissement que je te donne vu que ca m'est déjà arrivé, et là, c'est le drame puisque tu découvre que le beau petit programme que t'a fait est finalement inexploitable vu que tu ne peux pas te connecter à la base.
Messages postés
12
Date d'inscription
dimanche 8 avril 2007
Statut
Membre
Dernière intervention
16 mai 2007

ok , je ne l'avais pas vu sous cet angle. Merci du renseignement.
Dans ce cas il faudra donc que je voit avec le webmaster du site pour qu'il autorise l'accés a mon programme. Celà ne devrais pas étre un problème étant donné que le webmaster est un cousin du gérant du magasin dans lequel je fait mon stage.
Merci beaucoup pour ce "détail" en tout cas , je n'y aurais pas penssé.
Messages postés
12
Date d'inscription
dimanche 8 avril 2007
Statut
Membre
Dernière intervention
16 mai 2007

je travail maintenant sur ce code ( merci darksidious ;) ):

Private Sub Command1_Click()
    Dim conn As ADODB.Connection
    Set conn = New ADODB.Connection
   
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
   
    conn.CursorLocation = adUseClient
    conn.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};" _
    & "SERVER=127.0.0.1;" _
    & "DATABASE=mysql;" _
    & "UID=root;" _
    & "PWD=;" _
    & "OPTION=" & 1 + 2 + 8 + 32 + 2048 + 16384
   
    conn.Open
   
   
    rs.Open "INSERT INTO columns_priv (Host,Db) values('" + Text1.Text + "','" + Text2.Text + "' )", conn, adOpenStatic, adLockOptimistic
   
    'rs.Close
    Set rs = Nothing
   
    conn.Close
    Set conn = Nothing

End Sub

J'aimerais savoir comment modifier ce code pour récupérer des valeurs de ma base SQL dans une textbox de mon programme. Ce code servant actuelement a envoyer de données vers la base SQL, je souhaiterais donc faire l'inverse ( récupérer des données ). Pour celà je sais qu'il faut utiliser des commandes de type "Select * from" par exemple. Mais le problème étant ensuite de devoir mettre mon programme en écoute pour attendre la réponsde du serveur SQL et afficher dans une textbox les données qu'il renvoie.
Je pensse que pour celà il faut utiliser la commande "GetRecord" mais je n'arrive pas a trouver comment elle fonctionne.
Merci d'avance pour votre aide.
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
111
rs.Open "SELECT
Host, Db
FROM columns_priv", conn,
adOpenStatic, adLockOptimistic











msgbox rs.Fields("Host").value
Messages postés
12
Date d'inscription
dimanche 8 avril 2007
Statut
Membre
Dernière intervention
16 mai 2007

ok, merci beaucoup.

en cherchant déjà pas mal par avanace j'avais déjà trouvé cette commande pour afficher le résultat dans une textbox :

Text1.Text = rs.GetString

Avec cette commande comme avec celle que tu m'a passé l'affichage ne fonctionne pas. J'obtient soit des tabulations a la place dans la valeur ( dans la textbox ) soit des points d'intérogations ( dans la msgbox ). Je pensse qu'il s'agit juste d'un problème de format. Il faudrer donc que mon programme reformate l'information avant de l'afficher a l'écran, mais encore une fois, je ne sais pas comment faire.
A savoir que le type d'information que j' essé d'afficher ( "host" et "Db" ) sont de type "char(60)" et "char(64)". Pour l'information "timestamp" de ma base de données SQL par exemple , elle s'affiche sans souci avec le code que tu m'a donné et celui que j'ai trouvé.

Merci beaucoup pour ton aide précieuse ;)
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
111
Hum, timestamp ? c'est un format d'heure cà non ?

Essaye en la formattant dans ta requête SQL :

rs.Open "SELECT Format(Host, 'hh:mm') AS Date1, Format(Db, 'hh:mm') As Date2 FROM columns_priv", conn, adOpenStatic, adLockOptimistic

MsgBox rs.Fields("Date1").value
Messages postés
12
Date d'inscription
dimanche 8 avril 2007
Statut
Membre
Dernière intervention
16 mai 2007

ok , merci , mais on a du mal ce comprendre.
le problème ne vient pas du timestamp mais des autres infos ( Host et Db ) , elles ne s'affiche pas du tout, a la place j'ai des tabulations ou des points d'intérogations.
Celà dit jusqu'a présent je travaillé sur une toute petite base de donné SQL crée de base avec easyphp. Mais aujourd'hui je viens d'attaquer sur la base de donnée réelle du site web de la boite ou je fait mon stage.
Mon projet ayant également un peut changé. finalement je fait pas un prgramme pour rentrer des articles sur le site , mais un programme permettant de gérer les stocks ( ré-aprovisionement a prévoir , préparation des commandes , statistiques des produits vendus dans le dernier mois , etc...). Mon travail consiste donc pour le moment à trouver les tables de la base SQL contenant les informations dont mon programme a besoin pour gérer les stocks. Avec plus de 150 tables dans la base SQL y'a déjà de quoi faire !

Merci beaucoup pour ton aide , je reposterais ici dés que besoin. Mais si en attendant tu serais tout de même me dire comment pouvoir afficher les infos "host" et "Db" de la base SQL de easyphp celà m'aiderais quand même beuacoup , car je risque trés certainement de retrouver le même problème avec la base SQL réelle du site de ma boîte.
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
111
ben si dans phpMyAdmin (ou autre utilitaire), les données s'affichent correctement, mais pas dans ton programme VB, c'est qu'il y a un problème de formattage des données.

Soit c'est le type de données qui n'est pas reconnu (formats binaires par exemple), soit c'est l'encodage des caractère qui n'est pas géré par vb (unicode par exemple).
Messages postés
12
Date d'inscription
dimanche 8 avril 2007
Statut
Membre
Dernière intervention
16 mai 2007

ok, merci

pour le moment je ne renontre pas ce problème sur les tables de la base SQl réelle du site que je vais utiliser donc tout va bien de ce coté pour l'instant.

par contre je rencontre un autre petit souci auquel tu aurra trés certainement la réponse. C'est pas grand chose, j'ai pas réussi réussi a trouver la solution sur google principalement sans doute car je ne sais pas avec quel mot clé je pourais trouver une solution.

voilà mon code VB :

rs.Open "SELECT * FROM orders_products WHERE (products_id = 'text2.text')", conn, adOpenStatic, adLockOptimistic
    Text1.Text = rs.Fields("orders_id").Value

Par la première ligne de ce code je cherche à sélectionner la ligne de la table SQL "orders_products" qui contient dans la colonne "products_id" la valeur que j'aurais taper dans la textbox "text2.text". Mais afin que l'instruction fonctionne les simple cote ne fonctionne pas pour text2.text, je souhaiterais donc savoir entre quel caractères faut-il placer text2.text pour que celà fonctionne ? ou bien celà fonctionne-t-il comme en language C ou il faut mettre par exemple "%X" puis text2.text aprés l'instruction.

Merci d'avance et encore merci pour l'aide que tu m'a déjà apporté ! ;)
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
111
pourtant c'est une question qui revient très souvent sur le forum :
"SELECT * FROM orders_products WHERE products_id = '" & replace(text2.text, "'", "''") & "'"

Le replace est là pour éviter les erreurs si Text2 contient des quotes !
Messages postés
12
Date d'inscription
dimanche 8 avril 2007
Statut
Membre
Dernière intervention
16 mai 2007

Merci beaucoup , encore une fois ton code fonctionne du feu de dieu !

Cependant je rencontre un nouveau petit souci :

j'aimerais pouvoir rechercher une ligne de ma table sql a partir d'un mot clé dans une colonne donnée. Biensur si mon mot clé est trop large celà renvérra plusieurs résultats ( lignes ).

Je pensais pouvoir faire ceci tout simplement avec ce code , mais celà ne fonctionne pas :

rs.Open "SELECT * FROM products_description WHERE products_name = *'mot clé'*", conn, adOpenStatic, adLockOptimistic

merci d'avance.
Messages postés
12
Date d'inscription
dimanche 8 avril 2007
Statut
Membre
Dernière intervention
16 mai 2007

j'ai finalement réussi a trouver tout seul mon problème cité plus haut.
j'ai beaucoup avancé sur mon programme, mais je rencontre de nouveaux un souci auquel je ne trouve pas de réponse sur le net, bien que pourtant celà ne paraisse pas grand chose :

Je souhaite afficher dans une textbox le contenu d'un tableau. Pour le moment j'utilise le code suivant, et j'ai une erreur "type mismath" :

'Déclaratioin des variables

Dim tableau(50) As String
Dim k As Integer
k = 1
Dim l As Integer
l = 1
   

'Traitement sur le tableau  

    While (k <= Len(Textrecherche1.Text))
        If (Mid(Textrecherche1.Text, l, 1) <> " ") Then
        tableau(l) = Mid(Textrecherche1.Text, l, 1)
        Else
        tableau(l) = "%"
        End If
        l = l + 1
        k = k + 1
    Wend

'Affichage du résulatat dans une textbox (la ligne qui pause problème) :

Text3.Text = tableau

Merci d'avance
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
111
Normal, tu ne peux pas afficher un tableau directement, tu ne peux afficher qu'une case à la fois, donc à toi de faire une boucle sur toutes les cases de ton tableau et les afficher dans ton textbox
Messages postés
12
Date d'inscription
dimanche 8 avril 2007
Statut
Membre
Dernière intervention
16 mai 2007

pourtant en language C on arrive bien a le faire , pourquoi le basic ne permettrais pas de le faire ?

en C :
printf("%s",tableau);

Puisque ca n'est pas possible de le faire en basic, et mon problème étant dans une chaine de caractère de remplacer tout les espaces ( " " ) par des "%" alors comment faudrais-t-il que je procède ?

Merci
Messages postés
7
Date d'inscription
jeudi 16 février 2006
Statut
Membre
Dernière intervention
24 novembre 2008

Salut, pourrasi-tu m'expliquer comment tu fais ton programme, je dois faire cela pour les cours.
Je fais ma base de donné sur divx et j'aimerais juste afficher mes titre de films en appuyant sur un bouton titre.

Puis éventuellement ajouter et / ou supprimer avec ca je pourrais me démerder je pense, mais je ne sais vraiment pas comment faire.
Tu pourrais-ptetre m'aider???