数据库ODBC的一个问题

kmustty 2005-12-02 10:42:15
代码如下:

BOOL CBuildinglistDlg::OnInitDialog()
{
CDialog::OnInitDialog();
DWORD dwStyle=::GetWindowLong(m_listall.m_hWnd,GWL_STYLE);
//设置为报表形式
SetWindowLong(m_listall.m_hWnd,GWL_STYLE,dwStyle|LVS_REPORT);
SetWindowLong(m_listresult.m_hWnd,GWL_STYLE,dwStyle|LVS_REPORT);
DWORD ExStyle =m_listall.GetExtendedStyle();
//设置为整栏选择和网格线
m_listall.SetExtendedStyle(ExStyle|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_listresult.SetExtendedStyle(ExStyle|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
//初始化列表控件标题栏
m_listall.InsertColumn(0,"编号",LVCFMT_LEFT,50,0);
m_listall.InsertColumn(1,"建筑物ID",LVCFMT_CENTER,80,0);
m_listall.InsertColumn(2,"建筑物名称",LVCFMT_CENTER,210,0);

m_listresult.InsertColumn(0,"编号",LVCFMT_LEFT,50,0);
m_listresult.InsertColumn(1,"建筑物ID",LVCFMT_CENTER,80,0);
m_listresult.InsertColumn(2,"建筑物名称",LVCFMT_CENTER,210,0);
// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

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);
}
}

// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
m_database = new CDatabase;
m_set = new CListSet;
if(!m_database->Open(NULL,FALSE,FALSE,"ODBC;DSN=List"))
{
AfxMessageBox("Failed to open database!");
}
// TODO: Add extra initialization here
m_set->Open();
m_set->MoveLast();
CString str;
int RecordNum;
int ipos;
RecordNum = m_set->m_Num;
m_set->MoveFirst();
for(int i = 1; i <= RecordNum; i++)
{
str.Format("%d",i);
ipos = m_listall.InsertItem(i-1,str);
m_listall.SetItemText(ipos, 1, m_set->m_ID);
m_listall.SetItemText(ipos, 2, m_set->m_Name);
m_set->MoveNext();
}
m_combofields.AddString("建筑物名称");
m_combofields.AddString("建筑物高度");
m_combofields.AddString("建筑物楼层");
m_combofields.AddString("建筑物施工单位");
m_combofields.AddString("建筑物隶属单位");
m_combofields.SetCurSel(0);
m_set->Close();
return TRUE; // return TRUE unless you set the focus to a control
}


void CBuildinglistDlg::OnDblclkListall(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
if(m_set->IsOpen())
m_set->Close();
m_set->Open();
m_set->MoveFirst();
int numpos;
CString strInfo,strID;
for(int a = 0; a < m_listall.GetItemCount();a++)
{
if(m_listall.GetItemState(a,LVIS_SELECTED) == LVIS_SELECTED)
{
strInfo = m_listall.GetItemText(a,0);
numpos = atoi(strInfo)-1;
m_set->Move(numpos);
AfxMessageBox(m_set->m_Name);
}

}
m_set->Close();
*pResult = 0;
}

void CBuildinglistDlg::OnAdvancedfind() //条件查询
{
// TODO: Add your control notification handler code here
CString str;

int SelectedPos;
i = 0;
m_listresult.DeleteAllItems();
SelectedPos = m_combofields.GetCurSel();
UpdateData(TRUE);
switch(SelectedPos)
{
case 0:
m_set->m_strFilter = "[BuildingHeight] like '"+m_editsearch+"'";
break;
case 1:
m_set->m_strFilter = "[BuildingCorp] like '%"+m_editsearch+"%'";
break;
case 2:
m_set->m_strFilter = "[Buildingfloor] like '"+m_editsearch+"'";
break;
case 3:
m_set->m_strFilter = "[Name] like '%"+m_editsearch+"%'";
break;
case 4:
m_set->m_strFilter = "[BuildingCorpConstruct] like '%"+m_editsearch+"%'";
break;
default:
break;
}
if(!m_set->Open()||m_set->IsEOF())
{

MessageBox("没有找到匹配的数据,请重新输入!","错误信息!",MB_ICONERROR);
m_set->Close();
return;
}
while(!m_set->IsEOF())
{
str.Format("%ld",i+1);
int ipos = m_listresult.InsertItem(i,str);
m_listresult.SetItemText(ipos,1,m_set->m_ID);
m_listresult.SetItemText(ipos,2,m_set->m_Name);
i++;
m_set->MoveNext();
}
m_set->Close();
}


CComboBox m_combofields;
CListCtrl m_listresult;
CListCtrl m_listall;
CString m_editsearch;
CListSet *m_set;
CDatabase *m_database;

我使用两个LISTCONTROL控件和EDIT控件做了一个对话框,要求是在初始化,显示ACCESS中的全部记录(M_LISTALL),在LISTCONTROL的中双击,显示ACCESS数据库的字符串信息.通过条件查询可以查询出合适的记录,在M_LISTRESULT中显示.
现在的问题就是我在用条件查询后,在再初始化显示的记录上(M_LISTALL)双击好象就不对了,显示的却是用条件查询中的记录,而不是所有的记录,因此显示的字符串信息也不对,自己找了好几天都没有搞定,不知道哪里有问题,请各位大峡指点!!
...全文
75 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

4,012

社区成员

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

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