Delphi没有写最后几行。
一个程序为每一行调用public void StartWorking()
{
MessageBox.Show(taskName2 + " " + DateTime2 + " " + More2);
ListViewItem lvi = new ListViewItem(taskName2);
lvi.SubItems.Add(DateTime2);
lvi.SubItems.Add(More2);
listView1.Items.Add(lvi);
}
。
writeToText(a1, a2, ...)
示例输出:
UPDATE POSITIONS SET ODOMETER = 904068,1 WHERE LABEL =' 34 XXX 11' AND POSITIONNO =' 12110126' AND ODOMETER = 904092,2;
UPDATE POSITIONS SET ODOMETER = 904068,1 WHERE LABEL =' 01 AL 101' AND POSITIONNO =' 165556' AND ODOMETER = 904092,2;
UPDATE POSITIONS SET ODOMETER = 904148,7
答案 0 :(得分:2)
您的代码的某些部分可能会在F_Text
和TQuerySQL
来电之间的Create
课程之外访问Destroy
变量。
只要在单元的TQuerySQL
部分声明F_Text
,就可以同时运行类var
的多个实例。
如果没有理由这样做,您可以考虑将其private
:
type
TQuerySQL = class
private
F_Text: TextFile;
public
Constructor Create;
Destructor Destroy; override;
procedure writeToText( plate:String; positionNo:String; newOdometer:String; oldOdometer:String);
end;
同样适用于:
tconnect : TADOConnection;
tquery : TADOQuery;
为了避免在同一个单元中出现错误,您也可以考虑将strict
关键字添加到班级的private
部分。
除了上述内容之外,执行除析构函数中释放的对象以外的任务通常不是一种好习惯。
我的建议是考虑使用额外的公共方法来执行关闭操作,让析构函数完成它的工作。
public
procedure writeToTextClose;
。 。
procedure TQuerySQL.writeToTextClose;
begin
CloseFile(F_Text);
tquery.Close;
tconnect.Close;
ShowMessage('write to text finished');
end;
destructor TQuerySQL.Destroy;
begin
tquery.Free;
tconnect.Free;
inherited;
end;
任务可以像这样完成:
var
qSql: TQuerySQL;
. . .
qSql := TQuerySQL.Create;
try
try
//here multiple calls to writeToText take place
qSql.writeToText(a1, a2, ...);
finally
//ensure CloseFile(F_Text) at least
qSql.writeToTextClose;
end;
finally
//ensure objects freeing
qSql.Free;
end;
答案 1 :(得分:1)
在关闭文件之前尝试刷新缓冲区:
Flush(F_Text);