想把表中的一列所有字段都读到COMBOBOX里面去,用函数实现出错!帮忙急!(100分)

L

liuliu

Unregistered / Unconfirmed
GUEST, unregistred user!
我想把好比:
maninf表中的man_name都在form.create也就是初始时候就都读到combobox1里面去,这样用户可以选择方便。
而且也方便日后维护这个程序,即使人变了表的信息变了,程序也无需修改。

我写了这么一个函数:
Procedure FillFieldToCombox(AdoTable : TADOTable;FieldName : String;Combobox :TComBoBox);
var
bTemp1,bTemp2 : Boolean ;
Tmpstr : String ;
Begin
bTemp1 := AdoTable.Active ;
bTemp2 := AdoTable.Filtered ;
if not bTemp1 Then
AdoTable.Open ;
if bTemp2 Then
AdoTable.Filtered := False ;
combobox.Items.Clear ;
Adotable.First ;
While Not AdoTable.Eof Do
Begin
tmpstr := AdoTable.FieldByName(FieldName).AsString ;
if Combobox.Items.IndexOf(tmpstr)<0 Then
Combobox.Items.Add(tmpstr);
AdoTable.Next ;
End;
AdoTable.Active := bTemp1 ;
AdoTable.Filtered := bTemp2 ;
End;


调用函数时:
fillfieldtocombox(adotable1,ADOTable1EngineerName,combobox1);
程序无法运行,提示出错:
[Error] Unit1.pas(18): Unsatisfied forward or external declaration: 'TForm1.FillFieldToCombox'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
 
哈哈,挣了,

把Procedure FillFieldToCombox(...改为
Procedure TForm1.FillFieldToCombox(....
^^^^^^^
 
还是不可以啊?有谁帮我解决?!
 
这个函数怎么这么眼熟啊 这不是我前几天刚刚发上去的吗?
 
在一个公共单元中先声明 再把代码抄上


fillfieldtocombox(adotable1,ADOTable1EngineerName,combobox1);
第二个参数是字段的名字 ADOTable1EngineerName是什么?是不是这里有问题??
 把你的数据库中的字段名写上就行了
 
声明函数
 
现在public里面声明
在实现时再加上tform1.
 
你是不是重复声明了
 
可能是你的单元没有把做声明,如楼上几位兄弟所说。
如果还不行,请贴出你的单元文件。
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls;

type
TForm1 = class(TForm)
ComboBox1: TComboBox;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
ADOTable1EngineerID: TStringField;
ADOTable1EngineerName: TStringField;
ADOTable1EngineerPost: TStringField;
Button1: TButton;
Procedure FillFieldToCombox(AdoTable : TADOTable;FieldName : String;Combobox :TComBoBox);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public

Procedure FillFieldToCombox(AdoTable : TADOTable;FieldName : String;Combobox :TComBoBox);
var
bTemp1,bTemp2 : Boolean ;
Tmpstr : String ;
Begin
bTemp1 := AdoTable.Active ;
bTemp2 := AdoTable.Filtered ;
if not bTemp1 Then
AdoTable.Open ;
if bTemp2 Then
AdoTable.Filtered := False ;
combobox.Items.Clear ;
Adotable.First ;
While Not AdoTable.Eof Do
Begin
tmpstr := AdoTable.FieldByName(FieldName).AsString ;
if Combobox.Items.IndexOf(tmpstr)<0 Then
Combobox.Items.Add(tmpstr);
AdoTable.Next ;
End;
AdoTable.Active := bTemp1 ;
AdoTable.Filtered := bTemp2 ;
End;

{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
tform1.fillfieldtocombox(adotable1,ADOTable1EngineerName.AsString,combobox1);
end;


end.
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls;

type
TForm1 = class(TForm)
ComboBox1: TComboBox;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
ADOTable1EngineerID: TStringField;
ADOTable1EngineerName: TStringField;
ADOTable1EngineerPost: TStringField;
Button1: TButton;
Procedure FillFieldToCombox(AdoTable : TADOTable;FieldName : String;Combobox :TComBoBox);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public


{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

Procedure TForm1.FillFieldToCombox(AdoTable : TADOTable;FieldName : String;Combobox :TComBoBox);
var
bTemp1,bTemp2 : Boolean ;
Tmpstr : String ;
Begin
bTemp1 := AdoTable.Active ;
bTemp2 := AdoTable.Filtered ;
if not bTemp1 Then
AdoTable.Open ;
if bTemp2 Then
AdoTable.Filtered := False ;
combobox.Items.Clear ;
Adotable.First ;
While Not AdoTable.Eof Do
Begin
tmpstr := AdoTable.FieldByName(FieldName).AsString ;
if Combobox.Items.IndexOf(tmpstr)<0 Then
Combobox.Items.Add(tmpstr);
AdoTable.Next ;
End;
AdoTable.Active := bTemp1 ;
AdoTable.Filtered := bTemp2 ;
End;


procedure TForm1.Button1Click(Sender: TObject);
begin
fillfieldtocombox(adotable1,ADOTable1EngineerName.AsString,combobox1);
end;


end.
 
这下行了吧??
 
fillfieldtocombox(adotable1,EngineerName,combobox1);
 
你声明的位置不对 我觉得最好把它放到一个公共单元中 我这儿还有把字段填充到
listbox,listview......中的函数 你要是想要 给你
 
还是不行啊?哦!
cwmdelpher,老兄。

fillfieldtocombox(adotable1,EngineerName,combobox1);
或者是
fillfieldtocombox(adotable1,'EngineerName',combobox1);
或者是
fillfieldtocombox(adotable1,ADOTable1EngineerName.AsString,combobox1);
也不行 !!!!
强烈地郁闷!!!!也不行 !!!!
强烈地郁闷!!!!也不行 !!!!
强烈地郁闷!!!!


 
cwmdelpher,老兄。那么应该把函数声明在哪里呢???

好的。我想参考参考,要是可以运行的代码哦!
 
怎么可能  把信箱给我 我把我的一个例子给你!
 
我的信箱是lyxqw31@163.com
谢谢你!我还在调试中。。。
 
邮件发送成功!
邮件发送给: lyxqw31@163.com
抄送给: 无
密送给: 无
 
在Interface部分只能声明FillFieldToCombox,实现部分要放在implementation,在
Button1Click事件调用的方法是调用Form1的方法FillFieldToCombox,不是这个Unit全局的
FillFieldToCombox,因为方法名重复,在方法之前要加unit1.FillFieldToCombox,最好在
tform1不要有方法FillFieldToCombox
 
顶部