Delphi没疯,是你疯了。
改一下:
parambyname('@username').value:=edit1.text;
parambyname('@passwd').value:=edit2.text;
Open;
if recordcount=1 then
showmessage('ok');

解决方案 »

  1.   

    还是delphi疯了
    人家不饱错了
    改为一点也不理会
    你按按钮毫无反应
      

  2.   

    该怎么说你呢?
    recordcount属性只有在Active为True的时候才有作用,所以第一次出
    cannot perform this operation on a close dataset
    而execproc只能在Active为False的时候才能执行,所以第二次出
    cannot perform this operation on an open dataset你的存储过程应该调用Open方法,而不是ExecProc方法。
      

  3.   

    偶该怎么改?
    能否置active为true?
    recordcount算不算返回了结果?
      

  4.   

    Open和active为true等价。
    我不是给你了修改方法吗?
      

  5.   

    你还别不符
    active设置于true,还是照样
      

  6.   

    有反映了,不过:
    with storedproc1 do
    begin
    parambyname('@username').value:=edit1.text;
    parambyname('@passwd').value:=edit2.text;
    open;
    if recordcount=1 then
    button1.caption:='ok'
    else
    showmessage('no');偶输入的明明就是正确的密码
    非要保错
    showmessage('no')
      

  7.   

    to:chris2019(牛虻——春风不问路):
       似乎你的声誉不是很好。你的问题也不怎么难。
       我就是那个再三劝诫你不要用TADOStoreProc的人。用TADODataSet可以灵活
    处理你的问题,而且不会那么麻烦。  with ADODataSet1 do
      begin
        if Active then Close;
        CommandText:='Exec login :UserName,:PassWd';
        Parameters.ParamByName('UserName'):=Edit1.text;
        Parameters.ParamByName('PassWd'):=Edit2.text;
        Open;
        if RecordCount>0 then 
        begin
         ...
        end;
      end;
      
      

  8.   

    ado?bde,odbc偶还没玩转呢
    问题是太简单了
    反而让人找不出毛病
    偶的声誉没问题
    起码在delphi
      

  9.   

    CREATE PROCEDURE login
    @username  varchar(20),
    @passwd  varchar(20)
    as 
    select *
    from  pass
    where  username = @username and  passwd  = @passwd
    GO
      

  10.   

    char 与 varchar??
    偶试试
      

  11.   

    to:chris2019(牛虻——春风不问路) 
       不是,我没有和你打交道啦。我看见源代码交换的贴子上的留言,所以
    有疑问。:-)
       另外,你有没有试着用TAdoDataSet解决呢?我觉得TAdoStorePorc
    不够灵活,没有用过。我现在试试它,稍后给你一些建议,也许能帮上你
    的忙。
       
      

  12.   

    我调试过了,通过。
    --------------------------------------------------------
    CREATE TABLE [dbo].[Users] (
    [UserName] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [PassWd] [char] (10) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GO
    -------------------------------------------------------------
    CREATE PROCEDURE login
    @UserName varchar(10),
    @PassWd varchar(10)
    as
    select * from users where userName=@UserName and PassWd=@PassWd
    GO
    ------------------------------------------------------------------
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ADOStoredProc1.Parameters.ParamByName('@UserName').Value:='Adai';
      ADOStoredProc1.Parameters.ParamByName('@PassWd').Value:='adai22';
      ADOStoredProc1.Active:=True;
      if ADOStoredProc1.RecordCount>0 then
        showMessage('Login!');
    end;
      

  13.   

    我也遇到这个问题,我是用TABLE控件。。有问题。
    后来改成QUERY就好了,不知为什么。。
    而且原来用TABLE也是好用的,突然不好用。。不明白
      

  14.   

    jjhaonou(jj) 
    delphi没有反应
    用if then
    show('y')
    else
    show('n')
    测试,show ('n')
      

  15.   

    呵呵,我觉得RECORDCOUNT有问题,如果是QUERY或者DATASET的话,要先移动记录指针才能获得真正的记录数。不妨也可以试试。
      

  16.   

    你Build All试一下,我上次在VC中也碰到这种事情,一个Bool变量竟然既不是TRUE,也不是FALSE;