我原来设置F_employee_info.DBEdit1.DataSource:=DataModuleMain.Ds_Employee
F_employee_info.DBEdit1.DataField:='员工号';
一段查询程序后,需要改变DBEdit1的数据源,于是我写成
F_employee_info.DBEdit1.DataSource:=DataModuleMain.DS_Query_Employee;
F_employee_info.DBEdit1.DataField:='员工号';
请问,是何缘故?谢谢。

解决方案 »

  1.   

    你可以试着用DataSource来作中间物
    下面的代码delphi6下测试通过
    --------------------------
    最开始的设置为
    procedure TForm1.FormShow(Sender: TObject);
    begin
      with ADOQuery1 do
      begin
        sql.Clear;
        sql.Add('select * from tab where b=33');//tab表名,b字段名=33
        open;
      end;
      self.DataSource1.DataSet := self.ADOQuery1;
      self.DBEdit1.DataSource := self.DataSource1;//上面两句代码动态改变
      self.DBEdit1.DataField := 'a';//a字段名
    end;
    --------------------------
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      with ADOQuery1 do
      begin
        sql.Clear;
        sql.Add('select * from tab where b=1');//tab表名,b字段名=1
        open;
      end;
      self.DataSource1.DataSet := self.ADOQuery1;
      self.DBEdit1.DataSource := self.DataSource1;//上面两句代码动态改变
      self.DBEdit1.DataField := 'a';//a字段名
    end;
      

  2.   

    F_employee_info.DBEdit1.DataSource:=DataModuleMain.DS_Query_Employee;
    F_employee_info.DBEdit1.DataField:='员工号';在好好看看。
      

  3.   

    大伟:程序还是没有过。我把具体的情况跟你说一下吧有一个DataModuleMain里面有:
    Tab_employee(ADOTable)==>DS_Employee(DataSource)
    Query_Employee(ADOQuery)==>DS_Query_Employee(DataSource)还有Employee.pas;  form的name叫 F_Employee_info;
    原来的设置是:  F_Employee_info.DBEdit1.DataSource:=DS_Employee;查询在另外的一个form里进行完毕后,把值再传给Employee;
    所以要修改F_Employee_info.DBEdit1.DataSource为DS_Query_Employee;
    F_employee_info.DBEdit1.DataField:='员工号';我和你的做法都一样啊。若是在查询的那个form中增加一个DBGrid;
    他的DataSource为DS_Query_Employee,则程序能正确通过;
    所以我想是不是传值得时候出了问题?你能明白吗?你昨晚一夜没睡?我也没睡,写了一晚。:P
      

  4.   

    Try this:1.F_employee_info.DBEdit1.DataSource.close;
    2.F_employee_info.DBEdit1.DataSource:=DataModuleMain.DS_Query_Employee;