在SQL查询中拆分非名称列
我想使用CSV文件Test1.CSV创建具有自定义列名的记录集 CSV文件格式: (Blank) | SomeAggr | (Blank) | Div1 | Div2 | Div3 ----------------------------------------------------------- G0.1 | 1.23 | | ABC | DEF | GHI G0.2 | 2.45 | | JKL | MNO | PQR G0.3 | 9.02 | | STU | VWX | YZA G1.1 | 3.32 | | ZYX | WVU | TSR G1.2 | 5.53 | | QPO | NML | KJI G1.3 | 1.15 | | HGF | EDC | BAZ G1.4 | 4.65 | | FKJ | OTU | WKL 代码给出了以下错误: [Microsoft][ODBC文本驱动程序]“”不是有效的名称。确保它不包含无效字符或标点符号,并且不太长 我不知道如何获取引用或选择第一个空白列以将其值拆分为两列在SQL查询中拆分非名称列,sql,excel,vba,odbc,ado,Sql,Excel,Vba,Odbc,Ado,我想使用CSV文件Test1.CSV创建具有自定义列名的记录集 CSV文件格式: (Blank) | SomeAggr | (Blank) | Div1 | Div2 | Div3 ----------------------------------------------------------- G0.1 | 1.23 | | ABC | DEF | GHI G0.2 | 2.45
查询在MSAccess中工作,第一个NoName列显示为字段1,第二个NoName列显示为字段3,当我尝试复制您的代码时,我得到以下信息: a) 不确定这是否是问题所在,但您有两个列名称[NoName],因此需要区分这两个列。(b) 你能把非名称列放在方括号里,用单引号代替双引号吗
SELECT
CLng(Replace(Left(NoName, InStr(NoName, ".") - 1), "G", "")) AS [GVal],
CLng(Right(NoName, Len(NoName) - InStr(NoName, "."))) AS [Pos], [SomeAggr] AS [Aggr],
NoName,
[Div1] AS [DV A],
[Div2] AS [DV B],
[Div3] AS [DV C]
FROM
`C:\Temp`\Test.csv
SQL代码需要单引号作为字符串删除器,而不是双引号。在oRs.Fields中每个Fld的
循环中,有两行在构造strSql
时使用双引号而不是单引号:
strSql = strSql & "CLng(Replace(Left(" & Fld.Name & ", InStr(" & Fld.Name & ", ""."") - 1), ""G"", """"))" & " AS [GVal], "
strSql = strSql & "CLng(Right(" & Fld.Name & ", Len(" & Fld.Name & ") - InStr(" & Fld.Name & ", ""."")))" & " AS [Pos], "
这些应改为:
strSql = strSql & "CLng(Replace(Left(" & Fld.Name & ", InStr(" & Fld.Name & ", '.') - 1), 'G', ''))" & " AS [GVal], "
strSql = strSql & "CLng(Right(" & Fld.Name & ", Len(" & Fld.Name & ") - InStr(" & Fld.Name & ", '.')))" & " AS [Pos], "
发布您正在生成的完整SQL语句可能会很有用。我猜简单地指定一个列别名就可以解决这个问题(选择xyz作为ColumnAlias
)。@Martin如您所见,我正在指定别名,例如将第一列拆分为[GVal]、
和第一列拆分为[Pos]
。不工作!!!让我看看是否可以编辑帖子以共享SQL查询。您是否在问题行之前尝试过执行Debug.Print strSql
,以便验证字符串值是否符合预期?@Mistella,您刚才删除了之前的注释?这就是答案!它正在工作。:-)你能把你的答案再贴一次吗,这样我就可以接受它作为解决方案了?非常感谢。。。。(从我的错误中吸取教训)@sifar我会将我的评论作为回答转发记录集已经为没有标题的列提供了NoName
名称。至于Mistella给出的解决方案,就是对“.”、“G”和“”使用单引号,而不是双引号。希望这有帮助。感谢@Mistella指出我做错了什么…从我的错误中吸取教训…:-)
strSql = strSql & "CLng(Replace(Left(" & Fld.Name & ", InStr(" & Fld.Name & ", '.') - 1), 'G', ''))" & " AS [GVal], "
strSql = strSql & "CLng(Right(" & Fld.Name & ", Len(" & Fld.Name & ") - InStr(" & Fld.Name & ", '.')))" & " AS [Pos], "