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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.005 c
2-1181291230
kyn66
2007-06-08 12:27
2007.07.01
Сетевое имя пользователя программы


2-1181079178
Riply
2007-06-06 01:32
2007.07.01
Значение FilePointer при ошибке чтения файла.


15-1180159464
boriskb
2007-05-26 10:04
2007.07.01
Мы


2-1181368731
Mamana
2007-06-09 09:58
2007.07.01
Сообщение


2-1181492545
GoRdon_2007
2007-06-10 20:22
2007.07.01
Как показать форму, а код выполнять дальше?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский