powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
25 сообщений из 43, страница 1 из 2
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978100
Solovej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Нужна помощь не могу найти не книг не нормальных источников по данному вопросу.

Как все связать и как работает TStream и что сним можно сделать. И как правильно.

Код: 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.
procedure TForm1.Button3Click(Sender: TObject);
var
  FIniFile: TIniFile;
  Strim: TStream;
begin
  IBSQL1.SQL.Clear;
  IBSQL1.SQL.Add('select TP_ID, TP_BLOB from T_TEMPLATES');
  IBSQL1.GoToFirstRecordOnExecute:=True;
  IBSQL1.ExecQuery;
  IBDatabase1.Connected:=True;
while not IBSQL1.Eof do
begin

 with CreateInArchive(CLSID_CFormatZip) do
      begin
      //OpenFile( ****  );   {*TP_ID* + *TP_NAME*+ '.7z'} {IBSQL1.Current.FieldByName('TP_BLOB')}
        TBlobField(IBSQL1.FieldByName('TP_BLOB')).SaveToStream(Strim);
      //OpenStream();
        ExtractTo(Edit2.Text + '1'); //Edit2.Text:= ExtractFileDir (OpenDialog1.FileName)+'\'+Copy(fullFileName,1,3)+Copy(fullFileName,12,Length(fullFileName)-15)+'\';
      end;
IBSQL1.Next;
end;
IBSQL1.Close;
end;
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978108
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solovej,
1. TStream - абстрактный поток, используйте наследников - TMemoryStream или TFileStream.
2. Где создание Strim?
3. После SaveToStream() его необходимо "перемотать" на начало: Strim.Position := 0;

Это только навскидку.
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978115
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpЭто только навскидку.

Ещё можно добавить, что промежуточный MemoryStream это утроенное потребление
памяти, что на больших архивах может оказаться смертельным.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978125
Solovej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp,

Код: 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.
procedure TForm1.Button3Click(Sender: TObject);
var
  FIniFile: TIniFile;
  Strim:  TFileStream;
  Index: Integer;
begin
  IBSQL1.SQL.Clear;
  IBSQL1.SQL.Add('select TP_ID, TP_BLOB from T_TEMPLATES');
  IBSQL1.GoToFirstRecordOnExecute:=True;
  IBSQL1.ExecQuery;
  IBDatabase1.Connected:=True;
while not IBSQL1.Eof do
 Index := 1;
begin
    Strim.Position := 0;
    Strim:= TFileStream.Create(IntToStr(Index) + '.7z', fmCreate) ;
    IBSQL1.FieldByName('TP_BLOB').SaveToStream(Strim);
    inc(Index);
    Next;
      //with CreateInArchive(CLSID_CFormatZip) do
      //begin
      //OpenFile( ****  );
      {*TP_ID* + *TP_NAME*+ '.7z'} {IBSQL1.Current.FieldByName('TP_BLOB')}
      //OpenStream();
      //ExtractTo(Edit2.Text + '1'); //Edit2.Text:= ExtractFileDir (OpenDialog1.FileName)+'\'+Copy(fullFileName,1,3)+Copy(fullFileName,12,Length(fullFileName)-15)+'\';
      //end;
IBSQL1.Next;
end;
IBSQL1.Close;
end;


(сложновато говорить когда с потоком не работал)
Как в потоке данных обращаться значению строкам типа 'TP_ID' Integer и TP_NAME String
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978127
Solovej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Архивов много, весят они мало до полметра
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978210
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solovej
Код: pascal
1.
2.
Strim.Position := 0;
    Strim:= TFileStream.Create(IntToStr(Index) + '.7z', fmCreate) ;

Шедеврально. Похоже проблемы не только с потоками
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978214
Solovej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
white_nigger,

Да я знаю что я в потоках слаб

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
var SaveFile: TFileStream;
    Index: Integer;
begin
    IBSQL1.SQL.Clear;
    IBSQL1.SQL.Add('select TP_ID, TP_BLOB from T_TEMPLATES');
    IBSQL1.GoToFirstRecordOnExecute:=True;
    IBSQL1.ExecQuery;
    IBDatabase1.Connected:=True;
  with IBSQL1 do
    begin
      ExecQuery;
      Index := 1;
  while not Eof do
      begin
        SaveFile := TFileStream.Create(IntToStr(Index) + '.7z', fmCreate);
        FieldByName('TP_BLOB').SaveToStream(SaveFile);
        Next;
        inc(Index);
        SaveFile.Free;
      end;
    Close;
    end;
