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

Вниз

Как хранить файлы в PostrgeSQL?   Найти похожие ветки 

 
PG81 ©   (2009-10-15 15:58) [0]

Как хранить файлы в PostrgeSQL?
Я знаю, что есть такое поле в БД Postgres типа bytea. В TADODataSet-е ему асоциируется поле типа TVarBytesField. Как через него записывать файл в БД и считывать,я не знаю. Как ни пытался у меня не получается.
Может вообще нужно использовать другое поле.Есть мысль использовать поле в БД типа text, а под него в TADODataSet-е ему асоциируется поле типа TStringField.Конвертировать любой файл в строку записывать в поле, а выгружать его в файл с именем хранимое в другом поле.Но как конвертировать тогда файл в строку тоже не знаю.Вобще конечно хотелось бы использовать первый вариант.


 
Медвежонок Пятачок ©   (2009-10-15 16:18) [1]

блобстрим/адоблобстрим + лоадфромфайл


 
PG81 ©   (2009-10-15 17:23) [2]

А подробней можно?


 
Плохиш ©   (2009-10-15 21:16) [3]

Подробней в справке.


 
PG81 ©   (2009-10-16 08:53) [4]

я же говорю , там не блоб поле!!!!


 
Медвежонок Пятачок ©   (2009-10-16 09:27) [5]

и что?


 
Медвежонок Пятачок ©   (2009-10-16 09:29) [6]

в mssql на заборе тоже написано что поле varbinary.
а на самом деле это блоб.


 
Anatoly Podgoretsky ©   (2009-10-16 11:15) [7]

А у него TVarBytesField значит Value


 
Плохиш ©   (2009-10-16 11:22) [8]


> PG81 ©   (16.10.09 08:53) [4]
>
> я же говорю , там не блоб поле!!!!

dbExpress говорит, что блоб, сомневаюсь, что в ado они его по-другому интерпретируют.


 
Anatoly Podgoretsky ©   (2009-10-16 11:24) [9]

> Плохиш  (16.10.2009 11:22:08)  [8]

ADO более широк, чем dbExpress и автор подтвердил, что интерпритируется не как ftBlob


 
PG81 ©   (2009-10-16 11:31) [10]

ну а что делать дальше?В наборе данных сам создаю поле типа TBlobField, и выдается ошибка, типа не тот тип поля, ожидается такой а там другой.Что делать?Самому написать тип поля, только что там в нем делать,  вновом типе?


 
Плохиш ©   (2009-10-17 16:35) [11]


> Anatoly Podgoretsky ©   (16.10.09 11:24) [9]
>
> > Плохиш  (16.10.2009 11:22:08)  [8]
>
> ADO более широк, чем dbExpress и автор подтвердил, что интерпритируется
> не как ftBlob

BDS2006, TADODataSet - Add all fields добавилось поле TBLOBField.
Т.ч. не знаю, что и у кого как определяется.


 
Vitalts   (2009-10-26 16:09) [12]

var
 BlobStream: TStream;
 FileStream: TStream;
begin

   ZQueryBlob.SQL.Clear;
   ZQueryBlob.SQL.Text:= "select data from " + DBTableBlob +  " where tid=" + Tid;

   ZQueryBlob.Open;

   BlobStream:= ZQueryBlob.CreateBlobStream(ZQueryBlob.FieldByName("data"), bmRead);

   FileStream:= TFileStream.Create("c:\test", fmCreate);
   FileStream.CopyFrom(BlobStream, BlobStream.Size);
   FileStream.Free;
   BlobStream.Free;

   ZQueryBlob.Close;
end;


 
Vitalts   (2009-10-26 16:10) [13]

Это чтение


 
Vitalts   (2009-10-26 16:17) [14]

В БД нужно использовать тип поля bytea


 
Vitalts   (2009-10-26 16:21) [15]

А вот с записью, я признаться сам не разобрался. Поэтому использую преобразование бинарного файла в строку вида
"\004\024\000\000\000\010\033\000\000\361\000\000\010\000\034"
которую и передаю непосредсвенно в запросе инсерт :)


 
Виталий Панасенко   (2009-10-27 17:58) [16]

А с какого боку ZeosLIB к ADO?


 
Sky_Dream   (2009-11-25 18:59) [17]

Я сталкнулся с такой же проблемой, записать в базу данных у меня получилось, а вот считать уже неделю мучаюсь не как не выходит, я для конекта использую ODBCDRIVER (8.4)

тест добовления файла

procedure TAdmin.AddReq();
const
 UPDATE_CRTFILE = "Update crt"
   + " Set req_st=:req_st, req_file=:req_file, req_filename=:req_filename"
   + " Where signature=:signature";
var
 Err: string;
 fs: TStream;
begin
 Err := "";
 VegaDll(Err);

 if Err = "" then
 begin
   try
     fs := TFileStream.Create(ExtractFilePath(Application.ExeName) + "Req\" + gOnlineKey + ".req", fmOpenRead); //получение путя и имени файла

     TAdoLib.CreateLocalDS(gOnLine.Cnn, cmdUpdateCrt, UPDATE_CRTFILE, cmdText); // здесь у меня весит постоянный конект к базе
     cmdUpdateCrt.Parameters.ParseSQL(UPDATE_CRTFILE, true);
     cmdUpdateCrt.Parameters.ParamByName("req_st").Value := "have";
     cmdUpdateCrt.Parameters.ParamByName("req_file").LoadFromStream(fs, ftBytes);// запись в базу данных из параметра
     cmdUpdateCrt.Parameters.ParamByName("req_filename").Value := gOnlineKey + ".req";
     cmdUpdateCrt.Parameters.ParamByName("signature").Value := gOnlineKey;
     cmdUpdateCrt.Execute;
   finally
     fs.Free
   end;
 end;

end;

Чтение пробовал разными способами не как не могу сделать...


 
Sky_Dream   (2009-11-25 19:21) [18]

Во наконец получилось проблема была в настройках строки подключения через ODBCDRIVER (8.4)

в строке подключения поменял один параметр

ByteaAsLongVarBinary=0;" на ByteaAsLongVarBinary=1;"

и вытянул через строковую переменную

try
         FilName := cdsCrtAll.FieldByName("sk_filename").AsString;//получение имени
         st := cdsTests.Fields.FieldByName("sk_file").AsString;//получение данных в строку
         cn := Length(st);//размер строки

         FStr := TFileStream.Create(gOnLineDirInIkey + FilName, fmCreate);//создание фалового потока
         FStr.Write(st[1], cn);//запись данных в файл
       finally
         FStr.Free;
       end;



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

Форум: "Базы";
Текущий архив: 2011.05.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.004 c
15-1296077394
Юрий
2011-01-27 00:29
2011.05.15
С днем рождения ! 27 января 2011 четверг


15-1296336581
Юрий
2011-01-30 00:29
2011.05.15
С днем рождения ! 30 января 2011 воскресенье


15-1296212454
qazxsw
2011-01-28 14:00
2011.05.15
Быстрый вывод пикселей на канву


2-1297265333
fil-23
2011-02-09 18:28
2011.05.15
Как заставить программу подождать?


15-1296595780
Юрий
2011-02-02 00:29
2011.05.15
С днем рождения ! 2 февраля 2011 среда





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