Programación de bases de datos mfc (odbc)
No tengo tiempo para darte un ejemplo en detalle. Tengo tiempo para comunicarme por la noche
qq 469392501
void CMemoDBSDlg::OnBtnDelMember. ()
{
// TODO: agregue aquí el código del controlador de notificación de control
// Obtenga la fila donde se encuentra el registro de miembro que se eliminará.
int nItem = m_listMember.GetNextItem (-1, LVNI_SELECTED);
if(nItem == -1){
AfxMessageBox("Ningún miembro seleccionado para eliminar");
return ;
}
//Obtener ID de miembro.
int id = atoi(m_listMember.GetItemText( nItem,0));
TRY{
CString sql;
//Eliminar registros de la base de datos.
sql.Format ("DELETE member_tab "
"donde member_id = %d",id);
TRACE(sql);
m_db.ExecuteSQL(sql);
//Desde el control de lista Elimina el registro.
m_listMember.DeleteItem(nItem);
}
CATCH(CDBException,ex )
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin
}
AND_CATCH(CException,e) p>
{
TCHAR szError[100];
e->GetErrorMessage(szError,100); p>
AfxMessageBox (szError);
p>}
END_CATCH
}
void CMemoDBSDlg::OnBtnAddType()
{
// TODO: agregue aquí el código del controlador de notificación de control
//Agregue un tipo de nota.
//Inicializar la instancia del cuadro de diálogo de tipo de nota.
CMemoTypeDlg dlg ;
if(dlg.DoModal() == IDOK){
//Obtener la nota recién agregada escriba en el cuadro de diálogo.
CString strName = dlg.m_strTypeName;
TRY{
CRecordset rs(&m_db);
/ /Obtener el valor de ID de tipo más grande.
rs .Open(CRecordset::dynaset,
"Select max(TYPE_ID) from MEMO_TYPE_TAB");
/ /Inicializa el nuevo valor de ID de tipo en 1.
int newTy
peID = 1;
//Si la base de datos ya tiene un registro de tipo, el nuevo ID de tipo es el ID de tipo máximo + 1
if(!rs.IsEOF()) { p>
CDBVariant var;
rs.GetFieldValue((short)0, var, SQL_C_SLONG);
if (var.m_dwType != DBVT_NULL)
newTypeID = var.m_iVal + 1;
}
CString sql;
//Agrega un nuevo registro de tipo de nota a la base de datos.
sql.Format("Insertar en MEMO_TYPE_TAB(TYPE_ID,"
"TYPE_NAME) "
"VALUES("
"%d ,' %s')",newTypeID,strName);
TRACE(sql);
m_db.ExecuteSQL(sql);
//Añadir a la línea de registro de la interfaz.
InsertMemoTypeItem(newTypeID,strName);
}
CATCH(CDBException,ex)
{ p>
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
}
}
void CMemoDBSDlg::OnBtnModType()
{
// TODO: agregue aquí el código del controlador de notificación de control
//Obtenga el registro de tipo a modificar
int nItem = m_listType.GetNextItem (-1, LVNI_SELECTED);
//Si no se selecciona ningún registro para modificar, regresa.
if(nItem == -1){
AfxMessageBox("No Seleccione el tipo a modificar");
return;
}
//Obtiene el ID y el nombre del registro a modificar .
int id = atoi(m_listType.GetItemText(nItem,0));
CString nombre = m_listType.GetItemText(nItem,1);
/ /Inicializar el cuadro de diálogo de tipo de nota.
CMemoTypeDlg dlg;
//Asignar valores a las variables en el cuadro de diálogo.
dlg.m_strTypeName = nombre ;
if(dlg.DoModal() == IDO
K){
//Obtener los datos modificados.
CString strName = dlg.m_strTypeName;
TRY{
CString sql ;
//Actualizar registro.
sql.Format("UPDATE MEMO_TYPE_TAB SET TYPE_NAME = '%s' "
" WHERE TYPE_ID = %d", strName ,id);
TRACE(sql);
m_db.ExecuteSQL(sql);
//Modificar el valor de la interfaz.
m_listType.SetItemText(nItem,1,strName);
}
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
}
}
void CMemoDBSDlg::OnBtnDelType()
{ p >
// TODO: agregue aquí el código del controlador de notificación de control
//Obtenga la fila donde se encuentra el registro que se eliminará.
int nItem = m_listType.GetNextItem (-1, LVNI_SELECTED);
//Si no hay selección, regresa.
if(nItem == -1){
AfxMessageBox(" No se seleccionó ningún tipo para eliminar ");
return;
}
//Obtener el ID del tipo a eliminar
int id = atoi(m_listType.GetItemText (nItem,0));
TRY{
CString sql;
sql.Format("DELETE MEMO_TYPE_TAB "
"donde TYPE_ID = %d",id);
TRACE(sql);
//Eliminar registros de tipo
m_db.ExecuteSQL( sql);
//Eliminar registros en la interfaz.
m_listType.DeleteItem(nItem);
}
CATCH(CDBException ,ej)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin
}<); /p>
AN
D_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
}
void CMemoDBSDlg::OnBtnAddMemo()
{
// TODO: agregue aquí el código del controlador de notificación de control
//Inicialice el cuadro de diálogo de información de la nota.
CMemoInfoDlg dlg;
//Obtiene los nombres de todos los miembros de la familia.
for(int i = 0; i < m_listMember.GetItemCount(); i++ )
dlg.m_strMemberArray.Add( m_listMember .GetItemText(i,1)) ;
//Obtener toda la información de tipo.
for(i = 0 ; i < m_listType.GetItemCount() ; i++ )
dlg.m_strTypeArray.Add(m_listType.GetItemText(i,1));
//Abre el cuadro de diálogo y agrega un nuevo registro.
if(dlg. DoModal () == IDOK){
//Obtiene el valor del registro del cuadro de diálogo.
CString strName = dlg.m_strMember;
CString strType = dlg. m_strMemoType;
CString strHappenDate = dlg.m_oleDate.Format("%Y-%m-%d")
+ " " + dlg.m_oleTime.Format("% H: %M:%S");
CString strOperDate = COleDateTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S");
int isEvent = dlg.m_isEvent;
CString strCost = dlg.m_strCost;
CString strMemo = dlg.m_strMemoInfo;
TRY{
p>CRecordset rs(&m_db);
CString sql;
//Obtiene el valor de ID del miembro según el nombre del miembro.
sql.Format(" Seleccione MEMBER_ID de MEMBER_TAB donde "
"MEMBER_NAME = '%s'",strName);
rs.Open(CRecordset::dynaset,sql) ;
int memberID = 1;
if(!rs.IsEOF()) {
CDBVariant var;
rs.GetFieldValue ((s
hort)0, var, SQL_C_SLONG);
if (var.m_dwType != DBVT_NULL)
memberID = var.m_iVal;
}
rs.Close();
//Obtiene el ID del tipo de nota según el tipo de nota.
sql.Format("Seleccione TYPE_ID de MEMO_TYPE_TAB donde "
"TYPE_NAME = '%s'",strType);
rs.Open(CRecordset::dynaset,sql);
int typeID = 1;
if(!rs.IsEOF()) {
CDBVariant var;
rs.GetFieldValue((short)0, var, SQL_C_SLONG);
if (var.m_dwType != DBVT_NULL)
typeID = var.m_iVal;
}
rs.Close();
//Obtiene el siguiente valor de la secuencia SEQ_MEMO_ID. Este valor es el nuevo ID de la nota.
rs.Open(CRecordset::dynaset,
"Select max(MEMO_ID) de MEMO_INFO_TAB" );
int memoID = 1;
if(!rs.IsEOF()) {
CDBVariant var;
rs.GetFieldValue((short)0, var, SQL_C_SLONG);
if (var.m_dwType != DBVT_NULL)
memoID = var.m_iVal+1;
}
sql.Format("Insertar en MEMO_INFO_TAB(MEMO_ID,"
"MEMBER_ID,OPER_DATE,HAPPEN_DATE,"
"IS_BIGEVENT,EVENT_COST, TYPE_ID,MEMO_TEXT ) "
"VALUES("
"%d,%d,'%s'"
",'%s',% d,' %s'"
",%d,'%s')",memoID,memberID,
strOperDate,strHappenDate,isEvent,strCost,typeID,strMemo);
TRACE(sql);
m_db.ExecuteSQL(sql);
//Inserta nuevos registros en la interfaz.
InsertMemoInfoItem (memoID, strName,strOperDate,strHappenDate,isEvent,strCost,strType,strMemo) ;
}
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
}
}