我要将文件保存成txt,xls和所有文件3种形式设成if选择语句
能存txt但是存不了xls,程序编译没有错误,运行后保存选择文件种类保存,弹出对话框说:
不能使用‘(未知的)’;文件已在使用中。
非法的连接串属性FIRSTOWHASNAMES
非法的连接串属性CREATE_DB
驱动程序的SQLSetConnectAttr失败
单步调试运行到下面这步就不行啦
if(database.OpenEx(strsql,CDatabase::noOdbcDialog))
代码如下:void CShowDlg::OnSavelistButton()
{
// TODO: Add your control notification handler code here
// CFileDialog fileDlg(FALSE,NULL,"",OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,szFilters);
CFileDialog fileDlg(FALSE);
fileDlg.m_ofn.lpstrTitle="成绩列表保存";
//fileDlg.m_ofn.Flags=OFN_FILEMUSTEXIST|OFN_HIDEREADONLY;
fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)\0*.txt\0XLS Files(*.xls)\0*.xls\0All Files(*.*)\0*.*\0\0";
fileDlg.m_ofn.lpstrDefExt="txt";
CString temp0,temp1,temp2,temp3,temp4,temp5,temp6,m_filename; if(IDOK==fileDlg.DoModal())
{
CFile file(fileDlg.GetFileName(),CFile::modeCreate | CFile::modeWrite); DWORD filter_num=fileDlg.m_ofn.nFilterIndex;//确定选择第几种文件类型
CString k;
k.Format("%ld",filter_num);
MessageBox(k); if(2==filter_num)
{
m_filename=fileDlg.GetPathName();
CDatabase database;
CString exceldrive="MICROSOFT EXCEL DRIVER (*.XLS)";
//CString excelfile="d:\\test.xls"; //注意双线
CString strsql;
strsql.Format("DRIVER={%s};DSN="";FIRSTOWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",exceldrive,m_filename,m_filename); if(database.OpenEx(strsql,CDatabase::noOdbcDialog))
//cdatabase::noodbcdialog 无论提供的连接信息是否足够,都不显示 odbc 连接对话框。
//cdatabase::forceodbcdialog 总是显示 odbc 连接对话框。
{
strsql="CREATE TABLE temptable(序号 TEXT,学号 TEXT,姓名 TEXT,语文 TEXT,数学 TEXT,英语 TEXT,总成绩 TEXT)";
// TRY
// {
database.ExecuteSQL(strsql);
// }
/* CATCH(CDBException, e)
{
CString strMsg;
strMsg.LoadString(0);
strMsg+=strsql+"\n请重命名";
}
END_CATCH
*/
for(int i=0;i<countAll;i++)
{
temp0=m_mylist.GetItemText( i, 0 );
temp1=m_mylist.GetItemText( i, 1 );
temp2=m_mylist.GetItemText( i, 2 );
temp3=m_mylist.GetItemText( i, 3 );
temp4=m_mylist.GetItemText( i, 4 );
temp5=m_mylist.GetItemText( i, 5 );
temp6=m_mylist.GetItemText( i, 6 );
strsql.Format("insert into temptable(序号,学号,姓名,语文,数学,英语,总成绩)values('%s','%s','%s','%s','%s','%s','%s')",temp0,temp1,temp2,temp3,temp4,temp5,temp6); //sql语句一定是
database.ExecuteSQL(strsql);
}
}
database.Close(); }
else
{
CFile file(fileDlg.GetFileName(),CFile::modeCreate | CFile::modeWrite);
file.Write("序号\学号\t姓名\t语文\t数学\t英语\t总成绩\n",strlen("学号\t姓名\t语文\t数学\t英语\t总成绩"));
for(int i=0;i<countAll;i++)
{
temp0=m_mylist.GetItemText( i, 0 );
temp1=m_mylist.GetItemText( i, 1 );
temp2=m_mylist.GetItemText( i, 2 );
temp3=m_mylist.GetItemText( i, 3 );
temp4=m_mylist.GetItemText( i, 4 );
temp5=m_mylist.GetItemText( i, 5 );
temp6=m_mylist.GetItemText( i, 6 );
file.Write(temp0+'\t'+temp1+'\t'+temp2+'\t'+temp3+'\t'+temp4+'\t'+temp5+'\t'+temp6+'\t',temp0.GetLength()+temp1.GetLength()+temp2.GetLength()+temp3.GetLength()+temp4.GetLength()+temp5.GetLength()+temp6.GetLength()+7);
}
file.Close();
}
}}
是说因为if语句的分割么?开始的时候本来想将中间for()重复的代码合并,就把程序拆成了好几段,用switch控制,提示说case分割了××××不能运行现在合并了还是不行
能存txt但是存不了xls,程序编译没有错误,运行后保存选择文件种类保存,弹出对话框说:
不能使用‘(未知的)’;文件已在使用中。
非法的连接串属性FIRSTOWHASNAMES
非法的连接串属性CREATE_DB
驱动程序的SQLSetConnectAttr失败
单步调试运行到下面这步就不行啦
if(database.OpenEx(strsql,CDatabase::noOdbcDialog))
代码如下:void CShowDlg::OnSavelistButton()
{
// TODO: Add your control notification handler code here
// CFileDialog fileDlg(FALSE,NULL,"",OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,szFilters);
CFileDialog fileDlg(FALSE);
fileDlg.m_ofn.lpstrTitle="成绩列表保存";
//fileDlg.m_ofn.Flags=OFN_FILEMUSTEXIST|OFN_HIDEREADONLY;
fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)\0*.txt\0XLS Files(*.xls)\0*.xls\0All Files(*.*)\0*.*\0\0";
fileDlg.m_ofn.lpstrDefExt="txt";
CString temp0,temp1,temp2,temp3,temp4,temp5,temp6,m_filename; if(IDOK==fileDlg.DoModal())
{
CFile file(fileDlg.GetFileName(),CFile::modeCreate | CFile::modeWrite); DWORD filter_num=fileDlg.m_ofn.nFilterIndex;//确定选择第几种文件类型
CString k;
k.Format("%ld",filter_num);
MessageBox(k); if(2==filter_num)
{
m_filename=fileDlg.GetPathName();
CDatabase database;
CString exceldrive="MICROSOFT EXCEL DRIVER (*.XLS)";
//CString excelfile="d:\\test.xls"; //注意双线
CString strsql;
strsql.Format("DRIVER={%s};DSN="";FIRSTOWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",exceldrive,m_filename,m_filename); if(database.OpenEx(strsql,CDatabase::noOdbcDialog))
//cdatabase::noodbcdialog 无论提供的连接信息是否足够,都不显示 odbc 连接对话框。
//cdatabase::forceodbcdialog 总是显示 odbc 连接对话框。
{
strsql="CREATE TABLE temptable(序号 TEXT,学号 TEXT,姓名 TEXT,语文 TEXT,数学 TEXT,英语 TEXT,总成绩 TEXT)";
// TRY
// {
database.ExecuteSQL(strsql);
// }
/* CATCH(CDBException, e)
{
CString strMsg;
strMsg.LoadString(0);
strMsg+=strsql+"\n请重命名";
}
END_CATCH
*/
for(int i=0;i<countAll;i++)
{
temp0=m_mylist.GetItemText( i, 0 );
temp1=m_mylist.GetItemText( i, 1 );
temp2=m_mylist.GetItemText( i, 2 );
temp3=m_mylist.GetItemText( i, 3 );
temp4=m_mylist.GetItemText( i, 4 );
temp5=m_mylist.GetItemText( i, 5 );
temp6=m_mylist.GetItemText( i, 6 );
strsql.Format("insert into temptable(序号,学号,姓名,语文,数学,英语,总成绩)values('%s','%s','%s','%s','%s','%s','%s')",temp0,temp1,temp2,temp3,temp4,temp5,temp6); //sql语句一定是
database.ExecuteSQL(strsql);
}
}
database.Close(); }
else
{
CFile file(fileDlg.GetFileName(),CFile::modeCreate | CFile::modeWrite);
file.Write("序号\学号\t姓名\t语文\t数学\t英语\t总成绩\n",strlen("学号\t姓名\t语文\t数学\t英语\t总成绩"));
for(int i=0;i<countAll;i++)
{
temp0=m_mylist.GetItemText( i, 0 );
temp1=m_mylist.GetItemText( i, 1 );
temp2=m_mylist.GetItemText( i, 2 );
temp3=m_mylist.GetItemText( i, 3 );
temp4=m_mylist.GetItemText( i, 4 );
temp5=m_mylist.GetItemText( i, 5 );
temp6=m_mylist.GetItemText( i, 6 );
file.Write(temp0+'\t'+temp1+'\t'+temp2+'\t'+temp3+'\t'+temp4+'\t'+temp5+'\t'+temp6+'\t',temp0.GetLength()+temp1.GetLength()+temp2.GetLength()+temp3.GetLength()+temp4.GetLength()+temp5.GetLength()+temp6.GetLength()+7);
}
file.Close();
}
}}
是说因为if语句的分割么?开始的时候本来想将中间for()重复的代码合并,就把程序拆成了好几段,用switch控制,提示说case分割了××××不能运行现在合并了还是不行
解决方案 »
- 请问有关于用C或C++进行图像配准、重建的比较好的书吗?
- 请教关于对于 com中接口指针不能跨套间使用的问题。谢谢。
- 求一个思路
- SetWindowPos 不能改变VS2005的z-order
- 请问怎样在对话框中向View类中发送一个刷新消息?
- 问一个线程运行问题
- VB 中怎么取得本地计算机名
- 奇怪的问题!!奇怪的trimleft!!!!!!!!!!!!!!!!!!!!!!!!!!
- 图形图象好郁闷,高手指点迷津
- vc 画图
- 关于视图切分 (左右视图) ,不在CMainFrame中使用CSplitterWnd类的切分办法.
- 请教:CSocket实现UDP,在子线程中Create的Socket的OnReceive无响应问题
if(IDOK==fileDlg.DoModal())
{
CFile file(fileDlg.GetFileName(),CFile::modeCreate | CFile::modeWrite);就是说,你已经打开了文件了,然后数据库系统再去打开的话,会不会出错呢?
那为什么写txt文件就要打开?
是说数据库写入自己还要打开该文件么?
数据库保存的话具体流程是什么样子的啊?还有为什么这个xls不能覆盖已经存在的同名文件呢?
它说表头已经存在,要用什么方法覆盖啊?
就是下面这块
if(2==filter_num)
{
m_filename=fileDlg.GetPathName();
CDatabase database;
CString exceldrive="MICROSOFT EXCEL DRIVER (*.XLS)";
//CString excelfile="d:\\test.xls"; //注意双线
CString strsql;
strsql.Format("DRIVER={%s};DSN="";FIRSTOWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",exceldrive,m_filename,m_filename); if(database.OpenEx(strsql,CDatabase::noOdbcDialog))
//cdatabase::noodbcdialog 无论提供的连接信息是否足够,都不显示 odbc 连接对话框。
//cdatabase::forceodbcdialog 总是显示 odbc 连接对话框。
{
strsql="CREATE TABLE temptable(序号 TEXT,学号 TEXT,姓名 TEXT,语文 TEXT,数学 TEXT,英语 TEXT,总成绩 TEXT)";
// TRY
// {
database.ExecuteSQL(strsql);
// }
/* CATCH(CDBException, e)
{
CString strMsg;
strMsg.LoadString(0);
strMsg+=strsql+"\n请重命名";
}
END_CATCH
*/
for(int i=0;i<countAll;i++)
{
temp0=m_mylist.GetItemText( i, 0 );
temp1=m_mylist.GetItemText( i, 1 );
temp2=m_mylist.GetItemText( i, 2 );
temp3=m_mylist.GetItemText( i, 3 );
temp4=m_mylist.GetItemText( i, 4 );
temp5=m_mylist.GetItemText( i, 5 );
temp6=m_mylist.GetItemText( i, 6 );
strsql.Format("insert into temptable(序号,学号,姓名,语文,数学,英语,总成绩)values('%s','%s','%s','%s','%s','%s','%s')",temp0,temp1,temp2,temp3,temp4,temp5,temp6); //sql语句一定是
database.ExecuteSQL(strsql);
}
}
database.Close(); }要是没有方法的话我是只能先删除再创建么?可我找不到删除的函数。要是listctrl类deletall就什么都没了