2011-05-07 9 views
0

テキストファイルをAccess 2007テーブルに読み込もうとしています。私はあなたが行ごとにファイルを読むことができ、各行からレコードを作成できることを知っています。私は、これがINSERT INTOで行えるのかどうかを調べようとしていました。私のテキストファイルは文字区切りではなく、固定列幅です。たとえば:とにかく、私はVB2005固定長のテキストファイルをAccess2007テーブルにインポート...ほぼ?

Dim sImportFolder As String = "C:\MyData" 
    Dim sSource As String = "C:\data.accdb" 
    Dim sImportFile As String = "week.txt" 

    Dim AccessConn As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sSource & ";Persist Security Info=True;Jet OLEDB:Database Password=blah") 
    AccessConn.Open() 'open the connection to the database 

    Dim AccessCommand As New System.Data.OleDb.OleDbCommand("INSERT INTO [tblData] ([PtDate], [PtSpeed], [PtWt], [PtCar], [PtFuel]) SELECT F1, F2, F3, F4, F5 FROM [Text;DATABASE=" & sImportFolder & ";].[" & sImportFile & "]") 
    AccessCommand.Connection = AccessConn 
    AccessCommand.ExecuteNonQuery() 

    AccessConn.Close() 

をしようとしていた

Date Speed Weight CarID Fuel 
1120 200  10000 T230  200 
1112 215  11000 F3AE  160 

例のデータは、読みやすくするためのスペースを持っているが、実際にデータがそう

112020010000T230200 
111221511000F3AE160 

のように一緒に凝集している私は姿をカントどのようにデータが構造化されているかをコマンドに伝える方法を説明します。私はあなたがスキーマファイルを使用できることは知っていますが、コード全体を通してこれを行う方法が必要です。

AGP

答えて

0

SOここに同様の質問があります:

Read fixed width record from text file

基本的には、答えはあなたがスキーマを指定するには、コード内で行うことができますシンプルなものがないということで、それはあなたのために壊れた。あなたがする必要があるのは、各行をループするか、SubStringを使ってデータを引き出し、行ごとに1つの挿入(あまり効率的ではない)を行うか、ループ内にDataTableを作成してからアクセスに挿入することですDataTableを使用してDataTableを構築するには、(SubStringまたはRegExを使用して)データを解析する必要があります。

+0

私はこのすべてを混乱させています。 Access/Jet/ACEは、列幅を定義する限り、固定幅ファイルの読み込みに問題ありません。これは、Access内のインポートウィザードを使用して行うことができます。次に、インポート仕様(および/またはschema.iniファイル)をAccessの外部のコードで使用できます。 –

+0

わかりました。私は内部のAccess仕様やschema.iniファイルに依存せずにアプローチしたいと思っていました。多分それはできません。その場合、私は選択肢がないかもしれません。 – sinDizzy

+0

私はファイルを直接開いて歩くこと以外は何もする方法は考えられません。しかし、列の境界がどこから外れているかを知る必要があるので、そのアプローチがどのようにして代替案よりも優れているかはわかりません。 –

関連する問題