2015-06-21 43 views
-1

我试图将多个CSV文件加载到访问数据库中,但只想从第一列(PID)导入唯一值。我有下面的例程,这将首次工作,但它崩溃了,如果我尝试导入一个具有重复值的文件(所有文件将只有一个发生的每个PID)导入多个不包含重复值的CSV文件SQL

我的CSV有点不规则以及标题从第二行开始,但为了测试,我实际上删除了第一行,但也需要容纳这个以及

有什么建议吗?

Dim OpenMe As New OpenFileDialog 
    Dim FileStr As String = Nothing 

OpenMe.Title = "Please Locate Your Outlets File" 
OpenMe.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.Desktop 
OpenMe.Filter = "CSV Files (*.csv) | *.csv" 
OpenMe.Multiselect = False 
OpenMe.ShowDialog() 
FileStr = OpenMe.FileName 

TextBox1.Text = FileStr 

Dim conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Dropbox\ROutlets\OutletsDB.accdb;") 
conn.Open() 
Dim cmd As New OleDbCommand("INSERT INTO [Outlets] ([PID], [Category], [Sub Category], [Tertiary Category], [Description], [Pack Description]) SELECT DISTINCT [PID], [Category], [Sub Category], [Tertiary Category], [Description], [Pack Description] FROM [Text;Database=C:\Users\Tset\Desktop;Hdr=Yes].[outlet-products111.csv] ", conn) 
cmd.ExecuteNonQuery() 
conn.Close() 
MsgBox("File Imported") 

回答

0

DISTINCT不适用于您,因为其他列中的值在后续行中不同。

我会在两个阶段做到这一点。

  1. 插入行到一个临时表不具有主键约束它
  2. 使用其他逻辑(SQL或VB)制定出它记录你插入[Outlets]

或者,您必须遍历每条记录,然后测试您是否应为每个记录执行INSERTUPDATE