如何将操作记录逐行写到程序目录下的TXT文件中,下次写入进接着上次的行数进行写入
解决方案 »
- 将格式化的文本读到一张表中
- 三层结构程序,在客户端运行出错,提示没有注册类。请问如何在客户端注册类?
- delphi5的注册码是什么?
- 为什么在keypressdown事件中,如果录入的是“-4”或带“-”的其它字符串,实际收到的却是“?”?
- webBrowser控件新打开窗口的问题
- 请各位大侠帮忙了,关于ClientDataSet,DataSetProvider创建的几个问题(在线!)
- 其实已经宽容了我...
- 为何把文本导入access数据库时很慢?在线等待!!!!!!
- 希望老大们能帮我把这个外挂里的热键更改下
- 如何在程序中给ADOTABLE动态添加字段
- delphi 字符串加密问题,大牛们帮帮忙!!!!
- IdHTTP.Post 模拟提交服务器 提示500错误
如果很多。建议还是每次创建一个TXT,按当时的精确时间来命名。。代码参考以下:
procedure TMain_F.BtnGetFptStrClick(Sender: TObject);
var
I : Integer;
J : Integer;
LEN : Integer; JH : String; BH: WideString;
XM: WideString;
BM: String;
PSD: WideString;
UPower: WideString;
UEnabled: WideString; FptStr : WideString; UPower1 : Integer;
UEnabled1: WordBool;
F: TFileStream;
S: string;
UserInfoFileName : string;
begin
mmo1.Lines.Add(GetDateTimeToStr_A() + '正在获取考勤机的指纹模板,请稍候... ...');
mmo1.Lines.Add(GetDateTimeToStr_A() + '如果下载速度太慢,请调整 '' 高级设置 '' 页相关参数。');
ConnectionToDev;
IF C then
begin
JH := RightStr('0' + IntToStr(qryDevicInfoDeviceID.Value),2);
//保存到 txt 文件中
if not DirectoryExists(ExtractFilePath(paramStr(0)) + 'UserInfo') then
begin
CreateDir(ExtractFilePath(paramStr(0)) + 'UserInfo');
end;
UserInfoFileName := ExtractFilePath(paramStr(0)) + 'UserInfo\' + JH + '_' + GetDateTimeToStr() + '.txt';
F:=TFileStream.Create(UserInfoFileName, fmOpenWrite or fmCreate); LEN := 2048;
if CZKEM1.ReadAllUserID(Dev_ID) then
begin
I := 1;
JH := IntToStr(qryDevicInfoDeviceID.Value);
while CZKEM1.SSR_GetAllUserInfo(Dev_ID, BH, XM, PSD,UPower1, UEnabled1) do
begin
//补充YSKQ需要的信息
qryEmp.Close;
qryEmp.SQL.Text := 'select rtrim(isnull(xm,'''')),rtrim(isnull(bm,'''')) from employee where bh=' + BH;
try
qryEmp.Open;
if qryEmp.RecordCount = 1 then
begin
XM := qryEmp.Fields[0].Value;
BM := qryEmp.Fields[1].Value;
end else
begin
XM := '';
BM := '';
end;
except
end; if UPower1 = 0 then
begin
UPower := '普通';
end else
begin
UPower := '管理';
end; if UEnabled1 then
begin
UEnabled := '有效';
end else
begin
UEnabled := '失效';
end; //填入到GridUserInfo
GridUserInfo.RowCount := I + 1;
GridUserInfo.Cells[0,I] := IntToStr(I);
GridUserInfo.Cells[1,I] := BH;
GridUserInfo.Cells[2,I] := WideCharToString(PWideChar(XM));
GridUserInfo.Cells[3,I] := BM;
GridUserInfo.Cells[4,I] := PSD;
GridUserInfo.Cells[5,I] := UPower;
GridUserInfo.Cells[6,I] := UEnabled; GridUserInfo.Row := I; //获取指纹模板
for J :=0 to StrToInt(se2.Text)-1 do
begin
CZKEM1.SSR_GetUserTmpStr(Dev_ID,BH,J,FptStr,LEN);
GridUserInfo.Cells[7+J,I] := FptStr;
end;
//写入文本文件
S :=
JH + #9 +
BH + #9 +
GridUserInfo.Cells[2,I] + #9 +
GridUserInfo.Cells[3,I] + #9 +
GridUserInfo.Cells[4,I] + #9 +
GridUserInfo.Cells[5,I] + #9 +
GridUserInfo.Cells[6,I] + #9 +
GridUserInfo.Cells[7,I] + #9 +
GridUserInfo.Cells[8,I] + #9 +
GridUserInfo.Cells[9,I] + #9 +
GridUserInfo.Cells[10,I] + #9 +
GridUserInfo.Cells[11,I] + #9 +
GridUserInfo.Cells[12,I] + #9 +
GridUserInfo.Cells[13,I] + #9 +
GridUserInfo.Cells[14,I] + #9 +
GridUserInfo.Cells[15,I] + #9 +
GridUserInfo.Cells[16,I] + #13#10;
F.Write(S[1],Length(S)); //删除数据库表中该机号的该用户信息。
cmdInsertUserInfo.CommandText := 'delete from FingerPrintUserInfo where DEV_ID=' + JH + ' AND BH=' + BH;
cmdInsertUserInfo.Execute;
//保存到数据库
cmdInsertUserInfo.CommandText := 'INSERT INTO FingerPrintUserInfo values(' +
JH + ',' +
BH + ',' +
'''' + GridUserInfo.Cells[2,I] + ''',' +
'''' + GridUserInfo.Cells[3,I] + ''',' +
'''' + GridUserInfo.Cells[4,I] + ''',' +
'''' + GridUserInfo.Cells[5,I] + ''',' +
'''' + GridUserInfo.Cells[6,I] + ''',' +
'''' + GridUserInfo.Cells[7,I] + ''',' +
'''' + GridUserInfo.Cells[8,I] + ''',' +
'''' + GridUserInfo.Cells[9,I] + ''',' +
'''' + GridUserInfo.Cells[10,I] + ''',' +
'''' + GridUserInfo.Cells[11,I] + ''',' +
'''' + GridUserInfo.Cells[12,I] + ''',' +
'''' + GridUserInfo.Cells[13,I] + ''',' +
'''' + GridUserInfo.Cells[14,I] + ''',' +
'''' + GridUserInfo.Cells[15,I] + ''',' +
'''' + GridUserInfo.Cells[16,I] + ''')';
cmdInsertUserInfo.Execute;
Application.ProcessMessages;
I := I + 1;
XM := '';
BM := '';
end;
end else
begin
I := 1;
end; IF I > 1 then
begin
mmo1.Lines.Add(GetDateTimeToStr_A() + '获取考勤机的用户信息及指纹模板成功!');
end else
begin
mmo1.Lines.Add(GetDateTimeToStr_A() + '考勤机上没有任何用户信息!');
end; //断开连接
DeConnectionToDev;
F.Free;
end else
begin
mmo1.Lines.Add(GetDateTimeToStr_A() + '连接考勤机失败!');
end;
end;
list:TStringList;
begin
list := TStringList.Create;
list.LoadFromFile();//从文件中读取
... //操作
list.SaveToFile(); //保存到文件
list.Free;
end;
list.add();
//日志内容为:接收数据时间+接收数据+返回数据+处理结果或者错误原因
procedure TfrmMain.SaveLogToFile(sRec:string;sSend:string);
var
sList:TStringList;
sDate:String;
sFilePath:String;
sFileName:String;
begin
try
sList:=TStringList.Create; //格式化文件名
sDate:=FormatDateTime('yyyymmdd',Date());
sFilePath:=ExtractFilePath(Application.ExeName)+'Log\';
sFileName:=sFilePath+sDate+'.Log'; //日志文件不存在,先保存(即建立)文件
if not FileExists(sFileName) then
begin
//加入时间标志
sList.Add(DateToStr(Date())+'日志文件');
sList.Append('-------------------------------------------------------------------------------------------');
sList.Append(TimeToStr(Now())+':');
sList.Append('Rec :'+sRec);
sList.Append('Send :'+sSend); //判断解包是否成功,保存不同的处理结果
if bUnPackFlag then
sList.Append('Result:'+sDBResult)
else
sList.Append('Result:'+sError);
sList.Append('-------------------------------------------------------------------------------------------');
sList.SaveToFile(sFileName);
end
else
begin
//日志文件存在,直接打开,添加数据
sList.LoadFromFile(sFileName);
sList.Append(TimeToStr(Now())+':');
sList.Append('Rec :'+sRec);
sList.Append('Send :'+sSend); //解包是否成功
if bUnPackFlag then
//记录数据库返回信息
sList.Append('Result:'+sDBResult)
else
//记录错误信息
sList.Append('Result:'+sError); sList.Append('-------------------------------------------------------------------------------------------');
sList.SaveToFile(sFileName);
end;
finally
FreeAndNil(sList);
end;
end;
//---------------------------------------------------------------------------
procedure TMainForm.CalcEat(var Msg: TMessage);//統計訂餐員工明細
var
F:TextFile;
strFile:String;
i:Integer;
ArrCount:Array[1..4] of Integer;
begin
for i:=1 to 4 do
ArrCount[i]:=0;
with AQuery do
begin
Close;
SQL.Clear;
SQL.Add(' Select b.EmployeNo,b.EmployeName,b.department,');
SQL.Add(' a.BookingDate,a.InsertDateTime,a.Dining');
SQL.Add(' From Booking a Left outer join ygjbzl b On a.EmployeNo=b.EmployeNo');
SQL.Add(' Where a.BookingDate='''+NextDate+'''');
SQL.Add(' Order by a.InsertDateTime');
Open;
end;
strFile :=ExeFileDir+'\訂餐員工記錄統計\訂餐員工記錄'+curDate+'.txt';
try
AssignFile(F, strFile);
Rewrite(F);
Append(F);
Writeln(F, curDate+'('+sWeek+')訂餐員工明細記錄如下:');
Writeln(F, '員工編號 員工姓名 部門 訂餐日 刷卡時間 餐別');
Writeln(F, '======== ======== ======== ======== ================ ======');
with AQuery do
begin
First;
While Not Eof do
begin
Writeln(F, Format('%-12s',[Trim(FieldByName('EmployeNo').AsString)])+
Format('%-12s',[Trim(FieldByName('EmployeName').AsString)])+
Format('%-13s',[Trim(FieldByName('department').AsString)])+
Format('%-12s',[Trim(FieldByName('BookingDate').AsString)])+
Format('%-22s',[Trim(FieldByName('InsertDateTime').AsString)])+
Format('%-8s',[Trim(ConvertToValue(FieldByName('Dining').AsInteger))]));
Inc(ArrCount[FieldByName('Dining').AsInteger]);
Next;
end;
end;
Writeln(F, '-----------------------------------------------------------------------------');
if ArrCount[1]<>0 then
Writeln(F, '特別早餐共:'+IntToStr(ArrCount[1])+'人');
if ArrCount[2]<>0 then
Write(F, '早餐共:'+IntToStr(ArrCount[2])+'人 ');
if ArrCount[3]<>0 then
Write(F, '中餐共:'+IntToStr(ArrCount[3])+'人 ');
if ArrCount[4]<>0 then
Write(F, '晚餐共:'+IntToStr(ArrCount[4])+'人');
Flush(F);
CloseFile(F);
except
ShowMessage(Exception(ExceptObject).Message);
end;
var
f:textfile;
strfile:string;
begin
strfile := ExtractFilePath(ParamStr(0)+'aa.txt';
AssignFile(f,strfile);
Rewrite(f);
Writeln(f,'操作记录内容字符串');
CloseFile(f);
end;
:)
完全你满足你的要求,关键是性能还很好,可以快速写入
http://blog.csdn.net/lwm08106542000/article/details/6585425
function StrRWTxt(fName:string;var strlst:TstringList;RW:string='R'):integer;
begin
if LowerCase(RW)='w' then //存
begin
try
strlst.SaveToFile(fName);
result:= strlst.count;
except
result:=-1;
end;
end
else //读
begin
strlst.Clear;
try
if fileexists(fName)=false then result:=-1
else
begin
strlst.LoadFromFile(fName);
result:= strlst.count;
end;
except
result:=-1;
end;
end;
end;