[C con Clase] Problemas con ListView
Kyosuke Kasuga
kyosuke_cl en yahoo.es
Mie Ene 30 00:15:08 CET 2008
Hi!!!, muchas gracias por tu respuesta Steven, pero la verdad hice lo que me dijiste y sigue sin funcionar el Control Listview, no me ingresa nada,y a mi me gustaria k ingresara en cada fila 2 columnas de datos, pero sigue sin aparecer anda en el control Listview, al principio pensaba que la consulta no entregaba datos, pero no es así, verifique con un MessageBox que si arroja datos, pero no se ingresan al Listview, dejo el programa por si hice algo mal :
bool BuscarList(HWND hwnd, char *maquina, char *usuario, char *clave, char *dato, char *Plantilla, int IDC)
{
char *muestra;
char *Consulta;
char Mensaje[90];
MYSQL_ROW Campos;
MYSQL_RES *respuesta;
unsigned long *longitudes;
int ancho, total, columnas, i;
if (!(MisDatos = mysql_init(0))){
return false;
}
if (!mysql_real_connect(MisDatos, maquina, usuario, clave, "Restorant", MYSQL_PORT, NULL, 0)){
sprintf(Mensaje, "Error : %s", mysql_error(MisDatos));
MessageBox (hwnd, Mensaje, "Chanchichó", MB_ICONEXCLAMATION);
mysql_close(MisDatos);
return false;
}
/* Se formula consulta para leer datos*/
ancho = strlen(Plantilla) + strlen(dato);
Consulta = new char[ancho];
sprintf(Consulta, Plantilla, dato);
mysql_query(MisDatos, Consulta);
if ((respuesta = mysql_store_result(MisDatos))){
total = (int) mysql_num_rows(respuesta);
columnas = (int) mysql_num_fields(respuesta);
for (i=0;i<total; ++i){
// Agregar datos al Listview
Campos = mysql_fetch_row(respuesta);
longitudes = mysql_fetch_lengths( respuesta );
muestra = new char[longitudes[0]+1];
strncpy(muestra, Campos[0], longitudes[0]);
muestra[longitudes[0]] = 0;
SendDlgItemMessage(hwnd, IDC, LB_ADDSTRING, 0, (LPARAM)muestra);
sprintf(Mensaje, "Dato : %s", muestra);
MessageBox (hwnd, Mensaje, "Chanchichó", MB_ICONEXCLAMATION);
}
mysql_free_result(respuesta);
}
else{
delete[] muestra;
delete[] Consulta;
mysql_close(MisDatos);
return false;
}
delete[] muestra;
delete[] Consulta;
mysql_close(MisDatos);
return true;
}
La llamada a esta funcion es como sigue :
BuscarList(hCDialog, "localhost", "popopo", "hikaru87", Dato, aux, IDC_LIST1)
donde aux = "SELECT * FROM Productos WHERE INSTR(descripcion,\'%s\')"
Cualquier nueva sugerencia lo agradeceria mucho, y tambien me gustaria saber como agregarle otra columna al Listview, ya que nunca antes habia usado este control.
P.D.: Probé reemplazando el control Listview con un control Listbox y me funciono altiro, pero este solo tenia una columna.
"Steven R. Davidson" <vze266ft en verizon.net> escribió:
Hola Kyosuke,
Kyosuke Kasuga wrote:
> Hi!!!, estoy haciendo un programa en wxDev-C++, y la verdad no se como
> meterle datos a un control ListView, tampoco sé como sacar datos desde
> el ( y tampoco como saber que fila esta seleccionada, ni como
> resetearlo), he intentado de muchas formas pero no me resulta, puede ser
> k mando su IDC como parametro a un función que se encarga de llenar el
> listview con los resultados de una consulta MySQL, la consulta la hace
> bien pero no sé como meter los resultados en el Listview, cualkier ayuda
> la agradeceria mucho. De antemano muchas gracias.
>
> P.D.: Les dejo el codigo de la función k se encarga de ingresar los datos.
>
[CORTE]
> Campos = mysql_fetch_row(respuesta);
> SendDlgItemMessage(hwnd, IDC, LB_ADDSTRING, 0,
> (LPARAM)Campos[0]); // Esto no me funciona
Efectivamente, aquí está el problema. Ten presente que las cadenas dadas
por 'mysql_fetch_row()' no están terminadas en cero; o sea, estas
cadenas no tienen un carácter nulo para indicar su final. Sin embargo,
el mensaje 'LB_ADDSTRING' sí espera que el parámetro 'lParam' apunte a
una cadena terminada en cero. Por lo tanto, tendrás que crear una cadena
para que acabe en cero. Por ejemplo,
unsigned long *pLongitudes = mysql_fetch_lengths( respuesta );
char *pszCadena = new char[ pLongitudes[0]+1 ];
strncpy( pszCadena, Campos[0], pLongitudes[0] );
pszCadena[ pLongitudes[0] ] = 0; // Agregamos el carácter nulo
Ahora podemos pasar la cadena, 'pszCadena', a la función
'SendDlgItemMessage()'.
Por supuesto, cuida la memoria dinámica liberándola cuando ya no la
necesites.
_______________________________________________
Lista de correo Cconclase Cconclase en listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
Entre más numerosos somos, más cerca estamos de nuestra propia extinción.
http://bisbirudolfo.blogspot.com/
---------------------------------
¿Con Mascota por primera vez? - Sé un mejor Amigo
Entra en Yahoo! Respuestas.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20080130/818e654a/attachment.html>
Más información sobre la lista de distribución Cconclase