一、表结构1、表TK结构: N1:string; ->名称 N2:string;->内容 t11:string:->类型 tk表存有记录30000条。2、表f-leixin结构: F1:string;->标识名 leixin:string:->类型(有200个不同类型) 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 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)
来自: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
pid xh sc ss kj
lp01 m188 45 63 16
想加入的是 m199 55 26 10
用adoquery,如何加入记录,能说具体点吗?谢谢!
该字段设为自动增加
2. 在增加时先得到pid的值 select pid from table ordry by pid
得到返回的记录集的最后一个值.
再取出返回值的后两位,将它转传数值型并加一.再转回成字符型,
前面加lp拼成 lp02(即新的pid值)
我数据库不是太懂,能否说得更清楚点? 我的表中的pid还有lq01,lj01的。
如果不用自动编号,那就在每增加一条时,找出表中最大的id加1,try
select max(pid) from table
另外一个表的结构可以是
前缀 值
两个字段,前缀字段保存lq,lj,lp 之类的,值保存最后一个值或者下一个值。
1.直接用自增长字段,然后查询时用
select 'ml' + ml2.用recordcount判断,自己计算出值3.保存一个变量或者记录,存储当前的id增长值。
请问怎么把ID设置为标示字段,让它自动加1
谢谢
select * from lpxn where pid like ''lp%'';
N1:string; ->名称
N2:string;->内容
t11:string:->类型
tk表存有记录30000条。2、表f-leixin结构:
F1:string;->标识名
leixin:string:->类型(有200个不同类型)
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 | 编辑
第一句有问题执行不了