在这里停了:
if Edit1.Text=Query1.FieldByName('PassWord').asstring then

解决方案 »

  1.   

    你试试~~
    if Edit1.Text=Query1.Fields[0].asstring then 
      

  2.   

    在Query1.Open;之前~~跟踪看看Query1.SQL.Text是什么~~~~
      

  3.   

    试过了,list index out of bounds(0) 
      

  4.   

    在Query1.Open;之前~~跟踪看看Query1.SQL.Text是什么~~~~  
      

  5.   

    是'select PassWord form login where Name=:username
      

  6.   

    应该没有问题的呀~~你看看Query1.Open的时候有没有报错呢??
      

  7.   

    就是跟踪程序~~执行到Query1.Open的时候看看报错与否!
      

  8.   

    这段代码有问题:
      try
        Query1.Open;
      except
      end;别try呀,Open出错误你都看不见了,数据库中肯定没有PassWord这个字段,要不就是大小写有问题。
      

  9.   

    agui(阿贵) :
      数据库又这个字段,大小写试对的.不知道query还有怎么设置?
    有Query1: TQuery;
        ADOConnection1: TADOConnection;
        ADOTable1: TADOTable;
        DataSource1: TDataSource这几个够吗?
      

  10.   

    procedure TPass.Button1Click(Sender: TObject);
    begin
      Query1.Close;
      Query1.SQL.Clear;
      Query1.SQL.Add('select PassWord form login where Name=:username');
      Query1.ParamByName('username').asstring:=Combobox1.Text;
      try                   //你这里不用try试一试,
        Query1.Open;
      except
      end;
     showmessage(Query1.FieldByName('PassWord').asstring)//你再用这条语句试试,看它
                                                           是什么? 
      

  11.   

    还是一样的.
    如下连接又问题吗?
    query河data source连接了,datasource连接了adotable,adotable和ADOConnection连接,
    query里有个database没有连接,改连接哪个,好像试要用bde的时候才用得上这个的对吗?
      

  12.   

    sorry
    错在这里  Query1.SQL.Add('select PassWord form login where Name=:username');
    form--from;
    但是,改了以后,还是又问题.我用ado的改成了用bde就可以了.
      

  13.   

    我建议不要随便try...except...end屏蔽错误,否则连自己都搞蒙了
      

  14.   

    agui(阿贵) :我都试过了,还是又问题的.
    我把程序改如下,用了ADOQuery了,提示"update语句错误"why?unit pswd;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Db, ADODB, DBTables, DBCtrls;type
      TPass = class(TForm)
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Button1: TButton;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        ComboBox1: TComboBox;
        ADOQuery1: TADOQuery;
        ADOTable1: TADOTable;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure ComboBox1Change(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Pass: TPass;implementation{$R *.DFM}procedure TPass.FormCreate(Sender: TObject);
    Var
      S:string;
    begin
    With  ADOQuery1 do
           begin
             Active:=false;
             S:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source="'+ExtractFilePath(Application.ExeName);
             S:=S+'Students.mdb";Mode=Share Deny None;Extended Properties="";';
             S:=S+'Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;';
             S:=S+'Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;';
             S:=S+'Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don''t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';
             ConnectionString:=S;
                   end;
          with ADOTable1 do
            begin
              
                 ConnectionString:=S;
                 ADOTable1.Active:=true;
                Combobox1.Items.Clear;
                First;
                while not Eof do
                  begin
                    Combobox1.Items.Add(Fields[0].AsString);
                    Next;
                  end;
              
          end;
    end;procedure TPass.Button1Click(Sender: TObject);
    begin
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('select Password from login where Name=:username');
      ADOQuery1.Parameters[0].Value:=Combobox1.Text;
      try
        ADOQuery1.Open;
      except
      end;
      if Edit1.Text=ADOQuery1.FieldByName('Password').asstring then
      begin
          if Edit2.Text<>Edit3.Text then
            begin
              showmessage('新密码有误,请确认');
              Edit2.SetFocus;
              Exit;
            end;
          ADOQuery1.Close;
          ADOQuery1.SQL.Clear;
          ADOQuery1.SQL.Add('update login set Password=:psd where Name=:username');
          ADOQuery1.Parameters[1].value:=Edit2.Text;
          ADOQuery1.Parameters[0].value:=Combobox1.Text;
          try
            ADOQuery1.Prepared;
            ADOQuery1.ExecSQL;
          except
          end;
          showmessage('密码修改成功!');
        end
      else
          begin
            showmessage('原密码错误!');
            Edit1.Text:='';
            Edit2.Text:='';
            Edit3.Text:='';
            Edit1.SetFocus;
            exit;
          end;
    end;procedure TPass.ComboBox1Change(Sender: TObject);
    begin
      Edit1.Text:='';
      Edit2.Text:='';
      Edit3.Text:='';
    end;end.
      

  15.   

    好像这里吧:
    ADOQuery1.SQL.Add('update login set Password=:psd where Name=:username');
          ADOQuery1.Parameters[1].value:=Edit2.Text;
          ADOQuery1.Parameters[0].value:=Combobox1.Text;程序执行到这里停了:
    ADOQuery1.ExecSQL;
      

  16.   

    parameters[0]:name为username,[1]:name为psd,类型为ftstring,都设置为pdinput.
    运行出错,提示密码修改成功,但是并没有改过来,还是原来的密码.
      

  17.   

          try
            ADOQuery1.Prepared;
            ADOQuery1.ExecSQL;
          except
          end;
    这里又屏蔽异常了,所以会提示“密码修改成功”另外,在前面的应该是0,在后面的是1,即[0]应是Password,[1]应为UserName