Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.02.13;
Скачать: [xml.tar.bz2];

Вниз

Экспорт книги 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.004 c
2-1290523037
альбинка
2010-11-23 17:37
2011.02.13
cрочно надо сдать((((помогите)))


2-1290533555
ZV
2010-11-23 20:32
2011.02.13
Сравнение времени функции TDateTime


15-1288646999
Юрий
2010-11-02 00:29
2011.02.13
С днем рождения ! 2 ноября 2010 вторник


2-1290417345
Nachinayshchiy
2010-11-22 12:15
2011.02.13
record или class


2-1290500657
adigozelov
2010-11-23 11:24
2011.02.13
Lisenziya





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский