| 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();
 
 | 
 ???
 Как в том анекдоте: "Вы уж определитесь, туда или сюда"
   | 
|  | 
| 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) |  | И все-таки.... Неужели никто не сталкивался??
 У самого ни**я не получается....
 | 
 
 Сталкивался (это был один из первых моих вопросов, заданных на форуме
  ). Приемлемого решения так и не нашел. При навигации отказался, если нужно посмотреть — сохранаю на диск и "натравливаю" приложение.
 
 PS. Может поковыряться в диалоге открытия файла MSOffice. Он ведь умеет делать подобное.
 
 | 
|  | 
| Kuks | 
| Отправлено: 21.04.2006, 13:45 |  | 
| 
 Станционный диспетчер
 
 Группа: Участник
 Сообщений: 108
 
 
 
  
 | У меня тоже не получается, хотя в хелпе написано очень гладко,
 но метод LoadFromStream TOleContainer не работает
 ни с какими стримами — ни с TMemoryStream, ни c TADOBlobStream...
 Самое интересное, из потока поле можно сохранить в файл, и файл
 нормально потом загружается в OleContainer....
 Сейчать залез в страшные дебри технологии COM, пытаюсь разобраться...
 Если че интересное нарою, расскажу....
 Кто интересуется этой проблемой, прошу откликнуться.
 
 
 | 
|  |