共同探讨编写函数的问题!!(200分)

  • 主题发起人 主题发起人 ltqlyy125
  • 开始时间 开始时间
L

ltqlyy125

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟在做数据库软件时,写了一些函数和过程,比如:检查输入是否是有小数的字符串、
检查输入是否是整数的字符串 等等。向各位DFW请教一下,一般做数据库,需要写哪些函数,
并给出原代码,望各位鼎力相助!!!
附小弟原码:
function check_float(check_str: string): Boolean; //检查输入是否是有小数的字符串
begin
if Trim(check_str) = '' then
begin
check_float := False;
exit;
end;
try
begin
if StrToFloat(Trim(check_str)) < 0 then
begin
Application.MessageBox('输入的字符无效!', '错误', MB_OK + MB_ICONERROR);
check_float := False;
exit;
end;
end;
except
begin
Application.MessageBox('输入的字符无效!', '错误', MB_OK + MB_ICONERROR);
check_float := False;
exit;
end;
end;
check_float := True;
end;
 
我觉得你的这段代码太冗长了,可以改成如下:
function check_float(check_str: string): Boolean; //检查输入是否是有小数的字符串
begin
try
StrToFloat(Trim(check_str));
Result := True; //Result :=Pos('.',check_str)<>0
except
//Application.MessageBox('输入的字符无效!', '错误', MB_OK + MB_ICONERROR);
end;
end;
且这个函数并不能确定一个字符串是否是有小数的字符串,如果要实现函数的预定功能,
应改写Result := True为Result :=Pos('.',check_str)<>0
另外,即然是函数,最好不要在其中弹出错误提示框,而应该在调用该函数时根据返回值
来提示用户,所以,Application.MessageBox('输入的字符无效!', '错误', MB_OK + MB_ICONERROR);
这一句也可去掉。
 
要写的函数很多,以下几个你可参考使用:
Function F_GetField(B_DataSet:TDataSet;B_Zdh:integer;B_Mz:integer=0):String;
//Function F_GetField(B_DataSet:TAdoDataSet;B_Zdh:integer;B_Mz:integer=0):String;
//根据给出的字段号返回该字段的Sql字串,数据表为Set_Ora,字段号从0开始计.B_Mz为0时返回字段名,1时返回字段值
begin
With B_DataSet do
if B_Mz=0 then Result:=fields[B_Zdh].FieldName
else
begin
if (Fields[B_Zdh].DataType =ftWideString) or (Fields[B_zdh].DataType =ftString) then
begin
Result:=iif(fields[B_Zdh].asstring='','null',''''+Fields[B_Zdh].asstring+'''');
exit;
end;
if Fields[B_Zdh].DataType = ftFloat then
begin
Result:=iif(fields[B_Zdh].asstring='','null',floatToStrF(Fields[B_Zdh].AsFloat,ffFixed,11,2));
exit;
end;
if (Fields[B_Zdh].DataType = FtSmallInt) or (Fields[B_Zdh].DataType =ftInteger)
or (Fields[B_Zdh].DataType=FtBCD) then
begin
Result:=iif(fields[B_Zdh].asstring='','null',fields[B_Zdh].AsString);
exit;
end;
if Fields[B_Zdh].DataType=ftDate then
begin
Result:=iif(Fields[B_Zdh].asstring='','null','#'+formatDateTime('yyyy-mm-dd',fields[B_Zdh].asDateTime)+'#');
exit;
end;
Result:=''; //尚需增加布尔等类型的判断.
end;
end;

function F_FValue(B_Com,B_Fie:String;B_Lx:String='S'):Variant;
//根据SQl语句字符串和指定的字段名返回字段值,字段值依B_Lx,默认为String类型;
var B_Result:Variant;
begin
With Data.Set_Exist do
begin
CommandText:=B_Com;
Open;
if isEmpty then B_Result:='' else
begin
if UpperCase(B_Lx)='S' then B_Result:=FieldByName(B_Fie).Asstring;
if UpperCase(B_Lx)='B' then B_Result:=FieldByName(B_Fie).Asboolean;
if UpperCase(B_Lx)='I' then B_Result:=FieldByName(B_Fie).AsInteger;
if UpperCase(B_Lx)='F' then B_Result:=FieldByName(B_Fie).AsFloat;
end;
Close;
end;
Result:=B_Result;
end;

Function F_Value(B_table,B_Condi,B_field:string;B_Lx:String='S'):Variant;
//根据表名、条件字符串和指定的字段名返回字段值,字段值依B_Lx默认为String类型;
var B_Result: Variant;
begin
With Data.Set_Exist do
begin
CommandText:='Select * from '+B_Table+' where '+B_Condi;
Open;
if isEmpty then B_Result:='' else
begin
if UpperCase(B_Lx)='S' then B_Result:=FieldByName(B_Field).Asstring;
if UpperCase(B_Lx)='B' then B_Result:=FieldByName(B_Field).Asboolean;
if UpperCase(B_Lx)='I' then B_Result:=FieldByName(B_Field).AsInteger;
if UpperCase(B_Lx)='F' then B_Result:=FieldByName(B_Field).AsFloat;
end;
Close;
end;
Result:=B_Result;
end;
 
to yyk518:谢谢你改进
to hunterteam :我会好好的研究研究
 
用一个只准输入数字的控件,然后在需要取小数时取小数,要整数时取整数。
控件如:TPBNumEdit
 
后退
顶部