procedure TForm1.Button2Click(Sender: TObject);
begin
  with self.ADOQuery1  do
      begin
        close;
        sql.Clear ;
        sql.Add('select user_name twtable  where user_name='''+edit1.Text+'''');
        if Self.ADOQuery1.RecordCount<>0   Then
           ShowMessage('帐号已存在')
        else   {注:这段往后本来没错误的,加入前面这段,就出现了错误}
          begin
            sql.Add('insert into twtable (user_name,user_pwd) values('''+Edit1.Text+''','''+Edit2.Text+ ''')');
            try
              execsql;
              showmessage('数据添加成功');
              Edit1.Text :='';
              Edit2.Text :='';
            except
              showmessage('数据库打开失败');
              exit;
            end;
          end;
      end;
end;   本人新手,前面那段是想做个插入验证的,结果出现错误,希望大家帮我看看错在哪里?

解决方案 »

  1.   

    sql.Add('select   user_name   twtable     where   user_name='''+edit1.Text+''''); 
    这句,SQL查询语句语法有问题,twtable前要加from,应该改为:
    sql.Add('select   user_name from  twtable     where   user_name='''+edit1.Text+''''); 
      

  2.   

    没有OPEN怎么取记录集,当然报错了
      

  3.   

    1楼 sql的那个语句 貌似我的语法也正确
    2楼 我把CLOSE去掉 加上句OPEN 也不行啊
      

  4.   

    问题应该是出在数据集没打(  Self.ADOQuery1.RecordCount <> 0   ),但是怎样实现啊
    2楼的具体点行么?
      

  5.   

    close不要去,Open要加在 if   Self.ADOQuery1.RecordCount <> 0       Then 行前面
      

  6.   

    另外:
        sql.Add('insert   into   twtable   (user_name,user_pwd)   values('''+Edit1.Text+''','''+Edit2.Text+   ''')'); 
    行前要加:    
         close; 
         sql.Clear   
      

  7.   

    procedure   TForm1.Button2Click(Sender:   TObject); 
    begin 
        with   self.ADOQuery1     do 
                begin 
                    close; 
                    sql.Clear   ; 
                    sql.Add('select   user_name   twtable     where   user_name='''+edit1.Text+''''); 
                    if    Eof       Then 
                          begin
                          ShowMessage('帐号已存在');
                             exit;
                             end 
                    else       {注:这段往后本来没错误的,加入前面这段,就出现了错误} 
                        begin 
                            sql.Add('insert   into   twtable   (user_name,user_pwd)   values('''+Edit1.Text+''','''+Edit2.Text+   ''')'); 
                            try 
                                execsql; 
                                showmessage('数据添加成功'); 
                                Edit1.Text   :=''; 
                                Edit2.Text   :=''; 
                            except 
                                showmessage('数据库打开失败'); 
                                exit; 
                            end; 
                        end; 
                   open;
                end; 
    end; 
      

  8.   

    ok
    问题解决
    另外1楼说的SQL语法确实有错误
    7楼
     if         Eof               Then   
    为什么要判断最后一条记录??? 帮忙解释下 
    怎么每个人都给分 我刚来不大明白
    最好把怎样加分过程都写下来
    o(∩_∩)o...
      

  9.   

    adoquery.recordcount的效率不如
    adoquery.eof的高,如果没有记录,则eof属性为false
      

  10.   

    恩 我的理解是在查找的时候会从第一条记录查找,如果到最后一条还没有,就会停留在最后一条并返回false
    不知道对不对啊 呵呵
      

  11.   

    我一般是Open后直接First,然后再判断是否Eof。给分?你在本页顶部第三行,点“管理贴子”按钮就进去了。然后你拉下来,看到某人的贴子想给分的话,就在右面相应的输入框中输入想给的分值,当所有分值都分配完后,在页面上方楼主发言的附近有给分的按钮。需要输入你的密码然后再确认给分。
      

  12.   

    把SQL语句切出来,在数据库中执行一下,看查询结果是什么
      

  13.   

    应该是 if not eof then
           begin
             //记录存在
           end else
           begin
         //记录不存在
           end;
      

  14.   

    14楼的正确
    能解释下为什么not   eof ?好使好了先散分了