sphaxslayer
Messages postés216Date d'inscriptionmardi 5 avril 2005StatutMembreDernière intervention17 septembre 2008
-
7 juin 2005 à 10:04
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 2012
-
10 juin 2005 à 10:56
B'jour b'jour !
alors voilà j'ai un souci...j'ai un tableau d'object à 2 dimensions qui reçoit le résultat d'une fonction exécutant une requête SQL...mon prbleme c'est que ma requête doit être dans un boucle mais sauvée dans sa totalité dans un tableau, la voici :
SELECT DQ.MSG_ID, DQ.USER_DATA_ + i + ,
ENQ_TIME, FINAL_TIME, MSG_STATE,
FAILURE_CODE, FAILURE_COMMENT
FROM DXCNT_QUEUE DQ
WHERE DQ.QUEUE = // sélectionnée depuis une listeBox
AND DQ.USER_DATA_ + i + IS NOT NULL
AND DQ.MSG_STATE = <code_statut> // variable initialisée au préalable
ORDER BY MSG_ID
vous remarquez certainement le "i" dans la requête: en fait, en abse, il y'a 10 champs USER_DATA_i, avec i de 0 à 9...j'ai donc voulu mettre cette requête dans une boucle...Donc, mon tableau reçoit le résultat de cette requete...sauf qu'évidemment, faire
for (int i=0; i<10; i++)
Result = connex.getquery("SELECT... ...")
ça va m'écraser Result à chaque tour....
j'ai donc pensé à faire
Result = Result + connex.getquery("SELECT ... ...")
mais Visual Studio me dit qu'on ne peut pas applioquer l'opérateur + sur un tableau d'objets....
donc voilà si quelqu'un pouvait m'aider à résoudre ça....merciii :)
"Un seul Être vous manque, et tout est dépeuplé..."
sphaxslayer
Messages postés216Date d'inscriptionmardi 5 avril 2005StatutMembreDernière intervention17 septembre 2008 7 juin 2005 à 11:23
bah parce que ma fontion retourne un tableau et que j'sais pas m'servir des dataset etc...c un truc tout simple...et surtout paske j'ai pu vraiment l'temps d'apprendre :s:s
"Un seul Être vous manque, et tout est dépeuplé..."
sphaxslayer
Messages postés216Date d'inscriptionmardi 5 avril 2005StatutMembreDernière intervention17 septembre 2008 7 juin 2005 à 12:17
hmm ca devient pas trop compliqué pour un truc si simple...?
et je vois pas vraiment ce que tu veux m'dire en fait :s
y'aurait un tableau contenant un résultat pour chaque i dans chaque case d'un tableau ?
"Un seul Être vous manque, et tout est dépeuplé..."
Vous n’avez pas trouvé la réponse que vous recherchez ?
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 7 juin 2005 à 12:32
Tu dis que ta fonction renvoie un tableau, donc dans ta boucle elle va renvoyer 10 tableaux..c'est a dire 10 references de la classe Array.. faut bien les sauvegarder qlq part.. non ?
sphaxslayer
Messages postés216Date d'inscriptionmardi 5 avril 2005StatutMembreDernière intervention17 septembre 2008 7 juin 2005 à 13:04
y'a un truc que j'me demande....par exemple, disons que USER_DATA est renseigné jusqu'à 3
ma requête va remplir le tableau avec des doublons nan ? jveux dire y'aura dans la case 0 le msg_id, etc..., le user_data_0, puis dans la case 1, y'aura les memes msg_id etc...mais avec user_data_1...et comme j'ajoute le tout dans une DataGrid, ca va m'mettre des lignes en double j'imagine...?
Merci pour ton aide entous cas ;)
"Un seul Être vous manque, et tout est dépeuplé..."
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 7 juin 2005 à 13:12
Là faut attendre le retour de TheSaib, parce que moi SQL c'est pas mon truc.. J'ai juste percuté quand j'ai vu que tu voulais additionner des tableaux..
sphaxslayer
Messages postés216Date d'inscriptionmardi 5 avril 2005StatutMembreDernière intervention17 septembre 2008 7 juin 2005 à 13:34
OHHH QUEL HOMME...mdr
putain j'suis vraiment une croute de boeuf fossilisé desfois...lol merci...c'était évident en fait...pff jsuis trop bête lol
oki bah j'teste ça et j'viens accepter les réponses avec d modif eventuelles de ma part ;) thanks!
"Un seul Être vous manque, et tout est dépeuplé..."
sphaxslayer
Messages postés216Date d'inscriptionmardi 5 avril 2005StatutMembreDernière intervention17 septembre 2008 7 juin 2005 à 17:42
Bon...bah en fait j'y arrive pas...lol voilà le bout de code qui m'pose tant d'problème, je ne vois pas comment m'en sortir avec les tableaux...est-ce que quelq'un a une idée...?
sphaxslayer
Messages postés216Date d'inscriptionmardi 5 avril 2005StatutMembreDernière intervention17 septembre 2008 8 juin 2005 à 12:04
Salut yoannd, merci de m'aider ! alors, ton idée me parait 'achement bien, mais mon cerveau ignore un peu comment ça marche...tu pourrais m'aider si je te file peut-être plus de code ou pas ? en fait je sais pas comment marchent les recordsets, les collections etc...et j'utilise un tableau d'Object[,] 2D parce que bah euh j'ai essayé et pi ça a marché quoi...lol
"Un seul Être vous manque, et tout est dépeuplé..."
cs_yoannd
Messages postés305Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 août 20117 8 juin 2005 à 12:11
Ben tu peux me passer un peu de ton code, il y a pas de problème.
Ceci dit, je te conseille d'utiliser les collections plutot que les
tableaux, parceque mine de pas grand chose, c'est vachement plus simple
à utiliser.
Pour t'expliquer comment manipuler les collection, j'ai besoin que tu
me dises avec quelle version du Framework tu travailles (ouais, c'est
pas tout à fait pareil entre la 1 et la 2).
Après, pour les objets recordset (je pense que c'est ce que tu utilises
en ce moment, non ?), ben c'est pas compliqué du tout. Demande moi si
tu as besoin d'explications sur ça aussi :)
sphaxslayer
Messages postés216Date d'inscriptionmardi 5 avril 2005StatutMembreDernière intervention17 septembre 2008 8 juin 2005 à 12:33
Alors...déjà j'suis en FrameWork 1.1...donc, rapidement, j'ai une classe qui s'occupe des connexions, et qu'a une fonction, getQueryResult retournant un Object[,] dont voici le code:
public Object[,] getQueryResult (
string query)
{
// déclaration de la requête et du DataReader puis exécution de la requête
this.oraCmd =
new OracleCommand(query,
this.oraCnx);
// déclaration du tableau de retour et initialisation des nombres de lignes et de colonnes
Object[,] ArrResult;
this.nbLignes = 0;
this.nbColonnes =
this.oraDtaReader.FieldCount;
// initialisation du tableau de retour (nombre de lignes à contenir)
while (
this.oraDtaReader.Read())
{
this.nbLignes++;
}
ArrResult =
new Object[
this.nbLignes,
this.nbColonnes];
// Remplissage du tableau de retour
try
{
this.oraDtaReader =
this.oraCmd.ExecuteReader();
int i = 0;
while (oraDtaReader.Read())
{
for (
int j = 0; j <
this.nbColonnes; j++)
{
ArrResult[i,j] = oraDtaReader.GetOracleValue(j);
}
i++;
}
}
catch (OracleException oe)
{
this.gestionErreur(oe);
return
null;
}
return ArrResult;
}
ensuite, ce que je dois faire:
¤ j'ai en base les champs que je sélectionne dans mon SELECT, à savoir MSG_ID, ENQ_TIME, FINAL_TIME, MSG_STATE, FAILURE_CODE, FAILURE_COMMENT et USER_DATA_i, avec i allant de 0 à 9 (ce qui fait 10 champs USER_DATA_)
¤ grâce à un DataSet je déclare une Table MESSAGE dans laquelle j'ajoute les champs du SELECT en colonnes et effectue le lien avec le DataSource et le DataMember de ma DataGrid...
¤ dans ma DataGrid, je dois donc afficher chaque champs à sa place (cad dans sa colonne correspondante) MAIS je ne dois afficher que les 128 premiers caractères de USER_DATA_0 (d'ou mon Result[i,6] .toString().Substring(0,128) ).
¤ quand je sélectionne la case correspondante, je dois donc afficher un TreeView contenant le découpage des champs USER_DATA_i concaténés puis traités: cette fonction est la fonction scanHL7(string str). les messages en bases sont séparés en bouts de 4ko contenus dans les USER_DATA_i. Ces messages, par norme du HL7, contiennent des segments séparés par des | et contenant eux-même des champs encore séparés par des |...la fonction scanHL7 s'occuper parfaitement bien de séparer les segments, puis les champs de chacun d'eux via une autre fonction appelée scanSegmentHL7, et d'ajouter le tout trié et traité dans le TreeView.
Enfin, voici ma fonction complète qui doit lancer la recherche (c'est une recherche par statut de message) :
// ajout de la ligne au Datagrid et rafraîchissement de celui-ci
dtaSet.Tables["MESSAGE"].Rows.Add(row);
DtaGrid_Result.Refresh();
}
De cette mannière, tu peux éviter de te retaper 2 fois le même code.
Pour ce qui est du reste, je ne suis pas vraiment certain d'avoir
compris toute la question. Si ce que je te donne ici te conviens, c'est
cool, sinon, ben on pet revoir ça ensemble.
Ha oui, dernière chose, Si tu n'arrives pas à déclarer un objet Collection (Collection<Object[,]> Results = new
Collection<Object[,]>();) Essaie de faire un using System.Collections; ou using System.Collectiong.Generic;
sphaxslayer
Messages postés216Date d'inscriptionmardi 5 avril 2005StatutMembreDernière intervention17 septembre 2008 8 juin 2005 à 13:26
Bien je vais tenter ton astuce, merci pour les détails c'est cool, j'essaie de voir ce que je peux en faire. juste une petite précision: t'es d'accord que les Result auront des choses en commun, non ...? à chaque passage dans la boucle, il va me reslectionner les autres champs que les USER_DATA_i et y'aura que ces USER_DATA_i ki changeront ? de là j'pourrais récupérer les champs qui m'intéressent, en faire une concaténation pour avoir une seule string et passer cette string à ma fameuse fonction scanHL7?
je sais pas si c'est bien clair en fait lol
"Un seul Être vous manque, et tout est dépeuplé..."
cs_yoannd
Messages postés305Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 août 20117 8 juin 2005 à 13:32
Bien je vais tenter ton astuce, merci pour les détails c'est cool,
j'essaie de voir ce que je peux en faire. juste une petite précision:
t'es d'accord que les Result auront des choses en commun, non ...?
--> Si tes requêtes récupèrent quelques données similaires, en effet, tu auras des choses en commun.
à
chaque passage dans la boucle, il va me reslectionner les autres champs
que les USER_DATA_i et y'aura que ces USER_DATA_i ki changeront ?
--> De ce que j'en ai compris, oui.
de là
j'pourrais récupérer les champs qui m'intéressent, en faire une
concaténation pour avoir une seule string et passer cette string à ma
fameuse fonction scanHL7?
--> Ben je crois, c'est difficile de répondre avec certitude... je ne connais pas vraiment ton application