Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


622 / 2272 ツリー ←次へ | 前へ→

【10891】ADOでCSVの取り込み時のフィルタで"種類が一致しません" ON 08/12/24(水) 17:56 質問[未読]
【10892】Re:ADOでCSVの取り込み時のフィルタで&quo... ON 08/12/24(水) 20:20 質問[未読]
【10893】Re:ADOでCSVの取り込み時のフィルタで&quo... neptune 08/12/24(水) 22:17 回答[未読]
【10894】Re:ADOでCSVの取り込み時のフィルタで&quo... ON 08/12/25(木) 12:51 発言[未読]
【10895】Re:ADOでCSVの取り込み時のフィルタで&quo... neptune 08/12/25(木) 16:55 回答[未読]
【10896】Re:ADOでCSVの取り込み時のフィルタで&quo... ON 08/12/26(金) 13:19 発言[未読]

【10891】ADOでCSVの取り込み時のフィルタで"...
質問  ON  - 08/12/24(水) 17:56 -

引用なし
パスワード
   よろしくお願い致します

Public Sub Get_Csv()


  Dim dbCon As ADODB.Connection
  Dim dbRes As ADODB.Recordset
  Dim COL As Long
  Dim strSQL As String
  Dim MyRow As Long
  
  Dim tg_rec As Variant
  Dim I As Long
  Dim J As Long
  
    
  Set dbCon = New ADODB.Connection

  With dbCon
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    '.Properties("Extended Properties") = "Text"
    .Properties("Extended Properties") = "Text;FMT=Delimited;HDR=yes;"
    .Open CurrentProject.Path & "\"
  End With

  strSQL = "SELECT * FROM hoge.csv"

  Set dbRes = New ADODB.Recordset

  'dbRes.Open strSQL, dbCon, adOpenDynamic, adLockOptimistic, adCmdText
  dbRes.Open strSQL, dbCon, adOpenKeyset, adLockOptimistic, adCmdText

  dbRes.Filter = "[F0str] = '001'" ←ココ


実行時エラー '-2147352571 (80020005)':
種類が一致しません。

どう記述すればいいでしょうか

アドバイスよろしくお願い致します

【10892】Re:ADOでCSVの取り込み時のフィルタで&q...
質問  ON  - 08/12/24(水) 20:20 -

引用なし
パスワード
   少し変えてみましたが、エラーです

Public Sub Get_Csv1()


  Dim csvPath As String
  Dim csvFilename As String
  
  csvPath = CurrentProject.Path & "\;"
  csvFilename = "20081219152808DL_AssetData.csv"

  Dim cnn As ADODB.Connection
  Dim rst As ADODB.Recordset
  
  Set cnn = New ADODB.Connection              
              
  cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
              & "Data Source=" & csvPath & _
              "Extended Properties=""Text;FMT=Delimited;HDR=yes;"""
              
  cnn.Open
  
  Set rst = New ADODB.Recordset
        
  rst.Open "select * from " & csvFilename, cnn, adOpenForwardOnly, adLockOptimistic
    '↑動きます
  
  'rst.Open "select * from" & csvFilename & " where [F0str] = '001', cnn, adOpenForwardOnly, adLockOptimistic"
    '↑実行時エラー '3709':この操作を実行するために接続を使用できません。このコンテキストで閉じているかあるいは無効です。 
          
  
  While rst.EOF = False
    Debug.Print rst(0).Value & "," & rst(1).Value & "," & rst(2).Value
    rst.MoveNext
  Wend
  
  rst.Close
  Set rst = Nothing
  
  cnn.Close
  Set cnn = Nothing

End Sub

【10893】Re:ADOでCSVの取り込み時のフィルタで&q...
回答  neptune  - 08/12/24(水) 22:17 -

引用なし
パスワード
   ▼ON さん:
こんにちは

             
>  cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
>              & "Data Source=" & csvPath & _
>              "Extended Properties=""Text;FMT=Delimited;HDR=yes;"""
コピペの間違いと思いますが、行継続文字が変ですね。
             
>  'rst.Open "select * from" & csvFilename & " where [F0str] = '001', cnn, adOpenForwardOnly, adLockOptimistic"
>    '↑実行時エラー '3709':この操作を実行するために接続を使用できません。このコンテキストで閉じているかあるいは無効です。 
私は昔、csvFilename は
[filename#csv]の形式
"[20081219152808DL_AssetData#csv]"
で書きましたが。。。そうでなくともいけるんですね。

エラーの原因ですが、この辺りにあるような気がします。
CSVに求めるデータ型を設定したい時は「schema.ini」ファイルなるものを使います。
詳しくは「schema.ini ADO」をキーワードにググって見て下さい。

【10894】Re:ADOでCSVの取り込み時のフィルタで&q...
発言  ON  - 08/12/25(木) 12:51 -

引用なし
パスワード
   ▼neptune さん:
こんにちは いつもありがとうございます
 
>エラーの原因ですが、この辺りにあるような気がします。
>CSVに求めるデータ型を設定したい時は「schema.ini」ファイルなるものを使います。
>詳しくは「schema.ini ADO」をキーワードにググって見て下さい。

schema.ini
を設定することで不具合は、解消しました

>[filename#csv]の形式
>で書きましたが。。。そうでなくともいけるんですね。
は、どちらでも問題なく動きました
ありがとうございました

追加のQで申し訳ないのですが

Dim cn As ADODB.Connection
Dim strSQL As String
Set cn = CurrentProject.Connection

strSQL = "insert into Tmp01_imprt(F01)" & _
" select F01 from " & _
" [TEXT;Database=" & CurrentProject.Path & "\;HDR=YES].[hoge.csv];"

cn.Execute strSQL

で、既存」のテーブルに追記は
F1のようにフィールド名を記載で出来るのですが
*では受け付けてくれませんでした

やはり、全フィールド記載しなくてはいけないのでしょうか

よろしくお願いいたします

【10895】Re:ADOでCSVの取り込み時のフィルタで&q...
回答  neptune  - 08/12/25(木) 16:55 -

引用なし
パスワード
   ▼ON さん:
こんにちは

>で、既存」のテーブルに追記は
>F1のようにフィールド名を記載で出来るのですが
>*では受け付けてくれませんでした
>
>やはり、全フィールド記載しなくてはいけないのでしょうか
*ってサブクエリの方ですよね。それが間違いないです。
無駄と言われれば無駄ですけどね。

うまい解説がありましたので、それを見て下さい。

以下資料です。
SQLServer(T_SQL)のものですが、ADOのSQLはSQLServerと同じSQL-92に
準拠しているのでSQLServerと同じと思います
ht tp://msdn.microsoft.com/ja-jp/library/ms189872(SQL.90).aspx

サブクエリの選択リストは、INSERT ステートメントの列リストに一致している
必要があります。列リストを指定しない場合は、選択リストは、追加される
テーブルまたはビュー内の列に一致している必要があります。

【10896】Re:ADOでCSVの取り込み時のフィルタで&q...
発言  ON  - 08/12/26(金) 13:19 -

引用なし
パスワード
   ▼neptune さん:
ありがとうございます

リンク先見てみました

SQLServerはほとんど ?? です
パススルークエリで利用することがあるくらいです

そのうち、勉強しようとは思っているのですが・・・
なかなか手出しすることが出来ないままです

GOて何? みたいな感じですが、少しづつ勉強したいと思います

引き続きQがあると思いますが
次回は年明けになってしまいます


来年もどうぞ宜しくお願いします。
では、よいお年を。

622 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078199
(SS)C-BOARD v3.8 is Free