📄 bstvdlg.cpp
字号:
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
AfxSocketInit();
//--------使用ADO创建数据库记录集----------------------------------------------------
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordsetSend.CreateInstance(__uuidof(Recordset));
m_pRecordsetSend2.CreateInstance(__uuidof(Recordset));
//4 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些想不到的错误
try
{
m_pRecordset->Open("SELECT * FROM 节目UCL表", // 查询节目UCL表中所有字段
theApp.m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
m_pRecordsetSend->Open("SELECT * FROM SEND表", // 查询节目UCL表中所有字段
theApp.m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
m_pRecordsetSend2->Open("SELECT * FROM SEND表2", // 查询节目UCL表中所有字段
theApp.m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
ListData();
// m_ctsFileaddr="文件等待发送";
// CWnd* pWnd = GetDlgItem(IDC_PORT);
// pWnd->SetWindowText(_T("7890"));
//-------------------------------------------------------------------------------------
/* CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
*/
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CBSTVDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CBSTVDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CBSTVDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CBSTVDlg::ListData()
{
_variant_t var;
CString strName,strType,strLoc;
CString strNameSend,strTypeSend,strLocSend;
CString strNameSend2,strTypeSend2,strLocSend2;
//效清空列表框
m_AccessList.ResetContent();
strName=strType=strLoc="";
m_AccessListSend.ResetContent();
strNameSend=strTypeSend=strLocSend="";
m_AccessListSend2.ResetContent();
strNameSend2=strTypeSend2=strLocSend2="";
try
{
if(!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
{
AfxMessageBox("表内数据为空");
return;
}
if(!m_pRecordsetSend->BOF)
m_pRecordsetSend->MoveFirst();
if(!m_pRecordsetSend2->BOF)
m_pRecordsetSend2->MoveFirst();
// 读入库中各字段并加入列表框中
while(!m_pRecordset->adoEOF)
{
var = m_pRecordset->GetCollect("节目名称");
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("节目类型");
if(var.vt != VT_NULL)
strType = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("位置");
if(var.vt != VT_NULL)
strLoc = (LPCSTR)_bstr_t(var);
m_AccessList.AddString( strName + " --> "+strType+"-->["+strLoc+"]" );
m_pRecordset->MoveNext();
}
while(!m_pRecordsetSend->adoEOF)
{
var = m_pRecordsetSend->GetCollect("节目名称");
if(var.vt != VT_NULL)
strNameSend = (LPCSTR)_bstr_t(var);
var = m_pRecordsetSend->GetCollect("节目类型");
if(var.vt != VT_NULL)
strTypeSend = (LPCSTR)_bstr_t(var);
var = m_pRecordsetSend->GetCollect("位置");
if(var.vt != VT_NULL)
strLocSend = (LPCSTR)_bstr_t(var);
m_AccessListSend.AddString( strNameSend + " --> "+strTypeSend+"-->["+strLocSend+"]" );
m_pRecordsetSend->MoveNext();
}
// 默认列表指向第一项,同时移动记录指针并显示
// m_AccessList.SetCurSel(0);
while(!m_pRecordsetSend2->adoEOF)
{
var = m_pRecordsetSend2->GetCollect("节目名称");
if(var.vt != VT_NULL)
strNameSend2 = (LPCSTR)_bstr_t(var);
var = m_pRecordsetSend2->GetCollect("节目类型");
if(var.vt != VT_NULL)
strTypeSend2 = (LPCSTR)_bstr_t(var);
var = m_pRecordsetSend2->GetCollect("位置");
if(var.vt != VT_NULL)
strLocSend2 = (LPCSTR)_bstr_t(var);
m_AccessListSend2.AddString( strNameSend2 + " --> "+strTypeSend2+"-->["+strLocSend2+"]" );
m_pRecordsetSend2->MoveNext();
}
OnSelchangeListaccess();
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
}
void CBSTVDlg::OnSelchangeListaccess()
{
int curSel = m_AccessList.GetCurSel();
// int curSelSend = m_AccessListSend.GetCurSel();
_variant_t var,varIndex;
if(curSel<0)
return;
try
{
// 先将指针移向第一条记录,然后就可以相对第一条记录来随意移动记录指针
m_pRecordset->MoveFirst();
m_pRecordset->Move(long(curSel));
m_pRecordset->Update();
UpdateData(false);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
}
//---读取-------------------------------------------------------------------------------
void CBSTVDlg::OnReadaccess()
{
//先关闭已经打开的记录集对象
m_pRecordset->Close();
try
{
m_pRecordset->Open("SELECT * FROM 节目UCL表", // 查询DemoTable表中所有字段
theApp.m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
ListData();
}
//---添加----------------------------------------------------------------------------------
void CBSTVDlg::OnWriteaccess()
{
UpdateData();
CUCLDlg dlg;
if(IDOK!=dlg.DoModal()) return;
try
{
m_pRecordset->AddNew();
m_pRecordset->PutCollect("节目名称", _variant_t(dlg.m_strName));
m_pRecordset->PutCollect("节目类型", _variant_t(dlg.m_strType));
m_pRecordset->PutCollect("位置", _variant_t(dlg.m_strLoc));
m_pRecordset->Update();
AfxMessageBox("添加成功!");
// 更新显示其库内容
// int nCurSel = m_AccessList.GetCurSel();
int nCurSel = m_AccessList.GetCount();
ListData();
OnReadaccess();
m_AccessList.SetCurSel(nCurSel);
// 移动记录指针到新的位置
OnSelchangeListaccess();
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
}
//---编辑-------------------------------------------------------------------------------
void CBSTVDlg::OnModify()
{
UpdateData();
_variant_t var;
CUCLDlg dlg;
try
{
if(!m_pRecordset->adoEOF)
{
var = m_pRecordset->GetCollect("节目名称");
if(var.vt != VT_NULL)
dlg.m_strName = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("节目类型");
if(var.vt != VT_NULL)
dlg.m_strType = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("位置");
if(var.vt != VT_NULL)
dlg.m_strLoc = (LPCSTR)_bstr_t(var);
UpdateData(false);
}
OnSelchangeListaccess();
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
if(IDOK!=dlg.DoModal()) return;
try
{
// 写入各字段值
m_pRecordset->PutCollect("节目名称", _variant_t(dlg.m_strName));
m_pRecordset->PutCollect("节目类型", _variant_t(dlg.m_strType));
m_pRecordset->PutCollect("位置", _variant_t(dlg.m_strLoc));
m_pRecordset->Update();
AfxMessageBox("编辑成功!");
// 更新显示其库内容
int nCurSel = m_AccessList.GetCurSel();
ListData();
m_AccessList.SetCurSel(nCurSel);
// 移动记录指针到新的位置
OnSelchangeListaccess();
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
}
//---删除-------------------------------------------------------------------------------
void CBSTVDlg::OnDelete()
{
if(m_AccessList.GetCount() == 0)
return;
else if(m_AccessList.GetCurSel() < 0 || m_AccessList.GetCurSel() > m_AccessList.GetCount())
m_AccessList.SetCurSel(0);
try
{
// 删除当前行记录
m_pRecordset->Delete(adAffectCurrent);
m_pRecordset->Update();
// 删除列表中当前值
int nCurSel = m_AccessList.GetCurSel();
m_AccessList.DeleteString(nCurSel);
if(nCurSel == 0 && (m_AccessList.GetCount() != 0))
m_AccessList.SetCurSel(nCurSel);
else if(m_AccessList.GetCount() != 0)
m_AccessList.SetCurSel(nCurSel-1);
// 移动记录指针到新的位置
OnSelchangeListaccess();
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
}
//---销毁窗口-----------------------------------------------------------------------------
BOOL CBSTVDlg::DestroyWindow()
{
//关闭记录集
m_pRecordset->Close();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -