PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV Mobile 2024 → Modification d'une source de donnés par référence ? Passage d'un paramètre par adresse ?
Modification d'une source de donnés par référence ? Passage d'un paramètre par adresse ?
Iniciado por Maxime BOUILLON, 23,jun. 2017 14:17 - 2 respuestas
Publicado el 23,junio 2017 - 14:17
Bonjour à tous,

Voici mon problème, je suis en-train de développer une application mobile Android communiquant avec une base de données SQLite sur le terminal, j'ai intégré toute la partie communication SQL dans un composant interne car je la réutilise dans d'autres projets et je gère l'ihm est son comportement dans le projet original.

Après avoir tout développé et testé avec l'émulateur fourni par windev, je déploie sur Android et paf au lancement plantage de l'application, erreur : "Dans le cas d'un passage de paramètre par adresse, un élément de type source de données ne peut être converti vers le type chaine. Utilisez un paramètre local dans la procédure appelée ou passez un paramètre de type chaine"

J'en déduis que sur l'émulateur Windev on peut modifier une source de données par référence et pas en exécution sur Android.

Auriez vous une idée/une solution/un contournement au problème ?

Voici un morceau de code qui utilise cette architecture la :
Classe RequeteStores
//Mode communication sert a savoir si je suis en mode nomade (BaseSQLITE) ou en mode connecté (Appels HTTP)
Procedure PUBLIQUE getStores(modeCommunication est un booléen) : tableau de StoreObject dynamique
tableauStores est un tableau de StoreObject dynamique
SI(modeCommunication) ALORS
mSD est une Source dede Données
//Ca plante ici
mSQL.executeRequete(REQUETE_GET_STORES, mSD)
POUR TOUT mSD
monIterateur est un StoreObject
monIterateur.sdConverter(mSD)
TableauAjoute(tableauStores,monIterateur)
FIN
RENVOYER tableauStores
SINON


Donc dans cette portion de code j'appelle executeRequete() qui est une méthode de ma classe SQL qui Fait un :

HExécuteRequêteSQL(mSD, mConnexion, hRequêteSansCorrection, requete)


Donc le executeRequete() va modifier par référence la source de données initialisée dans getStores() pour ensuite mettre le résultat dans mon tableau d'objets dynamiques. Et cela fonctionne avec l’émulateur mais pas en conditions réelles de déploiement.

J'espère avoir bien expliqué mon problème, si besoin d'informations complémentaires faites moi signe..

Merci d'avance pour vos réponses.

Maxime.B
Miembro registrado
1.623 mensajes
Popularité : +100 (114 votes)
Publicado el 03,julio 2017 - 00:15
Au pire, faire :

mSD est une Source de Données = mSQL.executeRequete(REQUETE_GET_STORES)
Et donc executeRequete, renvoi une source données.

D'une manière générale, une méthode d'un objet devrait toujours travailler de façon autonome et RENVOYER un résultat plutôt que de travailler et modifier directement un des paramètres.
Miembro registrado
151 mensajes
Popularité : +7 (7 votes)
Publicado el 06,julio 2017 - 15:45
Dans votre méthode "executeRequete", indiquez avant le second paramètre le mot-clé "LOCAL" pour indiquer un passage par valeur.

Quelque chose comme ça :

PROCEDURE executeRequete(param1 chaine, LOCAL param2 Source de Donnees)