2015-09-04 56 views
2

我需要导入文本文件导入Access表,但在TXT文件使用进口条件。VBA代码 - 导入文本文件到Access表 - 随着条件

以下是我的VBA代码。它仅在您不使用WHERE子句时起作用,因为它要求输入参数。我认为问题在于缺少的字段格式规范。

你推荐哪些调整?任何建议,将不胜感激。

文本文件 - Teste.txt

1;24;433;43;5 
2;436;424;43;24 
3;5454;656;656;555 
4;545;545;0;0 
5;65465;756;0;0 

我的代码VBA访问:

Sub MyTableImport() 

    Dim sqlStr As String 

    sqlStr = "SELECT * INTO NewTable " 
    sqlStr = sqlStr & " FROM [Text;HDR=Yes;FMT=Delimited;Database=C:\Temp].Teste.txt " 
    sqlStr = sqlStr & " WHERE field4 <> '0' AND field5 <> '0';" 

    DoCmd.SetWarnings False 
    DoCmd.RunSQL sqlStr 
    DoCmd.SetWarnings True 

End Sub 
+0

你可以简单地省略WHERE子句,并做了'DELETE * FROM newtable的WHERE字段4 = '0'OR field5 ='0''后导入。 – Andre

+0

请不要使用setwarnings它是不安全的和系统范围。相反,使用对数据库实例执行。 – Fionnuala

+0

您可能需要,如果您有非标准delimters使用schema.ini文件http://stackoverflow.com/questions/12137085/changing-connection-string-in-excel-messes-up-column-data-types/ 12145949#12145949 – Fionnuala

回答

2

我用了一个Schema.ini方法,as Fionnuala suggested,类似于你在一个有什么问题的早期版本。

与您Teste.txt源文件和的Schema.ini及以下查询,这是newtable的结果。这五个领域是文本数据类型:

enter image description here

这是C:\ TEMP \的Schema.ini

[Teste.txt] 
ColNameHeader=False 
Format=Delimited(;) 
Col1="field1" Text 
Col2="field2" Text 
Col3="field3" Text 
Col4="field4" Text 
Col5="field5" Text 

这是创建newtable的查询:

SELECT t.field1, t.field2, t.field3, t.field4, t.field5 
INTO NewTable 
FROM [Text;HDR=No;FMT=Delimited;Database=C:\Temp].[Teste.txt] AS t 
WHERE (((t.field4)<>'0') AND ((t.field5)<>'0')); 
+0

完美@HansUp/@Fionnuala/@ Andre451。我放了一小段代码从自己的项目中获取文本文件。如下: 'code' 昏暗strFolder作为字符串 strFolder = CurrentProject.Path sqlStr = sqlStr& “FROM [文本; HDR =无; FMT =分隔;数据库=” &strFolder& “] .Teste.txt AS t” 的 –

+0

@HansUp我在我的一个项目中应用了你的方法,但是我得到了不一致的结果。虽然我没有使用文本文件作为源文件,但使用了“xlsb”Excel文件,但我认为这不应该是一个问题(这是我可能会出错的地方)。欣赏,如果你可以检查出来[这里](https://stackoverflow.com/questions/45211483/execute-method-does-not-consistently-execute-all-command-text),我只是想了解为什么它给不一致的结果,并听到你的想法。 – L42