pub是我自己建立的一个unit,里面的所有过程和函数都是公用的.
dm是我的一个数据库模块!findname是执行一个查询的语句!
调用的语句为:pub.TCbBAdd(cbb1,SQL);
下面的是我做的这个过程:
procedure Tpub.TCbBAdd(var Sender: Tobject; SQL: String);
var i:integer;
begin
if Sender is TCombobox then
 begin
  dm.findname(SQL);
  dm.check.First;
  for i:=0 to dm.check.RecordCount-1 do
  begin
  TCombobox(Sender).items.add(dm.check.Fields[0].AsString);
  dm.check.Next;
  end;
 end;
end;
提示的错误:
[Error] LoginUnit.pas(132): Types of actual and formal var parameters must be identical

解决方案 »

  1.   

    procedure Tpub.TCbBAdd(var Sender: Tobject; SQL: String);
                           ^^^  去掉var
      

  2.   

    如果我去掉了var的话那不就是值传递了?而原来的控件不就没变化了?我是要把传递过来的控件改变啊!
      

  3.   

    這是我自已寫的一個可以調用的unit
    你參考一下:
    unit ToExcel;
    interface
    uses
      Variants,Messages,Classes, Excel2000,SysUtils,DB, ADODB;
      type
      Excelapplication1=class(TExcelapplication);
      ExcelWorkBook1=class(TExcelWorkBook);
      ExcelworkSheet1=class(TExcelworkSheet);
      procedure DataToExcel(ado:Tadoquery;r1:variant);
      procedure close;
      procedure ExcelCreate(self:Tcomponent);
    var
    app:Excelapplication1;
    sht:ExcelWorksheet1;
    book:Excelworkbook1;
    implementation
    uses Unit1;procedure ExcelCreate(self:Tcomponent);
    begin
     app:=ExcelApplication1.Create(self);
     book:=ExcelWorkbook1.Create(self);
     Sht:=ExcelWorksheet1.Create(self);
    end;
    procedure DataToExcel(ado:Tadoquery;r1:variant);
    var
      I: Integer;
    begin
    try
      app.Visible[0] := True;
    try
      Book.ConnectTo(App.Workbooks.Add(EmptyParam, 0));
    except
    raise Exception.Create('鏈接到Excel文件出錯,可能是沒有安裝Excel文件');
    end;
      {for I := 0 to ado.FieldCount-1 do    // Iterate
      begin
          sht.Cells.Item[1,I+1]:=ado.Fields[I].DisplayLabel;
      end;    // for  }
      sht.ConnectTo(Book.Worksheets[1] as _WorkSheet);        //EmptyParam
    with sht.QueryTables.Add(ado.Recordset, Sht.Range[r1,EmptyParam],EmptyParam) do
    begin
        FieldNames:=false;
        refresh(false);
    end;
    finally
    end;
    end;
    procedure close;
    begin
      sht.Disconnect;
      book.Disconnect;
      App.Disconnect;
      app.Quit;
      sht.Free;
      book.Free;
      app.Free;
    end;
    end.
      

  4.   

    啊啊.....
    procedure Tpub.TCbBAdd(var Sender: Tobject; SQL: String);
    我这个过程是要把传递过来的 Sender这个对象在这个过程里面改变它的items啊!怎么改变就是根据Sql语句查找出来的结果来改变!如果不用var的话,那不就是不是值传递了?执行完这个过程,我想改变的控件还是没变化的啊!难道不是吗?
      

  5.   

    procedure meCBBADD(SQL:String;var Source:TCustomComboBox);
    最后使用这个没问题了!谢谢大家的帮助!