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

Вниз

Blob поля в MySQLe   Найти похожие ветки 

 
Xmen   (2007-03-14 14:29) [0]

Добрый день мастера.
Вот такой у меня вопрос делаю(уже 3 года работает, апгрейт) прогу которая делает регистрацию входяших письм. В базе нужно сохранит оригинал этого письма (док. изображения отсканированный, текст итп). Как это можно сохранит в Мускуле и потом его открыт.


 
Плохиш ©   (2007-03-14 15:06) [1]


> Как это можно сохранит в Мускуле и потом его открыт.

Это вопрос? Тогда ответом будет Ваш сабж :-)


 
Xmen   (2007-03-15 07:18) [2]

Извиняюсь если неправильно сформировал вопрос.
Мне действительно интересует как можно файлы сохранит в базе MySQL e и потом его открыт для чтения средствами Дельфи. Или подскажите в каком направление искать.


 
sniknik ©   (2007-03-15 08:32) [3]

блоб поля это и есть направление, оно у тебя в заголовке...
а вот уже пройдено на две трети -> у них есть методы loadfromfile/stream и такие же saveto....


 
Xmen   (2007-03-15 08:57) [4]

спасибо за подсказку сейчас попробую


 
Xmen   (2007-03-16 14:25) [5]

Создал базу в нем таблицу с блоб полем но как туда записать не получается, наверно не туда копаю. Можете пример показать а то я еще пару недел буду искат а потом наверно опят к вам.


 
Xmen   (2007-03-16 14:46) [6]

В сети нашел вот такой пример для записи в блоб поле. Но как им пользоватся я не понимаю.

procedure TForm1.Button1Click(Sender: TObject);
var
 blob: TBlobStream;
begin
 blob := yourDataset.CreateBlobStream(yourDataset.FieldByName("YOUR_BLOB"), bmWrite);
 try
   blob.Seek(0, soFromBeginning);
   fs := TFileStream.Create("c:your_name.doc", fmOpenRead or
     fmShareDenyWrite);
   try
     blob.CopyFrom(fs, fs.Size)
   finally
     fs.Free
   end;
 finally
   blob.Free
 end;
end;


 
Desdechado ©   (2007-03-16 15:17) [7]

Query1.Sql.Text :=
  "INSERT INTO testblob " +
  " ( " +
  "  fBlob" +
  " )" +
  " VALUES" +
  " (" +
  " :ParamBlobField" +
  ")";
Query1.ParamByName("ParamBlobField").DataType := ftBlob;
Query1.ParamByName("ParamBlobField").ParamType := ptInput;
Query1.ParamByName("ParamBlobField").LoadFromFile("MyFile",ftBlob);
Query1.ExecSql;


 
sniknik ©   (2007-03-16 16:15) [8]

> В сети нашел вот такой пример для записи в блоб поле. Но как им пользоватся я не понимаю.
вечно они усложняют... не ходи больше в сеть...

procedure TForm1.Button1Click(Sender: TObject);
begin
 TBlobField(yourDataset.FieldByName("YOUR_BLOB")).LoadFromField.../Stream...;
end;


 
sniknik ©   (2007-03-16 16:16) [9]

опс... LoadFromField = LoadFromFile


 
Xmen   (2007-03-19 07:15) [10]

Спосибо за примера.
а можно еще вопрос
это куда я его буду извликать данный из блоба?


 
Плохиш ©   (2007-03-19 11:03) [11]


> это куда я его буду извликать данный из блоба?

Велик и могуча руския языку... Сам-то понял, что спросил?


 
Xmen   (2007-03-19 12:25) [12]

Да наверно слова перепутал изза нагрузки в голове.
Повторно
Как можно сохранить в блоб поля данные и потом их загрузить подходяший редактор для просмотра.


 
Xmen   (2007-03-19 12:28) [13]

Вот что я сделал

Для сохранения данных (файла)
procedure TMainForm.SpeedButton1Click(Sender: TObject);
var
   BS,fs:TStream;
begin
 if OpenDialog1.Execute then
   begin
    DBEdit7.Text:=OpenDialog1.FileName;
    bs := DMKanc.tbMain.CreateBlobStream(DMKanc.tbMain.FieldByName("Files"), bmWrite);
    try
      bs.Seek(0, soFromBeginning);
      fs := TFileStream.Create(DBEdit7.Text, fmOpenRead or fmShareDenyWrite);
      try
        bs.CopyFrom(fs, fs.Size)
      finally
        fs.Free
      end;
      finally
      bs.Free
    end;
   end;
