Конференция "Начинающим" » Экспорт книги Excel в BLOB поле БД и обратно
 
  • Yourlastmist © (24.11.10 10:02) [0]
    Здравствуйте!
    Столкнулся с определенной проблемой при работе с Excel. В БД имеется BLOB поле. необходимо сохранить туда ведомость в формате EXCEL а потом при необходимости выводить ее обратно.
    Не могу реализовать сие действо. Помогите кто знает как это возможно реализовать (желательно с примером).
    Заранее благодарен!
  • Yourlastmist © (24.11.10 10:04) [1]
    Да чуть не забыл, работаю в RAD STUDIO 2010 хотя суть от этого не меняется...
  • Anatoly Podgoretsky © (24.11.10 10:24) [2]
    Не меняется конечно, вообще ничего не меняется, нужна СУБД
  • Yourlastmist © (24.11.10 10:30) [3]
    СУБД есть, мне нужно знать как конкретно реализовать загрузку в нее файла excel и выгрузку в excel обратно.
  • Anatoly Podgoretsky © (24.11.10 10:45) [4]
    > Yourlastmist  (24.11.2010 10:30:03)  [3]

    Вообще то не видно.
  • Yourlastmist © (24.11.10 10:48) [5]
    Хмм что-то я наверное не понимаю.
    Если не грамотно задан вопрос то так и поясните, пока что мне это напоминает общение как в анекдоте про приборы.
  • И. Павел © (24.11.10 10:50) [6]
    > [5] Yourlastmist ©   (24.11.10 10:48)

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

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

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

    Ты что думаешь, что запросы во всех СУБД одинаковы.
  • Yourlastmist © (24.11.10 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 © (24.11.10 11:31) [11]
    В Акцесс есть три поля типа "BLOB"
      Binary
      Image
      Text


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

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

    В Аксцессе не нашел где эти типы выставляются, в режиме конструктора там просто выставляется Поле Объекта OLE. Как загнать в blob поле картинку я знаю, для этого можно воспользоваться TDBImage, меня интересует конкретно книга Excel, точнее первая ее страница, на которой содержится форматированный текст и форматированная таблица.
  • Плохиш © (24.11.10 12:09) [14]
    TBlobField + F1/Google Примеров жевать не пережевать.

    PS. Объясняю основы программирования - дорого.
  • Плохиш © (24.11.10 12:10) [15]

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

    Мая плякать...
  • Anatoly Podgoretsky © (24.11.10 12:17) [16]
    > Yourlastmist  (24.11.2010 11:39:13)  [13]

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


    СREATE Tbl(MyBLob binary)
  • Anatoly Podgoretsky © (24.11.10 12:20) [17]

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

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

    В демос даже примеры есть, например Animal, я игрался - работает.
  • Yourlastmist © (24.11.10 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 © (24.11.10 13:05) [19]

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

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

    И это, выбрось ADOTable
  • Yourlastmist © (24.11.10 13:08) [20]
    Текст сообщения об ошибке: "Невозможно прочитать файл". Этот текст выдает EXCEL а дельфя ничего не выдает, с ее точки зрения все операции выполнились, но судя по результатам открытия файла что-то тут не так))
    А по поводу ADOTable яж еще вверху написал что взял для примера ACCESS а соединение по ADO тут самое удобное мне кажется.
  • Anatoly Podgoretsky © (24.11.10 13:47) [21]
    А туда есть права, а при другом запуске?

    >  BLOBStream.SaveToFile('test.xml');
  • Yourlastmist © (24.11.10 14:08) [22]
    Права есть, судя по всему он почему-то не хочет перегонять файл из бинарных значений в EXCEL... блин второй день мучаюсь
  • Yourlastmist © (24.11.10 14:14) [23]
    Все разобрался. В коде всего 1 ошибка вместо test.xml нужно test.xls
    Всем огромнейшее спасибо
  • Anatoly Podgoretsky © (24.11.10 14:14) [24]
    > Yourlastmist  (24.11.2010 14:08:22)  [22]

    Говоришь есть, а на какую папку, а в другой момент времени тоже есть?
  • картман © (24.11.10 14:15) [25]

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

    как-то делал загрузку в базу файла и выгрузку, формат dot - открываю блокнотом - все нормально, программа, пользующаяся им - нифика, ругается... оказалось весело - в конец каждой строки добавлялся символ конец страницы - #12, вот... только я не помню, кто его туда загонял - грузились файлы прогой, написанной на дельфи , а выгражались C#... может, у тебя подобная хрень?
 
Конференция "Начинающим" » Экспорт книги Excel в BLOB поле БД и обратно
Есть новые Нет новых   [134470   +16][b:0][p:0.001]