Как экспортировать MySQL результат (выбрать данные) в MFC - PullRequest
0 голосов
/ 26 декабря 2018

Я экспортирую .csv после выполнения запроса выбора с использованием MFC

Я использую MFC через Visual C ++ 6.0 и MySQL Server 5.X

MYSQL_RES m_res = mysql_store_result(&mysql);

Я не знаю, как использовать m_resподключение экспорта .csv

Можно ли экспортировать данные?Если это не так, я буду экспортировать данные в .csv после отображения gridview.

1 Ответ

0 голосов
/ 26 декабря 2018

Вот пример использования 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 );

    //...

Предупреждение: Этот код может содержать ошибки компилятора.Надеюсь, что моя память мне не изменяет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...