代码如下:unit Unit5;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, DBCtrls, DB, ADODB;type
  TForm5 = class(TForm)
    Label12: TLabel;
    Button1: TButton;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form5: TForm5;
      Query1: TADOQuery;implementationuses Unit2,Unit4;{$R *.dfm}procedure TForm5.FormCreate(Sender: TObject);
begin
   Query1:= TADOQuery.Create(self);
   Query1.Connection:=dmPer.acPer;
   Query1.CacheSize := 1000;
   Query1.Prepared := true;
end;procedure TForm5.Button1Click(Sender: TObject);
begin
  if(Edit1.Text<>'') then
  begin
     Form4 := TForm4.Create(self);
     Query1.Close;
     Query1.SQL.Clear;
     Query1.SQL.Text:= 'select 编号,品名规格,脚长 from PM where ps ='+Quotedstr(trim(edit1.text));
     Query1.Parameters.ParamByName('ps').Value:= Edit1.Text;
     Query1.Open;
     Form4.edtsn.Text := Query1.Fields[0].AsString;
     Form4.edtps.Text := Query1.Fields[1].AsString;
     Form4.edtfl.Text := Query1.Fields[2].AsString;
     Form4.ShowModal;
     end;
  end;end.表PM中有ps ,编号,品名规格,脚长等10几个字段名称 我想实现的功能是,在form5输入ps,点击button1就能弹出form4,并在form4中用三个edit分别显示三个字段值,
编绎完全没问题,在form5输入ps值后,能够从数据库表里查询并显示数据,但是不是跟PS对应的那一行数据,而是显示最后一行的数据。
比如:
ps     编号   品名规格    脚长
1       001    20          20
2       002    30          30
3       003    40          40输入:1,
查询,
结果显示:
编 号:003   品名规格:40   脚长:40就是这样,是不是下面的语句写错了?
     Form4.edtsn.Text := Query1.Fields[0].AsString;
     Form4.edtps.Text := Query1.Fields[1].AsString;
     Form4.edtfl.Text := Query1.Fields[2].AsString;
结束的时候感谢:zxf_feng ,de410 ,starluck ,n29882942 等,谢谢你们昨天关注并帮我解决了那个莫明其妙的问题!

解决方案 »

  1.   

    代码没贴好,不好意思:unit Unit5; interface uses 
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
      Dialogs, StdCtrls, Mask, DBCtrls, DB, ADODB; type 
      TForm5 = class(TForm) 
        Label12: TLabel; 
        Button1: TButton; 
        Edit1: TEdit; 
        procedure FormCreate(Sender: TObject); 
        procedure Button1Click(Sender: TObject); 
      private 
        { Private declarations } 
      public 
        { Public declarations } 
      end; var 
      Form5: TForm5; 
          Query1: TADOQuery; implementation uses Unit2,Unit4; {$R *.dfm} procedure TForm5.FormCreate(Sender: TObject); 
    begin 
      Query1:= TADOQuery.Create(self); 
      Query1.Connection:=dmPer.acPer; 
      Query1.CacheSize := 1000; 
      Query1.Prepared := true; 
    end; procedure TForm5.Button1Click(Sender: TObject); 
    begin 
      if(Edit1.Text <>'') then 
      begin 
        Form4 := TForm4.Create(self); 
        Query1.Close; 
        Query1.SQL.Clear; 
        Query1.SQL.Text:= 'select 编号,品名规格,脚长 from PM where ps ='+Quotedstr(trim(edit1.text)); 
        Query1.Parameters.ParamByName('ps').Value:= Edit1.Text; 
        Query1.Open; 
        Form4.edtsn.Text := Query1.Fields[0].AsString; 
        Form4.edtps.Text := Query1.Fields[1].AsString; 
        Form4.edtfl.Text := Query1.Fields[2].AsString; 
        Form4.ShowModal; 
        end; 
      end; 
      

  2.   

     Query1.SQL.Text:= 'select 编号,品名规格,脚长 from PM where ps ='+Quotedstr(trim(edit1.text)); 
    已经有WHERE了,还用这句干嘛
    Query1.Parameters.ParamByName('ps').Value:= Edit1.Text;
    Query1.Parameters.ParamByName('ps').Value:= Edit1.Text;
    Query1.Close; 
    Query1.SQL.Clear; 
    Query1.SQL.Text:= 'select 编号,品名规格,脚长 from PM where ps = :ps'; 
      

  3.   

    这一行代码:Query1.SQL.Text:= 'select 编号,品名规格,脚长 from PM where ps = :ps'; 
    昨天就是因为这一句出的问题啊,是参数问题。
    二楼大哥,您说的那个代码问题会影响查询结果吗?
      

  4.   

    把 这一句:Form4 := TForm4.Create(self); ”
    放到“Query1.Open; “
    后面试试
      

  5.   

    先用固定的SQL语句查询试试看,如果正确(估计肯定正确)那就是传参数的问题了,
    注意调试方法。基本都是排除法。一步一步做就是了。
      

  6.   

    Query1.Parameters.ParamByName('ps').Value:= Edit1.Text; 
    这一句可能是不需要的,但是去了这一句运行后会提示“参数ps  没有默认值”
      

  7.   

    问题解决,按照楼上朋友们的提示删了那一句,改了一下SQL语句成功了,感谢!结帖