Je suis apprentis et je viens d'intégré une nouvelle entreprise. On m'a confié pour mission de travailler sur une interface qui tourne en ASP.Net avec une base SQL, et dans laquelle je dois corriger une erreur que je n'arrive a pas a résoudre.
J'ai également une question concernant la syntaxe du code suivant:
foreach (String idHangar in idHangars) { if (idHangar != "") { if (i == 0) requeteHangars += " and (z.Id=" + idHangar + " "; else requeteHangars += " or z.Id=" + idHangar + " "; i++; } }
A quoi sert la parenthèse en gras/souligné au niveau de z.id=" +idHangar +""; ? De séparateur ? j'ai eu l'impression qu'elle étais en trop mais il y a des parenthèses similaire à d'autres endroits du code.
Je vous poste l'erreur en capture d'écran ainsi que l'interface afficher avant l'erreur, c'est quand ont envoi les filtres que l'erreur apparaît, en espérant que vous pourriez m'apporter une aide !
Merci à vous.
A voir également:
Index de colonne non valide
Java.sql.sqlexception: index de colonne non valide - Meilleures réponses
Echec de conversion dans la représentation interne - Meilleures réponses
En l'état tu donnes trop peu d'information: on est pas en mesure de voir toute la construction de la requete.
La parenthèse peu ou non être une erreur, ca va dépendre de tes conditions .. mais vu qu'on ne voit pas toute la construction de la clause, il n y a pas de réponses à donner.
D'après le message d'erreur, il semblerai justement que le problème provienne d'une parenthèse fermante qui en trop.
Bref au final: peux-tu nous montrer toute la construction de ta requête ? (à mininma la construction du where pour au moins vérifier la syntaxe)
encore une fois en l'état c'est assez limité, mais ce que l 'on peut surtout voir c'est que dans le cas ou il n'y a pas d'ID dans ta liste, ta requete aura une parenthèse fermante sans avoir été ouverte.
Je te conseil d'essayer de faire ceci:
bool bFilter = false ;
foreach (String idHangar in idHangars)
{
if (idHangar != "")
{
bFilter = true;
if (i == 0)
requeteHangars += " and (z.Id=" + idHangar + " ";
else
requeteHangars += " or z.Id=" + idHangar + " ";
i++;
}
}
if (bFilter)
{
requeteHangars += ")";
}
using (SqlCommand scmd = new SqlCommand()) { if (Request.Form["idHangars"] != null && lblHangars.Text == "") { lblHangars.Text = Request.Form["idHangars"]; } if (Request.Form["idMetiers"] != null && lblMetiers.Text == "") { lblMetiers.Text = Request.Form["idMetiers"]; } // se connecter à la base de donnée scmd.Connection = connectionString(); scmd.CommandType = CommandType.Text; scmd.CommandText = ""; String requeteHangars = "", requeteMetiers = "", risqueChantier = "", risqueChantierWhere = "", toutaction = ""; // Traitement requete : recherche par hangars selectionnee String visitea = "", visiteb = "", visitec = "", visitez = "", visitedepanage = "", visitevip = ""; // si on recoit une réponse d'un formulaire liste hangars if (lblHangars.Text != null) { String[] idHangars = new String[100];
// on prend la réponse du formulaire la liste des hangars choisis idHangars = lblHangars.Text.Split(new[] { "-" }, StringSplitOptions.None); int i = 0;
// la liste des hangars est délimité par des tirets d'union "-" // cette boucle va prendre l'ensemble des id hangars et les remplace par une requete sql foreach (String idHangar in idHangars) { if (idHangar != "") { if (i == 0) requeteHangars += " and (z.Id=" + idHangar + " "; else requeteHangars += " or z.Id=" + idHangar + " "; i++; } } if (i != 0) { requeteHangars += ")"; } //} // si on recoit une réponse d'un formulaire liste metiers if (lblMetiers.Text != null) { String[] idMetiers = new String[100]; // on prend la réponse du formulaire la liste des métiers choisis idMetiers = lblMetiers.Text.Split(new[] { "-" }, StringSplitOptions.None);
if (Request.Form["clos"] != null && Request.Form["clos"].ToString() == "true") { requeteMetiers += ""; } // la liste des metiers est délimité par des tirets d'union "-" // cette boucle va prendre l'ensemble des id metiers et les remplace par une requete sql foreach (String idMetier in idMetiers) { if (idMetier != "") { if (i == 0) requeteMetiers += " and (ac.Metier=" + idMetier + " "; else requeteMetiers += " or ac.Metier=" + idMetier + " "; i++; } } if (i != 0) { requeteMetiers += "or ac.Metier is null)"; } }
if (chkbA.Checked) { visitea = " and Visite_a=1"; } else { visitea = ""; }
if (chkbB.Checked) { visiteb = " and Visite_b=1"; } else { visiteb = ""; }
if (chkbC.Checked) { visitec = " and Visite_c=1"; } else { visitec = ""; }
if (chkbZ.Checked) { visitez = " and Visite_z=1"; } else { visitez = ""; }
if (chkbDepanage.Checked) { visitedepanage = " and Depanage=1"; } else { visitedepanage = ""; }
if (chkbVIP.Checked) { visitevip = " and Visite_vip=1"; } else { visitevip = ""; }
if (ddlRapport.SelectedValue == "2") { toutaction = " and Clos is null"; } else if (ddlRapport.SelectedValue == "1") { toutaction = " and Clos is not null"; }
if (chkbRisque.Checked) { risqueChantierWhere = " and ch.numChantierId is not null "; risqueChantier = " and cc.Insatisfaction_client is not null and cc.Impact_da is not null and cc.Risque_cout is not null and cc.Risque_delai is not null "; }
// Requête génération de tous les chantiers scmd.CommandText = "select c.id_chantier, immatriculation, ta.type_avion, ns.numero_serie, c.numeroChantierId as numChantier, Date_arrivee, Nature_chantier, Point_fixe, Vol_control, c.Date_livraison as datelivraison, Niveau_chantier, h.Nom, case z.emplacement WHEN 1 THEN 'EXT' else '' end as emplacement, r2.Nom as responsableTechniqueNom, SUBSTRING(r2.Prenom, 1, 1) as responsableTechniquePrenom, r1.Nom as responsableCommercialNom, SUBSTRING(r1.Prenom, 1, 1) as responsableCommercialPrenom, fin_inspection, cc.Travaux_peinture from Chantiers c left join commentaires_chantiers cc on cc.[numChantierId]=c.id_chantier inner join Avions av on av.id_avion = c.idAvion inner join typeAvions ta on ta.Id = av.type_avionId inner join numeroSeries ns on ns.Id = av.numero_serieId inner join Zones z on z.Id = c.idZoneHangar inner join Hangars h on h.Id = z.idHangar left join commentaires_chantiers ch on ch.numChantierId=c.id_chantier left join Responsables r1 on r1.Id=c.idResponsableCommercial left join Responsables r2 on r2.Id = c.idResponsableTechnique where Date_livraison is null " + risqueChantier + " " + requeteHangars + " " + visitea + " " + visiteb + " " + visitec + " " + visitez + " " + visitedepanage + " " + visitevip + " " + risqueChantier + " order by z.preference asc, c.numeroChantierId asc, immatriculation asc";
mais n'ayant pas la fermeture du using, je suppose qu'il y a d'autres requetes qui suivent 0> en l'état, outre le doublon risqueCahntier (qui ne va pas poser de problème, juste rajouter des tests inutiles, petit impact de perf mais bon), il n'y a pas d'erreur sur cette requete (les seules parentèses sont dans le select et sont corrects).
Du coup il faudrai que tu me fournisse les requetes qui suivent, et tout particulièrement celles qui utilisent requeteMetiers et requeteHangars.
Aussi dans le cas ou il y aurai un autre paramètre qui se construit ensuite, tu peux l'envoyer.
dans tous les cas, ce qui serai pas mal serai d'ajouter une ecriture des requetes dans un log avant leur execution histoire de voir réellement ce qui est envoyé :
// Si changement de hangar, nouveau bloc d'affichage if (nomHangar != articleReader["Nom"].ToString() || emplacement != articleReader["emplacement"].ToString()) { if (cptHangar != 0) { htmlTable.Append("<div class='page-break'></div>"); } cptHangar++; htmlTable.Append("<table>"); nomHangar = articleReader["Nom"].ToString(); emplacement = articleReader["emplacement"].ToString(); htmlTable.Append("<tr><td height='14px' colspan='10'></td></tr>"); htmlTable.Append("<tr><th class='tresgrand' style='color:black'>" + articleReader["Nom"] + " " + articleReader["emplacement"] + "</th></tr>"); htmlTable.Append("</table>");
}
// Petit espacement entre l'immat et le hangar htmlTable.Append("<table width='100%'>"); htmlTable.Append("<tr><td height='6px' colspan='10'></td></tr>"); htmlTable.Append("</table>");
// Remplir les informations concernant le chantier htmlTable.Append("<table width='100%'>");
// Récupération des valeurs dans des variables String nomTechnique = null, prenomTechnique = null, nomCommercial = null, prenomCommercial = null, respCom = "", respTech = ""; if (articleReader["responsableTechniquePrenom"].ToString() != "") prenomTechnique = articleReader["responsableTechniquePrenom"].ToString(); if (articleReader["responsableTechniqueNom"].ToString() != "") nomTechnique = articleReader["responsableTechniqueNom"].ToString(); if (articleReader["responsableCommercialPrenom"].ToString() != "") prenomCommercial = articleReader["responsableCommercialPrenom"].ToString(); if (articleReader["responsableCommercialNom"].ToString() != "") nomCommercial = articleReader["responsableCommercialNom"].ToString();
// Changement de la couleur de la case en fonction du niveau de chantier if (articleReader["Niveau_chantier"].ToString() == "1") htmlTable.Append("<td class='trborder couleurVerte petit' bgcolor='green' width='5%'>" + articleReader["Niveau_chantier"] + "</td>"); else if (articleReader["Niveau_chantier"].ToString() == "2") htmlTable.Append("<td class='trborder couleurJaune petit' bgcolor='yellow' width='5%'>" + articleReader["Niveau_chantier"] + "</td>"); else if (articleReader["Niveau_chantier"].ToString() == "3") htmlTable.Append("<td class='trborder couleurRouge petit' bgcolor='red' width='5%'>" + articleReader["Niveau_chantier"] + "</td>"); else htmlTable.Append("<td></td>");
// Espacement entre les informations du chantier et les actions htmlTable.Append("<table width='100%'>"); htmlTable.Append("<tr><td height='6px' colspan='10'> </td></tr>"); htmlTable.Append("</table>");
// Liste des actions du chantier // Requete lister actions selon chantier
cmd2.Connection = connectionString2(); cmd2.CommandText = "SELECT id, c.numeroChantierId, date_reunion, nom_action, clos, priorite, andon, nom_metier from Actions ac full outer join Chantiers c on ac.numeroChantierId=c.id_chantier inner join Avions av on av.id_avion=c.idAvion inner join Metiers m on m.id_metier=ac.Metier where ac.numeroChantierId=" + id_chantier + " " + requeteMetiers + " " + toutaction + " and (Andon <= 2 or Andon is null)"; sqlConnection2.Open(); reader2 = cmd2.ExecuteReader(); htmlTable.Append("<table width='100%'>");
String dateReunion = null, clos = null, id_action = null; //scmd.CommandText = "select c.id_chantier, immatriculation, ta.type_avion, ns.numero_serie, c.numeroChantierId as numChantier, Date_arrivee, Nature_chantier, Point_fixe, Vol_control, c.Date_livraison as datelivraison, Niveau_chantier, ac.Date_reunion as datereunion, nom_action, nom_metier, h.Nom, case z.emplacement WHEN 1 THEN 'EXT' else '' end as emplacement, Andon, ac.Id as id_action, ac.Clos, r2.Nom as responsableTechniqueNom, SUBSTRING(r2.Prenom, 1, 1) as responsableTechniquePrenom, r1.Nom as responsableCommercialNom, SUBSTRING(r1.Prenom, 1, 1) as responsableCommercialPrenom, fin_inspection, cc.Travaux_peinture, LEAD(immatriculation) OVER (ORDER BY z.preference asc, emplacement asc, c.numeroChantierId asc, immatriculation asc, CASE WHEN Clos IS NULL THEN 0 ELSE 1 END DESC, nom_metier asc, Clos desc, Date_reunion asc) immat2 from Chantiers c left join commentaires_chantiers cc on cc.[numChantierId]=c.id_chantier inner join Avions av on av.id_avion = c.idAvion inner join typeAvions ta on ta.Id = av.type_avionId inner join numeroSeries ns on ns.Id = av.numero_serieId left join Actions ac on c.id_chantier = ac.numero_chantierId left join Metiers m on m.id_metier = ac.Metier inner join Zones z on z.Id = c.idZoneHangar inner join Hangars h on h.Id = z.idHangar left join commentaires_chantiers ch on ch.numChantierId=c.id_chantier left join Responsables r1 on r1.Id=c.idResponsableCommercial left join Responsables r2 on r2.Id = c.idResponsableTechnique where 1=1 " + risqueChantierWhere + " " + requeteHangars + " " + requeteMetiers + " " + visitec + " " + risqueChantier + " and Date_livraison is null " + toutaction + " and (Andon <=2 or Andon is null) order by z.preference asc, emplacement asc, c.numeroChantierId asc, immatriculation asc, CASE WHEN Clos IS NULL THEN 0 ELSE 1 END DESC, nom_metier asc, Clos desc, Date_reunion asc"; //scmd.CommandText = "select c.id_chantier, immatriculation, ta.type_avion, ns.numero_serie, c.numeroChantierId as numChantier, Date_arrivee, Nature_chantier, Point_fixe, Vol_control, c.Date_livraison as datelivraison, Niveau_chantier, ac.Date_reunion as datereunion, nom_action, nom_metier, h.Nom, case z.emplacement WHEN 1 THEN 'EXT' else '' end as emplacement, Andon, ac.Id as id_action, ac.Clos, r2.Nom as responsableTechniqueNom, SUBSTRING(r2.Prenom, 1, 1) as responsableTechniquePrenom, r1.Nom as responsableCommercialNom, SUBSTRING(r1.Prenom, 1, 1) as responsableCommercialPrenom, fin_inspection, cc.Travaux_peinture, LEAD(immatriculation) OVER (order by z.preference asc, c.numeroChantierId asc, immatriculation asc, CASE WHEN Clos IS NULL THEN 0 ELSE 1 END DESC, nom_metier asc, Clos desc, Date_reunion asc) immat2 from Chantiers c left join commentaires_chantiers cc on cc.[numChantierId]=c.id_chantier inner join Avions av on av.id_avion = c.idAvion inner join typeAvions ta on ta.Id = av.type_avionId inner join numeroSeries ns on ns.Id = av.numero_serieId full outer join Actions ac on c.id_chantier = ac.numero_chantierId left join Metiers m on m.id_metier = ac.Metier inner join Zones z on z.Id = c.idZoneHangar inner join Hangars h on h.Id = z.idHangar left join commentaires_chantiers ch on ch.numChantierId=c.id_chantier left join Responsables r1 on r1.Id=c.idResponsableCommercial left join Responsables r2 on r2.Id = c.idResponsableTechnique where 1=1 " + risqueChantierWhere + " " + requeteHangars + " " + requeteMetiers + " " + visitea + " " + visiteb + " " + visitec + " " + visitez + " " + visitedepanage + " " + visitevip + " " + risqueChantier + " and Date_livraison is null " + toutaction + " and (Andon <=2 or Andon is null) order by z.preference asc, c.numeroChantierId asc, immatriculation asc, CASE WHEN Clos IS NULL THEN 0 ELSE 1 END DESC, nom_metier asc, Clos desc, Date_reunion asc";
// réinitialisation des paramètres de la requête cmd2 = new SqlCommand(); cmd2.Connection = connectionString2(); sqlConnection2.Open(); cmd2.CommandText = "SELECT numeroChantierId, Date_depart, motif from Departs where numeroChantierId=" + id_chantier; reader2 = cmd2.ExecuteReader(); //*****************************partie ajoutée****************************************
cmd3 = new SqlCommand(); SqlDataReader reader3; cmd3.Connection = connectionString3(); //requéte pour afficher les faits marquants dans chaque chantier en fonction de la date du jour cmd3.CommandText = "SELECT faitMarquants.titreFaitMarquant,faitMarquants.Date,faitMarquants.idAvion,Chantiers.numeroChantierId from faitMarquants " + "INNER JOIN Chantiers ON faitMarquants.idAvion=Chantiers.idAvion and Chantiers.numeroChantierId =" + articleReader["numChantier"] + "and convert(varchar(10),faitMarquants.Date,131)=convert(varchar(10),GETDATE(),131)";
Je devais être fatigué ...je me suis pas rendu compte que la variable i n'était pas remise à 0 ^^
du coup:
int i = 0;
// la liste des hangars est délimité par des tirets d'union "-" // cette boucle va prendre l'ensemble des id hangars et les remplace par une requete sql foreach(String idHangar in idHangars) { if (idHangar != "") { if (i == 0) requeteHangars += " and (z.Id=" + idHangar + " "; else requeteHangars += " or z.Id=" + idHangar + " "; i++; } } if (i != 0) { requeteHangars += ")"; } //} // si on recoit une réponse d'un formulaire liste metiers if (lblMetiers.Text != null) { String[] idMetiers = new String[100]; // on prend la réponse du formulaire la liste des métiers choisis idMetiers = lblMetiers.Text.Split(new [] { "-" }, StringSplitOptions.None);
if (Request.Form["clos"] != null && Request.Form["clos"].ToString() == "true") { requeteMetiers += ""; } // la liste des metiers est délimité par des tirets d'union "-" // cette boucle va prendre l'ensemble des id metiers et les remplace par une requete sql i=0; foreach(String idMetier in idMetiers) { if (idMetier != "") { if (i == 0) requeteMetiers += " and (ac.Metier=" + idMetier + " "; else requeteMetiers += " or ac.Metier=" + idMetier + " "; i++; } }
Juste avant le second foreach, il faut remettre "i" à 0 (en gras souligné) => dans le cas ou il y avait des idHangars, i était incrémenté ... et forcément ensuite lors du parcours des metiers, soit il n'y en a pas et tu te retrouver avec un
or ac.Metier is null)
donc parenthèse fermante sans qu'elle ai été ouverte, soit il y en avait mais comme i>0m tu n'as toujours pas la parenthèse ouvrante.
Je sais pas pourquoi je l'ai pas vu avant x) bref du coup l'erreur devait être remonté lors de l'execution de la seconde commande pour le remplissage du tableau.
Ta solution semble fonctionner ! Je effectuer des tests pour vérifier que cela fonctionne correctement !
Par contre, je veut bien des explications sur le code, car j'ai du mal a comprendre cette partie, comment elle fonctionne exactement, si ça ne te dérange pas !
bien !
Alors pour les explications vu que je ne connais pas ton niveau je vais expliquer globalement, ensuite si tu as des questions spécifiques demandes.
Donc dans un premier temps, on a trois filtres : les id d'hangars, ceux de metiers et "clos"
je ne sais pas ce "clos" représente mais il sert à rien vu qu'on en fait rien :
à partir des listes d'id (qui à l'origine sont des chaines avec '-' comme separateur, d'ou le split), on construit des sous requetes:
- requeteHangars pour la première séléction ( chaque itération du résultat représentant une ligne du tableau sur ta page web)
- requeteMetiers qui va charger ce qui semble être un descriptifs des metiers, utilisé pour filtrer les metiers de chaque hangar.
De ce que je vois je dirai que sur la page au final, chaque hangar génère un tableau, et que chaque metier du hangar représente une ligne de tableau.
On peut aussi voir qu'on souhaite ajouter les faits marquants du jours, mais je penses que cette partie n'est pas terminée car on ne fait qu'ajouter son titre :
while (reader3.Read()) {
htmlTable.Append("<br>" + reader3["titreFaitMarquant"] + "<br>");
}
'question hors code => tu travails chez airbus? ^^
s'il y a des parties précises qui t'échappent, demande ;)
Oui j'ai une petit question concernant cette partie, qui m'échappe quelque peu:
Sur cette partie:
if (idMetier != "")
{
if (i == 0)
requeteMetiers += " and (ac.Metier=" + idMetier + " ";
else
requeteMetiers += " or ac.Metier=" + idMetier + " ";
i++;
}
Je comprend que l'on concatène ou affecte plutôt, requeteMetiers avec quelque chose mais j'ai du mal a saisir la syntaxe. Es ce que le code dit que l'on prend requeteMetier qu'on lui ajoute ac.Metier tout en faisan matcher ac.Metier avec idMetier ???
Je suis pas certains de comprendre x)
mais pour faire court, en entrée tu as (exemple):
"7-8"
ton tableau va, suite au split, contenir [7,8].
Avec le foreach tu récupère 7 puis 8.
pour 7, i = 0 et donc ta requete va ressembler à :
SELECT ..... FROM .... WHERE ... and (ac.Metier=7
ensuite, pour 8, i=1 donc :
SELECT ..... FROM .... WHERE ... and (ac.Metier=7 or ac.Metier=8
on sort de la boucle, i > 0 et donc ca donnera :
</code>
ensuite, pour 8, i=1 donc :
SELECT ..... FROM .... WHERE ... and (ac.Metier=7 or ac.Metier=8 )
Dans ta base de donnée, t'as ta table Actions, qui est renommé ac dans ta requete, avec une colonne "Metier" conrrespondant à un id . La requete va donc filtrer les metiers ayant l id 7 ou 8.
J'aimerais savoir comment récupérer la requête SQL qui est envoyé au serveur une fois que User a choisi ses hangars et métiers ! Je cherche et je galère a trouver je bloque sur ça !
va ecrire le contenue de " cmd3.CommandText" dans le fichier
c:/fichier.txt
. AppendAllText va écrire à la suite du fichier (attention, je ne connais la hierarchie de ton serveur, a toi de voir oú tu devra créer le fichier).
une autre solution est de directement l'afficher dans ta page, mais dans ce cas le positionnement dans le code devra être plus "intelligent" (je trouve pas le mot), par exemple en ajoutant tes requetes dans un tableau (avant leur execution) et à la fin rajouter leur affichage dans ton contenu web : (on va dire qu'on nomme notre array "arRequest")
Pour la solution où l'on affiche directement le résultat de la requête sur la page web, es ce que l'on peu afficher directement la données en brut sans tableau ?
En sachant que je veut voir les ID envoyés, pour voir si les données réceptionnées sont bonnes. J'essaye <%=ma_var%>
normalement je me suis positionné à la suite de ton tableau.
J'utilisais "htmlTable" car il correspond à un des éléments pour "remplir" ta page web (et je c'est le seul que je connais au vu de ton code).
Ensuite lorsque tu dis brut, tu sous entends les resultas de ta requête? Si c'est le cas, il ne me semble pas, de mémoire, qu'il y ai un équivalent au "print_r" en c# , ce qui sous entend que tu aura un parcours à faire tout de même de tes résultats (ensuite le format dans lequel il sera afficher, c'est toi qui le gère).
tu peux tenter le toString à chaque occurence de ton articleReader, mais je n ai pas de compilateurs (et la derniere fois que j'ai utilisé des transact sql en c# remonte a pas mal de temps) donc je ne peux pas vérifier le comportement.
Par brut j'enrend les données qui sont envoyé par le formulaire, donc les cases cochés par le USer exemple, il coche le H1; H3; H8; ça va envoyé 1, 3, 8;
Du coup j'ai utilisé Response.Write sous ce cette forme:
Response.Write(Request.Form["idHangars"]);
Et en gros ça me display les numéros de hangars, qui sont les données bruts envoyées :D !
Bon du coup, maintenant que je sais que les données envoyées te reçus sont bonnes, je sais que le problème ne viens pas de la !
ah ok j'avais compris à l envers donc ^^
Après si tu es en debug, je te conseil d'utiliser la console, au moins ca te permets d'avoir des résultats en live sans toucher au rendu final (ce qui te permet de faire une validation de ta méthode)
Salut ! Je reviens vers vous parce que j'ai un petit soucis !
Voilà j'ai voulus reprendre une ancienne version de mon programme pour faire des tests; et il s’avère que les package ne sont plus référencer !J'ai essayé de mettre un lien pour donner le chemin mais ça ne fonctionne pas ! Une idée sur comment je pourrais solutionner ça ?
Là je t'avoues que pour gérer ton environnement je vais moins pouvoir t'aider (à chaque fois je galère pour me rappeler / retrouver ce qu'il y a à faire ^^). à part reprendre leurs imports je ne me rappel plus x)
Je n'utilise plus le c# edpuis quelques temps donc je ne usis pas sûr de pouvoir t'aider, mias je penses que dans ce cas je génèrerai un fichier HTML et ferai soit une redirection, soit un affichage ... mais encore une fois ce n'est probablement pas la bonne solution =p
Bonjour à tous les 2, je me permets un petit rappel sur la coloration syntaxique.
En l’état, vous l’utilisez mal tous les 2.
Il faut préciser de quel langage il s’agit, en cliquant sur la petite flèche vers le bas.
Exemple, vous:
30 janv. 2018 à 14:23
Je pense que le problème viens de la requête SQL, mais il y a trop de données a traité, j'ai vraiment du mal.
Je peu poster le SQL mais je ne sais pas si ça peu aider
Merci pour la réponse en tous cas !
30 janv. 2018 à 14:30
Je te conseil d'essayer de faire ceci:
redis moi.
naga
30 janv. 2018 à 15:05
Toujours le même résultat, je perd la tête moi avec tout ça moi !
30 janv. 2018 à 15:14
Je check ca tout à l'heure !
30 janv. 2018 à 15:20