好象没有释放内存,密码修改有时也不好使,我用的是access, 还有哪位能讲讲什么时候关闭什么时候打开为什么吗?
var
  Form3: TForm3;
  mypath:string;implementation{$R *.dfm}procedure TForm3.Button1Click(Sender: TObject);
begin  if((length(Edit1.Text)>0) or (length(Edit2.Text)>0)) then
  begin
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select * from t_user where (admin='''+Edit1.Text+''') and (passwd='''+Edit2.Text+''') ');
  ADOQuery1.Open;
  ADOQuery1.Active:=true;
  ADOQuery1.ExecSQL;
    if(ADOQuery1.RecordCount>0) and (Edit3.Text = Edit4.Text) then
      begin
        ADOQuery1.Close;
        ADOQuery1.SQL.Clear;
        adoquery1.SQL.Add('update t_user set passwd ='''+Edit3.Text+''''  );
        ADOQuery1.ExecSQL;
        ShowMessage('修改成功');
        Close();
        Exit;
      end
    else
    begin
    MessageBox(getactivewindow,'您的用户名和密码不正确','Warning',MB_OK);
    end
  end
  else
  begin
    MessageBox(getactivewindow,'用户名和密码不能为空','Warning',MB_OK);
  end;
end;procedure TForm3.Button2Click(Sender: TObject);
begin
  Close();
end;

解决方案 »

  1.   

    ADOQuery1.Active:=true;
    ADOQuery1.ExecSQL;             //这个去掉
      

  2.   

    ADOQuery1.Open;其实就是ADOQuery1.Active:=true;ADOQuery1.ExecSQL;不是用来查询结果的,不要瞎用!
      

  3.   

    返回结果用open ,用execsql也不会出错
    但是update,insert ,delete 必须用execsql,因为不返回结果集
      

  4.   

    ……和楼上的一样!几条主要的SQL语句,执行的时候要分情况
      

  5.   

    推荐你把执行UPDATE的ADOQUERY用另外一个 那样效果会好一点
      

  6.   

    查询只需要打开就可以,修改和插入之类才用execsql,ADOQUERY用之前都close!