这种函数该怎样写?(100分)

  • 主题发起人 主题发起人 beamer
  • 开始时间 开始时间
B

beamer

Unregistered / Unconfirmed
GUEST, unregistred user!
各位兄弟:
  我想在程序中为若干数据表写一个函数,按检索条件(如部门代码等)统计数据表中符合
条件的员工人数,我不大会写这种函数,请教诸位该怎样写。要求函数调用格式:
   函数名(数据表名,检索字段名)

 
在不管索引的情況下
function Form1.P_return(M_return:string):string
begin
query1.close;
query1.sql.clear;
query1.sql.add('select count('+M_return+') from table1 order by '+M_return);
query1.prepare;
query1.open;
end;

調用
P_return('部門')

我沒試過,不過我想我會這樣寫
 
应该是 fun(table,field,addi)
然后在实现部分组成SQL语句
select * from table where field = addi
这样应该可以达到你的目的。
 
function getcount(qry:Tquery;str:string):integer;
begin
with qry do
try
close;
sql.clear;
sql.add('select * from tablename where field= '+str);
prepared:=true;
open;
result:=recordcount;
finally
prepared:=false;
close;
end;
end;
 
function findnum(tablename,field:String):integer
var
strSQL:String;
begin
strSQL:='SELECT field,count(*) from tablename group by field'
with aQ do
begin
Close;
SQL.Clear;
SQL.Add(strSQL);
Open;
Result:=Fields[1].AsInteger;
end;
end;
 
就是在function中使用一个字符串作为查询条件,
然后使用SQL语句查询出来,就可以得到你要的结果了.
楼上的写的不错.
 
function Func1(const tablename,con : string):Integer;
var
_sql : string;
begin
_sql := 'SELECT * FROM %s WHERE %s';
_sql := Format(_sql,[tablename,con]);
// 把 _sql 赋予 Query
end;

调用方法
Func1('employee','dept like ''开发部'' ');
 
这种写法有无问题?

function TMainForm.Fun_DeptEmpCount(const TabNa,FieldNa:String;
ConditionStr:string):Integer;
var
iStr:String;
const
ivarString='Select * from %s where %s like %s';
begin
ConditionStr:='"'+ConditionStr+'%'+'"';
ShowMessage('Condition为 '+ConditionStr);
with DM1.DBQry do
try
Close;
SQL.Clear;
SQL.Add(Format(iVarString,[TabNa,FieldNa,ConditionStr]));
Prepared:=True;
Open;
Result:=RecordCount;
Finally
Prepared:=False;
Close;
end;
end;

调用:
procedure TWageDataFrm.ButRefModalClick(Sender: TObject);
var
iEmpGradeID,EmpGrade:String;
begin
with DM1.XXADODataSet do begin
iEmoGradeID:=Trim(Fields[3].Value);
EmpGrade:='"'+Copy(iEmpGradeID,1,2)+'"';
EmpAmount:=TMainForm.fun_DeptEmpCount('WageModal','GradeID',EmpGrade);
// 该处编译时报错
end;
end;

错误信息:
[Error] WageDataPas.pas(455): This form of method call only allowed for class
methods

[Fatal Error] GZMain.pas(49): Could not compile used unit 'WageDataPas.pas'

为什么会这样?
 
EmpAmount:= TMainForm.fun_DeptEmpCount('WageModal','GradeID',EmpGrade);
^ 从这个地方可以看出来你把fun_DeptEmpCount 声明成了类方法。
把方法声明前的 class 关键字去掉就Ok了。
 
To Daiyue:
多谢!问题真是在此,老弟的观察力和细心真不错!有空多联系。。。。

  QQ:77421624

 

Similar threads

回复
0
查看
1K
不得闲
回复
0
查看
1K
不得闲
回复
0
查看
832
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部