ADO连Oracle有必要为每一张表都创建一个类吗&&程序错误求救~

zimuyuan 2011-10-07 04:07:41
之前看到过ADO 和ODBC连SQL Server2000时都为各表创建了类~如题~创建类后的有缺点是啥啊?小菜鸟最近正学习这个~可惜周围没有搞这方面的,幸好可以网上求助~望各位大侠不吝赐教~偶在这先行谢过了
BOOL UserM::OnInitDialog() 
{
CDialog::OnInitDialog();
m_listuserm.SetExtendedStyle(LVS_EX_FLATSB
|LVS_EX_FULLROWSELECT
|LVS_EX_HEADERDRAGDROP
|LVS_EX_ONECLICKACTIVATE
|LVS_EX_GRIDLINES); //设置列表框控件扩展风格
//初始用户信息列表框控件
m_listuserm.InsertColumn(0,"USERID",LVCFMT_CENTER,50);
m_listuserm.InsertColumn(1,"UNAME",LVCFMT_CENTER,80);
m_listuserm.InsertColumn(2,"PASSW",LVCFMT_CENTER,80);
m_listuserm.InsertColumn(3,"TYPED",LVCFMT_CENTER,80);
m_listuserm.InsertColumn(4,"INF1",LVCFMT_CENTER,100);
m_listuserm.InsertColumn(5,"INF2",LVCFMT_CENTER,100);
m_listuserm.InsertColumn(6,"INF3",LVCFMT_CENTER,100);

// TODO: Add extra initialization here

return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}

void UserM::Onrefreshstr() //数据刷新按钮
{ m_listuserm.DeleteAllItems(); //清楚所有列表项

m_ado.OnInitADOConn();
CString sql="select * from LOGINF";
m_ado.m_pRecordset = m_ado.GetRecordSet(sql);
Fields * fields=NULL;
long countl,i;
BSTR bstr;
// countl=fields->Count;
fields->get_Count(&countl);
for( i=countl-1;i>=0;i--)
{
fields->Item[i]->get_Name(&bstr);
m_listuserm.InsertColumn(i,(CString)bstr,LVCFMT_LEFT,100,0);
}
int k;
_variant_t var;
tagVARIANT varFieldVal;
var.vt = VT_I2;
FieldPtr pField;
while(!m_pRecordset->adoEOF)
{
m_listuserm.InsertItem(0, "");
for(k=countl-1;k>=0;k--)
{
var.iVal = k;
pField = m_pRecordset->Fields->GetItem(var);
pField->get_Value(&varFieldVal);
if(varFieldVal.vt != VT_NULL)
m_listuserm.SetItemText(0,k,(char*)(_bstr_t)varFieldVal);
m_listuserm.InsertColumn(i,(CString)bstr,LVCFMT_LEFT,100,0);
}
m_pRecordset->MoveNext();
}

m_ado.ExitConnect();
}


实现功能:创建两个非主窗口的对话框1和对话框2,运行后点击“更新”按钮,能够将数据库中一张表的信息显示到对话框1的列表控件中;对话框2的编辑框中添加相关信息后,可以保存到数据库中,并能够在对话框1的列表控件中显示出来~
再次感谢~
...全文
58 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zimuyuan 2011-10-07
  • 打赏
  • 举报
回复
应该就是模态的对话框~我试着写了段代码~编译啥的没错,运行有问题~程序似乎挺在第一个循环外,我把最外层循环去掉后运行显示有错误


AddUser::AddUser(CWnd* pParent /*=NULL*/)
: CDialog(AddUser::IDD, pParent)
{
//{{AFX_DATA_INIT(AddUser)
m_ukind = _T("");
m_passw = _T("");
m_rpassw = _T("");
m_uname = _T("");
//}}AFX_DATA_INIT
}


void AddUser::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(AddUser)
DDX_Control(pDX, IDC_COMBOkind, m_comukind);
DDX_CBString(pDX, IDC_COMBOkind, m_ukind);
DDX_Text(pDX, IDC_EDITpassw, m_passw);
DDX_Text(pDX, IDC_EDITrpassw, m_rpassw);
DDX_Text(pDX, IDC_EDITuname, m_uname);
//}}AFX_DATA_MAP
}

void AddUser::OnOK()
{
// TODO: Add extra validation here
if((m_uname!="")&&(m_comukind.GetCurSel()!=CB_ERR))
{
if(m_passw.Compare(m_rpassw)==0)
{
AddUser adlg;
m_pRecordset->AddNew();
m_pRecordset->PutCollect(_variant_t(_T("UNAME")),_variant_t(adlg.m_uname));
m_pRecordset->PutCollect(_variant_t(_T("PASSW")),_variant_t(adlg.m_passw));
m_pRecordset->PutCollect(_variant_t(_T("TYPE")),_variant_t(adlg.m_ukind));
m_pRecordset->Update();
CListCtrl* m_listuserm=(CListCtrl*)GetDlgItem(IDC_LISTuserm);
m_listuserm->DeleteAllItems();
if(m_pRecordset->BOF && m_pRecordset->adoEOF)
return;
m_pRecordset->MoveFirst();
int n=0;
while(!m_pRecordset->adoEOF)
{
_variant_t varValue;
CString uname=_T("");
CString passw=_T("");
CString type=_T("");
varValue=m_pRecordset->GetCollect(_variant_t(_T("UNAME")));
if(varValue.vt != VT_NULL)
uname=varValue.bstrVal;
else
uname=_T("UNAME");
varValue=m_pRecordset->GetCollect(_variant_t(_T("PASSW")));
if(varValue.vt != VT_NULL)
uname=varValue.bstrVal;
else
uname=_T("PASSW");
varValue=m_pRecordset->GetCollect(_variant_t(_T("TYPE")));
if(varValue.vt != VT_NULL)
uname=varValue.bstrVal;
else
uname=_T("TYPE");

CString strText=_T("");
strText.Format(_T("%d"),n+1);
m_listuserm->InsertItem(n,strText);
strText.Format(_T("%s"),uname);
m_listuserm->SetItemText(n,1, strText);
strText.Format(_T("%s"),passw);
m_listuserm->SetItemText(n,2, strText);
strText.Format(_T("%s"),type);
m_listuserm->SetItemText(n,3, strText);
n++;
m_pRecordset->MoveNext();
}

}
else
{
MessageBox("您输入的密码不一致,请重新输入!","警告");
}
}
else
{
MessageBox("用户信息不完整,请重新输入!","警告");
}

}

pp198712163374 2011-10-07
  • 打赏
  • 举报
回复
如果你的两个对话框是模态的问题很好解决:只要将dialog2中数据插入数据库中,dialog1的初始化对话框程序中的sql语句执行了就行了;
如果是非模态的比较难弄:加一个线程或是???
zimuyuan 2011-10-07
  • 打赏
  • 举报
回复
补充~看书上介绍的如果是主窗口和其他对话框操作的话可以调用AfsGetApp函数获取应用程序指针对象,赋值给public变量~但这两个窗口都不是啊~求高手解救!!

4,018

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