我想实现一个自动加一的问题。是一个关于客户服务的程序,每一个地区有一个地区编码,相应的每个地区有很多的客户,现在想在每个地区范围内客户号选择最大的加一。
我的sql语句是这样的:select 客户号 from 客户表 where 地区编码 =某个值,
还定义了一个函数:
function max(m,n:integer):integer;
begin
if m>n then
result:=m+1
else
result:=n+1;
end;
具体实现是这样的:
begin
if adoquery1.isempty then
khh=1
else
khh:=max(1,strtoint(adoquery1.fieldbyname('khh').asstring));
end;
这样运行起来不对,总是只加一次就完了,怎么修改?或者还有没有其他的更好的方法了,除了设计数据库时用“标识”的方法!
我的sql语句是这样的:select 客户号 from 客户表 where 地区编码 =某个值,
还定义了一个函数:
function max(m,n:integer):integer;
begin
if m>n then
result:=m+1
else
result:=n+1;
end;
具体实现是这样的:
begin
if adoquery1.isempty then
khh=1
else
khh:=max(1,strtoint(adoquery1.fieldbyname('khh').asstring));
end;
这样运行起来不对,总是只加一次就完了,怎么修改?或者还有没有其他的更好的方法了,除了设计数据库时用“标识”的方法!
解决方案 »
- 做个采集工具,一个桌面版,一个网络版,选c#还是php
- TVideoGrabber网络传输的问题
- ListBox 组件在什么地方?
- 请问如何把TPaintBox上的图片保存为完整的BMP或者JPG文件?
- Test
- 这样做错在哪 里呀:
- 在ADOQUERY控件中的OnPostError事件中如何得到出错的信息,得到出错的信息是一个什么值,是数值还是字符串啊?
- adoquery1.post 之后,取当前的纪录值,为什么取到的还是前一个纪录.
- 各位大侠,请问怎样将STRING转换为OBJECT型!有一点像VFP及VB里面的宏替换。(没人知道吗!)
- 怎样进行流加密和压缩
- 在fastreport中怎么控制我需要打印的列 不管是在数据库中间的字段还是在两头的字段,要在运行阶段设定
- 如何使edit组件或是memo组件显示多行文本?
adoquery1.close;
adoquery1.open;
adoquery1.sql.clear;
adoquery1.sql.add('select max(xmbh) as maxxmbh from 客户表‘);
adoquery1.active:=true;
if adoquery1.IsEmpty then
begin
lastnum := 1;
end
else
begin
lastnum := adoquery1.Fieldbyname('maxxmbh').AsInteger + 1;
end;
具体如下CREATE TRIGGER t_max_code
ON table_name
FOR INSERT
AS declare @client_code int /* 存放客户号*/
declare @area_code varchar(30) /* 存放地区编码*/
declare e_cursor CURSOR FOR select 地区编码 from table_name
OPEN e_cursor
WHILE @@FETCH_STATUS <> -1
BEGIN
FETCH NEXT FROM e_cursor INTO @area_code
select @client_code = max(客户号) from table_name where 地区编码 = @area_code
update inserted set 客户号 = @client_code + 1
ENDCLOSE e_cursor