end;
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978219
Solovej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Объясните хотя бы структуру, как идет построение что для чего тут
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978254
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solovejчто для чего тут

В объяснениях "что для чего" хороша клавиша F1. Или её из последних Дельфи уже выпилили?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978282
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solovej,

а ты не мог бы пояснить, какую задачу ты пытаешься в итоге решить? И что ты подразумеваешь под "потоками"?

Пока из твоего кода следует, что блоб каждой записи ты пытаешься упаковать в 7zip-архив сохранить в файл с расширением *.7z. Это так?
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978293
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solovej<...>
IBSQL1.ExecQuery;
IBDatabase1.Connected:=True;
<...>

А что у меня прямое, - спросил верблюд. (с))
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978297
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

да там много чего перепутано.

Solovej - читал http://www.ibase.ru/ibx/ ? Не помогло?

кроме того, прикопаюсь ради приличия
Код: pascal
1.
2.
3.
4.
        FieldByName('TP_BLOB').SaveToStream(SaveFile);
        Next;
        inc(Index);
        SaveFile.Free;



последовательность действий зачем перепутана? Она особо не влияет, но в голове и в коде какой-то порядок должен быть
Код: pascal
1.
2.
3.
4.
        FieldByName('TP_BLOB').SaveToStream(SaveFile);
        SaveFile.Free;
        Next;
        inc(Index);
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978299
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

А кроме того он, имхо, не приводит, что/как именно не получается/сообщение об ошибке.
Самый вредный из людей это сказочник злодей. (с))
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978305
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

жалко что невкусный.
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978786
Solovej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Док,
Суть достать с БД в поле блоб файл, он там лежит без разрешения, сделать его 7z и распаковывать в папку (папка наме должен совпадать именем БП)
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978787
Solovej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,

Читал, не получилось поэтому я здесь
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978791
Solovej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
var SaveFile: TFileStream;
    Index: Integer;
begin
    IBSQL1.SQL.Clear;    //очистка
    IBSQL1.SQL.Add('select TP_ID, TP_BLOB from T_TEMPLATES');     //выставления запроса также также есть уже такойже запрос IBQuery1, но по принцыпу слишком много фалов накружает пк
    IBSQL1.GoToFirstRecordOnExecute:=True; //   запрос первой записи после использую Next
    IBSQL1.ExecQuery; //несовсем понял для чего он
    IBDatabase1.Connected:=True; //подключение базе IBSQL1 связон с им
  with IBSQL1 do    // дальше для меня лес
    begin
      Index := 1;
  while not Eof do
      begin
        SaveFile := TFileStream.Create(IntToStr(Index) + '.7z', fmCreate);
        FieldByName('TP_BLOB').SaveToStream(SaveFile);
        Next;
        inc(Index);
        SaveFile.Free;
      end;
    Close;
    end;
end;



пришел на работу запустил заработало офигеть, 5 часов сидел не фира не получалось
дайте совет как сохранять имен определенную папку и разархивированную папку )название брать с Edit2.Text.
А Файл после распаковки назывался @TP_ID@ + @TP_NAME@
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978799
Solovej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Solovej
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
var SaveFile: TFileStream;
    Index: Integer;
begin
    IBSQL1.SQL.Clear;    //очистка
    IBSQL1.SQL.Add('select TP_ID, TP_BLOB from T_TEMPLATES');     //выставления запроса также также есть уже такойже запрос IBQuery1, но по принцыпу слишком много фалов накружает пк
    IBSQL1.GoToFirstRecordOnExecute:=True; //   запрос первой записи после использую Next
    IBSQL1.ExecQuery; //несовсем понял для чего он
    IBDatabase1.Connected:=True; //подключение базе IBSQL1 связон с им
  with IBSQL1 do    // дальше для меня лес
    begin
      Index := 1;
  while not Eof do
      begin
        SaveFile := TFileStream.Create(IntToStr(Index) + '.7z', fmCreate);
        FieldByName('TP_BLOB').SaveToStream(SaveFile);
        Next;
        inc(Index);
        SaveFile.Free;
      end;
    Close;
    end;
end;



