powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Запись собственного типа данных в BLOB поле Firebird
24 сообщений из 24, страница 1 из 1
Запись собственного типа данных в BLOB поле Firebird
    #39636042
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Есть ли возможность записать и считать собственный типа данных в/из BLOB поля БД Firebird?

Если, да есть у кого ни будь простой пример этих операций.

Спасибо.
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39636044
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23Есть ли возможность записать и считать собственный типа данных в/из BLOB поля БД Firebird?

BLOB-у сугубо всё равно как и что ты в него записываешь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39636045
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23,

Обычный binary blob. И пиши/читай что хочешь (хинт - MemoryStream тебе в помощь).
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39636047
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23,

TBlobField.LoadFromFile
TBlobField.LoadFromStream
TBlobField.SaveToFile
TBlobField.SaveToStream
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39636058
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да что же вы все фигню советуете? Какой MemoryStream, какой SaveToStream?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
procedure ParseBlob(AField: TField);
var
  Strm: TStream;
begin
  Strm := AField.DataSet.CreateBlobStream(AField, bmRead);
  try
    ...........
  finally
    Strm.Free;
  end;
end;
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39636063
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23> Если, да есть у кого ни будь простой пример этих операций.

О чём речь? Просто записать/прочитать BLOB из БД умеешь?
А-то тебе щас скажешь про BLOB-фильтры, и ты уйдешь не в
том направлении, время зря потратишь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39636085
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Ну вот не надо - к моей либе как раз то, что YuRock показал, ближе. И вообще, чего все решили, что там Дельфи, которую тут никто не знает?
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39636092
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster...чего все решили, что там Дельфи, которую тут никто не знает?
Тогда бы ТС здесь не побирался.
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39636099
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterНу вот не надо - к моей либе как раз то, что YuRock показал, ближе.Зачем данные туда-сюда гонять по памяти? Чтобы процессор не остывал?
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39636101
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterИ вообще, чего все решили, что там Дельфи, которую тут никто не знает?
Да, действительно. Особенно учитывая, что указан именно Firebird, надо было сразу советовать:

isc_open_blob2
isc_blob_info
isc_get_segment/isc_put_segment
isc_close_blob
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39636104
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_DarkMasterНу вот не надо - к моей либе как раз то, что YuRock показал, ближе.Зачем данные туда-сюда гонять по памяти? Чтобы процессор не остывал?
Да, лучше CreateBlobStream, конечно.
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39636110
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockДа, действительно. Особенно учитывая, что указан именно Firebird, надо было сразу советовать:

isc_open_blob2
isc_blob_info
isc_get_segment/isc_put_segment
isc_close_blobДля конкретно IBX CreateBlobStream создает экземпляр класса TIBBlobStream, который оперирует именно этими функциями.

Еще раз вопрос. Назовите хоть одну причину по которой TBlobField.SaveToStream(MemoryStream) лучше чем TDataSet.CreateBlobStream?

А в особенности с учетом этого
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
procedure TBlobField.SaveToStream(Stream: TStream);
var
  BlobStream: TStream;
begin
  BlobStream := DataSet.CreateBlobStream(Self, bmRead);
  try
    Stream.CopyFrom(BlobStream, 0);
  finally
    BlobStream.Free;
  end;
end;
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39636126
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Еще раз вопрос. Назовите хоть одну причину
Та нету никакой причины. Если удобно использовать CreateBlobStream - конечно, лучше так.
А если уже есть какой-то Stream, уже созданный, то не важно (по скорости и памяти), как писать:

Код: pascal
1.
2.
3.
4.
5.
6.
BlobStream := DataSet.CreateBlobStream(Self, bmWrite);
try
  BlobStream.CopyFrom(Stream, 0);
finally
  BlobStream.Free;
end;


или
Код: pascal
1.
LoadFromStream(Stream);


Но 2-й вариант короче.
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39636149
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поразбираюсь в теме еще... пойду читать...

Я то думал что в BLOB можно так же заносить данные через параметры запроса.
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39636178
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Для конкретно IBX CreateBlobStream создает экземпляр класса TIBBlobStream, который
оперирует именно этими функциями.

Он-то, конечно, оперирует, но при этом кэширует всё содержимое блоба в ОЗУ. Оно кому-то
надо?..

FILЯ то думал что в BLOB можно так же заносить данные через параметры запроса.
Ты не поверишь, но параметры запроса - единственный корректный способ занесения данных в BLOB.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39636182
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23...Я то думал что в BLOB можно так же заносить данные через параметры запроса.
А теперь выяснил, что нельзя? А каким образом (выяснил)?

