对表造假字段,并且可以维护此字段
我用TADOQuery打开一张表,为了用户看打开的内容容易理解,我需要在打开的表中造一个假字段,打此字段的值是可以修改的.如:
我打开表Temp(a,b,c)但我打开后显示给用户看时是多一列t:
a b c
11 22 33
44 55 66
77 88 99
ww ff ss
gg cc bb
我要显示给用户看时
a b c t
11 22 33 1
44 55 66 2
77 88 99 3
ww ff ss 4
gg cc bb 5
问题点数:50、回复次数:53Top
1 楼lzgctgc(理引商务)回复于 2004-02-01 15:16:37 得分 0
怎么没有人吗?同志们快帮忙啊?Top
2 楼lzgctgc(理引商务)回复于 2004-02-01 15:35:52 得分 0
upTop
3 楼chenylin(陈SIR)回复于 2004-02-01 16:10:20 得分 1
Select a,b,c,Right(a,1) as t from TempTop
4 楼IDWB()回复于 2004-02-01 16:31:08 得分 1
Select a,b,c,identity(int,1,1) as t into #abc from Temp
select * from #abc
Top
5 楼hthunter(茫茫然时光飞逝)回复于 2004-02-01 16:33:55 得分 1
打此字段的值是可以修改的?不是很明白你这句话的意思
sql语句:
select a, b, c, identity(int, 1, 1) as t
into #temp1
from temp
select *
from #temp1
order by t
drop table #temp1
或者你显示列表数据时不要用数据绑定的控件,这样你想要显示什么数据就都可以随意控制了Top
6 楼lzgctgc(理引商务)回复于 2004-02-01 16:58:00 得分 0
我不想用临时表,不知能否实现Top
7 楼lzgctgc(理引商务)回复于 2004-02-01 16:59:31 得分 0
如果用临时表我也就不麻烦大家了Top
8 楼lzgctgc(理引商务)回复于 2004-02-01 18:08:58 得分 0
我自己UPTop
9 楼ffzhlz()回复于 2004-02-02 08:30:37 得分 1
帮你upTop
10 楼hthunter(茫茫然时光飞逝)回复于 2004-02-02 10:23:29 得分 1
计算字段Top
11 楼hthunter(茫茫然时光飞逝)回复于 2004-02-02 10:24:01 得分 1
不用临时表就用计算字段啊,呵呵Top
12 楼lzgctgc(理引商务)回复于 2004-02-02 10:55:31 得分 0
我的表是不却定的,也不能用计算字段啊,计算字段是不可以动态增加的.Top
13 楼lzgctgc(理引商务)回复于 2004-02-02 10:57:47 得分 0
没有其它方法了Top
14 楼lzgctgc(理引商务)回复于 2004-02-02 11:13:15 得分 0
失望啊,没有人能解决了Top
15 楼ffzhlz()回复于 2004-02-02 13:06:13 得分 1
帮你upTop
16 楼hthunter(茫茫然时光飞逝)回复于 2004-02-02 13:30:41 得分 1
计算字段怎么不能动态增加了呢?你在数据集的OnCalcFields事件将DataSet.RecNo赋值给那个计算字段不就行了Top
17 楼ffzhlz()回复于 2004-02-02 13:40:46 得分 1
是的,在程序执行是是不可以加计算字段的Top
18 楼lzgctgc(理引商务)回复于 2004-02-02 14:45:14 得分 0
upTop
19 楼ffzhlz()回复于 2004-02-02 15:50:22 得分 1
失望啊,没有人能解决了,我也感兴趣的话题Top
20 楼ffzhlz()回复于 2004-02-02 18:59:42 得分 1
upTop
21 楼raywu(ray)回复于 2004-02-02 20:22:58 得分 0
declare
@a int
set @a=0
select a,b,c,(@a+1) as [t] from tempTop
22 楼hthunter(茫茫然时光飞逝)回复于 2004-02-02 21:14:54 得分 1
to raywu(ray), 你这样的执行结果是t那列全是1,呵呵Top
23 楼lywho(阿勇)回复于 2004-02-02 21:32:34 得分 1
试试这个:
select a,b,c,rowid as t from tempTop
24 楼lzgctgc(理引商务)回复于 2004-02-03 08:36:01 得分 0
upTop
25 楼lzgctgc(理引商务)回复于 2004-02-03 08:57:43 得分 0
如果谁能按照我的要求做出,我连放出100分给他Top
26 楼hthunter(茫茫然时光飞逝)回复于 2004-02-03 10:14:39 得分 10
1、ADOQuery1的LockType设置为ltBatchOptimistic(这是必须的,否则第三步会出错)
2、ADOQuery1的sql为如下内容:
ALTER TABLE table1 ADD [id] int NULL --添加临时字段
select * from table1 --这是你的查询语句,id字段必须包含在里面
ALTER TABLE table1 DROP COLUMN [id] --删除临时字段
3、然后在ADOQuery1的OnAfterOpen事件里面这样写:
with DataSet do
begin
First;
while (Eof = False) do
begin
Edit;
FieldValues['id'] := RecNo;
Next;
end;
First;
end;
以上代码我在自己的机器测试通过,但是这样的效率估计跟用临时表差不多(或者稍高。我的表数据少,没办法比较)Top
27 楼hthunter(茫茫然时光飞逝)回复于 2004-02-03 10:18:31 得分 5
这就是造了一个假的字段(当你看到它时,它实际上已经不存在),不过这个ADOQuery1就不能用来向服务器提交数据了,否则出错。如果你确实需要更新数据,那在ADOQuery1的sql里面先不要删除那个临时字段,只有在ADOQuery1的OnAfterClose事件才执行:
ADOConnection1.Execute('ALTER TABLE table1 DROP COLUMN [id] ');Top
28 楼lzgctgc(理引商务)回复于 2004-02-03 11:46:05 得分 0
to:hthunter(核桃-我的心在下雨,雨中我和她一起漫步)
我来试试如果行我晚上结贴Top
29 楼hthunter(茫茫然时光飞逝)回复于 2004-02-03 12:27:17 得分 0
当然这中间的一些异常情况就需要你自己考虑的了,例如创建或者删除字段之前判断是否已存在。因为要考虑到程序出现异常或者意外中止时,id字段没有创建或者创建用完之后没有删除等情况。靠你自己完善了,呵呵Top
30 楼lzgctgc(理引商务)回复于 2004-02-03 14:50:31 得分 0
我看思路是正确的,等我有时间测试一下Top




