Office中国论坛/Access中国论坛

标题: 求助 [打印本页]

作者: 鱼儿游游    时间: 2011-11-25 19:09
标题: 求助
本帖最后由 鱼儿游游 于 2011-11-25 19:11 编辑

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

哪位朋友帮下忙?
作者: roych    时间: 2011-11-25 19:32
都加上中括弧,用Split+For很容易处理呀。
作者: 鱼儿游游    时间: 2011-11-25 20:09
roych 发表于 2011-11-25 19:32
都加上中括弧,用Split+For很容易处理呀。

难呀,我的本意就是怎么取出记录集的筛选条件中的各字段名,然后,用指定的字符代替(加上别名)。不然,如果是连接的记录集,你对记录集进行查找、求和时,只取字段名,可能会出错的(表间如果有相同的字段名时,就会出错)。
作者: andymark    时间: 2011-11-25 20:15
做一个对照表
作者: yehf    时间: 2011-11-25 20:27
循环 from语句的表名(查询名)的各个字段名,用instr来匹配一下,就算这个string是来源于窗体的filter属性,也有办法找到来源那个表,from后面有几个左右连接,就循环几次
作者: t小宝    时间: 2011-11-25 20:43
2楼的似乎可行呀
作者: 鱼儿游游    时间: 2011-11-25 22:12
本帖最后由 鱼儿游游 于 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-26 09:41
鱼儿游游 发表于 2011-11-25 22:12
我用下面的方法基本可行了,待改进的地方:当有某字段名是另一字段名的一部分时,会出错。

' 如数 ...

强制加 []是没问题,但当数据源的SELECT语句里的字段列表没有[]时,就可能出错了。




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