uses Classes, Graphics, Controls, Forms, Dialogs, cfutils, Windows, StdCtrls, ComCtrls, ExtCtrls,DB,IBDatabase,IBquery,unMain, sysutils, cfFileUtils, DateUtils, DB, ADODB; var beg_date, tmp: string; sl,fn: TStringList; fs: TSearchRec; // strDiffDay: string; ADO: TADODataSet; // Query: TADOQuery; // q_db, q_db2, q_trig: TIBQuery; // db_clean: TIBDatabase; // trn, trn2: TIBTransaction; // ar_trig: TStringList; i,rec_count: integer; procedure Log(Text:string); var F : TextFile; FileName : String; dt:string; begin FileName := ExtractFilePath(Application.ExeName) + 'UpdateDBDateTime.log'; AssignFile(F, FileName); if FileExists(FileName) then Append(F) else Rewrite(F); dt:=DateToStr(Date); dt:=dt+' '+TimeToStr(Time); WriteLn(F, dt+': '+text); CloseFile(F); end; function date_prep(field_date, doc_date:string):string; begin Result:= DateToStr(IncDay(strtodate(copy(field_date,1,10)),DaysBetween(date,strtodate(copy(doc_date,1,10))))); end; begin beg_date:='0:00:00'; //Определяем строку подключения к БД sl:=TStringList.Create; fn:=TStringList.Create; GetParamList(sl); //sl.add('5'); //sl.add('D:\projects\distribs\manager\enakls\tech\enakl_ok'); log('---------------------------------------------------------------------------'); log('------ Начало обновления всех дат в эл. накладных папки '+sl[1]+' ------'); GetFileList(sl[1]+'\*.dbf', fn); ADO:= TADODataSet.Create(nil); for i := 0 to fn.Count-1 do begin try //Переименовываем файл перед подключением RenameFile(sl[1]+'\'+fn[i], sl[1]+'\table_tmp.dbf'); ADO.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+sl[1]+';Extended Properties=dBASE IV;User ID=Admin;Password=;'; ADO.CommandText:='SELECT * FROM table_tmp'; ADO.Active:= True; rec_count:=0; while not ADO.Eof do begin rec_count:=rec_count+1; ado.Edit; if StrLen(ADO.FindField('SDSERT').Value) >= 10 Then if copy(ADO.FindField('SDSERT').Value,1,10) <> beg_date Then ADO.FindField('SDSERT').Value:= date_prep(ADO.FindField('SDSERT').Value, ADO.FindField('DOCDATE').Value); if StrLen(ADO.FindField('DATESERT').Value) >= 10 Then if copy(ADO.FindField('DATESERT').Value,1,10) <> beg_date Then ADO.FindField('DATESERT').Value:= date_prep(ADO.FindField('DATESERT').Value, ADO.FindField('DOCDATE').Value); if StrLen(ADO.FindField('GODENDO').Value) >= 10 Then if copy(ADO.FindField('GODENDO').Value,1,10) <> beg_date Then ADO.FindField('GODENDO').Value:= date_prep(ADO.FindField('GODENDO').Value, ADO.FindField('DOCDATE').Value); ADO.FindField('DOCDATE').Value:= DateToStr(date); ado.Post; ADO.Next; end; log(' В файле '+ sl[1]+'\'+fn[i] + ' успешно обновлено ' + IntToSTr(rec_count) + ' запись(и/ей)'); ado.Active:=False; //Переименовываем файл обратно + заменяем дату в названии //showmessage(copy(fn[i], strlen(fn[i])-14, 11 )); if IsDate(copy(fn[i], strlen(fn[i])-14, 11 )) Then RenameFile(sl[1]+'\table_tmp.dbf', sl[1]+'\'+copy(fn[i], 1,strlen(fn[i])-14) + dateTostr(date) + '.dbf'); else RenameFile(sl[1]+'\table_tmp.dbf', sl[1]+'\'+fn[i]); except //Переименовываем файл обратно и в случае ошибки RenameFile(sl[1]+'\table_tmp.dbf', sl[1]+'\'+fn[i]); log('ОШИБКА! Даты не обновлены в '+ sl[1]+'\'+fn[i]); end; end; log('------ Окончание обновления всех дат в эл. накладных папки '+sl[1]+' ------'); log('---------------------------------------------------------------------------'); end;