c++ - 如何在 MFC 中导出 mysql 结果(选择数据)
问题描述
我在使用 MFC 执行选择查询后导出 .csv
我通过 Visual C++ 6.0 和 MySQL Server 5.X 使用 MFC
MYSQL_RES m_res = mysql_store_result(&mysql);
我不知道如何使用 m_res 连接导出 .csv
可以导出数据吗?如果不是,我会在显示gridview后通过.csv导出数据。
解决方案
这是一个示例,使用 MFC 方式(CString/CStringList、CArchive 等):
void PrintListCSV( CArchive &archiveContent, CStringList & strList, CString szSeparator ){
if( strList.IsEmpty() )
return;
CString strOneRecord;
POSITION posTail = GetTailPosition();
POSITION pos;
for( pos = strList.GetHeadPosition(); pos != posTail; )
{
CString str = strList.GetNext( pos );
strOneRecord += str;
strOneRecord += szSeparator;
}
strOneRecord += strList.GetNext( postTail );
strOneRecord += _T("\r\n"); // windows change a line
archiveContent.WriteString(strOneRecord);
}
BOOL ExportCSV( CString strFileName, MYSQL_RES * mysql_res )
{
CFile filePersistent;
if( !filePersistent.Open( strFileName, CFile::modeCreate | CFile::modeWrite))
{
//Error log, message box, etc.
return FALSE;
}
CArchive archiveContent( &filePersistent, CArchive::store);
CString strSeparator(_T(";"));
MYSQL_FIELD *field;
//print column name - optional
CStringList fieldList;
unsigned int num_fields = mysql_num_fields(mysql_res);
while((field = mysql_fetch_field(mysql_res)) != NULL )
{
fieldList.AddTail( field->name );
}
PrintListCSV( archiveContent, fieldList, strSeparator );
//print each record set
while ((row = mysql_fetch_row(mysql_res)))
{
CStringList recordList;
for(i = 0; i < num_fields; i++)
{
recordList.AddTail( row[i] ? row[i] : "NULL" );
}
PrintListCSV( archiveContent, recordList, strSeparator );
}
archiveContent.Close();
filePersistent.Close();
return TRUE;
}
如何使用:
//some where in your main function ...
//Open mysql connection, execute SQL commande ...
// ...
MYSQL_RES *m_res = mysql_store_result(&mysql);
CString szFileName("C:\\SOME_PATH\\FILENAME.csv");
if( !ExportCSV( szFileName, m_res ) ){
//Cannot export to CSV file ...
//Error message, log, etc.
}
//free the SQL result
mysql_free_result( m_res );
//...
警告:此代码可能包含编译器错误。希望我的记忆对我有用。
推荐阅读
- gitlab - 如何从 centos 中完全删除/卸载 gitlab-runner
- sql - 如何从 SQL 条件查询中删除冗余代码
- python - 如何使用不同的标记分隔符连接多个 Pandas DataFrame 列?
- firebase - 如何从firebase实时数据库读取数据到Dialogflow
- node.js - Node Express/Sequelize App - PostgreSQL 干净退出
- d3.js - 之字形边框和填充颜色
- haskell - 删除列表中的元素(与过滤相反)
- html - Angular DomSanitizer:消毒面具图像不起作用
- regex - Need a regex that can solve the below mentioned condition
- c - C指针运算符:附加到函数或数据类型?