Я вот "через параметр" делаю, и ни жу-жу:
Код: sql
1.
2.
3.
4.
 insert into MYTABLE
  (ID, BLOB_FIELD)
values
  (:ID, :BLOB_FIELD)



Код: pascal
1.
2.
3.
4.
5.
...
fQuery.ParamByName('BLOB_FIELD').LoadFromFile('C:\Text.txt');
fQuery.ParamByName('BLOB_FIELD').LoadFromStream(fMyStream);
fQuery.ParamByName('BLOB_FIELD').AsString := 'Привет';
fQuery.ParamByName('BLOB_FIELD').AsInteger := 123;



FIBPlus.

Можешь, конечно, TBlobStream ручками создавать, если не лень. Мне - лень.
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39636243
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_DarkMasterНу вот не надо - к моей либе как раз то, что YuRock показал, ближе.Зачем данные туда-сюда гонять по памяти? Чтобы процессор не остывал?

Гм... Ну вот если я назову метод LoadFromBlob() - я буду гонять по памяти или нет?
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39636281
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитал немного, нашел еще примеров.

Напишу ответ сюда , возможно кому то пригодится.

Код: pascal
1.
2.
3.
4.
5.
type
      type_ParametersOfEvents =record
      UserID                              :integer;   
      Path                                :string;     
      end;



Записываем.
Код: pascal
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.
function insertData(perParametersOfEvents:type_ParametersOfEvents):boolean;
var
  per_IBQuery:TIBQuery;
  Stm: TMemoryStream;
begin
      per_IBQuery.Active := False;
      per_IBQuery.SQL.Clear;
      per_IBQuery.SQL.Add('insert into LOGS '
                          + '(PARAMETERS '                  

                          + ')'
                          + ' values ('
                          + ':perID_USER '
                          + ')');


    Stm := TMemoryStream.Create( );
    try

       Stm.Write( perParametersOfEvents, sizeof(perParametersOfEvents) );


       Stm.Position := 0;
       per_IBQuery.ParamByName('perID_USER').LoadFromStream( Stm, ftBlob);
 
    finally
       FreeAndNil(Stm)
    end; // finally


      per_IBQuery.ExecSQL;
      fmConnectToBase.IBTransaction2.Commit;
      FreeAndNil(per_IBQuery); 
end;



Читаем
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
function GetData(perID:integer):type_ParametersOfEvents;
var
  per_IBQuery:TIBQuery;
  stm: TStream;
begin
per_IBQuery.Active:=false;
per_IBQuery.SQL.Clear;
per_IBQuery.SQL.Add('select * from LOGS WHERE ID = :perID');  
if  perID=0 then per_IBQuery.ParamByName('perID').IsNull else  per_IBQuery.ParamByName('perID').AsInteger:=perID;
per_IBQuery.Active:=true;
per_IBQuery.Last;

stm := per_IBQuery.CreateBlobStream( per_IBQuery.FieldByName('PARAMETERS'), bmRead);
   try // finally
      stm.Position := 0;
      stm.Read( result, sizeof(result) );
   finally
      stm.Free;
   end;
end;
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39636284
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23Напишу ответ сюда

Зря. Это надо к Pcrepair, на его сайт валидного говнокода.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39636298
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovFIL23Напишу ответ сюда

Зря. Это надо к Pcrepair, на его сайт валидного говнокода.
Не страшно. Оно не взлетит всё равно.
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39636300
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23,
строки таким образом писать нельзя. Для строки SizeOf() даст размер указателя, т.е. для 32-битной программы - 4. И то, что вы запишете в блоб, там не будет содержимого строки.
Можно использовать в Record тип ShortString или писать как-то по-другому.
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39637084
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мдааа.... при испытательном полёте произошёл взрыв, пришлось переписывать данный код.

Короче нашел в интернете годную статью http://gunsmoker.ru/2011/11/blog-post_12.html
опираясь на которую я смог написать код и понять что такое потоки.

Я знаю что автор сей статьи частенько бывает тут на форуме. Я довольно часто натыкаюсь на его блог при решении какого либо вопроса, поэтому ему респект за довольно качественный материал.
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39637110
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе бы сначала изучить, как вообще различные переменные хранятся в памяти, чтобы научиться формировать блоки, способные записаться в блоб. Формируешь набор и заполняешь параметр. Универсального способа тут не существует от слова совсем.
...
Рейтинг: 0 / 0
Запись собственного типа данных в BLOB поле Firebird
    #39637210
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23> Мдааа.... при испытательном полёте произошёл взрыв, пришлось переписывать данный код.

Это что за ещё полёт мысли? И как статья по ссылке относится к сабжу и БЛОБам?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Запись собственного типа данных в BLOB поле Firebird
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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