Red de conocimiento informático - Aprendizaje de programación - Programación de bases de datos mfc (odbc)

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)

{

TCHAR szError[100];

e->GetErrorMessage(szError,100);

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()) {

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)

{

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()

{

// 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

}

}