表是用access建的,主要字段如下:
pid xh sc ss kj
lp01 m188 45 63 16
想加入的是 m199 55 26 10
并使第二条记录的pid为lp02,以后每加一条纪录,pid都+1,即为lp02,lp03,lp04...
把该字段的类型设为uniqueidentifier
1. 在数据库中把
该字段设为自动增加
2. 在增加时先得到pid的值 select pid from table ordry by pid
得到返回的记录集的最后一个值.
再取出返回值的后两位,将它转传数值型并加一.再转回成字符型,
前面加lp拼成 lp02(即新的pid值)
如果你不是需要有个lp的前缀的话,可以使用自动编号类型,每次插入一条新记录时都会自动增加。
你的这个要求似乎很难实现,可以用自动编号的值加上前缀组合出来你需要的值。
在数据库设计的时候,将id这个字段设为标示字段,并自动加一,这样你用不着对这个字段进行更改操作,这个字段由数据库来自动维护.
你可以使用自动编号
如果不用自动编号,那就在每增加一条时,找出表中最大的id加1,try
取出最后一个编号可以用
select max(pid) from table
1.直接用自增长字段,然后查询时用
select ml + ml
2.用recordcount判断,自己计算出值
3.保存一个变量或者记录,存储当前的id增长值。
我的用的是paradox数据库
请问怎么把ID设置为标示字段,让它自动加1
谢谢
一、表结构
1、表TK结构:
N1:string; ->名称
N2:string;->内容
t11:string:->类型
tk表存有记录30000条。
2、表f-leixin结构:
F1:string;->标识名
leixin:string:->类型
YTI:integer;->记录数
LX表存有不同“类型”的记录200条。
3、我用ADO连接ACCESS数据库。
二:要实现的目的。
我想把TK表里符合f_leixin表类型的记录全部查询出来, 并将查询结果进行计数, 然后将值存入
f_leixin表的YT字段。
三: 我自己的编程
我主要是用加循环遍历的方式,用一条SQL语句,先进行查询统计、替换,然后循环f_leixin表,
这样查询的字段值就会根据随着LX表的指针移动进行变动,就实现了上述要求。
代码如下:
while not adotable2.eof do begin
lx1:=adotable2.fieldbyname(leixin).AsString;
lx1:=trim(lx1);
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.sql.add(select count(*) as lnfen2 from tk where t11 like %+lx1+% group by t11);
adoquery2.Open;
lnfen2:=adoquery2.fieldbyname(lnfen2).asinteger;
adotable2.Edit;
adotable2.fieldbyname(yti).asinteger:=lnfen2;
adotable2.Next;
end;
end;
四:问题???]
用我自己的代码很慢,很慢。在网上别人告诉我这样可以:
begin
adotable2.Open;
adotable2.edit;
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.sql.Add(update f_leixin set yti=(select count(*) from tk where f_leixin.leixin=tk.t11 ));
ADOQUery2.ExecSQL;
adoquery2.sql.clear;
adoquery2.sql.add(select * from f_leixin);
adoquery2.open;
END;
但是执行不了好像ACCESS数据库不支持此SQL语句。
请高手帮我想个办法,我搞了一夜啊。!!!!!
来自:xzh2000, 时间:2003-4-30 8:36:00, ID:1816056
终于搞清楚你要做什么啦,
其实问题时将表结构的创建语法及少许测试数据贴出来大家会更乐意帮你测试
按常规猜,你的TK.tt1与f_leixin.leixin内容是一样的。
update f_leixin
set yti = (select count(*) from tk group by tt1
where f_leixin.leixin=tk.tt1)
update f_leixin
set yti=(select count(*) from tk where tk.t11 = f_leixin.leixin )
因为是ACCESS,测试性能的方法很麻烦。
来自:20082008, 时间:2003-4-30 8:47:00, ID:1816097 | 编辑
用哪一句都不行呀??
我在ACCESS里调试:
提示不能在查询数据里进行更新。
原因或者是主建冲突,
或者是锁定冲突;
或者是有效性冲突;
但是我的TK表里有ID,F-LIXIN表里我把ID删除了也不行啊。???
你帮我吧。
来自:xzh2000, 时间:2003-4-30 8:51:00, ID:1816113
那可能ACCESS就不支持这种操作,
用SQL吧。
来自:20082008, 时间:2003-4-30 8:54:00, ID:1816129 | 编辑
可是我的后台数据库用的是ACCESS数据库啊。我不想转呀
你帮帮UP以下对了怎么给你分呀。
好像ACCESS数据结果统计出来了就是不知替换的问题???
你帮帮我吧
我很急的???
来自:卜泰男, 时间:2003-4-30 9:02:00, ID:1816172
UP!
来自:20082008, 时间:2003-4-30 9:07:00, ID:1816213 | 编辑
有一个网友告诉我这样好像可以:
select a.*,(select count(*) from tk where a.leixin=tk.t11) as c from f_leixin a
但是在在某些方面F—LIXIN表新增了一个字段C,它把所有的统计结果放在C里面不能放在指定字段YTI里面呀????
来自:trf, 时间:2003-4-30 11:00:00, ID:1816834
Update 语句应该这样写:
update f_leixin,tk set yti=(select count(tk.*) from tk where f_leixin.leixin=tk.t11)
来自:20082008, 时间:2003-4-30 11:06:00, ID:1816857 | 编辑
我用的是ACCESS数据库
update f_leixin,tk set yti=select count(tk.*) from tk where f_leixin.leixin=tk.t11
运行不了呀。
来自:trf, 时间:2003-4-30 11:48:00, ID:1817133
对不起,写错了,应该:
update f_leixin,tk set f_leixin.yti=(select count(tk.*) from tk where f_leixin.leixin=tk.t11)
来自:20082008, 时间:2003-4-30 11:58:00, ID:1817168 | 编辑
你再帮我试一下在ACCSSE里不能运行提示:
select count(tk.*) from tk where f_leixin.leixin=tk.t11有错误啊
来自:trf, 时间:2003-4-30 12:03:00, ID:1817195
试一下
update f_leixin,tk set f_leixin.yti=(select count(tk.t11) from tk where f_leixin.leixin=tk.t11)
来自:20082008, 时间:2003-4-30 12:08:00, ID:1817220 | 编辑
还是不行啊是不是ACCEES不支持啊。
运行后提示不能更新查询结果呀???
大哥你帮我UP以下吧求你了。
来自:trf, 时间:2003-4-30 12:36:00, ID:1817331
对不起,应该这样,先创建一个表T1,存放满足下面条件记录:
select tk.t11,count(*) as A from tk,f_leixin on tk.t11=f_leixin.leixin
group by tk.t11
然后Update语句:
update f_leixin,T1 set f_leixin.yti=T1.A where f_leixin.leixin=T1.t11
来自:20082008, 时间:2003-4-30 13:05:00, ID:1817424 | 编辑
第一句有问题执行不了