Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

如何提取表中保存的表名

jiangpo  发表于:2009-04-29 11:12:37  
复制

    如何提取表中保存的表名

 

    我需要执行下列语句的功能:

   

    strt = "UPDATE 13 SET [13].位置 = '" & Me.位置 & "' WHERE (([编号] = " & Val(Me.编号) & ")"

    DoCmd.RunSQL strt

   

    这个语句执行的结果是正确的。

   

    现在的问题是,我需要根据窗体Me.xianlu的内容来变更不同的表,13仅仅是若干张表中的一个。希望达到如下的功能:

   

    strt = "UPDATE Me.xianlu SET [Me.xianlu].位置 = '" & Me.位置 & "' WHERE (([编号] = " & Val(Me.编号) & ")"

   

    很显然这个语句的格式不对,请问各位老师:如何提取出Me.xianlu(或某一变量)中保存的表名(或字段名)?语句的正确书写格式?如果直接写不能完成,请问有什么别的变通的方法?

 

Top
jiangpo 发表于:2009-04-29 11:14:20

问题提得有错误,对不起。应该是“如何提取变量中保存的表名”。



豆豆 发表于:2009-04-29 14:28:12
“表名”或者“字段名”是不允许用变量代替。
你必须用 VBA 来控制 SQL 字串的组合

dim strsql as string
dim strTableName as string
dim strFilter as string
dim i as integer
strTableName=Me.xianlu
strsql="select * from " & strTableName

'用ado打开,进行更新
dim rs as new adodb.recordset
rs.open strsql,currentproject.connection,1,1
strFilter="[编号] = " & Val(Me.编号)
rs.filter=strfilter
if rs.recordcount<1 then exit sub
rs.movefirst
For i = 0 To rs.recordcount-1
rs("位置") =Me.位置
rs.update
rs.movenext
next i
rs.close
set rs=nothing
注意:以上代码是在记事本中写成,具体能否执行请在程序中测试。

jiangpo 发表于:2009-04-29 15:21:29

首先要感谢chaojianan老师。我测试了一下:

 

我的Me.xianlu中仍旧是13,在13 这张表中有1300多条记录,但是执行到

For i = 0 To rs.recordcount-1  的时候,rs.recordcount的数值是1,所以往下执行的时候就报错了。

 

chaojianan老师帮助分析一下问题出在什么地方?



jiangpo 发表于:2009-04-29 15:32:48

补充一点:

 

我的strFilter中的条件是复合条件,我这样写是否正确:

 

strFilter= "(([编号] = " & Val(Me.编号) & ") AND ([位置] = '" & Me.位置 & "'))"

 

其中:编号--数字型、位置--文本型

 



豆豆 发表于:2009-04-29 17:10:14

strFilter= "(([编号] = " & Val(Me.编号) & ") AND ([位置] = '" & Me.位置 & "'))"

改为

strFilter= "[编号] = " & Val(Me.编号)

strFilter=strFilter & " AND [位置] = '" & Me.位置 & "'"

试试。

或者上传下你的附件。只需要简单的几个数据即可。

 

 



豆豆 发表于:2009-04-29 17:16:55

或者改为

For i = 0 To rs.recordcount-1
rs("位置") =Me.位置
rs.update

if not rs.eof then rs.movenext
next i

 



jiangpo 发表于:2009-04-30 10:26:32

chaojianan老师费心看看我上传的示例,多谢!

点击下载此附件



trynew 发表于:2009-04-30 11:13:53
执行下列语句试试:

   

    strt = "UPDATE " & Me.xianlu & " SET 位置 = '" & Me.位置 & "' WHERE (([编号] = " & Val(Me.编号) & ")"

    DoCmd.RunSQL strt



豆豆 发表于:2009-04-30 11:47:17

rs.open strsql,currentproject.connection,1,1

改为

rs.Open strsql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic

试试。

 



豆豆 发表于:2009-04-30 12:01:40

如果用斑竹的代码,请在附件中修改

    strsql = "UPDATE " & Me.线路 & " SET 广告位置 = '" & Me.广告位置 & "',传真位置='" & Me.传真位置 & "' WHERE [媒体编号] = " & Val(Me.媒体编号) & " AND [位置] = '" & Me.位置 & "' AND [媒体类型] = '" & Me.媒体类型 & "' AND [车站] = '" & Me.车站 & "'"
 DoCmd.RunSQL strsql


 



jiangpo 发表于:2009-04-30 12:50:15
多谢trynew 、chaojianan老师,我先试试。

jiangpo 发表于:2009-04-30 13:14:44

感谢trynew 、chaojianan二位老师!通过chaojianan老师的帮助,我学会了一种方法;trynew老师的方法正是我想要的,只是不知道具体写法。现在两种方法都通过测试了,再次表示感谢!



总记录:12篇  页次:1/1 9 1 :