一个关于ado的问题:
我用adoquery进行数据库(sql2000)查询,我要查询一a表里一个id为111的学生的name,我把查询出的这个name赋值给edit1.text 这样写总是提示空值不能转换为字符串
sql为: select  name=:k form a where id=111
inttostr
(parameters.parambyname('k').value:)=edit1.text
execsql;
请问这2句是哪儿有问题,如果用存储过程的话 参数k因为可以这样写就正常
select @k=name from a where id=111
但是sql语句里这样写
select :k=name from a where id=111
就会把k=name都当成是参数!
请大家提示下! 谢谢

解决方案 »

  1.   

    一个关于ado的问题:
    我用adoquery进行数据库(sql2000)查询,我要查询一a表里一个id为111的学生的name,我把查询出的这个name赋值给edit1.text 这样写总是提示空值不能转换为字符串
    sql为: select  name=:k form a where id=111
    inttostr
    (parameters.parambyname('k').value:)=edit1.text
    execsql;
    请问这2句是哪儿有问题,如果用存储过程的话 参数k因为可以这样写就正常
    select @k=name from a where id=111
    但是sql语句里这样写
    select :k=name from a where id=111
    就会把k=name都当成是参数!
    请大家提示下! 谢谢
      

  2.   


    SQL := 'select name from a where id=111';
    execsql;edit1.Text := fieldbyname('name').asString;
      

  3.   

    请问fieldbyname('name')里面那个name是定义的变量还是sql里面的列属性值?
      

  4.   

    我这样做的时候老师提示field name not found!
      

  5.   

    name 是数据库列的名字,感觉你没有学好SQL哦,SQL里的 name当然是列名
      

  6.   

    依然提示name找不到!!  这里的name需要先进行声明或是参数的定义一类吗?或是需要声明调用了某个单元?
      

  7.   

    name 不是定义的,是数据库中表的列名,数据库表创建时定义的,跟你说我快要晕了,这种弱智问题。
      

  8.   

    我还是把代码发出来吧!
    我要做的是一个对数据库里的积分加减工具,表名为:hl_jifen  列user_id,和user_jifen
    sql我是直接打在adoquery1的sql代码行里  结果是能进行操作,但是我想把最后的值给edit3,这点老提示失败!
    update hl_jifen  
    set user_jifen=user_jifen+:jifen
    where user_id=:idd
    select user_jifen from hl_jifen where user_id=:idprocedure TForm1.Edit2Enter(Sender: TObject);//先查询
    begin
     with adoquery1 do begin
    close;
    parameters.parambyname('id').value:=edit1.Text  ;
    parameters.parambyname('jifen').value:='0'  ;
    parameters.parambyname('idd').value:=edit1.Text  ;
    edit3.Text := fieldbyname('user_jifen').asString;open;
    end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);//再相加begin
    with adoquery1 do begin
    close;
    parameters.parambyname('id').value:=edit1.Text  ;
    parameters.parambyname('jifen').value:=edit2.Text  ;
    parameters.parambyname('idd').value:=edit1.Text  ;
      

  9.   

    编译能通过,就是在输入数据操作的时候总是提示field user_jifen not found!
      

  10.   

    基本的数据库方法使用的顺序都不知道,却在使用parameters,佩服你,不知道你是不是看书都是从后往前看得,先难后易的看书方法,厉害,难道传说的古人出现了。
      

  11.   

    就是因为输不出来值,所以才输出查询后的那一行,嘿嘿 新手嘛 我没有抄代码,完全自己写的
    我有一个表hl_jifen  里面的列为user_id 和user_jifen
    我要实现的就是输入user_id  后查询user_jifen为多少,同时可以进行加减!!
    嘿嘿 别气 新手是这样,所以说当老师的人都要脾气好
      

  12.   

    TForm1 = class(TForm)
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        ADOQuery1: TADOQuery;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      adoquery1.Close;
      adoquery1.Parameters.ParamByName('idd').Value := StrToInt(edit1.Text);
      adoquery1.Open;
      edit3.Text := IntToStr(adoquery1.FieldByName('user_jifen').AsInteger);
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      nn: integer;
    begin
      nn := StrToInt(edit2.Text) + StrToInt(edit3.Text);
      adoquery1.Edit;
      adoquery1.FieldByName('user_jifen').AsInteger := nn;
      adoquery1.Post;
      button1click(button1);
    end;其中 ADOQuery1的SQL属性 select * from hl_jifen where user_id=:idd
    Parameters属性为idd,其他的组件基本没有什么属性修改。
    表 hl_jifen 列 user_id,user_jifen 都是数值类型
    button1用于查询,button2用于计算新的 user_jifen参照你的组件写法写的,其实你使用的组件还是有问题,这样的界面设计有问题,应该使用数据感应组件,并且最好有Grid或者navigator用于数据库查询浏览。建议自己去看看书,学点事例,不要闭门造车。