как достать документ Rtf из Access

Тема в разделе "MS Visual C++", создана пользователем Dope, 31 авг 2006.

Статус темы:
Закрыта.
  1. Dope

    Dope Гость

    Доброго времени суток, всем!
    Я делая прогу работающую с базой Access. В базе храниться документ rtf в поле объекта OLE.
    Мне надо получить информацию из этого файла и скопировать в файл output.rtf.
    Я делаю это так:

    CDataRowset* pData = new CDataRowset();
    pData->Open();

    CFile cFile(TEXT("output.rtf"), CFile::modeWrite);
    cFile.Write(pData->column2.m_hData, 60);

    результат такой: рM Њ ( Њ 0 Њ 8 Њ @ Њ H Њ P Њ

    напишите, что я делаю не так и как это исправить.
    помогите пожалуйста!
     
  2. ????

    ???? Гость

  3. artiom_kh

    artiom_kh Гость

    Во первых, следую рекомендациям от мелкогмягких - то данные из полей типа "объект OLE" должны читаться/писаться через объект класса CByteArray.
    Во вторых, если твой класс CDataRowset наследован от CDaoRecordset, то в CDataRowset::DoFieldExchange проверь, что-бы код DDX-обмена с твоим полем OLE был примерно таким:

    DFX_Binary(pFX, _T("[RTF_DATA]"), m_RTF_DATA,AFX_DAO_LONGBINARY_DEFAULT_SIZE,AFX_DAO_ENABLE_FIELD_CACHE);

    где m_RTF_DATA объявлен как CByteArray m_RTF_DATA

    лично у меня подобный код пашет как часы, правда я читаю/пишу бимтапы в БД и тоже в "поле объекта OLE"...
     
  4. Dope

    Dope Гость

    Спасиб
    Я уже разобрался
    просто мне надо было достаь текст формата rtf, а аксес сохраняет rtf, как doc...
    нужно было просто сохранить его как файл с неизвестным расширением и использовать такой код:

    CDataRowset* pData = new CDataRowset();
    pData->Open();
    pData->MoveFirst();
    pData->MoveNext();
    char *pCharData=(char *)GlobalLock(pData->column2.m_hData);
    char *pRtfStart=(char *)memchr(pCharData,'{',pData->column2.m_dwDataLength);
    CFile cFile(TEXT("c:\\output.rtf"), CFile::modeWrite|CFile::modeCreate|CFile::shareDenyNone);
    cFile.Write(pRtfStart, pData->column2.m_dwDataLength);
    cFile.Close();
    GlobalUnlock(pData->column2.m_hData);

    pData->Close();
    delete pData;
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей