设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1041|回复: 7
打印 上一主题 下一主题

[其它] 求助

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2011-11-25 19:09:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 鱼儿游游 于 2011-11-25 19:11 编辑

我想在下面字符串中,准确找出各字段的名字(字段A、[字段B]、字段C )?
strString=“字段A = '增值税' AND [字段B] = 'XXXX') OR (字段C >100 AND [字段B ] = 'YYYY')”

哪位朋友帮下忙?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2011-11-25 19:32:20 | 只看该作者
都加上中括弧,用Split+For很容易处理呀。

点击这里给我发消息

3#
 楼主| 发表于 2011-11-25 20:09:13 | 只看该作者
roych 发表于 2011-11-25 19:32
都加上中括弧,用Split+For很容易处理呀。

难呀,我的本意就是怎么取出记录集的筛选条件中的各字段名,然后,用指定的字符代替(加上别名)。不然,如果是连接的记录集,你对记录集进行查找、求和时,只取字段名,可能会出错的(表间如果有相同的字段名时,就会出错)。
4#
发表于 2011-11-25 20:15:26 | 只看该作者
做一个对照表
5#
发表于 2011-11-25 20:27:05 | 只看该作者
循环 from语句的表名(查询名)的各个字段名,用instr来匹配一下,就算这个string是来源于窗体的filter属性,也有办法找到来源那个表,from后面有几个左右连接,就循环几次

点击这里给我发消息

6#
发表于 2011-11-25 20:43:01 | 只看该作者
2楼的似乎可行呀

点击这里给我发消息

7#
 楼主| 发表于 2011-11-25 22:12:17 | 只看该作者
本帖最后由 鱼儿游游 于 2011-11-25 22:14 编辑
t小宝 发表于 2011-11-25 20:43
2楼的似乎可行呀


我用下面的方法基本可行了,待改进的地方:当有某字段名是另一字段名的一部分时,会出错。

' 如数据源的SELECT语句字段名有别名,把 strFilter 中的所有字段加上原来的别名
'
Private Function AddAliasNameIntoFilter(ByVal strSQL_FieldList As String, ByVal strFilter As String) As String
    Dim arrFieldName() As String
    Dim strFieldName   As String  '不含[]的字段名
    Dim intPos         As Integer
    Dim intI           As Integer
    '取SQL语句中的字段
    arrFieldName = Split(strSQL_FieldList, ",")
    strResult = ""
    For intI = LBound(arrFieldName) To UBound(arrFieldName) Step 1
       arrFieldName(intI) = Trim(Nz(arrFieldName(intI), ""))
       intPos = InStr(1, arrFieldName(intI), ".", vbTextCompare)
       If intPos > 0 Then
          strFieldName = Trim(Mid(arrFieldName(intI), intPos + 2))
          strFieldName = Trim(Left(strFieldName, Len(strFieldName) - 1))
          strFilter = Replace(strFilter, strFieldName, "[" & strFieldName & "]", 1, -1, vbTextCompare)                'YYY ------> [YYY]
          strFilter = Replace(strFilter, "[[" & strFieldName & "]]", "[" & strFieldName & "]", 1, -1, vbTextCompare)  '[[YYY]] --> [YYY]
          strFilter = Replace(strFilter, "[" & strFieldName & "]", arrFieldName(intI), 1, -1, vbTextCompare)          '[YYY] ----> [XXX].[YYY]
       End If
    Next
    AddAliasNameIntoFilter = strFilter
End Function

点评

当有某字段名是另一字段名的一部分时,会出错。 强制加上"[]"号还会出错吗  发表于 2011-11-25 23:36

点击这里给我发消息

8#
 楼主| 发表于 2011-11-26 09:41:18 | 只看该作者
鱼儿游游 发表于 2011-11-25 22:12
我用下面的方法基本可行了,待改进的地方:当有某字段名是另一字段名的一部分时,会出错。

' 如数 ...

强制加 []是没问题,但当数据源的SELECT语句里的字段列表没有[]时,就可能出错了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-2 23:07 , Processed in 0.090594 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表