Поиск:

Ответ в темуСоздание новой темы Создание опроса
> «Access violation at address 00000000», После выполнения функции получаю ошиб. 
:(
    Опции темы
php5
Дата 10.9.2009, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



В БД есть данные в формате RFT необходимо  их считать и  вставить в определенное место рисунок  для  работы с RFT текстом юзаю RichViewEdit   который размещен на главной форме, редактирование данных  происходит так:
Код

bool __fastcall TForm1::EditData(){
      AnsiString data,sql="SELECT * FROM TEMPLATE_DOGOVOR WHERE ID_TEMPLATE_DOGOVOR=1";
      IBQuery_all->Close();
      IBQuery_all->SQL->Clear();
      IBQuery_all->SQL->Add(sql);
      IBQuery_all->Open();
      TStream * Stream = Form1->IBQuery_all->CreateBlobStream(Form1->IBQuery_all->FieldByName("CONTENT"),bmReadWrite);
      data=Form1->editBlob(Stream);
      Memo1->Text=data;
      return true;


 }

//---------------------------------------------------------------------------
 AnsiString __fastcall TForm1::editBlob(TStream * Stream ){

    TRVESearchOptions Options;
    Options << rvseoDown;
    Graphics::TBitmap * bmp = new Graphics::TBitmap;
    TMemoryStream *stm= new TMemoryStream;
    bmp->LoadFromFile(ExtractFilePath(Application->ExeName)+"bars.bmp");
    Form1->RichViewEdit1->LoadRTFFromStream(Stream);
    Form1->RichViewEdit1->Format();
    while(Form1->RichViewEdit1->SearchText("[stamp]",Options))
           Form1->RichViewEdit1->InsertPicture("", bmp, rvvaBaseline);
    Form1->RichViewEdit1->SaveRTFToStream(stm,false);
    stm->Position=0;
    stm->Seek(0, soFromBeginning);
    int size = stm->Size;
    char * buf = new char[size];
    stm->ReadBuffer(buf,size);
    AnsiString data=buf;
    delete buf;
    delete stm;
    delete bmp;
    return data;
}

После того как  данные были успешно отредактированы  и функция завершила свою работу получаю сообщение об ошибке  следующего содержания :  «Access violation at address  00000000» из-за что не так ?
P/S  может, кто знает, как можно вставить в нужное место рисунок в RichView?


 

PM MAIL   Вверх
mrbrooks
Дата 10.9.2009, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



php5, редактирование информации в БД через SQL происходит с помощью sql-команды UPDATE.

1. SELECT
2. Редактирование blob-поля
3. UPDATE 
4. .....
5. PROFIT! 

У тебя явно косяк с обновлением (редактирование) данных.
PM MAIL   Вверх
php5
Дата 10.9.2009, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



дык я редактировал не в БД  а в  Stream  
PM MAIL   Вверх
mrbrooks
Дата 10.9.2009, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



ок. а так что получится?
Код

 AnsiString __fastcall TForm1::editBlob()
{
    TStream * Stream = Form1->IBQuery_all->CreateBlobStream(Form1->IBQuery_all->FieldByName("CONTENT"),bmReadWrite);
    TRVESearchOptions Options;
    Options << rvseoDown;
    Graphics::TBitmap * bmp = new Graphics::TBitmap;
    TMemoryStream *stm= new TMemoryStream;
    bmp->LoadFromFile(ExtractFilePath(Application->ExeName)+"bars.bmp");
    Form1->RichViewEdit1->LoadRTFFromStream(Stream);
    Form1->RichViewEdit1->Format();
    while(Form1->RichViewEdit1->SearchText("[stamp]",Options))
           Form1->RichViewEdit1->InsertPicture("", bmp, rvvaBaseline);
    Form1->RichViewEdit1->SaveRTFToStream(stm,false);
    stm->Position=0;
    stm->Seek(0, soFromBeginning);
    int size = stm->Size;
    char * buf = new char[size];
    stm->ReadBuffer(buf,size);
    AnsiString data=buf;
    delete buf;
    delete stm;
    delete bmp;
    return data;
}
bool __fastcall TForm1::EditData()
{
      AnsiString data,sql="SELECT * FROM TEMPLATE_DOGOVOR WHERE ID_TEMPLATE_DOGOVOR=1";
      IBQuery_all->Close();
      IBQuery_all->SQL->Clear();
      IBQuery_all->SQL->Add(sql);
      IBQuery_all->Open();
      Memo1->Text=Form1->editBlob();
      return true;
 }


очень интересный подход. что ты хочешь увидеть здесь? набор закарючек?
Код

    char * buf = new char[size];
    stm->ReadBuffer(buf,size);
    AnsiString data=buf;
    delete buf;


PM MAIL   Вверх
php5
Дата 10.9.2009, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



Дело в том что это лиш часть кода , на самом деле   отредактированный текст  сохраняется в PDF файл а  в Memo1  я вывожу лиш для того что  бы убедиться что функция    сработала 
PM MAIL   Вверх
php5
Дата 14.9.2009, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



В  общем, проблема была в том, как  вставлялся рисунков  в RichViewEdit .  заработало вот так:
Код

TRVESearchOptions Options;
    Options << rvseoDown;
    TPicture* pic = new TPicture;
    pic->LoadFromFile(ExtractFilePath(Application->ExeName)+"bars.bmp");
    TGraphic* gr = GetGraphicCopy(pic->Graphic);
    gr->Assign(pic->Graphic);
    RichViewEdit1->TopLevelEditor->BeginUndoGroup(rvutInsert);
    RichViewEdit1->TopLevelEditor->SetUndoGroupMode(true);
    while(Form1->RichViewEdit1->SearchText("[stamp]",Options)){
          try{
             if(RichViewEdit1->InsertPicture("", gr, rvvaBaseline))
             RichViewEdit1->SetCurrentItemExtraStrProperty(rvespImageFileName, OpenDialog2->FileName, true);
          }
          __finally{RichViewEdit1->TopLevelEditor->SetUndoGroupMode(false);
         }
    }
Delete pic;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0718 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.