![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Blob поля в MySQLe [D5, MySQL]
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....