Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.02.13;
Скачать: CL | DM;

Вниз

Экспорт книги Excel в BLOB поле БД и обратно   Найти похожие ветки 

 
Yourlastmist ©   (2010-11-24 10:02) [0]

Здравствуйте!
Столкнулся с определенной проблемой при работе с Excel. В БД имеется BLOB поле. необходимо сохранить туда ведомость в формате EXCEL а потом при необходимости выводить ее обратно.
Не могу реализовать сие действо. Помогите кто знает как это возможно реализовать (желательно с примером).
Заранее благодарен!


 
Yourlastmist ©   (2010-11-24 10:04) [1]

Да чуть не забыл, работаю в RAD STUDIO 2010 хотя суть от этого не меняется...


 
Anatoly Podgoretsky ©   (2010-11-24 10:24) [2]

Не меняется конечно, вообще ничего не меняется, нужна СУБД


 
Yourlastmist ©   (2010-11-24 10:30) [3]

СУБД есть, мне нужно знать как конкретно реализовать загрузку в нее файла excel и выгрузку в excel обратно.


 
Anatoly Podgoretsky ©   (2010-11-24 10:45) [4]

> Yourlastmist  (24.11.2010 10:30:03)  [3]

Вообще то не видно.


 
Yourlastmist ©   (2010-11-24 10:48) [5]

Хмм что-то я наверное не понимаю.
Если не грамотно задан вопрос то так и поясните, пока что мне это напоминает общение как в анекдоте про приборы.


 
И. Павел ©   (2010-11-24 10:50) [6]

> [5] Yourlastmist ©   (24.11.10 10:48)

Название СУБД говорите. И анекдот про прибор заодно.


 
Yourlastmist ©   (2010-11-24 10:58) [7]

СУБД любая, ну на примере  MS ACCESS хотяб 2003 версии.
Грубо говоря для примера создал в ней БД с 1 таблицей содержащей 3 поля. Счетчик, Наименование файла, БЛОБ поле. В Программе связал БД и таблицу с набором данных в программе. Задача Загнать в БЛОБ поле таблицу EXCEL и выгрузить ее потом в EXCEL обратно. Создание OLE объекта можно не объяснять Ж-). С WORD пробовал тоже самое, пихал в BLOB поле через RichEdit, правда при выгрузке обратно терялось форматирование, но по крайней мере выгружалось (хз правда на каком этапе терялось форматирование). А вот с EXCEL не работает( РУки наверное косые.
Ну а теперь насчет анекдота:
Летит самолет. Командир штурману:
- Штурман, приборы.
- 16.
- Что 16?
- А что приборы?

Анекдот правда древний как мамонты)


 
Anatoly Podgoretsky ©   (2010-11-24 11:20) [8]

Анекдот про приборы приводить не надо, мы его знаем, ты его знаешь, а ведешь себя как в анекдоте.


 
Anatoly Podgoretsky ©   (2010-11-24 11:21) [9]


> СУБД любая, ну на примере  MS ACCESS хотяб 2003 версии.

Ты что думаешь, что запросы во всех СУБД одинаковы.


 
Yourlastmist ©   (2010-11-24 11:25) [10]


> Anatoly Podgoretsky ©   (24.11.10 10:45) [4]
> > Yourlastmist  (24.11.2010 10:30:03)  [3]
>
> Вообще то не видно.
>
>


> Anatoly Podgoretsky ©   (24.11.10 11:20) [8]
> Анекдот про приборы приводить не надо, мы его знаем, ты
> его знаешь, а ведешь себя как в анекдоте.
>
>


Anatoly Podgoretsky спасибо за исчерпывающие ответы


 
Anatoly Podgoretsky ©   (2010-11-24 11:31) [11]

В Акцесс есть три поля типа "BLOB"
  Binary
  Image
  Text

Использовать можно первый и второй, зависит от многих причин. Если ты хочешь работать как с объектом OLE, тогда второй. Если как с набором байтов, то первый.


 
Yourlastmist ©   (2010-11-24 11:33) [12]

Ну в целом меня вообще запросы в конкретных СУБД мало интересую. Для этого существует куча исчерпывающей информации.
Вопрос стоит как в blob поле набора данных поместить excel таблицу и выгрузить ее потом обратно в excel.
Если конкретизировать еще больше, то как в поле Fields[n] объекта TADOTable палитры инструментов dbGo (где n - номер поля) поместить xls файл и как его потом можно загнать обратно в excel. хотя вторая часть менее значима так как создание OLE объекта более тривиальная задача.


 
Yourlastmist ©   (2010-11-24 11:39) [13]


> Anatoly Podgoretsky ©   (24.11.10 11:31) [11]
> В Акцесс есть три поля типа "BLOB"
>   Binary
>   Image
>   Text
> Использовать можно первый и второй, зависит от многих причин.
>  Если ты хочешь работать как с объектом OLE, тогда второй.
>  Если как с набором байтов, то первый.

В Аксцессе не нашел где эти типы выставляются, в режиме конструктора там просто выставляется Поле Объекта OLE. Как загнать в blob поле картинку я знаю, для этого можно воспользоваться TDBImage, меня интересует конкретно книга Excel, точнее первая ее страница, на которой содержится форматированный текст и форматированная таблица.


 
Плохиш ©   (2010-11-24 12:09) [14]

TBlobField + F1/Google Примеров жевать не пережевать.

PS. Объясняю основы программирования - дорого.


 
Плохиш ©   (2010-11-24 12:10) [15]


> Как загнать в blob поле картинку я знаю, для этого можно
> воспользоваться TDBImage

Мая плякать...


 
Anatoly Podgoretsky ©   (2010-11-24 12:17) [16]

> Yourlastmist  (24.11.2010 11:39:13)  [13]

А я тоже не знаю, я не работаю с Акцесс, я его совсем не знаю, я работаю с
кодом.


СREATE Tbl(MyBLob binary)


 
Anatoly Podgoretsky ©   (2010-11-24 12:20) [17]


> можно воспользоваться TDBImage

С этим вообще просто. Ctrl+C - Ctrl+V

В демос даже примеры есть, например Animal, я игрался - работает.


 
Yourlastmist ©   (2010-11-24 12:40) [18]

Хмм ну я думаю приведу все-таки свой код авось это поможет гуру.

procedure TForm1.Button1Click(Sender: TObject);
begin
 OpenDialog1.Execute();
end;
Ну тут вроде все понятно открываю диалог, выбираю файл.

procedure TForm1.Button2Click(Sender: TObject);
var
 i: integer;
 BLOBStream : TADOBlobStream;
begin
 ADOTable1.Active := True;
 ADOTable1.First;
 for i := 0 to ADOTable1.RecordCount - 1 do
 Begin
   ADOTable1.Delete;
   ADOTable1.Next;
 End;
 ADOTable1.Insert;
 ADOTable1.FieldByName("Наименование").Text := "Файл";
 BLOBStream:=TADOBlobStream.Create(TBlobField(ADOTable1.FieldByName("Файл")),bmWr ite);
 BLOBStream.LoadFromFile(OpenDialog1.FileName);
 BLOBStream.Free;
 ADOTable1.post;
 ADOTable1.Active := False;
end;

Тут тоже ничего не понятного нет, но что-то меня тут смущает. Идея заключалась в том, чтобы при нажатии кнопки выбранный файл через поток вгонялся в таблицу. Перед этим все записи в таблице удаляются (Для удобства, чтобы не гемороится с несколькими записями).

procedure TForm1.Button3Click(Sender: TObject);
var
 BLOBStream : TADOBlobStream;

begin

 ADOTable1.Active := True;
 ADOTable1.First;
 Edit1.Text := ADOTable1.Fields[2].Text;
 ADOTable1.Edit;
 BLOBStream:=TADOBlobStream.Create((ADOTable1.Fields[3] as TBlobField),bmReadWrite);
 BLOBStream.SaveToFile("test.xml");
 BLOBStream.Free;
 ADOTable1.Active := False;
end;

И вроде как вот тут должно загонять все в EXCEL файл, но при попытке его потом открыть выдает ошибку. В принципе у меня возникают только 2 ответа на этот вопрос:
1) Я неправильно загнал файл изначально в таблицу
2) Я неправильно его выгружаю, т.е. не инициализирую приложение EXCEL (что-то вроде createoleobject(Excel.Application))ну и т.д.
Если причина вторая то подскажите плиз как грамотно из потока потом вставить в файл после создания новой книги EXCEL.
Опять е заранее благодарен.


 
Anatoly Podgoretsky ©   (2010-11-24 13:05) [19]


> выдает ошибку

Это текст сообщения об ошибке.

И это, выбрось ADOTable


 
Yourlastmist ©   (2010-11-24 13:08) [20]

Текст сообщения об ошибке: "Невозможно прочитать файл". Этот текст выдает EXCEL а дельфя ничего не выдает, с ее точки зрения все операции выполнились, но судя по результатам открытия файла что-то тут не так))
А по поводу ADOTable яж еще вверху написал что взял для примера ACCESS а соединение по ADO тут самое удобное мне кажется.


 
Anatoly Podgoretsky ©   (2010-11-24 13:47) [21]

А туда есть права, а при другом запуске?

>  BLOBStream.SaveToFile("test.xml");


 
Yourlastmist ©   (2010-11-24 14:08) [22]

Права есть, судя по всему он почему-то не хочет перегонять файл из бинарных значений в EXCEL... блин второй день мучаюсь


 
Yourlastmist ©   (2010-11-24 14:14) [23]

Все разобрался. В коде всего 1 ошибка вместо test.xml нужно test.xls
Всем огромнейшее спасибо


 
Anatoly Podgoretsky ©   (2010-11-24 14:14) [24]

> Yourlastmist  (24.11.2010 14:08:22)  [22]

Говоришь есть, а на какую папку, а в другой момент времени тоже есть?


 
картман ©   (2010-11-24 14:15) [25]


> Текст сообщения об ошибке: "Невозможно прочитать файл".
> Этот текст выдает EXCEL а дельфя ничего не выдает, с ее
> точки зрения все операции выполнились, но судя по результатам
> открытия файла что-то тут не так))

как-то делал загрузку в базу файла и выгрузку, формат dot - открываю блокнотом - все нормально, программа, пользующаяся им - нифика, ругается... оказалось весело - в конец каждой строки добавлялся символ конец страницы - #12, вот... только я не помню, кто его туда загонял - грузились файлы прогой, написанной на дельфи , а выгражались C#... может, у тебя подобная хрень?



Страницы: 1 вся ветка

Текущий архив: 2011.02.13;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.013 c
15-1289148440
faustpatron13
2010-11-07 19:47
2011.02.13
Текстовые файлы


2-1290479463
Германн
2010-11-23 05:31
2011.02.13
Как отлаживать (находить ошибку) в package?


2-1290266910
izja
2010-11-20 18:28
2011.02.13
DSpack фильтры


2-1290508252
Darvin
2010-11-23 13:30
2011.02.13
D2009 Не работают точки останова


15-1281636818
Дмитрий Тимохов
2010-08-12 22:13
2011.02.13
Миграция на WIndows 7 + права администратора.