请各位大人先看一下我的源码:
procedure TBEditForm.SKButtonClick(Sender: TObject);
var
  name:string;
begin
   name:=SingerADOQuery.fieldbyname('歌星名称').asstring;
   If Application.MessageBox('此操作将导致数据丢失,是否继续','提示',MB_YESNO+MB_ICONINFORMATION)=6 then
    begin
      with SingerADOQuery do
        begin
          close;
          sql.Clear;
          sql.Add('delete from 歌手信息 where='+#39+name+#39);
          execsql;
        end;
    end;
end;
                     小弟是想实现你点击一下表,在点击一个button控件,实现数据的删除,可问题是在
                        sql.Add('delete from 歌手信息 where='+#39+name+#39)不好使,我是自己
                        声明了一个字符串变量name,然后用它记录我所点击的一行数据的一个列值,所以猜测,
                        name并未赋上值,可不知道是为什么?请各位大人解答,耽误您时间了。
                        另外,我知道可以用 ADOQuery.delete作删除操作,我就是对这个问题奇怪。
         

解决方案 »

  1.   

    我感觉你的语句有问题,
    sql.Add('delete from 歌手信息 where='+#39+name+#39); 
    where 中那个字段等于name?
    所以出问题,没赋值?
      

  2.   

    应该是:
    sql.Add('delete from 歌手信息 where 歌手名='+#39+name+#39); 
      

  3.   

    直接SingerADOQuery.Delete;不行吗?
      

  4.   

    啊,对我拷贝时写错了,源码是这样的
    procedure TBEditForm.SKButtonClick(Sender: TObject); 
    var 
      name:string; 
    begin 
       name:=SingerADOQuery.fieldbyname('歌星名称').asstring; 
       If Application.MessageBox('此操作将导致数据丢失,是否继续','提示',MB_YESNO+MB_ICONINFORMATION)=6 then 
        begin 
          with SingerADOQuery do 
            begin 
              close; 
              sql.Clear; 
              sql.Add('delete from 歌手信息 where 歌手名称='+#39+name+#39); 
              execsql; 
            end; 
        end; 
    end; 
                       但问题是依旧的。
      

  5.   

    sql.Add('delete from 歌手信息 where name='+#39+name+#39); 
      

  6.   

    yiyeqiufeng的方法列名无效
      

  7.   


    procedure TBEditForm.SKButtonClick(Sender: TObject);  
    var  
      name:string;  
    begin  
       name:=SingerADOQuery.fieldbyname('歌星名称').asstring;  
       If Application.MessageBox('此操作将导致数据丢失,是否继续','提示',MB_YESNO+MB_ICONINFORMATION)=6 then  
        begin  
          with SingerADOQuery do  
            begin  
              close;  
              sql.Clear;  
              sql.Add('delete from [歌手信息] where [歌手名称]='+#39+name+#39);  
              execsql;  
            end;  
        end;  
    end;  
      

  8.   


    procedure TBEditForm.SKButtonClick(Sender: TObject);  
    var  
      name:string;  
    begin  
       name:=SingerADOQuery.fieldbyname('歌星名称').asstring;  
       If Application.MessageBox('此操作将导致数据丢失,是否继续','提示',MB_YESNO+MB_ICONINFORMATION)=6 then  
        begin  
          with SingerADOQuery do  
            begin  
              close;  
              sql.text:='delete from [歌手信息] where [歌手名称]='+QuotedStr(name);  
              execsql;  
            end;  
        end;  
    end;  
      

  9.   

    'where name like '+#39+name+#39
    有些备注类型不能用'='来比较
      

  10.   

    name:=SingerADOQuery.fieldbyname('歌星名称').asstring; 
    这句最好放在adoquery的onclick事件或什么事件中,name用一个全局变量
      

  11.   

    感谢  GDTOPONE同志改了半天和zxf_feng同志的指点,但 GDTOPONE代码结果和我的一样,这个程序让人困惑
    的一点是,你执行了删除操作,运行后不报错,但数据就是删除不掉,就是sql.Add('delete from [歌手信息] where [歌手名称]='+#39+name+#39); 这就话似乎没起作用,而我把他改成查询的语句结果也是一样的
      
    zxf_feng同志说的我还没有用,adoquery好像没有onclick事件。不过大家都辛苦了,今晚要是没有答案就结贴。。
      

  12.   

    唉,你这样写的结果实际上执行的的SQL语句是[delete from 歌手信息 where 歌手名='name']啊,当然没有语法错误,只是你并没有一个歌手的名字叫“name”,所以语句虽然执行了但是什么效果也没有,name被当成一个字符串了,没有被当做一个变量。我没有测试啊,猜的,你自己可以试试,把name换成一个歌手的名字,看能不能删掉。
      

  13.   

    sql.Add('delete from [歌手信息] where [歌手名称]='+#39+name+#39);可以肯定的是,这句话语法上没有错误,至于为什么删不掉数据?如果连接数据库正确的话,数据库中存在 表[歌手信息],存在字段[歌手名称]
    那么99.99%的原因是数据表中没有符合这个条件的数据
    也许你的[歌手名称]字段,用了char类型 ,有很多空格...
      

  14.   

    换成查询语句试试,应该会有数据出来sql.Add('select * from [歌手信息] where [歌手名称] like '+#39'%'+name+'%'#39);
      

  15.   

    kaikai_kk 仁兄的想的确实很周全,我试了一下,还是不行,我说一下这个表的数据吧,
    歌手名称 verchar(20) not null 他是个这样形的。。另外,这个表里有整形数据,我用相同的语句查询整形数据就可以。
      

  16.   

    你在表[歌手信息]中字段[歌手名称]建立一条数据,比如:刘德华直接这样删除:
    sql.text:='delete from [歌手信息] where [歌手名称]=''刘德华'''; 如果这也删除不了,没撒了,相貌问题...
      

  17.   

      name:=SingerADOQuery.fieldbyname('歌星名称').asstring;  
       If Application.MessageBox('此操作将导致数据丢失,是否继续','提示',MB_YESNO+MB_ICONINFORMATION)=6 then  
        begin  
          with SingerADOQuery do  
            begin  
              close;  
              sql.Clear;  
              sql.Add('delete from 歌手信息 where 歌手名称='+#39+name+#39);  
    到底是 歌手名称  还是  歌星名称  ????
      

  18.   

    lqxjltz仁兄说的是笔误造成的,统一为歌手名称,这个错误编译是会报错,而我遇到的是编译时无任何情况,而当你执行这
    个事件时就错误了。更奇怪的是,我有个增加数据的窗体,里面你输入变量被付给edit控件的text属性,而用它写查询语句却好使.
    结帖了,有兴趣的仁兄可以讨论一下