多个运算符“=”与这些操作数不匹配
2018-01-14 20:57
106 查看
这是源代码if (m_list.GetItemCount() <= 0)
{
AfxMessageBox(_T("列表中没有记录需要保存!"));
return;
}
//打开另存为对话框 ,需要包含 #include <Afxdlgs.h>
CFileDialog dlg(FALSE,
_T("xls"),
_T("FileList"),
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("Excel 文件(*.xls)|*.xls||"));
dlg.m_ofn.lpstrTitle = _T("文件列表另存为");
if (dlg.DoModal() != IDOK)
return;
CString strFilePath;
//获得文件路径名
strFilePath = dlg.GetPathName();
//判断文件是否已经存在,存在则删除重建
DWORD dwRe = GetFileAttributes(strFilePath);
if (dwRe != (DWORD)-1)
{
DeleteFile(strFilePath);
}
CDatabase database;//数据库库需要包含头文件 #include <afxdb.h>
CString sDriver = _T("MICROSOFT EXCEL DRIVER (*.XLS)";) // Excel驱动
CString sSql, strInsert;
TRY
{
// 创建进行存取的字符串
sSql.Format(_T("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s"),sDriver, strFilePath, strFilePath);
/
4000
/ 创建数据库 (既Excel表格文件)
if (database.OpenEx(sSql,CDatabase::noOdbcDialog))
{
//获得列别框总列数
int iColumnNum,iRowCount;
LVCOLUMN lvCol;
CString strColName; //用于保存列标题名称
int i,j; //列、行循环参数
iColumnNum = m_list.GetHeaderCtrl()->GetItemCount();
iRowCount = m_list.GetItemCount();
sSql = _T(" CREATE TABLE DSO_DX ( ");
strInsert = _T(" INSERT INTO DSO_DX ( ");
//获得列标题名称
lvCol.mask = LVCF_TEXT; //必需设置,说明LVCOLUMN变量中pszText参数有效
lvCol.cchTextMax = 32; //必设,pszText参数所指向的字符串的大小
lvCol.pszText = strColName.GetBuffer(32); //必设,pszText 所指向的字符串的实际存储位置。
//以上三个参数设置后才能通过 GetColumn()函数获得列标题的名称
for (i = 0; i< iColumnNum; i++)
{
if (!(m_list.GetColumn(i,&lvCol)))
return;
if (i<iColumnNum - 1)
{
sSql = sSql + lvCol.pszText + _T(" TEXT , ");
strInsert = strInsert + lvCol.pszText + _T(" , ");
}
else
{
sSql = sSql + lvCol.pszText + _T(" TEXT ) ");
strInsert = strInsert + lvCol.pszText + _T(" ) VALUES ( ");
}
}
//创建Excel表格文件
database.ExecuteSQL(sSql);
//循环提取记录并插入到EXCEL中
sSql = strInsert;
char chTemp[33];
for (j = 0; j<iRowCount; j++)
{
memset(chTemp,0,33);
for (i = 0; i<iColumnNum; i++)
{
m_list.GetItemText(j,i,chTemp,33);
if (i < (iColumnNum - 1))
{
sSql = sSql + _T("'") + chTemp + _T("' , ");
}
else
{
sSql = sSql + _T("'") + chTemp + _T("' ) ");
}
}
//将记录插入到表格中
database.ExecuteSQL(sSql);
sSql = strInsert;
}
}
// 关闭Excel表格文件
database.Close();
AfxMessageBox(_T("保存查询结果为Excel文件成功!"));
}
CATCH_ALL(e)
{
//错误类型很多,根据需要进行报错。
AfxMessageBox(_T("Excel文件保存失败。"));
}
END_CATCH_ALL;
}
发现
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/31/3cff171d2476c40e3ba7467fe70a665e)
显示有多个运算符“=”与这些操作数不匹配,解决方法:sSql是CString类型的,所以前面要加CString。即
CString sSql = sSql + _T("'") + chTemp + _T("' , ");
{
AfxMessageBox(_T("列表中没有记录需要保存!"));
return;
}
//打开另存为对话框 ,需要包含 #include <Afxdlgs.h>
CFileDialog dlg(FALSE,
_T("xls"),
_T("FileList"),
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("Excel 文件(*.xls)|*.xls||"));
dlg.m_ofn.lpstrTitle = _T("文件列表另存为");
if (dlg.DoModal() != IDOK)
return;
CString strFilePath;
//获得文件路径名
strFilePath = dlg.GetPathName();
//判断文件是否已经存在,存在则删除重建
DWORD dwRe = GetFileAttributes(strFilePath);
if (dwRe != (DWORD)-1)
{
DeleteFile(strFilePath);
}
CDatabase database;//数据库库需要包含头文件 #include <afxdb.h>
CString sDriver = _T("MICROSOFT EXCEL DRIVER (*.XLS)";) // Excel驱动
CString sSql, strInsert;
TRY
{
// 创建进行存取的字符串
sSql.Format(_T("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s"),sDriver, strFilePath, strFilePath);
/
4000
/ 创建数据库 (既Excel表格文件)
if (database.OpenEx(sSql,CDatabase::noOdbcDialog))
{
//获得列别框总列数
int iColumnNum,iRowCount;
LVCOLUMN lvCol;
CString strColName; //用于保存列标题名称
int i,j; //列、行循环参数
iColumnNum = m_list.GetHeaderCtrl()->GetItemCount();
iRowCount = m_list.GetItemCount();
sSql = _T(" CREATE TABLE DSO_DX ( ");
strInsert = _T(" INSERT INTO DSO_DX ( ");
//获得列标题名称
lvCol.mask = LVCF_TEXT; //必需设置,说明LVCOLUMN变量中pszText参数有效
lvCol.cchTextMax = 32; //必设,pszText参数所指向的字符串的大小
lvCol.pszText = strColName.GetBuffer(32); //必设,pszText 所指向的字符串的实际存储位置。
//以上三个参数设置后才能通过 GetColumn()函数获得列标题的名称
for (i = 0; i< iColumnNum; i++)
{
if (!(m_list.GetColumn(i,&lvCol)))
return;
if (i<iColumnNum - 1)
{
sSql = sSql + lvCol.pszText + _T(" TEXT , ");
strInsert = strInsert + lvCol.pszText + _T(" , ");
}
else
{
sSql = sSql + lvCol.pszText + _T(" TEXT ) ");
strInsert = strInsert + lvCol.pszText + _T(" ) VALUES ( ");
}
}
//创建Excel表格文件
database.ExecuteSQL(sSql);
//循环提取记录并插入到EXCEL中
sSql = strInsert;
char chTemp[33];
for (j = 0; j<iRowCount; j++)
{
memset(chTemp,0,33);
for (i = 0; i<iColumnNum; i++)
{
m_list.GetItemText(j,i,chTemp,33);
if (i < (iColumnNum - 1))
{
sSql = sSql + _T("'") + chTemp + _T("' , ");
}
else
{
sSql = sSql + _T("'") + chTemp + _T("' ) ");
}
}
//将记录插入到表格中
database.ExecuteSQL(sSql);
sSql = strInsert;
}
}
// 关闭Excel表格文件
database.Close();
AfxMessageBox(_T("保存查询结果为Excel文件成功!"));
}
CATCH_ALL(e)
{
//错误类型很多,根据需要进行报错。
AfxMessageBox(_T("Excel文件保存失败。"));
}
END_CATCH_ALL;
}
发现
显示有多个运算符“=”与这些操作数不匹配,解决方法:sSql是CString类型的,所以前面要加CString。即
CString sSql = sSql + _T("'") + chTemp + _T("' , ");
相关文章推荐
- Error:有多个运算符"+="与这些操作数匹配
- CString + UINT Error:有多个运算符"+="与这些操作数匹配
- >>提示没有与这些操作数匹配的运算符
- Error:有多个运算符"+="与这些操作数匹配
- 没有与这些操作数匹配的运算符
- ERROR:没有与这些操作数匹配的运算符,操作数类型为std::string
- Error:没有这些操作数匹配的"<<"运算符,操作数类型为:std::ostream<<std::string
- 二进制“<<”: 没有找到接受“std::string”类型的右操作数的运算符
- error C2678: 二进制“<”: 没有找到接受“const MyEvent”类型的左操作数的运算符(或没有可接受的转换)
- 自己写的程序expr,以计算从命令行输入的逆波尔表达式的值,其中每个运算符或操作数用一个单独的参数表示
- 算术运算时,操作数类型不匹配产生的陷阱
- JAVA面试题解惑系列(十一)——这些运算符你是否还记得?
- in typeof instanceof ===这些运算符有什么作用
- awk脚本 模式匹配语句 ~匹配运算符 !~不匹配运算符
- error C2679: 二进制“”类型的右操作数的运算符(或没有可接受的转换)
- JAVA面试题解惑系列(十一)——这些运算符你是否还记得?
- [C#]运算符“+”无法应用于“string”和“方法组”类型的操作数
- OPENCV 3 出现二进制“=”: 没有找到接受“IplImage *”类型的右操作数的运算符(或没有可接受的转换)问题
- 没有找到接受”类型的左操作数的运算符,或没有可接受的转换
- java中运算符操作数表达式语句使用详解