如何在mfc中导出mysql结果(选择数据)

kiz8lqtg  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(289)

在使用mfc执行select查询后导出.csv
我通过visualc++6.0和mysql server5.x使用mfc

MYSQL_RES m_res = mysql_store_result(&mysql);

我不知道如何使用m\u res connecting exporting.csv
是否可以导出数据?如果不是,我将在显示gridview后通过.csv导出数据。

yqhsw0fo

yqhsw0fo1#

下面是一个使用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 );

    //...

警告:此代码可能包含编译器错误。希望我记性好。

相关问题