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;
这两个函数除了参数个数,类型不同,表名不同以外其他都一样,以后还要再写这类的函数,吐死我了,
有没有办法写一个通用的函数, 根据表名插入到不同的表里呀... 展开
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;
这两个函数除了参数个数,类型不同,表名不同以外其他都一样,以后还要再写这类的函数,吐死我了,
有没有办法写一个通用的函数, 根据表名插入到不同的表里呀... 展开
1个回答
2016-07-27 · 知道合伙人软件行家
关注
展开全部
从上面的代码来看,使用的是通过编写 sql 语句并执行来插入新数据记录的,而 sql 语句其实质上就是字符串,编写sql语句其实就是进行字符串编辑,包括其中的表名、字段名都是字符串,因此,从原理上来说是可行的。
sql 的插入语法,大致如下:
INSERT INTO tbl_name (col1,col2...) VALUES(val1,val2,...)
则通用的插入函数原型定义示例:
function TServerMethods.smfnc_InsertRecord(TabName, KeyNames,Values:string): string;
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 数据库来说,日期类型需要用 # 作为标识间隔符、数值类型不加标识间隔符、字符型用 “ 进行包围间隔等。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询