пришел на работу запустил заработало офигеть, 5 часов сидел не фира не получалось
дайте совет как сохранять имен определенную папку и разархивированную папку )название брать с Edit2.Text.
А Файл после распаковки назывался @TP_ID@ + @TP_NAME@


** Файл был @TP_ID@ + @TP_TYPE@+@TP_NAME
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978848
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solovej,

СНАЧАЛА - соединение с БД - потом все остальное. И вместо ExecSQL - используй Open(). В конце - добавь Disconnect() или Connectted:=False для IBDatabase.

P.S.

Код: pascal
1.
  FileName:=Edit1.Text+IntToStr(Index)+'.7z';
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978861
Solovej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster,
это есть все есть
Код: 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.
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  fullFileName : string;
begin
   IBDatabase1.Connected:=False;
   try
    if OpenDialog1.Execute then
     begin
      Edit1.Text:='localhost:'+OpenDialog1.FileName;
      fullFileName:=ExtractFileName(OpenDialog1.FileName);
      Edit2.Text:= ExtractFileDir (OpenDialog1.FileName)+'\'+Copy(fullFileName,1,3)+Copy(fullFileName,12,Length(fullFileName)-15)+'\';
     end;
   except
    on e:Exception do
   end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   try
    IBDatabase1.DatabaseName:=Edit1.Text;
    IBDatabase1.Connected:=True;
    Application.MessageBox('&#207;&#238;&#228;&#234;&#235;&#254;&#247;&#229;&#237;&#232;&#229; &#239;&#240;&#238;&#248;&#235;&#238; &#243;&#241;&#239;&#229;&#248;&#237;&#238;','&#194;&#237;&#232;&#236;&#224;&#237;&#232;&#229;',MB_OK+MB_ICONINFORMATION);
    IBQuery1.Active:=True;
   except
    on e:Exception do
     Application.MessageBox('&#206;&#248;&#232;&#225;&#234;&#224; &#239;&#238;&#228;&#234;&#235;&#254;&#247;&#229;&#237;&#232;&#255; &#234; &#238;&#228;&#237;&#238;&#233; &#232;&#231; &#193;&#196;','&#194;&#237;&#232;&#236;&#224;&#237;&#232;&#229;',MB_OK+MB_ICONERROR);
   end;
end;
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978862
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster
И вместо ExecSQL - используй Open().
Если использует TIBSQL (однонаправленный датасет) из IBX, то ExecQuery. Там нет метода Open. Есть свойство с таким именем, оно показывает, открыт ли Dataset.
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978863
Solovej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster
Solovej,

СНАЧАЛА - соединение с БД - потом все остальное. И вместо ExecSQL - используй Open(). В конце - добавь Disconnect() или Connectted:=False для IBDatabase.

P.S.

Код: pascal
1.
  FileName:=Edit1.Text+IntToStr(Index)+'.7z';



Спасибо
Код: pascal
1.
SaveFile := TFileStream.Create(FieldByName('TP_ID').AsString + '_' + FieldByName('TP_TYPE').AsString + '_' + FieldByName('TP_NAME').AsString + '.zip', fmCreate);
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978864
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solovej,

Ты бы не кусочки показывал, а все вместе.... Если у тебя все есть - в чем затык-то?
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978881
Solovej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Solovej
DarkMaster
Solovej,

СНАЧАЛА - соединение с БД - потом все остальное. И вместо ExecSQL - используй Open(). В конце - добавь Disconnect() или Connectted:=False для IBDatabase.

P.S.

Код: pascal
1.
  FileName:=Edit1.Text+IntToStr(Index)+'.7z';



Спасибо
Код: pascal
1.
SaveFile := TFileStream.Create(FieldByName('TP_ID').AsString + '_' + FieldByName('TP_TYPE').AsString + '_' + FieldByName('TP_NAME').AsString + '.zip', fmCreate);



Только не могу понять как запихнуть в определенную папку Edit2.Text = (D:\data\DBA\Shablon) а сохраняет в D:\data\DBAгде сама баз БП
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978883
Solovej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster
Solovej,

Ты бы не кусочки показывал, а все вместе.... Если у тебя все есть - в чем затык-то?


1) В данный момент схоронить в определенную папку из Edit2.Text где он D:\data\DBA\Shablon
2) Разархивировать файл типа 7z (они все в архиве а их от 1000 где-то )
...
Рейтинг: 0 / 0
25 сообщений из 43, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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