end;

И загузка из базы

var
 blob: TStream;
 path, fName:string;
begin
 path:= ExtractFilePath(Application.ExeName);
 fName := path+"temp\"+ExtractFileName( DMKanc.tbMain.FieldByName("Fails").AsString);
 blob := DMKanc.tbMain.CreateBlobStream(DMKanc.tbMain.FieldByName("Files"), bmRead);
 try
   blob.Seek(0, soFromBeginning);
   with TFileStream.Create(fName, fmCreate) do
     try
       CopyFrom(blob, blob.Size)
     finally
       Free
     end;
 finally
   blob.Free
 end;
 ShellExecute(handle,nil,pchar(fName),nil,nil,SW_RESTORE);

составил код из примеров, может что то я неправильно сделал? может есть короткый путь?


 
Плохиш ©   (2007-03-19 14:02) [14]


> Xmen   (19.03.07 12:28) [13]

TBlobField имеет методы LoadFromStream/LoadFromFile и SaveToStream/SaveToFile соответственно...


 
Xmen   (2007-03-19 15:31) [15]

Спасибо помогло
Я рад что есть такие люди как вы.
Еще вопрос по этой теме
А имя файла тоже хранится в блоб поле? если есть как можно его получит.
а то я имя файла в другое поля пишу.


 
Плохиш ©   (2007-03-19 15:58) [16]


> А имя файла тоже хранится в блоб поле?

Нет, блоб хранит только набор байтов

> а то я имя файла в другое поля пишу.

Так и продолжай


 
Xmen   (2007-03-19 16:02) [17]

Спасибо всем! :) :) :)


 
Aazmandyus   (2007-04-03 04:12) [18]

СУБД MySQL 5.0
соединяюсь через ODBC

в запросе присутствуют строки:
ADOQuery1.Parameters.AddParameter.Name:="ParamBlobField";
ADOQuery1.Parameters.ParamByName("ParamBlobField").DataType:=ftBlob;
ADOQuery1.Parameters.ParamByName("ParamBlobField").Direction:=pdInput;
             ADOQuery1.Parameters.ParamByName("ParamBlobField").LoadFromFile(Unit4.FName, ftBlob);
QText:=QText+":ParamBlobField);";
ADOQuery1.SQL.Add(QText);
ADOQuery1.ExecSQL;

Гавкает "Недопустимый тип!" и вылетает не добавляя запись в базу. Как бороться, а?


 
ЮЮ ©   (2007-04-03 07:35) [19]

Сначалв следует сформировать текст параметрического запроса, а затем возиться с его Parameters, а никак не наоборот.


 
Aazmandyus   (2007-04-03 11:47) [20]

QText:=QText+":ParamBlobField);";
ADOQuery1.SQL.Add(QText);
ADOQuery1.Parameters.ParamByName("ParamBlobField").DataType:=ftBlob;
ADOQuery1.Parameters.ParamByName("ParamBlobField").Direction:=pdInput;            ADOQuery1.Parameters.ParamByName("ParamBlobField").LoadFromFile(Unit4.FName, ftBlob);

ADOQuery1.ExecSQL;

Опять гавкает "Недопустимый тип!".


 
Aazmandyus   (2007-04-03 18:43) [21]

Кстати, гавкает он на русском! Именно "Недопустимый тип!" как я и написал. Возможно это бока с драйверами ODBC, т.е. дрова не позволяют таким образом работать с blob? Или тут уместна "притча о танцоре и яицах"? =Р


 
Aazmandyus   (2007-04-03 20:54) [22]

яйца с танцором отдыхают. бока в odbc. скачал MyDAC, заменил ADOConnection на MyConnection, ADOQuery на MyQuery немного подкорректрировал названия процедур, в соответствии с новыми компонентами, и все заработало.
только теперь другой вопрос, что делать через 60 дней, когда триал закончится? :(

может кто знает, где достать MyDAC халявный, или всетаки прийдется покупать? :(



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

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

Наверх




Память: 0.52 MB
Время: 0.026 c
2-1181153421
framez
2007-06-06 22:10
2007.07.01
процессы


2-1181163049
Leon25
2007-06-07 00:50
2007.07.01
Проблема с InterBase 7.5


2-1181222393
Bullfrog
2007-06-07 17:19
2007.07.01
TreeView


2-1181168807
delphino
2007-06-07 02:26
2007.07.01
?


3-1175168174
Neo Trinitron
2007-03-29 15:36
2007.07.01
Вставка данных с помощью Stored Procedure