AdoQuery 问题,两种写法哪种好呢?(100)

  • 主题发起人 主题发起人 dfoversky
  • 开始时间 开始时间
D

dfoversky

Unregistered / Unconfirmed
GUEST, unregistred user!
第一种:AdoQuery1.Close;AdoQuery1.SQL.Clear;AdoQuery1.SQL.Add('----');AdoQuery1.Open;第二种:AdoQuery1.SQL.Text:='----';AdoQuery1.Open;第一种先close,第二种不close,不知道性能上或资源占用上能差多少。
 
性能和资源占用上是一样的,第二种方式,是adoquery内部调用了close,如下:constructor TADOQuery.Create(AOwner: TComponent);begin inherited Create(AOwner); FSQL := TStringList.Create; TStringList(FSQL).OnChange := QueryChanged; 设置SQL属性的OnChange事件。 Command.CommandTextAlias := 'SQL'; { Do not localize }end;procedure TADOQuery.QueryChanged(Sender: TObject);begin if not (csLoading in ComponentState) then Close; CommandText := FSQL.Text;end;--------------------------------------------但第二种在多次调用的时候,有时会发生一些莫名其妙的异常,这里的多次指的是通过循环执行几千次或者几万次以上。
 
同意 znxia确实觉得有异常,没有仔细调试。
 
一般处理都用第一种,比较符合规范,也不会出错。function TDm.opensql(aQ_show: TADOQuery; sqlStr: string): boolean;begin try aq_show.Close; aq_Show.SQL.Clear; aq_show.SQL.Add(sqlstr); aq_show.Open; result:=true; except showmes('数据库连接出错,操作失败!'); result:=false; end;end;其实这样的写法是错误的应该用raise
 
看来还是用第一种吧。[:D]
 
后退
顶部