Delphi Insert到数据库,能用一个通用的函数解决吗?

functionTServerMethods.smfnc_InsertCustomer(CUS_NAME,CUS_NUMBER,CUS_PERNUMBER,CUS_PRE... function TServerMethods.smfnc_InsertCustomer(
CUS_NAME,
CUS_NUMBER,
CUS_PERNUMBER,
CUS_PRESIDENT,
CUS_INSERTDATA: String):String;
begin
try
with qry_update do begin
Close;
SQL.Clear;
SQL.Add('INSERT INTO T_CUSTOMER(');
SQL.Add('CUS_NAME,');
SQL.Add('CUS_NUMBER,');
SQL.Add('CUS_PERNUMBER,');
SQL.Add(':CUS_INSERTDATA)');
ParamByName('CUS_NAME').AsString := CUS_NAME;
ParamByName('CUS_NUMBER').AsString := CUS_NUMBER;
ParamByName('CUS_PERNUMBER').AsString := CUS_PERNUMBER;
ParamByName('CUS_INSERTDATA').AsString := CUS_INSERTDATA;
ExecSQL;Result := GS_SuccessFlag;
end;
except
on E: Exception do begin
Result := E.Message;
end;
end;
end;

function TServerMethods.smfnc_InsertGround(
CUS_CODE: Integer;
CUS_NAME: String;
GRO_NAME,
GRO_INSERTDATE,
GRO_INSERTDATA: String):String;
var GRO_SEQ: Integer;
begin
try
with qry_update do begin
Close;
SQL.Clear;
SQL.Add('SELECT MAX(GRO_SEQ) FROM T_GROUND WHERE CUS_CODE=:CUS_CODE');
ParamByName('CUS_CODE').AsInteger := CUS_CODE;
Open;
if Trim(FieldByName('MAX').AsString)='' then GRO_SEQ := 1
else GRO_SEQ := FieldByName('MAX').AsInteger + 1;
Close;
SQL.Clear;
SQL.Add('INSERT INTO T_GROUND(');
SQL.Add('CUS_CODE, ');
SQL.Add('CUS_NAME, ');
SQL.Add('GRO_SEQ, ');
SQL.Add('GRO_NAME, ');
SQL.Add('GRO_INSERTDATE, ');
SQL.Add('GRO_INSERTDATA ');
SQL.Add(') VALUES (');
SQL.Add(':CUS_CODE, ');
SQL.Add(':CUS_NAME, ');
SQL.Add(':GRO_SEQ, ');
SQL.Add(':GRO_NAME, ');
SQL.Add(':GRO_ADDRESS, ');
SQL.Add(':GRO_INSERTDATE, ');
SQL.Add(':GRO_INSERTDATA) ');
ParamByName('CUS_CODE' ).AsInteger := CUS_CODE;
ParamByName('CUS_NAME' ).AsString := CUS_NAME;
ParamByName('GRO_SEQ' ).AsInteger := GRO_SEQ;
ParamByName('GRO_NAME' ).AsString := GRO_NAME;
ParamByName('GRO_INSERTDATE' ).AsString := GRO_INSERTDATE;
ParamByName('GRO_INSERTDATA' ).AsString := GRO_INSERTDATA;

ExecSQL;Result := GS_SuccessFlag;
end;
except
on E: Exception do begin
Result := E.Message;
end;
end;
end;

这两个函数除了参数个数,类型不同,表名不同以外其他都一样,以后还要再写这类的函数,吐死我了,
有没有办法写一个通用的函数, 根据表名插入到不同的表里呀...
展开
 我来答
windblast
2016-07-27 · 知道合伙人软件行家
windblast
知道合伙人软件行家
采纳数:5633 获赞数:13617
毕业于空军第一航空学院电子专业,1991年开始接触电脑,从事多年计算机编程,具有较丰富的经验。

向TA提问 私信TA
展开全部
从上面的代码来看,使用的是通过编写 sql 语句并执行来插入新数据记录的,而 sql 语句其实质上就是字符串,编写sql语句其实就是进行字符串编辑,包括其中的表名、字段名都是字符串,因此,从原理上来说是可行的。

sql 的插入语法,大致如下:

INSERT INTO tbl_name (col1,col2...) VALUES(val1,val2,...)

则通用的插入函数原型定义示例:

function TServerMethods.smfnc_InsertRecord(TabName, KeyNames,Values:string): string;
追问
是的, 但是 字段类型怎么处理呢? 如 Integer和string(数据库字段类型)
ParamByName(KeyName).AsInteger?AsString? := Value;
追答
字段类型,你可以在生成 sql 的语句时进行判断。

比如,对于 access 数据库来说,日期类型需要用 # 作为标识间隔符、数值类型不加标识间隔符、字符型用 “ 进行包围间隔等。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式