PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Table mémoire et SQL
Table mémoire et SQL
Débuté par Stéphane, 29 sep. 2014 10:51 - 11 réponses
Posté le 29 septembre 2014 - 10:51
Bonjour,

J'ai une application dont toutes les tables permanentes sont sur un serveur SQL (SQL server 2012, avec accès natif). Dans une de mes fenêtre, j'ai une table mémoire dans laquelle je liste une série de produits pour lesquels je voudrais extraire des informations.

Y a t'il un moyen de faire une requête "liant" ma table mémoire et ma table SQL ? (actuellement, de parcours la table mémoire et j'extraie les informations ligne par ligne).
Posté le 29 septembre 2014 - 10:56
Bonjour,
Si la liste des articles n'est pas trop longue, tu peux récupérer la liste
des identifiants, lancer une requête qui renvoie toutes les infos de tous
ces produits (avec un critère de type article.id in (...) ), puis afficher
le tout dans une table avec SqlTable().

Frédéric.

""Stéphane"" a écrit dans le message de groupe de discussion :
201419e8b25ed40a2cdf174ecc9323b0e2cb@news.pcsoft.fr...

Bonjour,

J'ai une application dont toutes les tables permanentes sont sur un serveur
SQL (SQL server 2012, avec accès natif). Dans une de mes fenêtre, j'ai une
table mémoire dans laquelle je liste une série de produits pour lesquels je
voudrais extraire des informations.

Y a t'il un moyen de faire une requête "liant" ma table mémoire et ma table
SQL ? (actuellement, de parcours la table mémoire et j'extraie les
informations ligne par ligne).
Posté le 29 septembre 2014 - 11:10
Bonjour,

Là, mon idée est de faire une sort de "SELECT * FROM Table_SQL WHERE IN [Table_mémoire]"
Posté le 29 septembre 2014 - 13:52
Bonjour,

Je crois que je me suis mal exprimé. Ce que je cherche à faire, ce serait plutôt une sorte de SELECT FROM Table_SQL WHERE IN Table_mémoire.

Est-il possible de passer en paramètre d'une procédure stockée un tableau ? Si oui, comment ?
Posté le 29 septembre 2014 - 15:21
A ma connaissance ce n'est pas possible, surtout qu'ici on a pas un tableau,
mais une table mémoire.
Cela étant dit, parcourir une table mémoire et créer une liste de valeur ne
prend que 3 lignes de code (4 avec la déclaration de la variable...).

Frédéric.

""Stéphane"" a écrit dans le message de groupe de discussion :
20141f8ae56e7b891af22ca7a9b1355a7906@news.pcsoft.fr...

Bonjour,

Je crois que je me suis mal exprimé. Ce que je cherche à faire, ce serait
plutôt une sorte de SELECT FROM Table_SQL WHERE IN Table_mémoire.

Est-il possible de passer en paramètre d'une procédure stockée un tableau ?
Si oui, comment ?
Membre enregistré
41 messages
Popularité : +1 (1 vote)
Posté le 29 septembre 2014 - 17:04
Le problème n'est pas, pour moi la "complexité" du code, mais sa rapidité. Je m'étais dit que si je pouvais faire exécuter une seule requête côté serveur au lieu de x requêtes individuelles, mon programme serait beaucoup plus efficace.

Après, je peux très bien remplir un tableau en même temps que je remplis ma table mémoire s'il existe une solution avec un tableau.
Posté le 29 septembre 2014 - 17:31
Pourquoi se focaliser sur un tableau, alors que la clause IN en SQL prend
une liste de valeurs ?

""Stéphane BERGERON ("" a écrit dans le message de groupe de discussion :
201423724f4810c898e149e6af57690869bd@news.pcsoft.fr...

Le problème n'est pas, pour moi la "complexité" du code, mais sa rapidité.
Je m'étais dit que si je pouvais faire exécuter une seule requête côté
serveur au lieu de x requêtes individuelles, mon programme serait beaucoup
plus efficace.

Après, je peux très bien remplir un tableau en même temps que je remplis ma
table mémoire s'il existe une solution avec un tableau.
Membre enregistré
41 messages
Popularité : +1 (1 vote)
Posté le 29 septembre 2014 - 18:02
Je pensais que cette clause ne marchait qu'avec une requête incluse... Faudra que j'essaie avec un tableau passé en paramètre :)
Posté le 29 septembre 2014 - 19:24
Stéphane BERGERON ( a écrit :
> Je pensais que cette clause ne marchait qu'avec une requête incluse... Faudra que j'essaie avec un tableau passé en paramètre :)

Ou avec un TableauVersChaine en utilisant la "," comme séparateur.

Bon travail

Hemgé
Membre enregistré
326 messages
Popularité : +15 (19 votes)
Posté le 30 septembre 2014 - 09:46
Bonjour,

J'interviens à la fin ...
Attention, je ne connais pas bien SQLServer mais nous avons des requêtes via BO qui attaquent ce genre de bases et il y a des limites dans la liste de valeurs ... -> si on veut mettre par exemple 30 valeurs : plantage ! (de mémoire on a un retour d'un code erreur SQL -> mais limite SQLServer ou driver ODBC je ne sais plus)
Un conseil tester avec l'accès natif les limites du "IN" sauf si vous avez peu de valeurs à chaque fois.

Michel.

PS : une création d'une vue serait aussi possible dans SQLServer ?
Membre enregistré
4 messages
Posté le 30 septembre 2014 - 13:11
bonjour
as tu essayer de faire un SELECT avec sous requetes?

de type SELECT *
FROM `table`
WHERE `nom_colonne` =(
SELECT `colonne`
FROM `table2`
WHERE `cle_etrangere` = xxxxx
)
Membre enregistré
41 messages
Popularité : +1 (1 vote)
Posté le 30 septembre 2014 - 14:08
Bonjour et merci pour ces réponses. :)

@Laurent Seychelles : Ce que vous décrivez est justement ce que fait (à peu de choses près) mon programme : Il lit ma table mémoire et faire un select par ligne. Ce que je cherche à faire, c'est passer la table (ou un tableau) en variable d'une procédure stockée pour que la "jointure" se fasse entre ma table SQL et ma "table mémoire", côté serveur, en une fois.