我想问一下会不会是下面两句的问题
 user_type:=dm2.query3.fieldbyname('用户类型').asstring;
 name:=dm2.query3.fieldbyname('用户名').asstring;
会不会把所有的“用户类型”和“用户名”都符给了user_type和name变量
在存储过程中三个变量的类型为char长度为10,我在查询分析器中试了,执行
正常

解决方案 »

  1.   

    user_type:=dm2.query3.fieldbyname('用户类型').asstring;
    name:=dm2.query3.fieldbyname('用户名').asstring;
    这两句不会有问题的,就算查询结果集返回多条记录,但上面的语句只会得到最后一条记录的数据(或者是第一条,记不清了),我怀疑是存储过程的问题,在查询分析器里,你输入的数据是否与程序中的数据相同?如果相同,你试试修改这里:
    Params[1].asstring:=Trim(name);
    Params[2].asstring:=Trim(user_type);
    因为该字段你定义为char类型,如果长度不足,系统会自动添加空格,这有可能也会导致错误,试试看吧
      

  2.   

    我试了你的方法,还是老样子
    我用分步运行得知,运行到execproc时系统出错,提示为
    project project1.exe raised exception class EDBEngine Error with message 'General SQL error'
    [microsoft][odbc sqldriver][sqlserver]将截断字符或二进制数据
    [microsoft][odbc sqldriver][sqlserver]语句已终止
      

  3.   

    存储过程的代码如下create proc 日志
    @username char(100),@usertype char(100),@use_type char(100)
    as insert 工作日志(用户名,用户类型,操作类型,操作时间)
         values(@username,@usertype,@use_type,getdate())
      

  4.   

    单步,看看你的NAME,TYPE等是否有问题,中间有空格什么的。
    可以先给一个固定的值调试,如果通过那么。。
      

  5.   

    with dm2.StoredProc1 do
      begin
       Params[1].asstring:=name;
       Params[2].asstring:=user_type;
       Params[3].asstring:='111';
       prepare;
       execproc;
       end;
    把这段代码改为:
    with dm2.StoredProc1 do
      begin
       Close;
       Params.Clear;
       {@Param1,@Param2,@Param3分别为你存储过程定义的参数变量名称}
       Params.CreateParam(ftString,'@Param1',ptInput);
       Params.CreateParam(ftString,'@Param2',ptInput);
       Params.CreateParam(ftString,'@Param3',ptInput);
       ParamByName('@Param1')asstring:=name;
       ParamByName('@Param2')asstring:=user_type;
       ParamByName('@Param3')asstring:='111';
       prepare;
       execproc;
       end;
    试试看
    根据你的错误提示,应该属于存储过程的问题,肯定有某个字段超出了你定义的长度,好好检查检查看看
      

  6.   

    存储过程有问题,把存储过程改为这样
    create proc 日志
    @username varchar(100),@usertype varchar(100),@use_type varchar(100)
    as insert 工作日志(用户名,用户类型,操作类型,操作时间)
         values(@username,@usertype,@use_type,getdate())你在程序中调存储过程的时候,因为你定义参数为char类型,系统自动补足长度达100,所以插入数据时,数据被截断,提示出错