Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сохранение в файл .doc из blob поля 
V
    Опции темы
Teleport
Дата 24.11.2009, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Пытаюсь сохранить файл в формате .doc из blob поля бд Access. 

Код

procedure TFrm_stud.But_docClick(Sender: TObject);
var
 BLOBStream: TADOBlobStream;
  begin

ADOQ2.Active:= false;
ADOQ2.SQL.Clear;
ADOQ2.SQL.Add('SELECT my_f FROM my_tab;');
ADOQ2.Active:= true;

BLOBStream:=TADOBlobStream.Create((ADOQ2.FieldByName('my_f') as TBlobField),bmReadWrite);
BLOBStream.SaveToFile('test.doc');
BLOBStream.Free;

end;


Выскакивает ошибка - ADOQ2: Dataset not in edit or insert mode - не могу разобраться почему.


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Данкинг
Дата 24.11.2009, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Попробуй вместо bmReadWrite написать bmRead.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Teleport
Дата 24.11.2009, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



2 Данкинг - работает!  smile  smile  Только открываю файл с диска - а там одни квадратики.....)))))))))) и кодировка ни одна из предложенных Word'ом не подходит. Как быть? Может что дописать в коде?

Это сообщение отредактировал(а) Teleport - 24.11.2009, 01:24


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Данкинг
Дата 24.11.2009, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Teleport, а в BLOB-поле именно вордовский файл находится?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Deniz
Дата 24.11.2009, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

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



Teleport, приведи код, как в блоб попадают данные


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Teleport
Дата 24.11.2009, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Люди, а дело в том, что в blob-поле я через Access закинул ИМЕННО вордовский файл .doc. Создал через конструктор табличку, в ней поле объекта и добавил через мастер свой файл. Просто в программе нет необходимости другие бъекты кидать в blob-поля - только считывать их надо - потому и делал вручную. И сам Access нормально открывает файл ворд. Может саму бд прислать с файлом и исходник программы?

Это сообщение отредактировал(а) Teleport - 24.11.2009, 12:42


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Deniz
Дата 24.11.2009, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

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



Выложи здесь если не большой


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Teleport
Дата 25.11.2009, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вот выкладываю исходник, файл .doc и бд с этим файлом. Пароль к бд '111' - в коде исходника прописан в строке подключения. При нажатии на кнопку файл из бд сохраняется на диск ерундой какой-то.

Присоединённый файл ( Кол-во скачиваний: 14 )
Присоединённый файл  test.rar 52,48 Kb


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Данкинг
Дата 25.11.2009, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



smile smile smile
А вот если внести файл не через Access, а тоже процедуркой, то в Access файл не открывается, зато прогой в .doc сохраняется отлично (т. е. всё наоборот):

Записываем:
Код

procedure TForm1.Button2Click(Sender: TObject);
var
blob: TStream;
fs:TFileStream;
begin
ADOQ2.Active:= false;
ADOQ2.SQL.Clear;
ADOQ2.SQL.Add('SELECT my_f FROM my_tab;');
ADOQ2.Active:= true;
adoq2.Append;
blob := ADOQ2.CreateBlobStream(ADOQ2.FieldByName('my_f'), bmWrite);

try
  blob.Seek(0, soFromBeginning);
    fs := TFileStream.Create('czv.doc', fmOpenRead or

     fmShareDenyWrite);

   try

     blob.CopyFrom(fs, fs.Size)

   finally

     fs.Free

   end;

finally

   blob.Free

end;
adoq2.Post;
end;


Читаем/сохраняем:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
 blob: TStream;

begin

ADOQ2.Active:= false;
ADOQ2.SQL.Clear;
ADOQ2.SQL.Add('SELECT my_f FROM my_tab;');
ADOQ2.Active:= true;

blob := ADOQ2.CreateBlobStream(ADOQ2.FieldByName('my_f'), bmRead);
 try
   blob.Seek(0, soFromBeginning);

   with TFileStream.Create('test.doc', fmCreate) do
      try
       CopyFrom(blob, blob.Size)
     finally

       Free

     end;

finally
   blob.Free
end;

end;


Добавлено через 6 минут и 54 секунды
Teleport, кстати, обращаю внимание, что в моём варианте размеры исходного и выгруженного файлов совпадают. А в твоём выгружаемый получается больше раз в 8. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Teleport
Дата 25.11.2009, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



2 Данкинг - ух ты   smile  smile  smile  - работает!))))) Спасибо!
В самом Access теперь написано не "Документ Word" а "двоичные данные". 
Сохраняет на диск замечательно. Это решение моей проблемы. Спасибо еще раз  smile  smile 

Да, а про размеры файлов я сразу заметил! ))) Так это еще не все! Если открыть файл в моем варианте -повисает все, а ворд насчитывает сотни тысяч страниц в документе!! А мне грузить надо файл размером 5 метров. Твои процедуры замечательно сработали! 


Это сообщение отредактировал(а) Teleport - 25.11.2009, 01:21


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Данкинг
Дата 25.11.2009, 02:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(Teleport @  25.11.2009,  01:19 Найти цитируемый пост)
В самом Access теперь написано не "Документ Word" а "двоичные данные". 

Да, я примерно таким же образом вносил картинки. smile 

Цитата(Teleport @  25.11.2009,  01:19 Найти цитируемый пост)
Спасибо еще раз

На здоровье. smile 

Цитата(Teleport @  25.11.2009,  01:19 Найти цитируемый пост)
Если открыть файл в моем варианте -повисает все, а ворд насчитывает сотни тысяч страниц в документе!! 

Видимо, в твоём варианте Access как-то переделывает файл под себя, поскольку если даже открыть выгруженный файл блокнотом, то видно, что там формат не .doc.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

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

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


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


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

FAQ раздела лежит здесь!


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

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


 




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


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

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