Home   Artículos   Recursos   Foros   
Artíclos recientes publicados en Latindevelopers:

Visual C++: NSDoubleEdit: Un control para el manejo de números decimales en Visual C++.
Visual C++: Implementando una Calculadora en Visual C++
Visual C++: CCommandLine: Una clase para el uso de la linea de comando
Visual C++: Una clase para el manejo del Registro


Indice de datos en un CComboBox

Aqui programadores en la plataforma Win32 con Visual C++ de Microsoft...

Moderador: latindeveloper

Indice de datos en un CComboBox

Notapor XLinux el Lun Mar 28, 2005 12:59 pm

Holas amigos, a alguno de Uds. les paso que despues de ingresar unos pares de data a un control por ejemplo a un CComboBox, les ingresa todo chevere, sus textos y sus indices, pero despues quiero seleccionar su indice, y me retorna un indice refeo, pero bien refeo, me muestra basuras de memoria, algo asi como ¦$%44, 7Å@▒ø, ...., pero no se porque me aperecen tales datos, que debo de hacer???.

:(

Ya actualize los datos y el control mil veces y nadita, y cuando ingreso los datos al inicio en el metodo OnInitDialog, los datos esta bien ingresado.

Sera que uso dos Combos????, será por eso??.

Que puedo hacer?????,porfa haber si me dan una ayudita; utilizo MySQL como base de datos.

Ademas Revise un Script o codigo en los articulos, y tambien hice lo mismo pero aun los datos no sale. hago todo bien en el ingreso, ademas lo hago esto en un CDialog.


Salu2
Avatar de Usuario
XLinux
Usuario Activo
Usuario Activo
 
Mensajes: 44
Registrado: Jue Feb 24, 2005 4:59 pm

Re: Indice de datos en un CComboBox

Notapor latindeveloper el Lun Mar 28, 2005 2:17 pm

Puedes enviarme el codigo donde estas inicializando la clase CComboBox? en la funcion OnInitDialog?

asi podré ayudarte....
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru

Re: Indice de datos en un CComboBox

Notapor XLinux el Lun Mar 28, 2005 4:43 pm

Hola, si, es el mismo codigo que sino me equivoco es tu aplicacion, sobre mysql:
del Metodo OnInitDialog()

Código: Seleccionar todo
CWaitCursor x;
UpdateData();
CString sql;
sql = _T("SELECT * FROM tabla");   
if(mysql_real_query(m_link_db,sql,sql.GetLength()) == 0 )
{  MYSQL_RES* res;
    if ((res = mysql_store_result(theApp.m_link_db)))
   {   m_combo.ResetContent();
   MYSQL_ROW currentRow;
   CString tmp;
   DWORD flag;
   INT item = 0;
   while ((currentRow = mysql_fetch_row(res)))
   {   tmp.Format ("%s", currentRow[1]);
      m_combo.InsertString(item,tmp);
      flag = (int)currentRow[0];
      m_combo.SetItemData(item,flag);
      flag = 0;
      item++;
   }
    }
     mysql_free_result(res);
}
m_combo.UpdateData();
/////////////////////////////////////////////////////////////////////////////////

Probe con todo, y no se que pasa, utilizo esto para darme cuenta:


void CClaseAplicacion::OnSelchangeCombo()
{   CString tmp;
   int ind;
   ind = m_combo.GetCurSel();
   tmp.Format("%s",m_combo.GetItemData(ind));
   MessageBox(tmp);

}



Y me sale otros datos no se que pasa,

:(



Salu2
Avatar de Usuario
XLinux
Usuario Activo
Usuario Activo
 
Mensajes: 44
Registrado: Jue Feb 24, 2005 4:59 pm

Re: Indice de datos en un CComboBox:

Notapor XLinux el Lun Mar 28, 2005 5:14 pm

Lo atrape, pues si, el problema es que no aguanta dos combos el dialogo solo funciona con un combo. Entonces como actualizo o seteo los datos?????

Salu2
Avatar de Usuario
XLinux
Usuario Activo
Usuario Activo
 
Mensajes: 44
Registrado: Jue Feb 24, 2005 4:59 pm

Re: Indice de datos en un CComboBox

Notapor latindeveloper el Mar Mar 29, 2005 10:36 am

Cuidado: La consulta SELECT * FROM tabla debe retornar dos columnas, la primera columna debe ser un campo entero y el segundo un varchar/char, es mejor hacerlo asi:

SELECT IdTabla, Descripcion FROM Tabla;


La idea principal de la linea

m_combo.SetItemData(item,flag);

Es tener almacenado el codigo (IdTabla) en cada elemento del combo box.

En la funcion OnSelchangeCombo, m_combo.GetItemData(ind) retorna siempre un valor LONG, entonces lo que tienes que hacer es:

tmp.Format("%ld",m_combo.GetItemData(ind));


Creo que con eso se soluciona el problema
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru

Re: Indice de datos en un CComboBox:

Notapor latindeveloper el Mar Mar 29, 2005 10:38 am

Olvidaba que no es necesario hacer m_combo.UpdateData() ni UpdateData() mientras llenas de datos el combo, por que el combo no esta relacionado con ningun dato del Dialogo.
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru

Re:Indice de datos en DOS CComboBox

Notapor XLinux el Mar Mar 29, 2005 12:13 pm

Hola navisoft, pues si, con eso tambie probe y pues no resulta, me explico bien, realizo el siguiente codigo para ingresar datos a un dos combos:

/////////////////////////////////////////////////////////////////////////////////
CWaitCursor x;
//UpdateData();
CString sql;
sql = _T("SELECT * FROM tabla");
if(mysql_real_query(m_link_db,sql,sql.GetLength()) == 0 )
{ MYSQL_RES* res;
if ((res = mysql_store_result(theApp.m_link_db)))
{ m_combo.ResetContent();
MYSQL_ROW currentRow;
CString tmp;
DWORD flag;
INT item = 0;
while ((currentRow = mysql_fetch_row(res)))
{ tmp.Format ("%s", currentRow[1]);
m_combo.InsertString(item,tmp);
flag = (int)currentRow[0];
m_combo.SetItemData(item,flag);
flag = 0;
item++;
}
}
mysql_free_result(res);
}
//m_combo.UpdateData();


////////////////// Para el otro combo////////////////////

sql = _T("SELECT * FROM tabla");
if(mysql_real_query(m_link_db,sql,sql.GetLength()) == 0 )
{ MYSQL_RES* res;
if ((res = mysql_store_result(theApp.m_link_db)))
{ m_combo2.ResetContent();
MYSQL_ROW currentRow;
CString tmp;
DWORD flag;
INT item = 0;
while ((currentRow = mysql_fetch_row(res)))
{ tmp.Format ("%s", currentRow[1]);
m_combo2.InsertString(item,tmp);
flag = (int)currentRow[0];
m_combo2.SetItemData(item,flag);
flag = 0;
item++;
}
}
mysql_free_result(res);
}
//m_combo2.UpdateData();
/////////////////////////////////////////////////////////////////////////////////

Y eso es todo. Segun revise el problema es que cuando solo hago el primer ingreso de datos al primer combo y luego hago el segundo ingreso al combo2 los indices del combo 1 se ponen feos, son basuras de memoria, mas no sus datos, y los datos e indices del segundo combo2 estan bien.

Incluso esto se puede probar con la misma aplicacion realizada por navisoft, adicionando dos combos y veran que no les miento.

Ojala que encuentre el error y la manera de corregir esto, y tambien con sus ayudas.


Salu2
Avatar de Usuario
XLinux
Usuario Activo
Usuario Activo
 
Mensajes: 44
Registrado: Jue Feb 24, 2005 4:59 pm


Volver a Visual C++

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 0 invitados