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

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

Как все связать и как работает 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
10.07.2020, 13:22
    #39978108
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
Solovej,
1. TStream - абстрактный поток, используйте наследников - TMemoryStream или TFileStream.
2. Где создание Strim?
3. После SaveToStream() его необходимо "перемотать" на начало: Strim.Position := 0;

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

Ещё можно добавить, что промежуточный MemoryStream это утроенное потребление
памяти, что на больших архивах может оказаться смертельным.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
10.07.2020, 13:52
    #39978125
Solovej
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
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
10.07.2020, 13:54
    #39978127
Solovej
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
Dimitry Sibiryakov,

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

Шедеврально. Похоже проблемы не только с потоками
...
Рейтинг: 0 / 0
10.07.2020, 16:06
    #39978214
Solovej
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
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
10.07.2020, 16:28
    #39978219
Solovej
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
Объясните хотя бы структуру, как идет построение что для чего тут
...
Рейтинг: 0 / 0
10.07.2020, 17:56
    #39978254
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
Solovejчто для чего тут

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

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

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

А что у меня прямое, - спросил верблюд. (с))
...
Рейтинг: 0 / 0
10.07.2020, 21:36
    #39978297
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
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
10.07.2020, 21:45
    #39978299
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
kdv,

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

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

Читал, не получилось поэтому я здесь
...
Рейтинг: 0 / 0
13.07.2020, 09:19
    #39978791
Solovej
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
Код: 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
13.07.2020, 09:43
    #39978799
Solovej
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
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
13.07.2020, 11:35
    #39978848
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
Solovej,

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

P.S.

Код: pascal
1.
  FileName:=Edit1.Text+IntToStr(Index)+'.7z';
...
Рейтинг: 0 / 0
13.07.2020, 11:58
    #39978861
Solovej
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
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
13.07.2020, 11:59
    #39978862
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
DarkMaster
И вместо ExecSQL - используй Open().
Если использует TIBSQL (однонаправленный датасет) из IBX, то ExecQuery. Там нет метода Open. Есть свойство с таким именем, оно показывает, открыт ли Dataset.
...
Рейтинг: 0 / 0
13.07.2020, 12:00
    #39978863
Solovej
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
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
13.07.2020, 12:00
    #39978864
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
Solovej,

Ты бы не кусочки показывал, а все вместе.... Если у тебя все есть - в чем затык-то?
...
Рейтинг: 0 / 0
13.07.2020, 12:22
    #39978881
Solovej
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
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
13.07.2020, 12:25
    #39978883
Solovej
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
DarkMaster
Solovej,

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


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


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