powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
43 сообщений из 43, показаны все 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
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978890
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solovej,

Ну так передай правильное, полное имя файла для сохранения.

SaveFile:=TFileStream.Create('ТВОЯ_ПАПКА_КУДА_НАДО_СОХРАНИТЬ\'+FieldByName('TP_ID').AsString + '_' + FieldByName('TP_TYPE').AsString + '_' + FieldByName('TP_NAME').AsString + '.zip', fmCreate);

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

Ну так передай правильное, полное имя файла для сохранения.

SaveFile:=TFileStream.Create('ТВОЯ_ПАПКА_КУДА_НАДО_СОХРАНИТЬ\'+FieldByName('TP_ID').AsString + '_' + FieldByName('TP_TYPE').AsString + '_' + FieldByName('TP_NAME').AsString + '.zip', fmCreate);

7z - есть 2 варианта - или распаковывать самому, или написать батник, в который вставить вызов 7z и вызвать этот батник ровно 1 раз для распаковки.


для архива уже подключен 7z.dll
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
begin
	  // Распаковывает файлы
	  with CreateInArchive(CLSID_CFormatZip) do
	   begin
	     OpenFile(ExtractFilePath(            );
	     ExtractTo(ExtractFilePath(           );
	   end;
	end;
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978900
Solovej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster
Solovej,

Ну так передай правильное, полное имя файла для сохранения.

SaveFile:=TFileStream.Create('ТВОЯ_ПАПКА_КУДА_НАДО_СОХРАНИТЬ\'+FieldByName('TP_ID').AsString + '_' + FieldByName('TP_TYPE').AsString + '_' + FieldByName('TP_NAME').AsString + '.zip', fmCreate);

7z - есть 2 варианта - или распаковывать самому, или написать батник, в который вставить вызов 7z и вызвать этот батник ровно 1 раз для распаковки.


[Ошибка] Unit1.pas(97): Incompatible types: 'String' and 'TFileStream'
97| SaveFile := Edit2.Text + TFileStream.Create(FieldByName('TP_ID').AsString + '_' + FieldByName('TP_TYPE').AsString + '_' + FieldByName('TP_NAME').AsString + '.zip', fmCreate);
где Edit2.Text(изменил)= DBA\
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978913
Solovej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Solovej,

Я в ах своей тупости

SaveFile := TFileStream.Create('1\' + FieldByName('TP_ID').AsString + '_' + FieldByName('TP_TYPE').AsString + '_' + FieldByName('TP_NAME').AsString + '.zip', fmCreate);

ошибка типа исключение из класса EFCCreateError сообщ. 'Cannot create file "D:\data\DBA\1\1_0_Dogovor.zip" .Системе не удалось найти указанный путь'
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978922
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solovej,

Папку-то создать нужно ПЕРЕД тем, как в нее файлы складывать.
Проверь ее существование :

Код: pascal
1.
if DirectoryExists(..имя папки...)



Если ее нет - ForceDirectories(... создать папку....) вызови для создания папки.

P.S. Сибиряков был прав. В Дельфях выпили F1 :( СавсЭм :(
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978924
Solovej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster
Solovej,

Папку-то создать нужно ПЕРЕД тем, как в нее файлы складывать.
Проверь ее существование :

Код: pascal
1.
if DirectoryExists(..имя папки...)



Если ее нет - ForceDirectories(... создать папку....) вызови для создания папки.

P.S. Сибиряков был прав. В Дельфях выпили F1 :( СавсЭм :(


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

Папку-то создать нужно ПЕРЕД тем, как в нее файлы складывать.
Проверь ее существование :

Код: pascal
1.
if DirectoryExists(..имя папки...)



Если ее нет - ForceDirectories(... создать папку....) вызови для создания папки.

P.S. Сибиряков был прав. В Дельфях выпили F1 :( СавсЭм :(


Спасибо, пару секунд сам нашел ответ


Осталось только добавить распаковку архива
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978938
Solovej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я может, да скорее всего достал уже по глупым вопросом
последовая проблема
Код: 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.
procedure TForm1.Button3Click(Sender: TObject);
var SaveFile: TFileStream;
    Index: String;
begin
    IBSQL1.SQL.Clear;    //очистка
    IBSQL1.SQL.Add('select TP_ID, TP_BLOB, TP_TYPE, TP_NAME from T_TEMPLATES');     //выставления запроса также также есть уже такойже запрос IBQuery1, но по принцыпу слишком много фалов накружает пк
    IBSQL1.GoToFirstRecordOnExecute:=True; //   запрос первой записи после использую Next
    IBSQL1.ExecQuery; //несовсем понял для чего он
    IBDatabase1.Connected:=True; //подключение базе IBSQL1 связон с им
  with IBSQL1 do    // дальше для меня лес
    begin
  while not Eof do
      begin
        ForceDirectories(Edit2.Text);
        Index := Edit2.Text + FieldByName('TP_ID').AsString + '_' + FieldByName('TP_TYPE').AsString + '_' + FieldByName('TP_NAME').AsString + '.zip';
        SaveFile := TFileStream.Create(Index, fmCreate);
        FieldByName('TP_BLOB').SaveToStream(SaveFile);
        with CreateInArchive(CLSID_CFormatZip) do     \\ от 
        begin
           OpenFile(Index); 
           ExtractTo(Index + '1');
        end;                                                          \\ до 
        Next;
        SaveFile.Free;
      end;
    Close;
    end;
end;


[Error]Процесс не может получить доступ к фалу так как этот файл занят другим процесом
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978946
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.
23.
24.
25.
26.
27.
28.
procedure TForm1.Button3Click(Sender: TObject);
var SaveFile: TFileStream;
    Index: String;
begin
    IBSQL1.SQL.Clear;    //очистка
    IBSQL1.SQL.Add('select TP_ID, TP_BLOB, TP_TYPE, TP_NAME from T_TEMPLATES');     //выставления запроса также также есть уже такойже запрос IBQuery1, но по принцыпу слишком много фалов накружает пк
    IBSQL1.GoToFirstRecordOnExecute:=True; //   запрос первой записи после использую Next
    IBSQL1.ExecQuery; //несовсем понял для чего он
    IBDatabase1.Connected:=True; //подключение базе IBSQL1 связон с им
  with IBSQL1 do    // дальше для меня лес
    begin
  while not Eof do
      begin
        ForceDirectories(Edit2.Text);
        Index := Edit2.Text + FieldByName('TP_ID').AsString + '_' + FieldByName('TP_TYPE').AsString + '_' + FieldByName('TP_NAME').AsString + '.zip';
        SaveFile := TFileStream.Create(Index, fmCreate);
        FieldByName('TP_BLOB').SaveToStream(SaveFile);
        with CreateInArchive(CLSID_CFormatZip) do     \\ от 
        begin
           OpenFile(Index); 
           ExtractTo(Index + '1');
        end;                                                          \\ до 
        Next;
        SaveFile.Free;
      end;
    Close;
    end;
end;


[Error]Процесс не может получить доступ к фалу так как этот файл занят другим процесом


а все нужно после SaveFile.Free;
туплю по полной 5 часов
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978968
Solovej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ТЕМА ЗАКРЫТА
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39978970
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solovej,

Не мешай все в одну кучу. Проблемы ловишь на пустом месте же...

1) Выгрузи из БД, закрой соединение.
2) Пройдись по выгруженным файлам FindFirst()/FindNext() и распакуй.
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39979002
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solovej IBSQL1.ExecQuery; //несовсем понял для чего он
IBDatabase1.Connected:=True; //подключение базе IBSQL1 связон с им
сколько можно долбить в одну точку.
Сначала подключение к БД, а потом уже выполнение запросов. Вы что, не можете в отладчике пошагово всю эту конструкцию пройти?
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39979134
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solovej,

ну вот, а я только попкорна набрал :)

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

Оно же во многих компонентах автоматом подключает.
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39979200
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

OpenFile(Index);
а где CloseFile ???
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39979264
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Док,

OpenFile(Index);
а где CloseFile ???


До очередного "in use....". А так-то да.... кладезь.
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39979265
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док
Solovej,

ну вот, а я только попкорна набрал :)

зы. не понятно, как у ТС все работает, если он сначала делает ExecQuery, а только потом коннектится к базе?


До тех пор, пока в дизайнтайме не выключит Connected.
...
Рейтинг: 0 / 0
Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
    #39979561
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster
До тех пор, пока в дизайнтайме не выключит Connected.

Точно, типичное поведение IBX и его форков (помнится в ФИБах это поправили).

ТС уже и след простыл :)
...
Рейтинг: 0 / 0
43 сообщений из 43, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сохранения поток данных BLOB из БП -Firebird, через TStream и разархивировать их.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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