• ベストアンサー

Access2000上でのCStrコマンドの記述に関する質問です

いつもお世話になっております。 Access2000で、あるデータをCSVファイルに変換しようと思って、各方面のご意見により、VBAで下記の通り記述し、実行致しました。 変換するフィールドの数が少なければ問題なく実行できますが、そのフィールド数が34種類以上になれば、「行継続文字( _ )を使いすぎています」との警告と共にエラーが発生します(なお、今回実行したいのは34種類のフィールドです)。 「CStr(adoRs.Fields("フィールド1").Value) ~ (adoRs.Fields("フィールド34").Value) 」と、1行で記述する等、何か良い方法がないものかと悩んでおります。 もし、解決方法をご存じの方がおられれば、その方法を教えて頂きたく、宜しくお願い致します。 ’--(ご参考)---------------------------------------------------- Dim adoRs As New ADODB.Recordset Dim strsql As String Dim strFile As String strsql = "SELECT フィールド1,フィールド2, ・・・・フィールド34" & _ "FROM ○○ファイル ORDER BY フィールド1" adoRs.Open strsql, CurrentProject.Connection strFile = "C:\AAAデータファイル.CSV" Open strFile For Output Access Write As #1 Do Until adoRs.EOF Write #1, _ CStr(adoRs.Fields("フィールド1").Value), _ CStr(adoRs.Fields("フィールド2").Value), _               ・                ・                ・ CStr(adoRs.Fields("フィールド34").Value) adoRs.MoveNext Loop adoRs.Close Close #1 ’---------------------------------------------------------

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

継続文字を使わなければ良いだけです。 Dim 番号 As Long strsql = "SELECT " For 番号 = 1 To 34   If 番号 > 1 Then strsql = strsql & ","   strsql = strsql & "フィールド" & CStr(番号) Next strsql = strsql & " FROM ○○ファイル ORDER BY フィールド1" == 中略 == Do Until adoRs.EOF   For 番号 = 0 To 32     Write #1, CStr(adoRs.Fields(番号).Value),   Next   Write #1, CStr(adoRs.Fields(番号).Value)   adoRs.MoveNext Loop

DANSAMA
質問者

補足

返事が遅くなりました。 この考え方を参考にして、無事解決出来ました。 ありがとうございました

その他の回答 (1)

  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.2

Dim i As Long Dim strBuilder as String Open strFile For Output Access Write As #1 Do Until adoRs.EOF strBuilder = vbnullstring for i = 0 to adoRs.Fields.Count -1 strBuilder = strBuilder & CStr(adoRs.Fields(i).Value) if i <> adoRs.Fields.Count -1 then strBuilder = strBuilder & "," end if next i Write #1, strBuilder adoRs.MoveNext Loop こんな感じですね、テストしてないので動くか、わからないですごめんなさい。 adoRs.Fields.Countこのプロパティがあったかどうか・・・。 adoRs.Fields(i).Valueで取れない場合は、 adoRs.Fields("フィールド" & strconv(i,vbwide)).Value とかにしてみてください。

DANSAMA
質問者

補足

返事が遅くなりました。 この考え方を参考にして、無事解決出来ました。 ありがとうございました。