Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Хранение файлов в Blob полях / 3 сообщений из 3, страница 1 из 1
25.10.2007, 20:59
    #34895860
YuriyT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение файлов в Blob полях
Я понимаю говорить у нас все любят. Кто нибудь из профессионалов может посоветовать что нужно почитать и где? Для того, что бы понять как конкретно создается BLOB поля. Как загружать файлы пользователю. Как программно загружать файлы любых форматов в базу. Как их извлекать пользователю или программно? Любые примеры Builder, Delphi & Visual Studio не важно. Что вы все время о надежности разговариваете. Посоветуйте с чего начать?
Пожалуйста не реагируйте по принципу а как, а что - чо тупой и так далее. Знания у человека приобретаются при общении!!! Все когда то начинали с нуля. У меня много архивов с текстовыми файлами пояснениями что в архиве. Уже их столько, что проводник тормозит. Хотелось перейти от храненя ссылок на файлы к полному хранению файлов в базе.
...
Рейтинг: 0 / 0
26.10.2007, 07:08
    #34896191
Serik Akhmetov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение файлов в Blob полях
Я думаю, вам нужно сначала определиться точно, что вы хотите получить, и что вы будете использовать. Читать нужно документацию по выбранным продуктам. Слишком общий вопрос.
Также стоит воспользоваться поиском.

Пример для Firebird/C++Builder/IBPP

создать таблицу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE ES_SCHEME (
    SCHEME_ID  PK /* PK = INTEGER NOT NULL */,
    NAME       NAME32 NOT NULL /* NAME32 = VARCHAR(32) */,
    WIDTH      "INT" DEFAULT  1024  NOT NULL /* "INT" = INTEGER */,
    HEIGHT     "INT" DEFAULT  768  NOT NULL /* "INT" = INTEGER */,
    PICTURE    PIC /* PIC = BLOB SUB_TYPE 0 SEGMENT SIZE 4096 */,
    NOTE       NOTE64 /* NOTE64 = VARCHAR(64) */,
    DATE_BEG   DATETIME DEFAULT '1996-01-01 00:00:01' NOT NULL /* DATETIME = TIMESTAMP */,
    DATE_END   DATETIME DEFAULT '2077-12-31 23:59:59.999' NOT NULL /* DATETIME = TIMESTAMP */,
    SID        F_KEY /* F_KEY = INTEGER */
);

записать BLOB
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
int TDataLayer::ESSchemeUPicture(int scheme_id, AnsiString path_picture)
{
  int ret= 0 , s, fsize; char buf;
  string sql;
  IBPP::Blob b;
  ifstream fin;

  sql = "execute procedure ES_SCHEME_U_PICTURE (?,?)";

  fin.open(path_picture.c_str(), ios::binary);
  if (fin.fail()) { return (- 3 ); }

  try
  {
   tr = IBPP::TransactionFactory(db, IBPP::amWrite, IBPP::ilReadCommitted, IBPP::lrNoWait);  // Start transaction for write
   tr->Start();
   b  = IBPP::BlobFactory(db, tr);
   b->Create();

   while(!fin.eof())
   {
    fin.read(&buf,  1 );
    if (fin.good())
      {b->Write(&buf,  1 ); ret++;}
    else
      break;
   }
   b->Close();

   st = IBPP::StatementFactory(db, tr);
   st->Prepare(sql);

   st->Set( 1 , scheme_id);
   st->Set( 2 , b);

   st->Execute();
   tr->Commit();
  }
  catch (IBPP::Exception& e)
  {
   errorstr = e.what();
   ret = - 1 ;
  }
  fin.close();

  return (ret);
}

Прочитать
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
bool TDataLayer::ESSchemeSImg(TMemoryStream * s, int scheme_id)
{
 bool ret = true;
 string sql;
 IBPP::Blob b; char * buf; int size, largest, segments;

 sql = "select picture ";
 sql +="from es_scheme_s(?, NULL, NULL)";

 try
 {
  tr = IBPP::TransactionFactory(db,IBPP::amRead,IBPP::ilReadCommitted,IBPP::lrNoWait);  // Start transaction for read
  tr->Start();
  st = IBPP::StatementFactory(db, tr);
  st->Prepare(sql);

  st->Set( 1 , scheme_id);

  st->Execute();
  b = IBPP::BlobFactory(db, tr);
  while(st->Fetch())
  {
   st->Get( 1 , b);
   b->Open();
   b->Info(&size, &largest, &segments);
   buf = new char [size];

   int offset =  0 ;
   for (int s= 1 ; s<=segments; s++)
   {
     int r;
     r = b-> Read(&buf[offset], largest);
     offset += r;
   }
   b->Close();

   s->SetSize(size);
   s->Position =  0 ;
   s->Write(&buf[ 0 ], size);
   delete [] buf;
  }

  tr->Commit();
 }
 catch (IBPP::Exception& e)
 {
  errorstr = e.what();
  ret = false;
 }

 return (ret);
}
...
Рейтинг: 0 / 0
19.01.2008, 11:15
    #35073181
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение файлов в Blob полях
YuriyTЯ понимаю говорить у нас все любят. Кто нибудь из профессионалов может посоветовать что нужно почитать и где? Для того, что бы понять как конкретно создается BLOB поля. Как загружать файлы пользователю. Как программно загружать файлы любых форматов в базу. Как их извлекать пользователю или программно? Любые примеры Builder, Delphi & Visual Studio не важно. Что вы все время о надежности разговариваете. Посоветуйте с чего начать?
Пожалуйста не реагируйте по принципу а как, а что - чо тупой и так далее. Знания у человека приобретаются при общении!!! Все когда то начинали с нуля. У меня много архивов с текстовыми файлами пояснениями что в архиве. Уже их столько, что проводник тормозит. Хотелось перейти от храненя ссылок на файлы к полному хранению файлов в базе.

http://www.sql.ru/faq/faq_topic.aspx?fid=334
...
Рейтинг: 0 / 0
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Хранение файлов в Blob полях / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]