"Oleg LOA" <[EMAIL PROTECTED]> сообщил/сообщила в новостях
следующее: news:[EMAIL PROTECTED]
"Мадорский Г.В." <[EMAIL PROTECTED]> wrote in
message news:[EMAIL PROTECTED]
Давно уже голову ломаю, может кто подкинет идею.
Упаковка полученных файлов в zip и удаление *.cds.
except
Err := True;
end;
За память не переваливаешь где? Код-то покажи до except?
Показываю, тока тут идет обращение к самописным функциям, я их лет пять
пользую, глюков не замечал.
Функции опишу вкратце:
IbCreateMemCursor - создает TClientDataSet и копирует в него данные из
переданного в параметрах DataSet.
IbCreateRoDataSet - создает TIbQuery на основе переданного в параметре
текста SQL.
IbCreateSQL - создает TIbSQL на основе переданного в параметре текста SQL.
Qr := IbCreateRoDataSet(Dm.DbRepl,
'select a.tablename, a.idrec, a.opr, a.dt ' +
'from logtbl a ' +
'left join replord o on a.tablename = o.nmtable ' +
'where pacnum = 0 ' +
'order by o.ord, a.id ',
nil, Dm.TrRepl);
with IbCreateMemCursor(Qr) do
begin
SaveToFile(Dm.Path+'Replication\Out\AllRec.cds');
Close;
Free;
end;
Qr.Free;
PK := IbCreateSQL(Dm.DbRepl,
'select i.rdb$field_name ' +
'from rdb$relation_constraints r, rdb$index_segments i ' +
'where r.rdb$relation_name= :TableName and ' +
'r.rdb$constraint_type= :PK and r.rdb$index_name=i.rdb$index_name ' +
'order by i.rdb$field_position ', Dm.TrRepl, False);
PK.ParamByName('PK').AsString := 'PRIMARY KEY';
Tables := IbCreateSQL(Dm.DbRepl, 'select distinct tablename from logtbl
where pacnum = 0', Dm.TrRepl);
while not Tables.Eof do begin
PK.ParamByName('TableName').AsString := Tables.Fields[0].AsString;
PK.ExecQuery;
if PK.RecordCount > 0 then begin
St := Format('select l.opr, t.* from logtbl l inner join %s t on
t.%s = l.idrec where l.pacnum = 0',
[Tables.Fields[0].AsString, PK.Fields[0].AsString]);
end;
Qr := IbCreateRoDataSet(Dm.DbRepl, St, nil, Dm.TrRepl);
with IbCreateMemCursor(Qr) do begin
SaveToFile(Dm.Path+'Replication\Out\'+Tables.Fields[0].AsTrimString+'.cds');
Close;
Free;
end;
Qr.Free;
PK.Close;
Tables.Next;
end;
with IbCreateSQL(Dm.DbRepl, 'Select Max(pacnum)+1 From logtbl') do begin
PackNum := Fields[0].AsTrimString;
Result := Fields[0].AsInteger;
Close;
SQL.Clear;
SQL.Add('update logtbl set pacnum = '+ PackNum + ' where pacnum = 0');
ExecQuery;
Close;
Free;
end;
With TZip.create(Application) do begin
ShowProgressDialog := False;
DllPath := Dm.Path;
Filename := Dm.Path+'Replication\Out\'+ PackNum + '.zip';
AddPath := Dm.Path+'Replication\Out';
FileSpecList.Add('*.Cds');
Add;
Free;
end;
Выборки по объему данных небольшие, так как репликация каждые 5 минут
выполняется. Размер zip файла получается не больше 10 Кб. Так что врядли по
памяти вылетаю. Хотя...
With b/r. Gleb.