C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Документы Word и SQL2000...
Kuks
Отправлено: 14.04.2006, 10:29


Станционный диспетчер

Группа: Участник
Сообщений: 108



Привет всем!!!
BCB6->ADO->SQL2000...
Поставлена задача — хранить вордовские документы в БД,
создал таблицу на сервере из двух полей — ключевое и поле
Value типа Image....
void __fastcall TForm1::LoadButtonClick(TObject *Sender)
{
ADODataSet1->Edit();
ADODataSet1->Insert();
if(OpenDialog1->Execute())
ADODataSet1Value->LoadFromFile(OpenDialog1->FileName);
ADODataSet1->Post();
}
так вот, приведенный выше код работает,
но через раз, т.е., иногда вставляет запись, иногда
ругается при вызове метода LoadFromFile, что не может
открыть указанный файл...
Файлы и с локального диска и с сетевой шары, никакой закономерности
выявить не смог...
Помогите плз, может кто сталкивался...
AVC
Отправлено: 14.04.2006, 16:05


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE

ADODataSet1->Edit();
ADODataSet1->Insert();

???
Как в том анекдоте: "Вы уж определитесь, туда или сюда" smile.gif
Kuks
Отправлено: 19.04.2006, 13:23


Станционный диспетчер

Группа: Участник
Сообщений: 108



CODE
TMemoryStream *pMS = new TMemoryStream;
       if((ADODataSet1->State != dsInsert) && (ADODataSet1->State != dsEdit))
       {
               ADODataSet1->Insert();
               if(OpenDialog1->Execute())
               {
                       try
                       {
                               pMS->LoadFromFile(OpenDialog1->FileName);
                               ADODataSet1FileName->Value =  ExtractFileName(OpenDialog1->FileName);
                               ADODataSet1Value->LoadFromStream(pMS);
                       }
                       __finally
                       {
                               delete pMS;
                       }
               }
               ADODataSet1->Post();
       }

Сделал так...
Вроде работает но....
Хотелось бы реализовать просмотр файлов ворд при навигации
по датасету... Подскажите кто сталкивался...
Пытаюсь использовать OleContainer..
Пока не получается -
CODE
TMemoryStream *pMS = new TMemoryStream;
       OleContainer1->DestroyObject();
       try
       {
               ADODataSet1Value->SaveToStream(pMS);
               OleContainer1->LoadFromStream(pMS);
       }
       __finally
       {
               delete pMS;
       }

На строке
CODE
OleContainer1->LoadFromStream(pMS);

пишет не могу прочитать из стрима, не пойму в чем дело...
Kuks
Отправлено: 19.04.2006, 15:42


Станционный диспетчер

Группа: Участник
Сообщений: 108



Сделал вот так -
CODE
       TADOBlobStream *bS = new TADOBlobStream( ADODataSet1Value,bmRead);
       OleContainer1->DestroyObject();
       try
       {
               ADODataSet1Value->SaveToStream(bS);
               OleContainer1->LoadFromStream(bS);
       }
       __finally
       {
               delete bS;
       }

Все равно ругается:
Stream read error.....
Kuks
Отправлено: 21.04.2006, 13:06


Станционный диспетчер

Группа: Участник
Сообщений: 108



И все-таки....
Как визуализовать поля BLOB с данными из
файла Word при навигации по датасету (что-то типа
TDBMemo) ?
Неужели никто не сталкивался??
У самого ни**я не получается....
AVC
Отправлено: 21.04.2006, 13:35


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE (Kuks @ 21/04/2006, 12:06)
И все-таки....
Неужели никто не сталкивался??
У самого ни**я не получается....


Сталкивался (это был один из первых моих вопросов, заданных на форуме smile.gif ).
Приемлемого решения так и не нашел. При навигации отказался, если нужно посмотреть — сохранаю на диск и "натравливаю" приложение.

PS. Может поковыряться в диалоге открытия файла MSOffice. Он ведь умеет делать подобное.
Kuks
Отправлено: 21.04.2006, 13:45


Станционный диспетчер

Группа: Участник
Сообщений: 108



У меня тоже не получается, хотя
в хелпе написано очень гладко,
но метод LoadFromStream TOleContainer не работает
ни с какими стримами — ни с TMemoryStream, ни c TADOBlobStream...
Самое интересное, из потока поле можно сохранить в файл, и файл
нормально потом загружается в OleContainer....
Сейчать залез в страшные дебри технологии COM, пытаюсь разобраться...
Если че интересное нарою, расскажу....
Кто интересуется этой проблемой, прошу откликнуться.


Вернуться в Работа с базами данных в C++Builder