CSVのファイルの内容をMDBにしゅつりょくするには?

解決


初心者  2003-10-14 11:25:21  No: 109086  IP: [192.*.*.*]

はじめまして。現在、私はVB6.0を使っておりAccessは2000です。
VB上でフォームを作成して、そこでCSVファイル名を入力したら、
MDBにCSVの内容が書き込まれるようなコードを作成したいと思っております。

現在、CSVに日付、区分、品目コード、金額、メモと書き込んであります。
"2003/09/02","1","2229","5000","小口現金"
"2003/09/03","0","2000","6000","減価償却"

といったようなCSVの内容をMDBのレコードに追加したいのですが、
結果としてこのような感じにしたいです。

日付           区分  品目コード   金額   メモ
2003/09/02       1    2229        5000   小口現金
2003/09/03       0    2000        6000   減価償却

MDBをCSVに出力する方法はインターネット上で見つけられたのですが、
CSVをMDBに出力する方法がいまいちよくわかりません。
どうやったら、出力できるのでしょうか?

編集 削除
minami  2003-10-14 14:32:45  No: 109087  IP: [192.*.*.*]

どこからどこまでが解らないのでしょうか?

CSVファイルから各項目の値を変数に読み込みができる。
データベースをオープンしてテーブルのレコードセットが取得できる。
ことを前提として

rs.AddNew '新規に1レコード追加
rs.Fields("品目コード").Value = strCode ’変数の値を各フィールドへ代入
(省略)
rs.Update 'テーブルを更新

※各フィールドのデータ型に合わせて、変数のデータ型を意識してくださいね。

編集 削除
初心者  2003-10-14 16:16:05  No: 109088  IP: [192.*.*.*]

ありがとうございます。
実は、CSVファイルから各項目の値を変数に読み取ることがあまりよくわかっていないですね。
CSVの各項目の値を読み取るためのコードが浮かばなくて苦労しています。

CSVにMDBのテーブルのレコードを出力するコードを作成してみました。

Option Explicit
Dim Cn As New ADODB.Connection

Private Sub CmdGO_Click()

    Dim StrSQ As String
    
    ' Eドライブの\練習問題\example12\db1.mdbのMDBファイルをオープン
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=E:\練習問題\example12\db1.mdb"
           
    ' CドライブのDocuments and Settings\All Users\NewProduct\Output.XLSのSheet1に成績トランのテーブルの内容を出力する。
    StrSQ = "SELECT 学籍番号,得点 INTO " & _
             "[Excel 8.0;Database=C:\Documents and Settings\All Users\NewProduct\Output.XLS].[Sheet1] " & _
             "FROM 成績トラン"
             
    ' エクスポートを行う
    Cn.Execute StrSQ
    
    MsgBox "エクセルファイルを作成する。"
    
    Cn.Close
    
    Set Cn = Nothing
    
End Sub

この中では、CSVファイルから各項目の値を変数に読み込む必要がなかったので、できたのですが逆にCSVからMDBのテーブルのレコードに値を出力するには
どうしたらよいか疑問に思っています。

大変お手数をかけて申し訳ないのですが、もし自分の質問に付き合ってくださるのならCSVファイルからどうやって各項目の値を取得するのか
教えていただけると非常にありがたいです。

編集 削除
minami  2003-10-14 16:40:42  No: 109089  IP: [192.*.*.*]

元のファイルはCSV(カンマ区切りのテキストファイル)で良いんですよね?
(エクセルファイルだとまたやり方がかわるので)

こんな感じでいいのでは?
この例では読み込む変数の型をString型にして、データベースに格納するときに型変換しています。
元のCSVファイルに数値で入ってるのであれば、最初から数値型の変数にしても良いです。

    Dim intFNo As Integer
    Dim strDate As String
    Dim strKubun As String
    Dim strCode As String
    Dim strKingaku As String
    Dim strMemo As String

    intFNo = FreeFile '使用可能なファイル番号を取得
    Open strCSVFilePath For Input As #intFNo  'フルパスを指定してCSVファイルをオープン

    Do While Not EOF(intFNo)  'ファイルの終端まで繰り返す
        
  '1行分の情報を各変数に読み込む
        Input #intFNo, strDate, strKubun, strCode, strKingaku, strMemo
  
        'レコードセットに1レコード追加
  RS.AddNew

  '変数の内容を各フィールドへ格納
        RS.Fields("日付").Value = CDate(strDate)
        RS.Fields("区分").Value = CInt(strKubun)
        RS.Fields("品目コード").Value = strCode
        RS.Fields("金額").Value = CLng(strKingaku)
        RS.Fields("メモ").Value = strMemo
  
  'レコードセットを更新
  RS.Update
    Loop
  
    Close #intFNo  ’CSVファイルをクローズ

編集 削除
初心者  2003-10-14 16:57:58  No: 109090  IP: [192.*.*.*]

ありがとうございます。
ただのファイルのオープンはOpenを使えばよいのでしたか。
この辺がずっとわからずに悩んでいました。
Cn.Openにしてもうまくいかなかったので、助かりました。
まだまだVBは初心者なので、こうやって親切に教えていただけるととても助かります。
感謝の気持ちでいっぱいです。
また、これからもよろしくお願いします。

編集 削除
GOD  2003-10-15 13:57:42  No: 109091  IP: [192.*.*.*]

解決済みだけどとりあえず。(SQLでやる方法)
まずはSQL文を理解してください。
SELECT...INTO ステートメントの
INTOはデータを出力するテーブル名を指定する。
(同一テーブルがないこと。追加を行う時はInsert Into を使用する)
FROMはデータを参照するテーブル名を指定する。
というようになっています。
CSVをテーブルとして扱うためには
[TEXT;DATABASE=フォルダ名].[ファイル名#拡張子]
と記述すればOKです。もちろんフォルダ名、ファイル名、拡張子には初心者さんが
任意文字列を入れてください。
テーブルを新規に作成する時はスキーマファイルを作成すればフィールド長等の
制限ができます。

編集 削除
初心者  2003-10-15 14:14:26  No: 109092  IP: [192.*.*.*]

ありがとうございます。そうですね、自分はまだSQL文をあまりよく理解
していないですから、SQL文を勉強していく必要があると思っています。
これからも精進をしていきたいと思いますので、皆さんのお力ぞえのほどをよろしくお願いします。自分でも努力することは大事ですが、なかなか一人で考えているだけでも解決しないこともあるので、本当に助かります。
また、投稿することがあったら皆さんのお力添えのほどよろしくお願いします。

編集 削除