我以前只对对话框的程序有所接触,现在需要用单文档来实现,但是现在有些问题困扰了我好久了,
1.我对窗口进行了切分,左边是TREEWIEE,右边是LISTTREE,基类是CVIEW,进行切分后我的打印等菜单都为不可用了,是什么原因呢?
2.我用和对话框中同样的方法实现在控件中显示ACCESS数据库中数据时总是出错,在对话框中的都是没有问题的。
/* int numline=0;
_variant_t var;
_RecordsetPtr m_pRecordset1;
m_pRecordset1.CreateInstance(__uuidof(Recordset));
m_pRecordset1->Open("SELECT * FROM squ ", // 查询DemoTable表中所有字段
theApp.m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
try {
// CString aname,aid,aaddress,adescription;
if(!m_pRecordset1->BOF)
m_pRecordset1->MoveFirst();
else
{
// AfxMessageBox("表内数据为空");
}
// 读入库中各字段并加入列表框中
while(!m_pRecordset1->adoEOF)
{
// var = m_pRecordset->GetCollect("id");
// if(var.vt != VT_NULL)
// aid = (LPCSTR)_bstr_t(var);
CString sname;
var = m_pRecordset1->GetCollect("namne");
if(var.vt != VT_NULL)
sname = (LPCSTR)_bstr_t(var);
// sid.Format("%d",numline+1);
// m_HeadIcon.Create(16,16,TRUE,2,2);
// m_HeadIcon.Add(AfxGetApp()->LoadIcon(IDI_ICONG));
listCtrl.InsertItem(numline,sname);
listCtrl.SetItemText(numline,1,"3");
listCtrl.SetItemText(numline,2,"8487994");}
numline++;
m_pRecordset1->MoveNext();
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
*/
这是实现代码,在对话框中是可以的,怎么回事呢,非常感谢!在现等
1.我对窗口进行了切分,左边是TREEWIEE,右边是LISTTREE,基类是CVIEW,进行切分后我的打印等菜单都为不可用了,是什么原因呢?
2.我用和对话框中同样的方法实现在控件中显示ACCESS数据库中数据时总是出错,在对话框中的都是没有问题的。
/* int numline=0;
_variant_t var;
_RecordsetPtr m_pRecordset1;
m_pRecordset1.CreateInstance(__uuidof(Recordset));
m_pRecordset1->Open("SELECT * FROM squ ", // 查询DemoTable表中所有字段
theApp.m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
try {
// CString aname,aid,aaddress,adescription;
if(!m_pRecordset1->BOF)
m_pRecordset1->MoveFirst();
else
{
// AfxMessageBox("表内数据为空");
}
// 读入库中各字段并加入列表框中
while(!m_pRecordset1->adoEOF)
{
// var = m_pRecordset->GetCollect("id");
// if(var.vt != VT_NULL)
// aid = (LPCSTR)_bstr_t(var);
CString sname;
var = m_pRecordset1->GetCollect("namne");
if(var.vt != VT_NULL)
sname = (LPCSTR)_bstr_t(var);
// sid.Format("%d",numline+1);
// m_HeadIcon.Create(16,16,TRUE,2,2);
// m_HeadIcon.Add(AfxGetApp()->LoadIcon(IDI_ICONG));
listCtrl.InsertItem(numline,sname);
listCtrl.SetItemText(numline,1,"3");
listCtrl.SetItemText(numline,2,"8487994");}
numline++;
m_pRecordset1->MoveNext();
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
*/
这是实现代码,在对话框中是可以的,怎么回事呢,非常感谢!在现等
void CMainView::OnInit1(CString strInfo)
{
CListCtrl &listCtrl=(CListCtrl&)GetListCtrl();
// CListCtrl &listCtrl=(CListCtrl&)GetListCtrl();
// listCtrl.DeleteAllItems ();
if(strInfo=="DCP1")
{ listCtrl.DeleteAllItems ();
int i=0;
CString x,y,z;
while (i<16)
{
x.Format("%d",i+1);
y="chann"+x;
listCtrl.InsertItem(i,x);
listCtrl.SetItemText(i,1,y);
listCtrl.SetItemText(i,2,"3");
i++;
}
listCtrl.InsertItem(16,"");
listCtrl.SetItemText(16,1,"apm");
listCtrl.SetItemText(16,2,"total:48");
}
if(strInfo=="DCP2")
{
listCtrl.DeleteAllItems ();
listCtrl.InsertItem(0,"1");
listCtrl.SetItemText(0,1,"CHANN1");
listCtrl.SetItemText(0,2,"3");
}
/*以下的信息可参考者加*///*/
this->Invalidate (FALSE);
我在显示具体的一个的时候没有错误的,读取数据库中数据出错
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
CTreeCtrl& CtlTree=(CTreeCtrl&)GetTreeCtrl ();
HTREEITEM select_item=CtlTree.GetSelectedItem ();
CString str=CtlTree.GetItemText (select_item);
// xxx=str;
CSplitterWnd* m_wndSplitter=(CSplitterWnd*)GetParent();
m_listView=(CMainView*)m_wndSplitter->GetPane (0,1);
m_listView->OnInit1(str);
*pResult = 0;
}
这个是TREEVIEW中把选中的节点字段通过OnInit1()传过去的
CListCtrl &listCtrl=(CListCtrl&)GetListCtrl();
int numline=0;
_variant_t var;
_RecordsetPtr m_pRecordset1;
// m_pRecordset1.CreateInstance(__uuidof(Recordset));
m_pRecordset1.CreateInstance("ADODB.Recordset");
CString sname;
sname=strInfo;
MessageBox(sname); m_pRecordset1->Open("SELECT * FROM squ where name = '"+sname+"'", // 查询DemoTable表中所有字段
theApp.m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);是数据这里出错: m_pRecordset1->Open("SELECT * FROM squ where name = '"+sname+"'", // 查询DemoTable表中所有字段
theApp.m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
错误提示:error C2664: 'Open' : cannot convert parameter 1 from 'class CString' to 'const class _variant_t &'
Reason: cannot convert from 'class CString' to 'const class _variant_t'
No constructor could take the source type, or constructor overload resolution was ambiguous
Error executing cl.exe.我的代码是:
CListCtrl &listCtrl=(CListCtrl&)GetListCtrl();
int numline=0;
_variant_t var;
_RecordsetPtr m_pRecordset1;
// m_pRecordset1.CreateInstance(__uuidof(Recordset));
m_pRecordset1.CreateInstance("ADODB.Recordset");
CString sname;
sname=strInfo;
MessageBox(sname); m_pRecordset1->Open("SELECT * FROM squ where name = '"+sname+"'", // 查询DemoTable表中所有字段
theApp.m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
theApp.m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
改成:CString strSQL;
strSQL.Format("SELECT * FROM squ where name = '%s'",sname);
m_pRecordset1->Open(_variant_t(strSQL), // 查询DemoTable表中所有字段
theApp.m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);