Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
OpenRecordsetの使用法について
投稿日時: 18/07/30 10:26:59
投稿者: けん太

下記の様にロジックを組んでおります。
1行目をヘッダ行として、認識させるOpenRecordsetのパラメータはあるのでしょうか?
(色々と調査していますが、見つかりません)
 
'------------------------------------------------------
' インポート定義を使用して取り込み(項目の編集は不可)
'------------------------------------------------------
' DoCmd.TransferText acImportDelim, "支払方法 インポート定義", DWH_PAY_METH, file_pass, True
 
 
 
 
    '入力元CSVファイルを開く
    fn = FreeFile()
    Open file_pass For Input As #fn
     
    'テーブルを開く
    Set dbs = CurrentDb
    Set r_set = dbs.OpenRecordset(DWH_PAY_METH)
 
 
    'CSVファイルの全レコードを読み込むループ
    Do Until EOF(fn)
 
        'CSVファイルより1件分を読み込み
        Line Input #fn, strData
        'カンマで区切って配列に代入
        'strData = Replace(strData, "(null)", "") 'null表示を削除
        varData = Split(strData, ",", , vbTextCompare)
 
 
        'ゼロサプレス項目、処理月の編集
        bid = Right(String(10, "0") & Replace(varData(0), """", ""), 10)
        pay_meth = Right(String(2, "0") & Replace(varData(1), """", ""), 2)
        'ns = Right(String(2, "0") & Replace(varData(5), """", ""), 2)
 
        '各フィールドデータをテーブルに追加
        With r_set
            .AddNew
            !グループID = bid
            !支払コード = pay_meth
            !有効開始日 = Replace(varData(2), """", "")
            !有効終了日 = Replace(varData(3), """", "")
            !項目1 = Replace(varData(4), """", "")
            !項目2 = Replace(varData(5), """", "")
            !項目3 = Replace(varData(6), """", "")
            .Update
        End With
 
    Loop
 
    r_set.Close
    Close #fn

回答
投稿日時: 18/07/30 11:11:58
投稿者: Suzu

そもそも、レコードセットには、1行目と言う概念がありません。
 
並び順を明確に指示し、並び順を決めて使う物ですから。。
 
レコードとして特定できるなら、その条件をSQLのWHERE句で渡し、
対象外のレコードとしましょう。
 
 
なぜヘッダー情報がレコードとして入り込んでいるの?
その時点で間違いと思いますよ。
 
 
 
あれ。。ん???
OpenRecordSet?? AddNew??
 
・Open ステートメントで、CSVファイルを開き
・OpenRecrdSetにて開いたレコードセットにAddNew
 
 

引用:
1行目をヘッダ行として、認識させるOpenRecordsetのパラメータ

 
あぁ。。。意図が違うのか。。
・OpenRecordSetにて開いたレコードセットへ
・Openステートメントにて開いたCSVのデータをレコードしてインポートするが
  CSVには、一行目にヘッダー情報が入っているので、
  【RecordSet側のプロパティーで、一回目に取り込んだデータはヘッダーとして扱いたい】
   と言う意味ですか!!
   
そんなプロパティーはありません。
素直に、LineInput の回数をカウントして、1回目は取り込まない 様にしましょう。

回答
投稿日時: 18/07/30 11:15:19
投稿者: sk

引用:
1行目をヘッダ行として、認識させるOpenRecordsetの
パラメータはあるのでしょうか?

引用:
入力元CSVファイルを開く

( Open ステートメントを使用するのではなく)
DAO または ADO の Recordset オブジェクトを介して
CSV ファイルのレコードに直接アクセスしたい、
ということでしょうか。
 
それとも、Open ステートメントによって開かれた
ファイルの 1 行目だけを読み飛ばすようにしたい、
ということでしょうか。

投稿日時: 18/07/30 12:15:59
投稿者: けん太

Suzuさん
skさん
 
  ご教授ありがとうございます。
 
  Suzuさんの言われるように、1行目がヘッダレコードですので
  読み飛ばしたいのです。
  
  lineカウントで読み飛ばしとなるのでしょうか?
 
 
  
 

回答
投稿日時: 18/07/30 12:37:12
投稿者: hatena
投稿者のウェブサイトに移動

けん太 さんの引用:
  Suzuさんの言われるように、1行目がヘッダレコードですので
  読み飛ばしたいのです。

読み込むループの前で、1行、空読みすればいいだけでは。
 
    Line Input #fn, strData 
    'CSVファイルの全レコードを読み込むループ 
    Do Until EOF(fn) 

   以下略

回答
投稿日時: 18/07/30 12:42:00
投稿者: よろずや

 
    'CSVファイルよりヘッダ行を読み込み
    Line Input #fn, strData
    Do Until EOF(fn)
  
        'CSVファイルより1件分を読み込み
        Line Input #fn, strData
     :
     :
    Loop
  
    r_set.Close
    Close #fn

投稿日時: 18/07/30 14:10:45
投稿者: けん太

hatenaさん
よろずやさん
 
  ご返答、ありがとうございました。