• 締切済み

CSVファイルをMDBに取り込む

お世話になります。 現在、在庫管理の簡易システムを作成しています。 環境は、下記の通りです。 言語:VB2005 DB:Access2003 AccessのテーブルにCSVの在庫データの取り込みを作成中ですが、下記のエラーが発生します。 「ファイル 'C:\Temp\HAS4PJ\HZaiko20090319160646.mdb' が見つかりませんでした。」 デバッグをすると、CSVのファイル名は確かに「ファイル名.csv」なのですが、 エラーで表示されるファイル名は、「ファイル名.mdb」と表示されます。 因みにソースは下記の通りです。 ------------------------------------ Dim csvNm As String Dim fbd As New FolderBrowserDialog Dim ofd As New OpenFileDialog With ofd .Title = "本社在庫取込" .FileName = "HZaiko*.csv" .FilterIndex = 1 .Filter = "CSVファイル(*.csv)|*.csv|すべてのファイル(*.*)|*.*" .Multiselect = False .InitialDirectory = Application.StartupPath & "\CSV\" If .ShowDialog = Windows.Forms.DialogResult.OK Then csvNm = .FileName Dim tfp As New FileIO.TextFieldParser(csvNm, System.Text.Encoding.GetEncoding(932)) MsgBox(csvNm) tfp.Delimiters = New String() {","} Dim Cnn As New OleDb.OleDbConnection(My.Settings.HAS4DBConnectionString) Dim Cmd As OleDb.OleDbCommand = Cnn.CreateCommand() Cnn.Open() Dim sSQL As String = "SELECT * FROM " & csvNm Dim dt As New DataTable Dim Da As New OleDb.OleDbDataAdapter(sSQL, Cnn) Da.Fill(dt) <--ここでエラー発生! 'objDa.SelectCommand = objCmd Da.Update(Me.HaS4DBDataSet1.t_wrkZaiko) End If End With ---------------------------------- 以上、情報をお持ちの方がいらっしゃいましたらよろしくお願いいたします。

みんなの回答

回答No.1

単純に、接続文字列がmdb用なのに、CSVを読みにいっているからじゃないでしょうか? 一つの接続で、CSVとMDB両方にアクセスしようとしているように見えるのですが、WordでExcelファイルを開こうとしているようなもので、無理があります。 別の種類のデータテーブルを一括でコピーする方法は有るのかもしれませんが、素直に考えたら CSVの接続でデータ取得→mdbの接続でのデータテーブルに値をコピー→MDBに更新 の流れになるんじゃないかと思うのですが…。 ちなみに、CSVの場合の接続文字列はこうなるようです。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=20039&forum=7&3

関連するQ&A

  • VB2010でCSV取込

    VB2010とAccessを使用しています。 あるCSVファイルからACCESSへデータ取り込みをしようとして CSVをデータテーブルに代入するコードを考えているのですが 下記のコードでは『FROM句』のエラーのようでうまく作動しません? ご教授お願いします。 Private Sub ToolMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolMenu.Click Dim OFD As New OpenFileDialog OFD.FileName = "" OFD.InitialDirectory = "\\10.20.100.35\data\LOG\" OFD.Filter = "CSVファイル(*.csv)|*.csv|すべてファイル(*.*)|*.*" OFD.FilterIndex = 1 OFD.Title = "取り込むCSVファイルを選択してください" OFD.RestoreDirectory = True OFD.CheckFileExists = True OFD.CheckPathExists = True If OFD.ShowDialog() = DialogResult.OK Then Try Dim DT As New DataTable '===============CSVからクエリ=============== Using OleCn As New System.Data.OleDb.OleDbConnection Dim CSVFileName As String = System.IO.Path.Combine(OFD.InitialDirectory, "aaa.csv") OleCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & OFD.InitialDirectory & _ ";Extended Properties=""Text;HDR=YES;IMEX=1;FMT=Delimited""" Dim SQL As String = "" SQL = "SELECT * FROM " + CSVFileName Using DA As System.Data.OleDb.OleDbDataAdapter = _ New System.Data.OleDb.OleDbDataAdapter(SQL, OleCn) DT.Clear() DA.Fill(DT) End Using End Using Catch ex As Exception MessageBox.Show(ex.ToString, "例外発生") Exit Sub End Try End If End Sub

  • VB2005 CSVファイルをテーブルへインポート

    こんばんは。 VB2005にてCSVファイルをテーブルへ、インポートする処理を作成しています。ネットで調べたコードを試しています。デバックは通るのですが、処理結果がテーブルへ出力されません。 (TESTdataset内にTable1を作成しています。) 何か解決案がありましたらご教示をお願いいたします。 また、 ※1の'DataGridView1の文なのですが、コメントを外すと 宣言がされていない旨のメッセージが出てきてしまいます。 もし此方も解決案が御座いましたらご教示をお願いいたします。 -------------------------------------------------------------- 以下コードです -------------------------------------------------------------- Imports System.Data Imports System.Data.OleDb Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Const csvPath As String = "c:\DB\" Const csvFile As String = "TEST.csv" Dim sConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=" & csvPath _ & ";" & "Extended Properties='text;FMT=Delimited'" Dim objConn As New OleDbConnection(sConnectionString) objConn.Open() Dim objCmdSelect As New OleDbCommand("SELECT * FROM " & csvFile, objConn) Dim objAdapter1 As New OleDbDataAdapter() objAdapter1.SelectCommand = objCmdSelect Dim objDataset1 As New DataSet() Dim objTable As DataTable Dim Col As DataColumn objDataset1 = New DataSet("TEST") objTable = New DataTable("Table1") Col = New DataColumn("No") Col.DataType = Type.GetType("System.Int16") objTable.Columns.Add(Col) Col = New DataColumn("Name") Col.DataType = Type.GetType("System.String") objTable.Columns.Add(Col) Col = New DataColumn("出身") Col.DataType = Type.GetType("System.String") objTable.Columns.Add(Col) objDataset1.Tables.Add(objTable) objAdapter1.Fill(objDataset1.Tables(0)) ※1'DataGridView1.DataSource = objDataset1.Tables(0).DefaultView objConn.Close() End Sub End Class --------------------------------------------------------- ※お礼が遅れる場合がありますが、必ずしますので、その時は少々お待ちください。

  • AccessVBAでCSVファイルへ接続する方法

    AccessVBAでCSVファイルへ接続したいのですが 64ビットパソコンの場合は「Provider」は何を設定すればいいのか分からず 困っています。 私の持っているテキストでは32ビットパソコンの場合は 次のコードで接続できます。 このコードのProviderだけ64ビットのものに変更すればいいと思うのですが、いかがでしょうか。 -------------------------------------------------------------------------- Dim CN As ADODB.Connection Dim RS As ADODB.Recordset Dim MyPath As String MyPath = CurrentProject.Path & "\" Set CN = New ADODB.Connection CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _      ”Data Source=" & MyPath & ";" & _ "Extended Properties='Text;HDR=NO'" Set RS = CN.Execute("SELECT * FROM test.csv") ------------------------------------------------------------------------------ 教えてください。 宜しくお願い致します。

  • CSVファイルの出力に関して

    環境:Windows7 / VIsual Basic 2008 教えて下さい。 データベースの値を、CSVファイルとして出力する為に、以下のような記述を しましたが、どうしても下記のようなエラーとなってしまいます。 Cドライブの直下は記述すべきでなく、アクセス権がないのが原因かと思われますが、 なんとかCドライブの直下へ出力したいと考えています。 良い方法はないでしょうか? 《記述内容》  '保存先のCSVファイルのパス  Dim csvPath As String = "C:\ABC.csv"  'CSVファイルに書き込むときに使うEncoding  Dim enc As System.Text.Encoding = _  System.Text.Encoding.GetEncoding("Shift_JIS")  Try '開く Dim sr As New System.IO.StreamWriter(csvPath, False, enc)  Dim colCount As Integer = dtTable.Columns.Count   Dim lastColIndex As Integer = colCount - 1  以下省略・・・ 《エラー内容》  パス 'C:\ABC.csv' へのアクセスが拒否されました。 仮にアクセス権を付加するしか方法がないようであれば、申し訳ありませんが、 その方法も教えて頂ければと思います。 教えて下さい。 よろしくお願いします。

  • VB6.0で、CSVファイルのデータをデータベースに格納する方法

    VBもプログラミングも初心者です。 VB6.0を用いて、CSVファイルをデータベースに格納するプログラムを作成したいのですが、 やり方がわからず、困っております。 ネット上にあります、サンプルプログラム (http://www.atmarkit.co.jp/fdotnet/basics/adonet05/adonet05_02.html) を参考にしつつ、途中まで作成してみたのですが、 *********に囲んであるところをどのようにしたら良いのかが分かりません。 以下に、途中まで作成したプログラムと、CSVファイルを示します。 ++++ CSVファイル ++++ (CSVファイルは、カラム数、行数共に変化します。) 001,1行目,1番 002,2行目,2番 003,3行目,3番 004,4行目,4番 'プログラム Dim sqlSTR As String Dim connStr As String connStr = "Server=xxxxxxxxxxxxx" + "Trusted_Connection=yes;" + "database=testdb"; da_A = New System.Data.SqlClient.SqlDataAdapter(sqlStr, connStr) ds_A = New System.Data.DataSet() ************************* 'sql文を定義 sqlStr = "insert into" ************************* Dim Tables As New DataTable Dim nr_A As DataRow nr_A ds_A.Tables("testdb").NewRow() ************************************* nr_A("column1") = "001" nr_A("column2") = "1番目" '上記ネット上のサンプルプログラムでは、ここに直書きをしているのですが、 'ファイルの行を読み込み、指定するやり方がわかりません。 ************************************* Tables.Rows.Add(nr_A) da_A.Update(ds_A, "testdb") 'プログラム終わり どうか、よろしくお願い致します。

  • エクセルマクロでファイル名のみ(拡張子無し)格納

    下記の様なマクロが有りますが、ここでファイル名のみ(拡張子無し)を fairumeiに格納したいのですがどの様なコードを書いた方が良いのでしょうか。? (ファイル名の長さは全部違います、エクセル2000) どうか、宜しくお願いします。 Sub シート検索版() Dim myPName As String myPName = Application.GetOpenFilename("測定データ(*.xls;*.csv),*.xls;*.csv") If myPName = "False" Then Exit Sub Dim wb_New As Workbook Set wb_New = Workbooks.Add Dim myKAKUCHOSI As String Dim myPATHNAME As String Dim myLName As String Dim fairumei As String Dim wb As Workbook On Error GoTo mfinish fairumei = ここが分からない myPATHNAME = CurDir myLName = Dir(myPATHNAME & "\" & "*" & myKAKUCHOSI) 'パス及びファイル名拡張子付き

  • カンマ区切りの文字列をDatasetに登録するには?【VB.NET2005】

    テキストファイルを読込んでカンマ区切りでDatasetに登録する際は 以下の方法で行っていました。 Dim tfp As New TextFieldParser(fileName, System.Text.Encoding.GetEncoding("Shift_JIS")) Dim dt As New DataTable Dim dr As DataRow tfp.TextFieldType = FieldType.Delimited tfp.SetDelimiters(",") While Not tfp.EndOfData dr = dt.NewRow dr.ItemArray = tfp.ReadFields dt.Rows.Add(dr) End While tfp.Close() ds.Tables.Add(dt) これをファイルではなくDim str As String = "123,aaa" という文字列に対して行いたいのですが、 上記のReadFieldsの用に使える物は無いでしょうか?

  • ACCESSのCSV出力に関して

    教えて下さい。 ACCESSであるテーブルのデータをCSV出力しようとして、以下のような記述をしました。 結果、問題なく出力されましたが、データだけでなく、項目も出力しようと考えています。 その際にはどのような記述をすれば良いでしょうか? 初歩的な質問で申し訳ありません。 教えて下さい。 《内容》 Dim cnn As ADODB.Connection Dim rst As ADODB.Recordset Dim stSQL As String Dim stTBL As String Dim myWSH As Object 'WScript Dim myDesktopPath As String Dim stPath As String 'フルパス Dim objFSO As Object 'FileSystemObject Dim fsoTS As Object 'TextStream Dim tmp As Variant 'データ Dim re As Variant 'データ件数 Dim stDocName As String Const ForAppending = 8 stTBL = "t_合算" 'テーブル名 '開始メッセージ stDocName = "「" & stTBL & ".CSV」 ファイルをデスクトップに作成します" If MsgBox(stDocName, vbYesNo) = vbNo Then Exit Sub 'デスクトップパス取得 Set myWSH = CreateObject("WScript.Shell") myDesktopPath = myWSH.SpecialFolders("Desktop") Set myWSH = Nothing 'フルパス stPath = myDesktopPath & "\" & stTBL & ".CSV" '読み取り専用でセット Set cnn = CurrentProject.Connection stSQL = "SELECT * FROM " & stTBL Set rst = cnn.Execute(stSQL) If rst.EOF Then stDocName = "出力するデータがありませんでした" Else '文字列データ格納 (全データ出力、カンマ区切り) tmp = rst.GetString(adClipString, , ",", vbNewLine) '出力 Set objFSO = CreateObject("Scripting.FileSystemObject") With objFSO If .FileExists(stPath) Then '既存ファイル削除 Call .DeleteFile(stPath) End If Set fsoTS = .OpenTextFile(stPath, ForAppending, True) '文字列一括書き出し fsoTS.WriteLine tmp re = fsoTS.Line - 2 End With Set fsoTS = Nothing: Set objFSO = Nothing stDocName = re & " 件の CSVデータを出力しました。" End If MsgBox stDocName, vbOKOnly

  • csvを新ファイルに8番目で大きい順に並び替え

    VB2010です。 前回、質問させて頂いた続きです。 前回は質問の仕方が失敗で大変皆様にご迷惑をおかけしました・・・・・ 本当に申し訳なく思っています・・・ もうだんだん迷路に入ってしまったので、コードをそのまま記載しました。 Itm(7)を基準に数字の大きい順に並び替えしたいのです。 CSVは全部で19列あります。 ファイルによって違いますが、行数はだいたい100行ぐらいです 無理やりしたのコードを書いたのですが、あと一歩でやはりきれいに並び替えができません・・・ 大変皆様にお手数ですがお助け下さい・・・・ プロの皆様にはかなり幼稚なコードで大変失礼します。 いろいろと試してみたのですが、これぐらいしか自分の力量では思いつかなくて・・・・ 沢山失敗を繰り返したので変なコードも入っているかもですが・・・・・ Dim z As Integer = 0 Dim ReaderA As New IO.StreamReader(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & ".csv", System.Text.Encoding.GetEncoding("Shift-JIS")) Dim LineA As String = ReaderA.ReadLine Dim Itm() As String Dim s As Integer = 0 Do Until IsNothing(LineA) Itm = LineA.Split(",") If z = 0 Then Dim Writer As New IO.StreamWriter(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New.csv", False, System.Text.Encoding.GetEncoding("Shift-JIS")) Writer.WriteLine(LineA) Writer.Close() Else Dim ReaderB As New IO.StreamReader(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New.csv", System.Text.Encoding.GetEncoding("Shift-JIS")) Dim Writer As New IO.StreamWriter(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New2.csv", False, System.Text.Encoding.GetEncoding("Shift-JIS")) Dim LineB As String = ReaderB.ReadLine Dim Stm() As String Dim u As Integer = 0 Do Until IsNothing(LineB) Stm = LineB.Split(",") If Integer.Parse(Itm(7)) > Integer.Parse(Stm(7)) Then If u = 0 Then Writer.WriteLine(LineA) u += 1 End If End If Writer.WriteLine(LineB) If Integer.Parse(Itm(7)) <= Integer.Parse(Stm(7)) Then If u = 0 Then Writer.WriteLine(LineA) u += 1 End If End If s += 1 LineB = ReaderB.ReadLine Loop Writer.Close() ReaderB.Close() IO.File.Delete(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New.csv") Microsoft.VisualBasic.FileSystem.Rename(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New2.csv", SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New.csv") End If z += 1 LineA = ReaderA.ReadLine Loop ReaderA.Close()

  • 【VBA】ExcelマクロでCSVファイルに保存したデータが""で囲まれてしまう

    添付図のような、Excel2003で作成した表内のデータを CSVで保存するマクロを作成したのですが、 図のように、CSVファイルに「""」で値が囲まれた状態で、 保存されてしまいます。 下記にマクロを記載しますので、 どうすれば文字列が「""」で囲まれずに、 カンマ区切りだけのデータで出力されるのか、 ご存知の方おられましたら、ご教示お願い致します。 Sub csv保存() Dim フォルダ名 As String Dim パス名 As String Dim ファイル名 As String Dim データ As Variant Dim 行数 As Long, 列数 As Integer Dim i As Integer, j As Long, k As Long ファイル名 = "test.csv" フォルダ名 = "csv" パス名 = ActiveWorkbook.Path & "\" & _ フォルダ名 'csvフォルダが存在しなければ作成する If Dir(パス名, vbDirectory) = "" Then MkDir パス名 End If ChDir パス名 Open ファイル名 For Output As #1 For i = 1 To Worksheets.Count Worksheets(i).Activate Worksheets(i).Cells(1, 1).Select ActiveCell.CurrentRegion.Select 行数 = Selection.Rows.Count 列数 = Selection.Columns.Count For j = 1 To 行数 For k = 1 To 列数 - 1 データ = Selection.Cells(j, k) _ .Value Write #1, データ; Next k Write #1, Selection.Cells(j, 列数) _ .Value Next j Next i Close #1 End Sub