Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Blob поля в MySQLe [D5, MySQL]


Страницы:   1 2

Xmen ©   (2007-03-14 14:29:00) 

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


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

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

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


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

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


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

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;

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


ЮЮ   (2007-04-03 07:35:00) [4]

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


Aazmandyus   (2007-04-03 04:12:00) [5]

СУБД 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;

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


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

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


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


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

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

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

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


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

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


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


> Xmen   (19.03.07 12:28) [13]

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


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

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

Для сохранения данных (файла)
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);

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


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

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


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


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

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


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

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


sniknik   (2007-03-16 16:16:00) [14]

опс... LoadFromField = LoadFromFile


sniknik   (2007-03-16 16:15:00) [15]

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

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


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

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;


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

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

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;


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

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


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

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


sniknik   (2007-03-15 08:32:00) [20]

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо