la base de données MYSQL pour une application WM (android)?
Prérequis:
Préparation de l'espace:
Création d'une table "Produits" (ref,libelle,prix,description) dans la base de données qu'on a vu précédemment.
Remplir quelque ligne, au moins 3 ligne de la table "Produits".
sélection:
Maintenant ouvrez votre IDE ainsi ton projet déjà réalisé dans le tuto précédent,
et insérer le chaps ZONE_repeté et ajouter 6 libellé (textView) et une button "afficher la liste des produits"
dedans comme suit:
Je vais maintenant prendre à récupérer toutes les lignes de ma base de données et de les mettre dans les champs textes pour chaque zone càd chaque Zone correspond à une ligne de la BD mysql.
Les nom des champs:
Zone_repeté: ZR_produit
num : LIB_ref
LIBELLé : LIB_libelle
Prix : LIB_prix
Description : LIB_desc
dans le code du button "afficher la liste des produits" ecrit ça:
LOCAL
retCode is entier
ZoneRépétéeSupprimeTout(ZR_produit)
retCode = monAccess:mySQLExec("SELECT * FROM produits ", 0)
i est un entier=1
IF (retCode=1) THEN
monAccess:mySQLPremier(0)
WHILE (NOT monAccess:mySQLEnDehors)
ZoneRépétéeAjoute(ZR_produit,i)
ZR_produit[i].LIB_ref = monAccess:mySQLCol(0,1)//reference
ZR_produit[i].LIB_libelle = monAccess:mySQLCol(0,2)//libelle
ZR_produit[i].LIB_prix = monAccess:mySQLCol(0,3)//Prix
ZR_produit[i].LIB_desc = monAccess:mySQLCol(0,4)//description
i++
monAccess:mySQLSuivant(0)
END
ELSE
Erreur("Erreur n° " + monAccess:mySQLErreur, monAccess:mySQLGetErrorMessage())
END
monAccess:mySQLFerme(0)
si tout Va bien vous aurez ça:
Suppression , modifiocation et insertion:
En fait, les trois opérations suppression, modification et insertion ont le même traitement càd on change tout simplement la requete SQL at le numero juste acoté ce numéro est l'identifiant de la requete en question .
Je vais traiter un exemple pour la suppression et à vous de terminer les autres.
dans le code de la button "afficher la liste des produits" on va ajouter une nouvelle evenement (Event) "Click long" ou bien Appui long .
coller le code suivant:
LOCAL
retCode1 is entier
retCode is boolean
SI OuiNon("Confirmer la supression ") = Oui ALORS
///****ici la requete à modifiée pour toute opération****///
retCode = monAccess:mySQLExec("DELETE FROM produits where ref="+ZR_produit.LIB_ref, 1)
monAccess:mySQLFerme(1)
IF (retCode = False) THEN
Erreur("Erreur n° " + monAccess:mySQLErreur, monAccess:mySQLGetErrorMessage())
ELSE
ToastAffiche("Le produit "+ZR_produit.LIB_ref+" est supprimé avec succé",toastLong,cvMilieu,chCentre)
END
FIN
///******Actualisé la liste des produits****///
ZoneRépétéeSupprimeTout(ZR_produit)
retCode1 = monAccess:mySQLExec("SELECT * FROM produits ", 0)
i est un entier=1
IF (retCode1=1) THEN
monAccess:mySQLPremier(0)
WHILE (NOT monAccess:mySQLEnDehors)
ZoneRépétéeAjoute(ZR_produit,i)
ZR_produit[i].LIB_ref = monAccess:mySQLCol(0,1)//reference
ZR_produit[i].LIB_libelle = monAccess:mySQLCol(0,2)//libelle
ZR_produit[i].LIB_prix = monAccess:mySQLCol(0,3)//Prix
ZR_produit[i].LIB_desc = monAccess:mySQLCol(0,4)//description
i++
monAccess:mySQLSuivant(0)
END
ELSE
Erreur("Erreur n° " + monAccess:mySQLErreur, monAccess:mySQLGetErrorMessage())
END
monAccess:mySQLFerme(0)
Si tout va bien vous aurez ça avec une toast qui vous informe que le produit a été bien supprimé:
Si vous avez des suggestions ou des proposition n'hésitez pas de me laisser des commentaires ;) .
Bonne dev sous windev Mobile et à la prochaine Tutorial.
Merci pour votre tutoriel elouardi, Allah Ihafdek
RépondreSupprimerMerci pour le tuto c'est vraiment excellent !! merci... par contre j'ai des losanges avec un point d'interrogation dedans qui signifie en fait des accents et autres caractères spéciaux, j'ai éssayé des codes html, ascii mais rien n'y fait, une idée peut être ??? merci
RépondreSupprimerVincent
re bonjour, personne n'a une solution pour les losange avec un ? dedans ???
SupprimerMerci d'avance pour les réponses...
Vincent
salut
RépondreSupprimerd'abord merci pour les tutos, j'ai une question, serait il possible de m'envoyer tout le code? je débute sur wdm et si j'ai réussi a faire le premier tuto, celui là, je n'arrive pas à faire la zone répété avec les 6 textview...
en te remerciant par avance
yann
Salam
RépondreSupprimertout d'abord Je vous remercie pour tes effort.
A propos de mon intervention, Je voudrais juste vous suggérer d'utiliser des vidéos dans votre tutos.
Merci pour votre suggestion, c'est mieux de le faire comme ça pour simplifier le codage afin d'éviter les fautes de frappes...
Supprimersalam
RépondreSupprimerquelqu’un pourra me donner le code pour afficher une image dans ma fenêtre à partir de la base ?
Bonjour,
RépondreSupprimerTuto super génial.
Dans ma base de données MYSQL, j'ai des accents qui ne sont pas repris sous Windev, en fait ils sont carrément supprimés...
Par exemple : Rhône dans ma BD MYSQL devient Rhne sous Windev...c'est pas cool.
Quelqu'un pourrait-il me dire comment régler ce problème ?
Par avance merci....
Bonjour,
RépondreSupprimerSuper sympa ce tuto...cool oui.
Cela marche sans problème sous l'émulateur Windev Mobile mais lorsque je mets l'application sur ma tablette Galaxy tab 2, une fois appuyé sur le bouton "Connexion" l'application ne répond plus...???
Quelqu'un pourrait m'aider ?
Merci.
il faut vérifier l'adresse ip du serveur ou du pc dans connect.php et btn_connect , chez moi je fix l'adresse ip puit dans les paramètre , server=xxx.xxx.xxx.xxx , car il ni y a pas ma résolution de nom !!!
SupprimerBonjour,
SupprimerJe ne comprend pas ce problème, l'adresses du serveur distant dans le fichier connect.php doit-elle être la même que dans la classe c_php4wd.
ex: dans c_php4wd j'ai mis http://www.monadresse.fr/php4wd.php et dans connect.php j'ai mis db549861809.db.1and1.com
depuis l'emulateur windev ca marche nickel mais sur le telephone, rien, ca bloque quand on appuie sur "connexion".
Salam, le Tuto est Parfait Merci bcp.
RépondreSupprimerj'ai une Question:
s'il vous plait est ce que vous pouvez m'éclaircir sur le sujets: " le numero juste acoté ce numéro est l'identifiant de la requete en question ."
dans le premier Exemple(Requette select) vous avez Utilisé un ID=0
mais sur le deusieme(Requette Delete) vous avez utilisé un ID=1
alors quel sont les valeur ID qu'on peut utiliser ??
ajout , modification ??
est ce que le code 0 signifie Mode Lecture et le 1 signifie Mode Écriture ?
est ce que je peut utiliser le code 1 pour faire l'insertion par exemple ?
Merci d'avance :)
C Mouad.
Bonjour,
Supprimerle snimero de requete sont des identifiant pour connaitre la requete.
par exemple je peux faire un select avec id = 0 et un autre avec id = 1 ensuite dans windev je peux parcourir ces requete par leur ID
cela n'a rien a voir avec la lecture / ecriture c'est un identifiant et il peut aller de 0 a 4 pour avoir 4 requetes simaultannée ou imbriqué, mais generalement vous verrez vous en utiliserez 1 souvent le 1 car si vous couplez SQLManagerX lui utilise par defaut le 0
bref ce numero permet d'identifer la requete et son resultat
Firetox
(createur de SQLManagerX et des acces alter natif: php4wd, php4VM, msSQL4wd, SQLite4WD ,ADO4wd .....
a decouvrir sur SQLManagerX.com)
Merci bcp
SupprimerMerci cela fonctionne parfaitement, par contre si quelqu un peut me dire comment utiliser un filtre dans ma zone répétée comme on pourrait le faire avec la fonction tableactivefiltre mais avec php4wd , cela me serait d une grande aide :)
RépondreSupprimerFinalement le problème a été résolu ^^ Si ça peut aider quelqu'un je post mon code.
RépondreSupprimerLOCAL
retCode is entier
ZoneRépétéeSupprimeTout(ZR_produitsT)
ZoneRépétéeSupprimeTout(ZR_produitsF)
retCode = monAccess:mySQLExec("SELECT * FROM produits ",0)
i est un entier=1
SI (retCode=1) ALORS
monAccess:mySQLPremier(0)
TANTQUE (PAS monAccess:mySQLEnDehors)
SELON monAccess:mySQLCol(0,4)
CAS "1"
ZoneRépétéeAjoute(ZR_produitsT,i)
ZR_produitsT[i].LIB_Nom = monAccess:mySQLCol(0,2)//reference
ZR_produitsT[i].LIB_saveur = monAccess:mySQLCol(0,3)//libelle
ZR_produitsT[i].LIB_prix = monAccess:mySQLCol(0,6)//Prix
sAdrimage est une chaîne
sAdrimage = monAccess:mySQLCol(0,7)//description
HTTPRequête(sAdrimage)
ZR_produitsT[i].ATT_img = HTTPDonneRésultat()
monAccess:mySQLSuivant(0)
CAS "2"
ZoneRépétéeAjoute(ZR_produitsF,i)
ZR_produitsF[i].LIB_Nom1 = monAccess:mySQLCol(0,2)//reference
ZR_produitsF[i].LIB_saveur1 = monAccess:mySQLCol(0,3)//libelle
ZR_produitsF[i].LIB_prix1 = monAccess:mySQLCol(0,6)//Prix
sAdrimage est une chaîne
sAdrimage = monAccess:mySQLCol(0,7)//description
HTTPRequête(sAdrimage)
ZR_produitsF[i].ATT_img1 = HTTPDonneRésultat()
monAccess:mySQLSuivant(0)
AUTRE CAS
FIN
FIN
SINON
Erreur("Erreur n° " + monAccess:mySQLErreur, monAccess:mySQLGetErrorMessage())
FIN
monAccess:mySQLFerme(0)
Bonjour, et merci super tuto, je rencontre un problème, j’essaie de faire INSERT dans une base mysql avec un champ longblob. Je prend une photo avec l'appareil, la convertie en png, l'enregistre dans la sdcard et l'envoi sur le serveur. La photo fait 100ko. La requete met 20 minutes pour s’exécuter sur le serveur voici mon code :
RépondreSupprimer-----------------------------------------------
sFichier est un chaîne
sFichier = monAccess:mySQLEscapeString(Crypte(fChargeTexte(gsRepDroidTemp + "/imgtemp.png"),"",crypteAucun))
sRsqlInsertBlob est un chaîne = "INSERT INTO rubriquesblobs (RbDate_DataRub, RbDate_IDDos) VALUES ( " + sFichier +", '" + gsPatGuid + "') "
ThreadExécute("InsertImage",threadNormal,"TreadAjouteImage_datas",sRsqlInsertBlob)
// Obliger de le mettre dans un thread sinon android me dit l'application ne repond pas
--------------------------------------------------------------------------------------------
//Le code du thread
PROCEDURE TreadAjouteImage_datas(sRsqlInsertBlob)
SI estConnecte = Faux ALORS
ExécuteTraitement(FEN_Menu.BTN_conn,trtClic)
FIN
LOCAL
nXretour est un entier
info(sRsqlInsertBlob) //Me renvoie la requête mis en forme instantanément sans erreur
nXretour = monAccess:mySQLExec(sRsqlInsertBlob,2)
SI nXretour =0 ALORS
Erreur("Erreur n° " + monAccess:mySQLErreur, monAccess:mySQLGetErrorMessage())
FIN
monAccess:mySQLFerme(2)
Info("mysql 2 fermé")
------------------------------------------------------------------------------------------
J'ai essayé avec la fonction zip pareil, si j'insere que du texte de petite taille cela fonctionne tout de suite.
La tablette est en wifi (ADSL 17Mo), serveur VPS ohv. Je peux uploader directement sur mon serveur de gros fichier par php cela fonctionne sans problème.
Merci pour votre aide
Bonjour,
Supprimeressayer d'appliquer les fonctions de la sérialisation avant l'envoie et aprés la réception de tes images.
Fonction windev: Sérialise() et désérialise()
Bon dev
bonjour les amis
RépondreSupprimermerci à vous pour l'aide que vous avez apporté dans le développement des appli android avec windev mobile.
j'ai un problème au de la requete d'insertion. INSERT TO.
je veux avoir le code pour inserer les données dans la base de données.
Merci
bonjour ;
RépondreSupprimerj'essaie de réaliser un insert à ma base de donnée mais je sais po comment, si quelqun peut m'aider sur ce point merci
quand je compile dans mon ordi, ca marche a merveille; mais dans ma tablette ca marche pas . quand j'ai affcher ce que ce passe dedans j'ai trouver que l'application envoi des caractere chinoi dans la variable vPost. le reponse serai automatiquement vide de la part du serveur. quelqu'un peut m'aider s.v.p
RépondreSupprimerbonjour, je n'arrive pas a trouver l'erreur dans mon script., il me dit que la colone n'existe pas avec se script
RépondreSupprimerLOCAL
retCode is entier
retCode = monAccess:mySQLExec("DELETE FROM utilisateurs WHERE nomusersa="+LIB_nom_users, 0)
i est un entier=1
IF (retCode=1) THEN
monAccess:mySQLPremier(0)
WHILE (NOT monAccess:mySQLEnDehors)
ZoneRépétéeAjoute(ZR_produit,i)
ZR_produit[i].LIB_nom_users = monAccess:mySQLCol(0,2)//reference
i++
monAccess:mySQLSuivant(0)
END
ELSE
Erreur("Erreur n° " + monAccess:mySQLErreur, monAccess:mySQLGetErrorMessage())
END
ZoneRépétéeSupprimeTout(ZR_produit)
retCode = monAccess:mySQLExec("SELECT * FROM utilisateurs ", 0)
IF (retCode=1) THEN
monAccess:mySQLPremier(0)
WHILE (NOT monAccess:mySQLEnDehors)
ZoneRépétéeAjoute(ZR_produit,i)
ZR_produit[i].LIB_nom_users = monAccess:mySQLCol(0,2)//reference
i++
monAccess:mySQLSuivant(0)
END
ELSE
Erreur("Erreur n° " + monAccess:mySQLErreur, monAccess:mySQLGetErrorMessage())
END
par contre si je remplace par
LOCAL
retCode is entier
retCode = monAccess:mySQLExec("DELETE FROM utilisateurs WHERE nomusersa= 'daniepikke'", 0)
i est un entier=1
IF (retCode=1) THEN
monAccess:mySQLPremier(0)
WHILE (NOT monAccess:mySQLEnDehors)
ZoneRépétéeAjoute(ZR_produit,i)
ZR_produit[i].LIB_nom_users = monAccess:mySQLCol(0,2)//reference
i++
monAccess:mySQLSuivant(0)
END
ELSE
Erreur("Erreur n° " + monAccess:mySQLErreur, monAccess:mySQLGetErrorMessage())
END
ZoneRépétéeSupprimeTout(ZR_produit)
retCode = monAccess:mySQLExec("SELECT * FROM utilisateurs ", 0)
IF (retCode=1) THEN
monAccess:mySQLPremier(0)
WHILE (NOT monAccess:mySQLEnDehors)
ZoneRépétéeAjoute(ZR_produit,i)
ZR_produit[i].LIB_nom_users = monAccess:mySQLCol(0,2)//reference
i++
monAccess:mySQLSuivant(0)
END
ELSE
Erreur("Erreur n° " + monAccess:mySQLErreur, monAccess:mySQLGetErrorMessage())
END
il me suprime bien une entrée mais toujours la meme :-(
Merci pour le tuto.
RépondreSupprimerEn supprimant (Delete) l'opération est effectué sur la base sauf que l'application entre en boucle infini.
C pas le cas pour une requete select.
Merci de me répondre
Bonjour,
RépondreSupprimerC'est la partie modification et insertion qui présente souvent de difficulté pour moi. Lors des séances de pratique, j'ai du mal à me repérer dans toutes ces données. Lors de mes heures perdues je me fais une autoformation à l'aide d'un tutoriel sur http://www.alphorm.com/tutoriel/formation-en-ligne-windev-mobile-20-ios mais je suis encore loin de maîtriser windev mobile.
Qui peut m'aider avoir le code qui permet d'insérer un fichier dans une base de données et les afficher sur une page web.
RépondreSupprimerBonjour,
RépondreSupprimerMerci beaucoup !!!
J'ai enfin réussi à installer ce script, j'ai accès à ma BDD Mysql depuis mon téléphone android avec une connexion 4G, j'ai vraiment galéré au début.
Pour ceux que ça intéresse, il ne faut pas oublier de corriger les erreurs comme indiqué dans les commentaires. Pour l'accès distant, il faut l'activer dans Wamp + créer un compte utilisateur AVEC mot de passe sur phpMyAdmin, et les modifier sur le bouton connection et connect.php. Quand vous générez l'apk et que vous l'installer sur votre mobile ça devrait passer.
C'est exactement ce qu'il me fallait, merci, merci vraiment !
Bonsoir,
SupprimerQuelles sont les erreurs indiqué sur les commentaires
Merci de m'aider j'ai le meme problème
bsr ,
RépondreSupprimerdepuis des mois j'arrive pas à me connecter sur la base de données d'un hebergeur en ligne, svp venez à mon aide
merci d'avance
connexion à ma base de données s'est établie correctement
RépondreSupprimermais la requete :
MonAccess:mySQLExec("select count(*) from user where login = '"+SAI_LOGIN+"'and pass = '"+SAI_PASSE+"'",1)
MonAccess:mySQLPremier(1)
Info(MonAccess:mySQLCol(1,1))
affiche un message vide
amin Zouaoui
SupprimerJe suis le même problème Avez-vous résolu
Bonsoir tout le monde,
RépondreSupprimerMr Amine Zouaoui avez-vous trouver une solution? car je suis dans la même situation.
Bonjour,
RépondreSupprimerje rencontre un problème de lenteur pour afficher une table de ma base de données qui contient 5000 lignes,sur le simulateur wm le resultat est instantané alors que sur mon téléphone android la requête prend environ deux minutes.
Merci pour votre aide
Reda
Bonjour tous le monde j'arrive pas à reussir de faire une requette d'insertin par contre j'utilise une base de donnée heberger a distance dans un serveur je puis me connecté a la base mais l'insertin reste impossible aidé moi svp
RépondreSupprimerNice post thank you Dave
RépondreSupprimerSalut, je suis entrain de chercher mssql4wd est-ce que vous l'avez?
RépondreSupprimer