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, пытаюсь разобраться...
Если че интересное нарою, расскажу....
Кто интересуется этой проблемой, прошу откликнуться.
|
|