floppy41
Messages postés25Date d'inscriptionvendredi 27 juin 2008StatutMembreDernière intervention 6 novembre 2009
-
20 avril 2009 à 16:22
floppy41
Messages postés25Date d'inscriptionvendredi 27 juin 2008StatutMembreDernière intervention 6 novembre 2009
-
20 avril 2009 à 21:19
Bonjour a tous,
dans le cadre d'un exécutable de suivis de production en entreprise, je récupère des données et les enregistres dans une base MySQL, puis les affiche dans un Stringgrid.
Je procède de la manière suivante :
var
req_tps_prod: array [0..12] of string;
tps_prod: array [0..12] of PMYSQL_ROW;
for i:=1 to 12 do begin
//Requete SQL
req_tps_prod[i]:='SELECT ((SUM(tps_prod_alarme))-1)*10 FROM '+table+ ' WHERE le_mois = '+les_i[i]+'';
// traitement des requetes
mysql_query(mysql, pchar(req_tps_prod[i]));
tps_prod[i]:=mysql_fetch_row(mysql_store_result(mysql));
//affichage
With Stringgrid1 do begin
if (tps_prod[i]=nil) then else Cells[i,1]:=TimeToStr(strtoint(tps_prod[i])))/24/3600);
end;
end;
le probleme se situe au niveau de la derniere ligne : Types incompatibles: 'String' et 'PMYSQL_ROW'
Aurel184
Messages postés21Date d'inscriptiondimanche 14 mars 2004StatutMembreDernière intervention 9 juin 20101 20 avril 2009 à 21:06
oui normal, autant pour moi :)
la fonction mysql_fetch_row renvoi un tableau qui contient toutes les colonnes retournées par la requête. Et même s'il n'y a qu'une seule colonne, c'est quand même un tableau. Comme tu utilises déjà un tableau de PMYSQL_ROW, il va falloir utiliser un tableau à deux dimension :
var
req_tps_prod: array [0..12] of string;
tps_prod: array [0..12] of PMYSQL_ROW;
tps_prod_ansiString : array [0..12] or AnsiString;
for i:=1 to 12 do
begin
req_tps_prod[i]:='SELECT ...';
mysql_query(mysql, pchar(req_tps_prod[i]));
tps_prod[i]:=mysql_fetch_row(mysql_store_result(mysql));
tps_prod_ansiString[i] := tps_prod[i]^[0];
With Stringgrid1 do
begin
if (tps_prod[i]=nil) then else
Cells[i,1]:=TimeToStr(strtoint(tps_prod_ansiString[i])))/24/3600);
end;
end;
Aurel184
Messages postés21Date d'inscriptiondimanche 14 mars 2004StatutMembreDernière intervention 9 juin 20101 20 avril 2009 à 16:44
bonjour, ton problème vient du fait que le type PMYSQL_ROW est un pointeur vers un tableau de caractère, soit un pointeur de pointeur. Il faut donc utiliser le caractère "^" pour l'affecter à une chaîne de caractère.
De plus il faudra d'abord les stocker dans une AnsiString (chaîne de caractère C) avant de le convertir en string Delphi (problème de format).
en gros voici à quoi devrait ressembler ton code :
var
req_tps_prod: array [0..12] of string;
tps_prod: array [0..12] of PMYSQL_ROW;
tps_prod_ansiString : array [0..12] or AnsiString;
for i:=1 to 12 do
begin
req_tps_prod[i]:='SELECT ...';
mysql_query(mysql, pchar(req_tps_prod[i]));
tps_prod[i]:=mysql_fetch_row(mysql_store_result(mysql));
tps_prod_ansiString[i] := tps_prod^[i];
With Stringgrid1 do
begin
if (tps_prod[i]=nil) then else
Cells[i,1]:=TimeToStr(strtoint(tps_prod_ansiString[i])))/24/3600);
end;
end;
floppy41
Messages postés25Date d'inscriptionvendredi 27 juin 2008StatutMembreDernière intervention 6 novembre 2009 20 avril 2009 à 21:19
Impecable merci beaucoup, voila la ligne qui fontionne (fallait aussi enlever quelques parenthèses, et j'ai décider de supprimer les tableaux en de type AinsiString, ça fait toujours moins de mémoire d'utilisée)
if (tps_prod[i]^[0]=nil) then else Cells[i,1]:=TimeToStr(strtoint(tps_prod[i]^[0])/24/3600);
Voila.
Encore une fois Merci.
A bientot.