Ms access 使用Select Distinct并编辑第二列中的输出
我有一个从另一个表中提取的唯一名称列表 我想知道是否可以同时使用相同的SQL查询将特殊字符从这些不同的值中删除到另一列中 这是因为我随后将不得不使用这些名称作为表名,其中一些名称存在命名问题,例如太长或包含特殊字符 我确实有一个Ms access 使用Select Distinct并编辑第二列中的输出,ms-access,vba,Ms Access,Vba,我有一个从另一个表中提取的唯一名称列表 我想知道是否可以同时使用相同的SQL查询将特殊字符从这些不同的值中删除到另一列中 这是因为我随后将不得不使用这些名称作为表名,其中一些名称存在命名问题,例如太长或包含特殊字符 我确实有一个函数(),它在vba代码中返回一个过滤字符串,但不确定如何将其合并到SQL查询中 这是我现在使用的查询: SQL = "INSERT INTO [ClientNameList] (ClientName) SELECT DISTINCT TempName.[ClientNa
函数()
,它在vba代码中返回一个过滤字符串,但不确定如何将其合并到SQL查询中
这是我现在使用的查询:
SQL = "INSERT INTO [ClientNameList] (ClientName) SELECT DISTINCT TempName.[ClientName] FROM TempName"
输出:
Table Name: ClientNameList
ID ClientName TableName
1 Cat. Cat
2 Dog! Dog
3 MooMoo? MooMoo
您可以使用/修改此功能:
' Returns a cleaned and truncated string suitable as a code module name.
'
' 2017-03-06. Gustav Brock, Cactus Data ApS, CPH.
'
Public Function TrimModuleCodeName( _
ByVal Name As String) _
As String
CleanModuleCodeName Name
TrimModuleCodeName = Name
End Function
' Replaces characters in CodeName that are not allowed in a module codename.
' Truncates length of CodeName to MaxModuleCodeNameLength.
' Returns the cleaned name by reference.
'
' 2017-03-06. Gustav Brock, Cactus Data ApS, CPH.
'
Public Sub CleanModuleCodeName(ByRef CodeName As String)
' Maximum length of a module codename in Excel.
Const MaxModuleCodeNameLength As Long = 31
' String containing all not allowed characters.
Const InvalidCharacters As String = "\/,;.:*?'`""<>|()[]{} @#$%&=+-~^"
' String containing all not allowed leading characters.
Const InvalidLeadCharacters As String = "_0123456789"
' Character to replace not allowed characters.
Const ReplaceCharacter As String * 1 = "_"
' Character to replace not allowed characters.
Const ReplaceLeadCharacter As String * 1 = "M"
Dim Length As Integer
Dim Position As Integer
Dim Character As String
Dim TrimmedCodeName As String
' Strip doubled spaces.
While InStr(CodeName, Space(2)) > 0
CodeName = Replace(CodeName, Space(2), Space(1))
Wend
' Strip leading and trailing spaces and limit length of codename.
TrimmedCodeName = Left(Trim(CodeName), MaxModuleCodeNameLength)
Length = Len(TrimmedCodeName)
' Replace invalid characters.
For Position = 1 To Length Step 1
Character = Mid(TrimmedCodeName, Position, 1)
If InStr(InvalidCharacters, Character) > 0 Then
Mid(TrimmedCodeName, Position) = ReplaceCharacter
End If
Next
' Replace a leading invalid character:
Character = Left(TrimmedCodeName, 1)
If InStr(InvalidLeadCharacters, Character) > 0 Then
Mid(TrimmedCodeName, 1) = ReplaceLeadCharacter
End If
' Return cleaned code name.
CodeName = TrimmedCodeName
End Sub
使用此功能的:
' Returns a cleaned and truncated string suitable as a code module name.
'
' 2017-03-06. Gustav Brock, Cactus Data ApS, CPH.
'
Public Function TrimModuleCodeName( _
ByVal Name As String) _
As String
CleanModuleCodeName Name
TrimModuleCodeName = Name
End Function
' Replaces characters in CodeName that are not allowed in a module codename.
' Truncates length of CodeName to MaxModuleCodeNameLength.
' Returns the cleaned name by reference.
'
' 2017-03-06. Gustav Brock, Cactus Data ApS, CPH.
'
Public Sub CleanModuleCodeName(ByRef CodeName As String)
' Maximum length of a module codename in Excel.
Const MaxModuleCodeNameLength As Long = 31
' String containing all not allowed characters.
Const InvalidCharacters As String = "\/,;.:*?'`""<>|()[]{} @#$%&=+-~^"
' String containing all not allowed leading characters.
Const InvalidLeadCharacters As String = "_0123456789"
' Character to replace not allowed characters.
Const ReplaceCharacter As String * 1 = "_"
' Character to replace not allowed characters.
Const ReplaceLeadCharacter As String * 1 = "M"
Dim Length As Integer
Dim Position As Integer
Dim Character As String
Dim TrimmedCodeName As String
' Strip doubled spaces.
While InStr(CodeName, Space(2)) > 0
CodeName = Replace(CodeName, Space(2), Space(1))
Wend
' Strip leading and trailing spaces and limit length of codename.
TrimmedCodeName = Left(Trim(CodeName), MaxModuleCodeNameLength)
Length = Len(TrimmedCodeName)
' Replace invalid characters.
For Position = 1 To Length Step 1
Character = Mid(TrimmedCodeName, Position, 1)
If InStr(InvalidCharacters, Character) > 0 Then
Mid(TrimmedCodeName, Position) = ReplaceCharacter
End If
Next
' Replace a leading invalid character:
Character = Left(TrimmedCodeName, 1)
If InStr(InvalidLeadCharacters, Character) > 0 Then
Mid(TrimmedCodeName, 1) = ReplaceLeadCharacter
End If
' Return cleaned code name.
CodeName = TrimmedCodeName
End Sub
是否总是只有一个特殊字符位于末尾?使用Left和Len函数:
Left(ClientName,Len(ClientName)-1)
。为什么每个ClientName都有一个表?不,字符串中也有特殊字符。大多数公司的名字都很常见,比如“布拉布拉私人有限公司”、“吉姆的面包店”或“购物中心的Ace”。所以你想以“JimsBakery”和“AcetheMall”结尾?没有实现这一点的内在功能。创建VBA自定义函数。命名约定中可以使用特殊字符,但不建议使用。没有回答其他问题。你到底为什么要为每个客户安排一张桌子?啊,我很抱歉。我已将各个客户的消费数据存储在各个表中。因此,这个包含所有名称的表就像一个映射表,知道客户机名称会将用户引导到相应的表。是的,我也怀疑。然后我将循环代码。谢谢整洁?每次你得到一个新的客户端,你就必须创建一个新的表?这实际上是糟糕的关系数据库设计。功能数据库应该很少需要修改设计。应该是一个表和另一个客户端字段(实际上应该是ID而不是name)。此外,在某个时候,您将需要将所有这些数据放在一个数据集中,并且必须借助联合查询来完成。通过筛选分离数据比合并更容易。