Actualización de una tabla (DaoRecordset)

08/09/2003 - 08:55 por Jordi Terés | Informe spam
Hola,
Estoy trabajando con VC++6.0 y M.Access 97.
He creado dos programas que utilizan la misma base de datos Access. Todo el
trabajo que realizan ambos programas contra la base de datos es mediante
DAO.
El Programa A recoje información de una serie de procesos y actualiza una
TABLA, y envia un mensaje al Programa B informandole de que hay nueva
información..
El Programa B al recibir el mensaje recoje la información de la TABLA y la
muestra al usuario.
El problema está en que cuando el programa B no encuentra esa información
grabada en la tabla por el Programa A, y sin envargo si que está grabada ya
que si hago una actualización manual de la información del ProgB si que
aparece.
El problema debe residir en que cuando el ProgB lee la TABLA de alguna
manera todavia no está actualizada, y no se hacer para forzar este hecho.

ProgA
////////////////////////////////////////////////////////////////////////////
/////////////////////
if(Datos.HayDatos)
{
bSendMsgProgB = TRUE;
CTABLASet setTABLA;
setTABLA.m_strFilter = "[Estado]<>'*'";
setTABLA.Open();
while(!Datos.HayDatos)
{
setTABLA.AddNew();

CopiarDatos(&setTABLA,&Datos);

setTABLA.Update();
Datos.Next();
}
setTABLA.Close();
}
//Enviar Mensaje al ProgB
if(bSendMsgProgB)
EnviaMensaje(ProgB, g_uiMsg_ID_REFRESH_LISTA);
////////////////////////////////////////////////////////////////////////////
/////////////////////


ProgB
////////////////////////////////////////////////////////////////////////////
/////////////////////
LRESULT CProgBView::OnRefreshLista(WPARAM wParam, LPARAM lParam)
{
m_cLista. DeleteAllItems( );

CTABLASet setTABLA;
setTABLA.m_strFilter.Format("[XXXX]=%d AND [Estado]<>'*'",nValue);
setTABLA.m_strSort = "CORFA";

setTABLA.Open();

while ( !setTABLA.IsEOF() )
{
.
m_cLista.InsertItem( conta, setTABLA.CAMPO1);
m_cLista.SetItemText( conta,1, setTABLA.CAMPO2 );
m_cLista.SetItemText( conta,2, setTABLA.CAMPO3 );
..
setTABLA.MoveNext();
}

UpdateData( FALSE );

setTABLA.Close();
return 0;
}
////////////////////////////////////////////////////////////////////////////
/////////////////////


Muchas Gracias,
Jordi
 

Leer las respuestas

#1 Jordi Terés
10/09/2003 - 08:07 | Informe spam
La respuesta a mi pregunta está en estos articulos:

http://support.microsoft.com/defaul...-us;153046

http://support.microsoft.com/defaul...-us;178942

Gracias.

"Jordi Terés" escribió en el mensaje
news:
Hola,
Estoy trabajando con VC++6.0 y M.Access 97.
He creado dos programas que utilizan la misma base de datos Access. Todo


el
trabajo que realizan ambos programas contra la base de datos es mediante
DAO.
El Programa A recoje información de una serie de procesos y actualiza una
TABLA, y envia un mensaje al Programa B informandole de que hay nueva
información..
El Programa B al recibir el mensaje recoje la información de la TABLA y la
muestra al usuario.
El problema está en que cuando el programa B no encuentra esa información
grabada en la tabla por el Programa A, y sin envargo si que está grabada


ya
que si hago una actualización manual de la información del ProgB si que
aparece.
El problema debe residir en que cuando el ProgB lee la TABLA de alguna
manera todavia no está actualizada, y no se hacer para forzar este hecho.

ProgA



////////////////////////////////////////////////////////////////////////////
/////////////////////
if(Datos.HayDatos)
{
bSendMsgProgB = TRUE;
CTABLASet setTABLA;
setTABLA.m_strFilter = "[Estado]<>'*'";
setTABLA.Open();
while(!Datos.HayDatos)
{
setTABLA.AddNew();

CopiarDatos(&setTABLA,&Datos);

setTABLA.Update();
Datos.Next();
}
setTABLA.Close();
}
//Enviar Mensaje al ProgB
if(bSendMsgProgB)
EnviaMensaje(ProgB, g_uiMsg_ID_REFRESH_LISTA);



////////////////////////////////////////////////////////////////////////////
/////////////////////


ProgB



////////////////////////////////////////////////////////////////////////////
/////////////////////
LRESULT CProgBView::OnRefreshLista(WPARAM wParam, LPARAM lParam)
{
m_cLista. DeleteAllItems( );

CTABLASet setTABLA;
setTABLA.m_strFilter.Format("[XXXX]=%d AND [Estado]<>'*'",nValue);
setTABLA.m_strSort = "CORFA";

setTABLA.Open();

while ( !setTABLA.IsEOF() )
{
.
m_cLista.InsertItem( conta, setTABLA.CAMPO1);
m_cLista.SetItemText( conta,1, setTABLA.CAMPO2 );
m_cLista.SetItemText( conta,2, setTABLA.CAMPO3 );
..
setTABLA.MoveNext();
}

UpdateData( FALSE );

setTABLA.Close();
return 0;
}



////////////////////////////////////////////////////////////////////////////
/////////////////////


Muchas Gracias,
Jordi


Preguntas similares