Delphi带参数的方法。
procedure shuaixi(DBGridstring:string);
procedure TForm1.shuaixi(DBGridstring:string);
var
DBGridstring:string;
begin
//
DBGridstring.DataSource:=niL;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT Dormitory,case when CheckSex=1 then N''男'' else N''女'' end CheckSex,'+
'CheckContact,'+
'CheckQty,'+
'CheckQty1,'+
'CheckQty2,'+
'Checkfacilities from Checke');
DBGridstring.DataSource:=DataSource1;
ADOQuery1.Active:=false;
ADOQuery1.Active:=true;
调用
Form1.shuaixi(DBGrid1);
end;
方法错了。。求一事例。
[解决办法]
procedure shuaixi(DBGridstring:TDBGrid);
procedure TForm1.shuaixi(DBGridstring:TDBGrid);
var
DBGridstring:string;
begin
// DBGridstring.DataSource:=niL;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT Dormitory,case when CheckSex=1 then N''男'' else N''女'' end CheckSex,'
+ 'CheckContact,'+ 'CheckQty,'
+ 'CheckQty1,'+ 'CheckQty2,'
+ 'Checkfacilities from Checke');
DBGridstring.DataSource:=DataSource1;
ADOQuery1.Active:=false;
ADOQuery1.Active:=true;
end;
[解决办法]
这错的都没边了,一个对的地方都没有!谁教你的了!这是经典的反面教材.以下罗列错误数:
1、定义参数类型为string,结果你在调用函数的时候传提DBGrid.牛头不对马嘴。
2、函数shuaixi定义的参数名是DBGridstring,而你在函数中又定义了一个变量也叫DBGridstring,你当编译器是人脑吗?
3、很显示,你的ADOQuery和DBGrid在同一个窗体中,你为什么还要将DBGrid传递到函数shuaixi中
4、ADOQuery在执行查询语句时一般用ADOQuery.Open,你的ADOQuery.Active :=true,我没用过。
5、DBGrid和DataSource,ADOQuery三者连合使用,DBGrid的数据感知控件,只要ADOQuery有变化,DBGrid也会随之改变,前提是它们在属性已经设置关联,显然你的过程中
DBGridstring.DataSource:=niL;
DBGridstring.DataSource:=DataSource1;
是多余的!
其他问题,坐等楼下。。。
[解决办法]
......
public
{ Public declarations }
procedure shuaixi(DBGrid: TDBGrid; PrevDBGrid: TDBGrid=nil; SqlText: string='');
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//如果不在乎一个数据集带着多个栅格,就不要定义和使用第二个参数
//如果查询语句是固定的,就不要定义和使用第三个参数
procedure TForm1.shuaixi(DBGrid: TDBGrid; PrevDBGrid: TDBGrid=nil; SqlText: string='');
const DefaultSqlText=
'SELECT Dormitory,case when CheckSex=1 then N''男'' else N''女'' end CheckSex, CheckContact, CheckQty,'
+'CheckQty1, CheckQty2, Checkfacilities from Checke';
begin
if PrevDBGrid<>nil then
PrevDBGrid.DataSource:=nil;//将前面原来连接着的栅格断开与数据源的连接
ADOQuery1.Close;
if SqlText='' then //如果没传入的语句
ADOQuery1.SQL.Text:= DefaultSqlText//用默认的语句查询
else
ADOQuery1.SQL.Text:= SqlText;//用传入的sql语句进行查询
ADOQuery1.Active:=true;//.Open; //激活数据集
if DBGrid.DataSource=nil then //如果栅格没数据源
DBGrid.DataSource:=TDataSource.Create(self);//动态建立一个
DBGrid.DataSource.DataSet:=ADOQuery1;//关联数据集
end;
procedure TForm1.Button1Click(Sender: TObject);//第一次调用(使用内置的语句查询)
begin
shuaixi(DBGrid1);
end;
procedure TForm1.Button2Click(Sender: TObject);//第二次调用(使用指定语句查询)
var Sqlstr:string;
begin
Sqlstr:='select * from address';
shuaixi(DBGrid2, DBGrid1, Sqlstr);
end;
procedure TForm1.Button3Click(Sender: TObject);//第三次调用(使用内置的语句查询)
begin
shuaixi(DBGrid3, DBGrid2);
end;
......