[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