Office中国论坛/Access中国论坛

标题: 如何强制转换字段名称? [打印本页]

作者: goto2008    时间: 2007-9-17 16:22
标题: 如何强制转换字段名称?
请看图片.....我想实现这样的效果...
通过"字段设置表"强制地转换"字段表"的名称
作者: andymark    时间: 2007-9-17 16:39
如果不直接在表里更改,只是查询显示直接用
select 字段1 as 小,...... from 表
作者: goto2008    时间: 2007-9-17 16:50
原帖由 andymark 于 2007-9-17 16:39 发表
如果不直接在表里更改,只是查询显示直接用
select 字段1 as 小,...... from 表



大哥....我不想把小,中,大,,,这些写进代码里....因为表是灵活的...
作者: fan0217    时间: 2007-9-17 17:05
用ALTER TABLE 命令修改
ALTER TABLE 命令可以添加或删除表的列、约束,也可以禁用或启用已存在的约束
或触发器。其语法如下:
ALTER TABLE table
{ [ALTER COLUMN column_name
{ new_data_type [ (precision[, scale] ) ]
[ COLLATE < collation_name > ]
[ NULL | NOT NULL ]
| {ADD | DROP} ROWGUIDCOL } ]
| ADD
{ [ <column_definition> ]
| column_name AS computed_column_expression
}[,...n]
| [WITH CHECK | WITH NOCHECK] ADD
{ <table_constraint> }[,...n]
| DROP
{ [CONSTRAINT] constraint_name
| COLUMN column
}[,...n]
| {CHECK | NOCHECK} CONSTRAINT
{ALL | constraint_name[,...n]}
| {ENABLE | DISABLE} TRIGGER
{ALL | trigger_name[,...n]}
}
<column_definition> ::= { column_name data_type }
[ [ DEFAULT constant_expression ]
| [ IDENTITY [(seed, increment ) [NOT FOR REPLICATION] ] ]
]
[ ROWGUIDCOL ]
[ COLLATE < collation_name > ]
[ <column_constraint>] [ ...n]
<column_constraint> ::= [CONSTRAINT constraint_name]
{ [ NULL | NOT NULL ]
| [ { PRIMARY KEY | UNIQUE }
[CLUSTERED | NONCLUSTERED]
[WITH FILLFACTOR = fillfactor]
[ON {filegroup | DEFAULT} ] ] ]
| [ [FOREIGN KEY]
REFERENCES ref_table [(ref_column) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
[NOT FOR REPLICATION ] ]
| CHECK [NOT FOR REPLICATION]
(logical_expression)}
<table_constraint> ::= [CONSTRAINT constraint_name]
{ [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED]
{ ( column [ ASC | DESC ] [,...n] ) }
[ WITH FILLFACTOR = fillfactor]
[ON {filegroup | DEFAULT} ] ]
| FOREIGN KEY
[(column[,...n])]
REFERENCES ref_table [(ref_column[,...n])]
[NOT FOR REPLICATION]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
| CHECK [NOT FOR REPLICATION]
(search_conditions)}
各参数说明如下:


table
指定要修改的表的名称。如果表不在当前数据库中或表不属于当前的用户,就必须指明其所属的数据库名称和所有者名称。
ALTER COLUMN

new_data_type
指定新的数据类型名称,其使用标准如下:
列的原数据类型应可以转换为新的数据类型;
新的数据类型不能为TIMESTAMP;
新的数据类型允许列为NULL 值;
如果原来的列是IDENTITY 列,则新的数据类型应支持IDENTITY 特性;
当前的SET ARITHABORT 设置将被视为处于ON 状态。
precision
指定新数据类型的位数。
scale
指定新数据类型的小数位数。
NULL | NOT NULL
指明列是否允许NULL 值。如果添加列到表中时,指定它为NOT NULL, 则必须指定此列的缺省值。选择此项后,new_data_type [(precision [, scale ])]选项就必须指定,即使precision 和scale 选项均不变,当前的数据类型也需要指出来。
WITH CHECK | WITH NOCHECK
指定已经存在于表中的数据是否需要使用新添加的或刚启用的FOREIGN KEY 约束或CHECK 约束来验证。如果不指定,WITH CHECK 作为新添加约束的缺省选项,WITH NOCHECK 作为启用旧约束的缺省选项。
{ADD | DROP} ROWGUIDCOL
添加或删除列的ROWGUIDCOL 属性。ROWGUIDCOL 属性只能指定给一个 UNIQUEIDENTIFIER 列。
ADD
添加一个或多个列、计算列或表约束的定义。
computed_column_expression
计算列的计算表达式。
DROP { [CONSTRAINT] constraint_name | COLUMN column_name }
指定要删除的约束或列的名称。处于下列情况的列不能删除;
用于复制的列;
用于索引的列;
用于CHECK FOREIGN KEY UNIQUE 或PRIMARY KEY 约束的列;
定义了缺省约束或绑定了一个缺省值对象的列;
绑定了规则(Rule)的列。
{ CHECK | NOCHECK} CONSTRAINT
启用或禁用FOREIGN KEY 或CHECK 约束。
ALL
使用NOCHECK 选项禁用所有的约束,或使用CHECK 选项启用所有的约束。
{ENABLE | DISABLE} TRIGGER
启用或禁用触发器。
ALL
启用或禁用选项针对所有的触发器。
trigger_name
指定触发器名称。
其它参数与创建表和约束中所讲的相同。
例7-13: 创建一个定货商信息表,然后修改简介列的数据类型。
create table order_firm (
order_firm_id char (8) primary key,
firm_name varchar (50) not null
firm_introduce char(50) null
) on [primary]
alter table order_firm
alter column firm_introduce varchar(250) null
例7-14: 创建一个定货表再插入一个定货商编号列。
create table orders(
order_id char(8) ,
p_id char(8) foreign key references products(p_id),
order_quantity smallint check (order_quantity>=10),
constraint pk_order_id primary key (order_id),
) on [primary]
alter table orders
add order_firm_id char(8) null
constraint fk_order_firm_id foreign key references order_firm(order_firm_id)
作者: andymark    时间: 2007-9-17 17:44
原帖由 goto2008 于 2007-9-17 16:50 发表



大哥....我不想把小,中,大,,,这些写进代码里....因为表是灵活的...


那就用别名嘛

select 字段1 as 大......
作者: goto2008    时间: 2007-9-19 15:15
原帖由 cuxun 于 2007-9-17 18:24 发表
小姑娘,你想干啥?



弄这个是...突然想到的....交叉查询....

有时在录一份资料料时.(表格是二维的交叉查询味道)
如:

货号    S     M     L     XL   2XL------(这些字段可能会变化,所以不方便直接设在表里)
5205   10   15    8     5     2
2015   2      8     4     3     2

但换在我们在ACCESS数据库里..一般的习惯却是这样录入的.
ID    货号.    码   数量
1      5205    S    10
2      5205    M    15   
3      5205    L      8
...................


我觉得如果能采用一种二维录入方法....一来看上去直观,二来录入效率也高.
大家觉得了.

[ 本帖最后由 goto2008 于 2007-9-20 11:24 编辑 ]
作者: goto2008    时间: 2007-9-19 15:16
这个问题.......我不知怎么解决...所以就想到..强行替换表字段名称了......
作者: andymark    时间: 2007-9-19 15:19
用别名
select 字段1 as S,字段2 as M .....from 表
作者: goto2008    时间: 2007-9-19 15:24
原帖由 andymark 于 2007-9-19 15:19 发表
用别名
select 字段1 as S,字段2 as M .....from 表


大哥。。弄个库上来看看,行不。。
还有哦,这个S,M,之类的。。。。比如现在是有5个。。。可能随时随地会增加一些我所没见过的字段
总之,表字段会灵活。。那么替换后也要灵活。。。
作者: hi-wzj    时间: 2007-9-20 10:06
但换在我们在ACCESS数据库里..却是这样不直观地录入的.
ID    货号.    码   数量
1      5205    S    10
2      5205    M    15   
3      5205    L      8
...................


我觉得如果能采用一种二维录入方法....一来看上去直观,二来录入效率也高.
----------------------------------------------------------------------------------------------------
我不懂您在输机时眼睛的焦点是放在哪里的。
我的编制原则是尽量做到:
眼睛放在单据上,一只手翻单据,一只手输机。(将字段编码化,以达到一只手只停留在数字键盘上)

货号    S     M     L     XL   2XL ....... 的形式让您的眼睛需要在单据和屏幕间移动,不停的抬头低头.......您不停的抬头低头15分钟试试?
作者: goto2008    时间: 2007-9-20 11:21
郁闷...我可能说得不清楚....大哥好像没明白我的意思....
作者: goto2008    时间: 2007-9-20 11:30
我下午弄个库上来...再大伙研究下...呵呵.
作者: t小宝    时间: 2007-9-20 11:36
这个问题确实不是表达得很清楚,
是不是想以这个表的形式录入数据:

货号    S     M     L     XL   2XL------(这些字段可能会变化,所以不方便直接设在表里)
5205   10   15    8     5     2
2015   2      8     4     3     2
然后以下面这个表的形式保存数据:
ID    货号.    码   数量
1      5205    S    10
2      5205    M    15   
3      5205    L      8
目的是只用输入数量 ,而不用输入码:   S     M     L   ....

[ 本帖最后由 t小宝 于 2007-9-20 11:37 编辑 ]
作者: kangking    时间: 2007-9-20 11:43
建立一个这样的查询,其结果是不是你要的?
SELECT 字段设置表.ID, 字段设置表.新字段 AS 原字段
FROM 字段设置表;
作者: goto2008    时间: 2007-9-20 14:29
原帖由 t小宝 于 2007-9-20 11:36 发表
货号    S     M     L     XL   2XL------(这些字段可能会变化,所以不方便直接设在表里)
5205   10   15    8     5     2
2015   2      8     4     3     2
然后以下面这个表的形式保存数据:
ID    货号.    码   数量
1      5205    S    10
2      5205    M    15   
3      5205    L      8
目的是只用输入数量 ,而不用输入码:   S     M     L   ....



下面这张是车间原本用的手工登记表...
货号    S     M     L     XL   2XL
5205   10   15    8     5     2
2015   2      8     4     3     2

==============================================

在ACCESS里了。如果想保存到表里,按ACCESS的思维就变成了要这样把一个货号拆成几行来录入
ID    货号.    码   数量
1      5205    S    10
2      5205    M    15   
3      5205    L      8
................
...............

录入完后,我们再人为地建交叉查询,以达到类似手工表格的效果。。
货号    S     M     L     XL   2XL
5205   10   15    8     5     2
2015   2      8     4     3     2

这就一个问题了。车间的工人会哇哇叫。。为什么在录入记录时。。为什么不马上采用“交叉查询”这种方式来录了?而非要把一个货号拆成好几行来录?一来不直观,二来货号、尺码每次都要再下拉组合框选择。。重复劳动


[ 本帖最后由 goto2008 于 2007-9-20 14:38 编辑 ]
作者: andymark    时间: 2007-9-20 14:44
结果可以实现
把不同的类别存放在一个字段中,如果处理不好,很容易统计错误

把下面的改用主子窗体输入相对简化一点
ID    货号.    码   数量
1      5205    S    10
2      5205    M    15   
3      5205    L      8
作者: huangqinyong    时间: 2007-9-20 14:59
方法1:将"货号"和各个"码"作为字段名.
方法2:在Excle表中输入,再导入Access来处理.
作者: kangking    时间: 2007-9-20 15:03
终于有点明白楼主的意思了.其实很简单的,换向思维一下,何不就用把表设计成下面这样:
ID          字符   
货号      字符
S           数字
M           数字
L           数字
XL        数字
2XL      数字
录入是就可以实现楼主所说的方法,即:
货号    S     M     L     XL   2XL
5205   10   15    8     5     2
2015   2      8     4     3     2
在你的图中,这个码好象是没有固定的,我认为可以固定,因为这个码是可以枚举的,有10种码不得了了,再多一点也不会多过20个码.所以完全可以用在EXCELL中的录入方式录入,EXCELL中的列就是字段名,这样做对于做查询也不构成障碍.
有时候退一步海阔天空.
作者: t小宝    时间: 2007-9-20 15:10
原帖由 andymark 于 2007-9-20 14:44 发表
结果可以实现
把不同的类别存放在一个字段中,如果处理不好,很容易统计错误

把下面的改用主子窗体输入相对简化一点
ID    货号.    码   数量
1      5205    S    10
2      5205    M    15   
3      520 ...

常规应按版主的做法。

如果一定要按原始形式录入数据,可建一个用于输入的临时表,多预留一些字段,
第一行作为标题,第二行以后用于录入数据,录入完整张表后用代码把数据转存到正表中。
[attach]26401[/attach]
作者: andymark    时间: 2007-9-20 15:18
不需要通过EXCEL,在窗体动态处理标题即可
在窗体预留足够的文本,名称按一定的规律从小到大排列txt0 txt1 txt2...................
作者: andymark    时间: 2007-9-20 15:32
另一方法
在字段不算很多的情况下,直接用S M L 等尺码作为字段,再建一个辅助表
ID 尺码 是否显示
0     s          是
1     M         否
根据辅助表显示与否来控制窗体字段的显示与隐藏
作者: goto2008    时间: 2007-9-20 20:32
原帖由 kangking 于 2007-9-20 15:03 发表
终于有点明白楼主的意思了.其实很简单的,换向思维一下,何不就用把表设计成下面这样:
ID          字符   
货号      字符
S           数字
M           数字
L           数字
XL        数字
2XL      数字 ...



这种方法,,是最原始的......往往把字段固定死了..日后又要增加新的...就完完了
整个库就要开始再大刀地修改了....
作者: goto2008    时间: 2007-9-20 20:33
谢谢小宝,andymark..kangking ..等等大哥的回答..

这个问题....也是一直困扰我的..
作者: goto2008    时间: 2007-9-20 22:12
原帖由 andymark 于 2007-9-20 15:18 发表
不需要通过EXCEL,在窗体动态处理标题即可
在窗体预留足够的文本,名称按一定的规律从小到大排列txt0 txt1 txt2...................


你这方法和小宝大哥说的是同一个意思吗
作者: andymark    时间: 2007-9-20 22:35
跟小宝的方法不同
作者: andymark    时间: 2007-9-20 22:47
原帖由 andymark 于 2007-9-20 15:32 发表
另一方法
在字段不算很多的情况下,直接用S M L 等尺码作为字段,再建一个辅助表
ID 尺码 是否显示
0     s          是
1     M         否
根据辅助表显示与否来控制窗体字段的显示与隐藏


如果你一定要坚持类似交叉表的输入,用上面的方法比较简单
作者: liwen    时间: 2007-9-20 23:32
原帖由 kangking 于 2007-9-20 15:03 发表
在你的图中,这个码好象是没有固定的,我认为可以固定,因为这个码是可以枚举的,有10种码不得了了,再多一点也不会多过20个码.所以完全可以用在EXCELL中的录入方式录入

这样也未必不可,你说的随意,实际上并不会是随意的(如果你真的要随意那就另当别论,那就可以采用andymark或小宝的方法)
作者: 静儿    时间: 2007-9-21 09:14
不知道goto2008jj头晕了没有,
作者: goto2008    时间: 2007-9-21 09:42
原帖由 静儿 于 2007-9-21 09:14 发表
不知道goto2008jj头晕了没有,


你说了....
作者: liwen    时间: 2007-9-21 10:03
goto2008的表的设计是否还差一个字段?

如对应的批次或日期之类的?

不然你一个表怎么记录多个EXCEL的文件内容?
作者: goto2008    时间: 2008-4-10 16:18
说实话,我自己也有点晕了




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3