
列表显示只是一个表象,二者没有设定好的关联。实际的删除 *** 作应该在数据库中进行,也就是执行删除工作后,你得把列表数据刷新一下,重新显示。
具体的函数实现,如果需要我再贴上来。
void CMCTTView::ListItem()//刷新列表
{
int i = 0;
if(!m_pSet->IsOpen())
AfxMessageBox("数据源未打开");
m_ItemSetExtendedStyle(m_ItemGetExtendedStyle()|LVS_EX_FULLROWSELECT);
m_ItemDeleteAllItems();
m_ItemSetRedraw(FALSE);
if (!m_pSet->GetRecordCount() == 0)
{
m_pSet->MoveFirst();
}
while(!m_pSet->IsEOF())
{
m_ItemInsertItem(i,"");
m_ItemSetItemText(i,0,m_pSet->m_column1);
m_ItemSetItemText(i,1,m_pSet->m_column2);
m_ItemSetItemText(i,2,m_pSet->m_column3);
m_ItemSetItemText(i,3,m_pSet->m_column4);
i+=1;
m_pSet->MoveNext();
}
m_ItemSetRedraw(TRUE);
}
void CMCTTView::OnItemDel() //在view类中删除条目
{
// TODO: Add your control notification handler code here
int listIndex; //当前选中项的索引
//首先得到点击的位置
POSITION pos=m_ItemGetFirstSelectedItemPosition(); //0 based m_item是指代列表控件
if(pos==NULL)
return;
//得索引,通过POSITION转化
listIndex=m_ItemGetNextSelectedItem(pos)+1; //1 based,so 1 added
m_pSet->SetAbsolutePosition(listIndex);
if ( MessageBox( _T( "你确定要删除当前单词信息吗" ),
_T( "删除确认" ), MB_OKCANCEL | MB_ICONQUESTION ) == IDOK )
{
m_pSet->Delete();
MessageBox( _T( "该单词信息已经被成功删除!" ),
_T( "删除成功!" ), MB_OK | MB_ICONASTERISK );
OnNext();
}
m_pSet->Requery();
//if(!m_pSet->GetRecordCount() == 0)
ListItem();
}
void CMCTTView::OnNext()
{
m_pSet->MoveNext();
if ( m_pSet->IsEOF() )
m_pSet->MoveFirst();
}
int CMCTTDoc::AddToAcc()//在doc类中添加数据
{
m_mCTTSetAddNew();
CString str1,str2,str3,str4;
str1Format("%s",m_Index);
str2Format("%f",m_UseHs);
str3Format("%f",m_UseHj);
switch (m_HJStyle)
{
case 0:
str4 = CString("类型1");
break;
case 1:
str4 = CString("类型2");
break;
case 2:
str4 = CString("类型3");
break;
}
m_mCTTSetm_column1 = str1; //Index
m_mCTTSetm_column2 = str2; //the use of hansi
m_mCTTSetm_column3 = str3; //the use of hanji
m_mCTTSetm_column4 = str4; //the style of hanjie
m_mCTTSetUpdate();
m_mCTTSetRequery();
MessageBeep(MB_OK);
CMainFrame pframe = (CMainFrame)AfxGetMainWnd();
CMCTTView pInterfaceView = (CMCTTView)pframe->GetActiveView();
pInterfaceView->ListItem();
return 0;
}
比如你的表为user
你可以先创建一个类User,把数据库中的数据放入User对象中
再用集合存放每个User对象,如:
public ArrayList findAllUsers(){
ArrayList al=new ArrayList();
//循环查询数据库
while(){
String name=;//从数据库中查出
User user=new User();
username=name;
以此类推
aladd(user);
}
return al;
}
分两步进行:
第一步,复制表结构:
在表上面右击——>编写表脚本为:——>Create到——>新查询编辑器窗口,你也可以保存为sql文件,将新查询编辑器窗口最上面的一句话USE [olddatabase]中的“olddatabase”修改为“newdatabase”,其中olddatabase为源数据库名,newdatabase为目标数据库名,点击上面的“执行”按钮,这样,表结构复制完毕;
第二步,复制表数据:
在“olddatabase”上右击——>任务——>导出数据,在d出对话框中选好源数据库、身份验证和目标数据库、身份验证后,然后选择要复制的表,完成后则表数据即插入成功。
创建出你需要的属性比如在我的项目中我需要用到的:有当前的页码currentPage
当前的页显示的数量currentCount
你从数据库中查询得到的所有数据总和totalCount(这个你需要在dao层定义方法实现并把得到的数据返回给service层)
一共需要分多少页totalPage(这个需要你去计算通过查询所有的数据总和/currentCount,还用到了mathceil()方法)
最后生成setter和getter方法
SELECT
表名=CASE WHEN Ccolumn_id=1 THEN Oname ELSE N'' END,
表说明=ISNULL(CASE WHEN Ccolumn_id=1 THEN PTB[value] END,N''),
字段序号=Ccolumn_id,
字段名=Cname,
主键=ISNULL(IDXPrimaryKey,N''),
标识=CASE WHEN Cis_identity=1 THEN N'√'ELSE N'' END,
计算列=CASE WHEN Cis_computed=1 THEN N'√'ELSE N'' END,
类型=Tname,
长度=Cmax_length,
精度=Cprecision,
小数位数=Cscale,
允许空=CASE WHEN Cis_nullable=1 THEN N'√'ELSE N'' END,
默认值=ISNULL(Ddefinition,N''),
字段说明=ISNULL(PFD[value],N''),
索引名=ISNULL(IDXIndexName,N''),
索引排序=ISNULL(IDXSort,N''),
创建时间=OCreate_Date,
修改时间=OModify_date
FROM syscolumns C
INNER JOIN sysobjects O
ON C[object_id]=O[object_id]
AND Otype='U'
AND Ois_ms_shipped=0
INNER JOIN systypes T
ON Cuser_type_id=Tuser_type_id
LEFT JOIN sysdefault_constraints D
ON C[object_id]=Dparent_object_id
AND Ccolumn_id=Dparent_column_id
AND Cdefault_object_id=D[object_id]
LEFT JOIN sysextended_properties PFD
ON PFDclass=1
AND C[object_id]=PFDmajor_id
AND Ccolumn_id=PFDminor_id
-- AND PFDname='Caption' -- 字段说明对应的描述名称(一个字段可以添加多个不同name的描述)
LEFT JOIN sysextended_properties PTB
ON PTBclass=1
AND PTBminor_id=0
AND C[object_id]=PTBmajor_id
-- AND PFDname='Caption' -- 表说明对应的描述名称(一个表可以添加多个不同name的描述)
LEFT JOIN -- 索引及主键信息
(
SELECT
IDXC[object_id],
IDXCcolumn_id,
Sort=CASE INDEXKEY_PROPERTY(IDXC[object_id],IDXCindex_id,IDXCindex_column_id,'IsDescending')
WHEN 1 THEN 'DESC' WHEN 0 THEN 'ASC' ELSE '' END,
PrimaryKey=CASE WHEN IDXis_primary_key=1 THEN N'√'ELSE N'' END,
IndexName=IDXName
FROM sysindexes IDX
INNER JOIN sysindex_columns IDXC
ON IDX[object_id]=IDXC[object_id]
AND IDXindex_id=IDXCindex_id
LEFT JOIN syskey_constraints KC
ON IDX[object_id]=KC[parent_object_id]
AND IDXindex_id=KCunique_index_id
INNER JOIN -- 对于一个列包含多个索引的情况,只显示第1个索引信息
(
SELECT [object_id], Column_id, index_id=MIN(index_id)
FROM sysindex_columns
GROUP BY [object_id], Column_id
) IDXCUQ
ON IDXC[object_id]=IDXCUQ[object_id]
AND IDXCColumn_id=IDXCUQColumn_id
AND IDXCindex_id=IDXCUQindex_id
) IDX
ON C[object_id]=IDX[object_id]
AND Ccolumn_id=IDXcolumn_id
WHERE Oname like '%name%'
-- 如果只查询指定表,加上此条件
ORDER BY Oname,Ccolumn_id
1、打开企业管理器,打开要导入数据的数据库,在表上按右键,所有任务--导入数据,d出DTS导入/导出向导,按下一步
2、选择数据源MicrosoftExcel97-2000,文件名选择要导入的xls文件,按下一步
3、选择目的用于SQLServer的MicrosoftOLEDB提供程序,服务器选择本地(如果是本地数据库的话,如VVV),使用SQLServer身份验证,用户名sa,密码为空,数据库选择要导入数据的数据库(如client),按下一步
4、选择用一条查询指定要传输的数据,按下一步
5、按查询生成器,在源表列表中,有要导入的xls文件的列,将各列加入到右边的选中的列列表中,这一步一定要注意,加入列的顺序一定要与数据库中字段定义的顺序相同,否则将会出错,按下一步
6、选择要对数据进行排列的顺序,在这一步中选择的列就是在查询语句中orderby后面所跟的列,按下一步
7、如果要全部导入,则选择全部行,按下一步
8、则会看到根据前面的 *** 作生成的查询语句,确认无误后,按下一步
9、会看到表/工作表/Excel命名区域列表,在目的列,选择要导入数据的那个表,按下一步
10、选择立即运行,按下一步,11、会看到整个 *** 作的摘要,按完成即可。
分为两种情况,一种是目标表不存在,另一种是目标表已存在,语法是不同的。
分别以sqlserver和oracle为例,两者略有不同。
sqlserver中,如果目标表不存在:
select into 新表名 from 旧表名;sqlserver中,如果目标表已存在:
insert into 新表名 select from 旧表名;oracle中,如果目标表不存在:
create table 新表名 as select from 旧表名;oracle中,如果目标表已存在(方法同sqlserver):
insert into 新表名 select from 旧表名;
以上就是关于怎样将数据库中数据表显示在MFC中的列表控件上,并对其进行删除,修改全部的内容,包括:怎样将数据库中数据表显示在MFC中的列表控件上,并对其进行删除,修改、如何把数据表中的数据放在一个集合里面、sql server怎样把一个数据库中的表移动到另一个数据库中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)