为何取记录集时,用 select 字段名 as 字段名 from tablename 这种写法,用 as 的字段无法更新呢?

gssbjtx 2006-04-02 07:33:41
sql = "select isnull(name1) as name1 from table where no =1"
rs.open sql,conn

我发现用as 不行,必须写成:
select name1 from table where no =1
这是为何呀?使用as就不能更新吗?

字段只要用了 as 就无法更新了,也就是执行 rs.update时就报错.
...全文
377 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vovo2000 2006-04-03
  • 打赏
  • 举报
回复
同意楼上的,我认为楼住的问题也Sql上的问题,不知vb程序的问题
phommy 2006-04-03
  • 打赏
  • 举报
回复
sql = "select isnull(name1,0) as name1 from table where no =1"

与as没有关系~ 你可以试试 select name1 as name from table,是可以给name列赋值的

问题在于,sql作为为种查询语言像所有语言一样,只有变量(字段)可以做为赋值运算的左值,计算出的表达式是不能做左值的(你想让计算机自动解方程么...)

楼主遇到的问题的根源是数据库结构。既然把NULL当做0,就应该为name1字段增加not null约束并把默认值设成0,select name1 from table就可以了
ZOU_SEAFARER 2006-04-03
  • 打赏
  • 举报
回复
select XXX as YYY from bb where ----
是在新记录集里面反映字段名字被改变,在以前的记录或这数据库里面是没有被改变的
还想懒够 2006-04-03
  • 打赏
  • 举报
回复
好像是在Access中ISNULL函数就只需要一个参数,而在SQLSERVER中就需要两个参数了
gssbjtx 2006-04-03
  • 打赏
  • 举报
回复
谢谢楼上,可是我反复试过了,字段名如果用as指定了以后,在记录集中是不可更新的,
不加isnull就能试,我加上isnull只是想说明我为何使用as来指定一下字段名.
比如:
select XXX as XXX from bb where ----
这样的话,XXX这个字段就是无法更新的.
SunshineRide 2006-04-03
  • 打赏
  • 举报
回复
不是很明白你的意思.
你要用isnull函数的话,并不会在查询的时候修改字段值,而只是在显示的时候替换字段中的NULL值为指定值.

as只是为字段指定一个别名.和原字段一样使用。所以肯定不存在不更新的说法.

我猜想你的意思是想取出name1为null值的数据吧?然后下面再更新?那么,你该这样来做.

sql = "select isnull(name1) as name1 from table where no =1"
rs.open sql,conn

改为:
sql="select name1 form table where no=1 and name1 is null"

附带上isnull的语法:

ISNULL
使用指定的替换值替换 NULL。

语法
ISNULL ( check_expression , replacement_value )

参数
check_expression

将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。

replacement_value

在 check_expression 为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。

返回类型
返回与 check_expression 相同的类型。

注释
如果 check_expression 不为 NULL,那么返回该表达式的值;否则返回 replacement_value。
gssbjtx 2006-04-02
  • 打赏
  • 举报
回复
左手,isnull(name1,0)不可以吧~
-----------------
是不可以,可是为什么呀?能告我吗?
谢谢。
gssbjtx 2006-04-02
  • 打赏
  • 举报
回复
sql = "select isnull(name1,0) as name1 from table where no =1"
-------------------
谢谢,是我打字小打了,并不是这的问题,
你的代码也是无法更新的。
您可以试试
西雀 2006-04-02
  • 打赏
  • 举报
回复
左手,isnull(name1,0)不可以吧~
饮水需思源 2006-04-02
  • 打赏
  • 举报
回复
sql = "select isnull(name1,0) as name1 from table where no =1"

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