C/Visual C - Consulta sencilla de SQL en Visual C

 
Vista:

Consulta sencilla de SQL en Visual C

Publicado por Luis (1 intervención) el 18/07/2003 12:19:54
Tengo una base de datos en Visual C y quiero simplemente que me realice una consulta por nombre, he probado a modificar la variable m_StrFilter y utilizar Requery pero me da un fallo: "Debug Assertion failed" ¿que hago?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Cómo realizar una consulta por nombre en una base de datos sin fallos en `m_StrFilter` y `Requery`

Publicado por Alejandro (1286 intervenciones) el 15/07/2025 20:44:35
Luis, el error de "Debug Assertion failed" al usar `m_StrFilter` y `Requery()` suele indicar que hay un problema con la forma en que estás configurando el filtro o con el estado del recordset. Aquí te doy algunos pasos y recomendaciones para solucionar y realizar correctamente la consulta por nombre:

Pasos para filtrar por nombre en un recordset



1. Asegúrate de que el recordset esté abierto antes de aplicar el filtro:
1
2
3
if (!m_myRecordset.IsOpen()) {
    m_myRecordset.Open();
}

2. Configura correctamente `m_StrFilter`:
- La cadena de filtro debe seguir la sintaxis del motor de base de datos (por ejemplo, SQL para Jet/ACE).
- Ejemplo para filtrar por nombre:
1
2
CString strNombre = "Juan"; // o la variable que tengas
m_StrFilter.Format(_T("Nombre = '%s'"), strNombre);
- Si `Nombre` es un campo de texto, asegúrate de poner comillas simples.

3. Asignar el filtro y hacer `Requery()`:
1
2
m_myRecordset.m_strFilter = m_StrFilter;
m_myRecordset.Requery();

4. Verifica que el campo exista y que el filtro sea correcto:
- Asegúrate que el campo `Nombre` exista en la tabla.
- La cadena de filtro no tenga errores de sintaxis.

Ejemplo completo



1
2
3
4
5
6
7
8
9
10
11
// Supongamos que quieres filtrar por nombre "Juan"
CString strNombre = "Juan";
m_myRecordset.m_strFilter.Format(_T("Nombre = '%s'"), strNombre);
 
if (m_myRecordset.IsOpen()) {
    m_myRecordset.Close();
}
m_myRecordset.Open();
 
m_myRecordset.m_strFilter = _T("Nombre = 'Juan'");
m_myRecordset.Requery();

Consejos adicionales



- Verifica que la base de datos esté en buen estado y que la conexión esté activa.
- Revisa que no estés modificando `m_StrFilter` en otro lugar sin actualizar el recordset.
- Para depurar, imprime o muestra en un cuadro de mensaje la cadena de filtro antes de hacer `Requery()` para asegurarte de que es correcta:
1
AfxMessageBox(m_myRecordset.m_strFilter);

¿Qué hacer si sigue fallando?



- Asegúrate de que el recordset no esté en un estado inválido.
- Intenta cerrar y volver a abrir el recordset después de modificar el filtro.
- Verifica que la consulta original funcione sin filtro y que la tabla tenga datos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar