写的时候不要写就好了. 如果是已有代码, 慢慢重构吧. 自动处理不太好写, 简单的字符串处理的话, 如下: with qry1 do begin if active then active := false; Sql.Text := "selet ... from ..where...order by ..."; Open;
Result := not Eof; Close; end;你需要把active, Sql.Text, Open, Eof, Close等全部加上qry1.这也许可以通过提供一个关键字列表, 如:active, Sql.TExt, Open, Eof, Close..., 如果出现这些关键字前面没有实例的, 就把with后的实例加进去. 但是, 如果with 套with, 或是with qry1, button1 do ...这样的, 就不太好处理了.
有一套现有的代码.嵌套的with太复杂了,可读性好差.
with语句如果能扩展为: with obj1 as a,obj2.rec3 as b do begin a.xxx:=...; a.yyy:=...; b.zzz:=...; end;就好了:即同时支持多个结构、对象,但是必须有别名区分,而且在使用时也必须有别名
自动处理不太好写,
简单的字符串处理的话, 如下:
with qry1 do
begin
if active then active := false;
Sql.Text := "selet ... from ..where...order by ...";
Open;
Result := not Eof; Close;
end;你需要把active, Sql.Text, Open, Eof, Close等全部加上qry1.这也许可以通过提供一个关键字列表, 如:active, Sql.TExt, Open, Eof, Close..., 如果出现这些关键字前面没有实例的, 就把with后的实例加进去.
但是, 如果with 套with, 或是with qry1, button1 do ...这样的, 就不太好处理了.
with obj1 as a,obj2.rec3 as b do
begin
a.xxx:=...;
a.yyy:=...;
b.zzz:=...;
end;就好了:即同时支持多个结构、对象,但是必须有别名区分,而且在使用时也必须有别名