服务器:create stored procedure sp_sample @firstpara int ,@secondpara int as
insert into tablename values @firstpara,@secondpara
客户端:
storedprocddure1.prepare;
storedprocedure1.parambyname(@firstpara).asinteger:=strtoint(edit1.text);
storedprocedure1.parambyname(@secondpara).asinteger:=strtoint(edit1.text);
storedprocedure1.open;
insert into tablename values @firstpara,@secondpara
客户端:
storedprocddure1.prepare;
storedprocedure1.parambyname(@firstpara).asinteger:=strtoint(edit1.text);
storedprocedure1.parambyname(@secondpara).asinteger:=strtoint(edit1.text);
storedprocedure1.open;
insert into tablename values @firstpara,@secondpara
客户端:
query.close;
Query.SQL.Clear;
Query.SQL.add('insert into tablename(field1,field2) values(:v1,:v2)');
Query.parambyname(':V1').asinteger:=strtoint(edit1.text);
Query.parambyname(':v2').asinteger:=strtoint(edit1.text);
Query.ExecSQL;
Query.SQL.Clear;
Query.SQL.add('insert into tablename(field1,field2) values(:v1,:v2)');
Query.parambyname(':V1').asinteger:=strtoint(edit1.text);
Query.parambyname(':v2').asinteger:=strtoint(edit1.text);
Query.ExecSQL;
记得在带参数时要使用
SQL.Unprepare
SQL.Prepare
你可能是想怎样解决多用户并发问题,不知道我有没猜对?如果用SQL,在Delphi中可以用TQuery构件达到,只要往TQuery的SQL属性中加入SQL语句(insert into ...),然后执行它的ExecSQL方法即可。
也可以用Cursor的方法,用TTable.AppendField(...)然后TTable.Post。也许你真正想解决的是怎样使键值不冲突,如果用TQuery,你可以写成这样:
insert into tablename (keyfieldname, ...) values ((select max(keyfield) from tablename)+1, ...)
(不好意思,我没试过在将子查询的结果特别是它的运算结果放在SQL语句中,我明天就去试)如果都不行,我们一贯采取的策略是先取得最大的键值,然后变化(数值就是+1),用于新的键值。