ACCESSのCSV出力に関する記述方法

このQ&Aのポイント
  • ACCESSでテーブルのデータをCSV出力する方法について教えてください。データと項目を出力するための記述方法を教えてください。
  • ACCESSでテーブルのデータをCSV出力する方法について教えてください。データと項目を一緒に出力するための記述方法を教えてください。
  • ACCESSでテーブルのデータをCSV出力する方法について教えてください。データと項目を同時に出力する方法を教えてください。
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

rs.GetStringというのは初めて見ました。ひとつ物知りになったお礼にフィールド名の取得を盛り込んでみました。 フィールド名はループで個々に取得するしかなさそうです。 Accessお仕着せのオートナンバーフィールドのあるデータで試験したところ、エクセルに読み込む時にエラーになって悩みました。バイナリエディタまで引っ張り出してみても分からない...。結局CSVファイルの頭にID...という文字があると、エクセルはSYLKファイルと判断してエラーを出すという事が分かりました。強行すればCSVとして開く事は可能でしたが。 Sub test() Dim cnn As ADODB.Connection Dim rst As ADODB.Recordset Dim stSQL As String Dim stTBL 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 Dim buf As String Dim i As Long Const ForAppending = 8 stTBL = "Table1" 'テーブル名 '開始メッセージ stDocName = "「" & stTBL & ".CSV」 ファイルをデスクトップに作成します" If MsgBox(stDocName, vbYesNo) = vbNo Then Exit Sub 'フルパス stPath = myDesktopPath & "\" & stTBL & ".CSV" '読み取り専用でセット Set cnn = CurrentProject.Connection Set rst = New ADODB.Recordset rst.CursorLocation = adUseClient stSQL = "SELECT * FROM " & stTBL rst.Open stSQL, cnn, adOpenForwardOnly, adLockReadOnly If rst.EOF Then stDocName = "出力するデータがありませんでした" Else re = rst.RecordCount For i = 0 To rst.Fields.Count - 1 If buf = "" Then buf = rst.Fields(i).Name Else buf = buf & "," & rst.Fields(i).Name End If Next i '文字列データ格納 (全データ出力、カンマ区切り) tmp = rst.GetString(adClipString, , ",", vbNewLine) tmp = buf & vbCrLf & tmp '出力 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 End With Set fsoTS = Nothing: Set objFSO = Nothing stDocName = re & " 件の CSVデータを出力しました。" End If MsgBox stDocName, vbOKOnly End Sub Function myDesktopPath() As String Dim myWSH As Object 'WScript 'デスクトップパス取得 Set myWSH = CreateObject("WScript.Shell") myDesktopPath = myWSH.SpecialFolders("Desktop") Set myWSH = Nothing End Function

asamix_000
質問者

お礼

mitarashi様、返事が遅くまって申し訳ありません。 教えて頂いたように記述したところ、問題なく項目を出力する事ができました。 ありがとうございました!

その他の回答 (2)

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.2

アクセスの機能を使うのが嫌なら、 ADOXでテーブル情報は取得することも可能。 http://www.geocities.jp/cbc_vbnet/ADOX/table.html

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

出力用の仮テーブル作って、 transfertextをつかって、hasfieldnamesをtrueに設定する のが簡単かな。

参考URL:
http://www.feedsoft.net/access/tips/tips92.html

関連するQ&A

  • アクセスVBA CSVへ出力後、最終レコードの次の行に任意の文字を入れたい

    VBA超初心者です。宜しくお願いします。 今回は、テーブルからエクセルへ出力後、最終レコードの次の行に任意の文字を入れたいというのがわからず質問です。 全体の流れとしては、エクセル起動→テーブル名1を出力→テーブル名2を出力→CSV形式で保存となります。 このテーブル名2を出力した際の処理についてです。以下の記述の中で、”★★テーブル名2を貼り付け”の処理を追加、変更などする形で考えたいのですが、よい方法はございませんでしょうか? 具体的には【テーブル名2をエクセルの任意の範囲に出力】→最終レコードの次行の特定の列を複数指定して任意の文字”END”を入れる。 (例:貼り付け開始がB25、データが3レコードであれば、28行目の任意の列(CとE)を指定して”END"といれる) なお、テーブル名2のレコード数は毎回ことなります。 説明不足の場合はご指摘ください。 御知恵を拝借したく宜しくお願いします。 --------------------------- Sub opnXLtmp3() On Error GoTo Err_opnXLtmp3 Dim cnn As ADODB.Connection Dim rst As ADODB.Recordset Dim cnn2 As ADODB.Connection Dim rst2 As ADODB.Recordset Dim stBasis As String Dim stDetail As String Dim xls As Excel.Application Dim wkb As Excel.Workbook Dim fName As Variant Dim stPath As String 'mdb & Excel Book Path Dim stXLName As String 'Book Name Dim stSheet As String 'Sheet Name Dim stRng As String 'Range Address stPath = CurrentProject.Path '自mdb & Excel Book のパス stXLName = "ファイル名.csv" 'テンプレート用の Book stBasis = "テーブル名1" 'テーブル名1 stDetail = "テーブル名2" 'テーブル名2 stSheet = "シート名" '出力するシート名 stRng = "B25" '出力開始セル番地 Set cnn = CurrentProject.Connection Set cnn2 = CurrentProject.Connection Set rst2 = cnn2.Execute(stBasis) Set rst = cnn.Execute(stDetail) 'テンプレート としてオープン Set xls = CreateObject("Excel.Application") xls.Workbooks.Add template:=stPath & stXLName Set wkb = xls.Workbooks(1)   'テーブル名1を貼り付け With wkb.Worksheets(stSheet) .Cells(3, 10) = rst2("番号") End With '★★テーブル名2を貼り付け With wkb.Worksheets(stSheet) .Range(stRng).CopyFromRecordset Data:=rst    'ここに .Cells(X, 3) = "END" じゃだめでした。    'ここに .Cells(X, 5) = "END" じゃだめでした。 End With 'Excel画面を表示して終了(保存しない) xls.Visible = True fName = xls.Application.GetSaveAsFilename("ファイル名3" & rst2("番号"), _ "CSVファイル(*.csv),*.csv", 1) If fName <> False Then wkb.SaveAs FileName:=fName MsgBox "新規ブックは、「" & fName & "」の名前で保存しました!", vbOKOnly Else MsgBox "新規ブックは保存できませんでした。", vbOKOnly End If End Sub

  • VB6でCSVの取込をする

    VB6.0 でCSVの取り込みをしています。 Dim objFso As FileSystemObject Dim objTso As TextStream Dim データ As Variant Dim stArrayData() As String Set objFso = New FileSystemObject Set objTso = objFso.OpenTextFile(取込パス, ForReading) データ = objTso.ReadLine '配列に格納 stArrayData = Split(データ, ",") 'データの取得 データの取得 = stArrayData(0) stArrayData(0)で、データが取得できますが、 ダブルコーテーションが付加された状態で取得がしたいのですが、できません。。 今は、「000」で取得しているのを、 「"000"」で取得したいのです。 なお、取込むCSVをテキストで開くと、 ダブルコーテーションはついていません。 また、そもそも、取込む際に、ダブルコーテーションを付加する方法があるのでしょうか? それとも、取込んだ後に、ダブルコーテションを付加するのでしょうか? ご教授宜しくお願いします。

  • VBを2008を用いてCSVを取り込む ””で区切られていない数値混入

    VBを2008を用いてCSVを取り込む ””で区切られていない数値混入 文字列に,が含まれている場合がある。 題名どおりなのですが、以下のようなCSVファイルをVB2008で取り込もうと考えています。 "AAAAA",BBBBB,CCCCC,"DDDD,DDD","EEEEE","FFFFF" (同じアルファベットが本来同じ項目のデータ、BとCは0-9の数字のみ入ります またBCには常に””が含まれません。 Dは文字列なのですが、まれに「,」が含まれます) 下のものが現在使用しているソースですがsplitで「,」を指定しているので 当然Dが2つのデータとして認識されています。 BやCが””で囲まれていれば「”,”」で区切ればすむのですが一部が””なしなので どうやろうか迷っています。 実現したいこととしては ""なしの時は必ず、コンマまでが1つのデータ、 ""があれば""で区切られたデータが1つのデータとできればいいんですが。。。 以下ソースです。 ちなみにASPXファイルです。 (replaceDoubleQuotesというのは”を削除するための関数で無視していただいて結構です。 また以下のソースでは取り込み自体はせずにタイトル行がはいっているCSVファイルを弾く作業をしているのですが CSVからデータを取り出す作業は同じなので短いソースを使用させてもらっています) Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Dim Reader2 As New IO.StreamReader("C:\UploadedFiles\Uriage.txt", System.Text.Encoding.GetEncoding("Shift-JIS")) Dim Items2() As String 'CSVの各項目を表す配列 Dim Line2 As String = Reader2.ReadLine 'CSVの一行 Items2 = Line2.Split(",") Dim num_hantei As String = "^[0-9]+$" If Not (Regex.IsMatch(replaceDoubleQuotes(Items2(3)), num_hantei)) Then Dim objFSO As Object objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFile("C:\UploadedFiles\Uriage.txt", True) objFSO = Nothing Label1.Text = "取り込みエラー。タイトル行がはいっている可能性があります。" Exit Sub End If Reader2.Close() End Sub Function replaceDoubleQuotes(ByVal apdata As Object) As String '文字列に変換する Dim tmp As String = String.Format("{0}", apdata) '1つのダブルクォーテーションを0個に置換する つまり消去する replaceDoubleQuotes = tmp.Replace("""", "") End Function

  • Excel VBAでXML形式のデータを扱いたい

    SQL ServerにXML形式のデータが"1つのカラムにロングテキスト(ntext)形式で格納"されています。 このデータをExcelのVBAで取得したのは良いのですが、XML文書からタグを指定して任意の値を取得する方法がわかりません。 とりあえず以下のように普通の取得をするまでは書いてみました。 --- Sub GetXMLDataFromSQLServ() Dim CNN As ADODB.Connection Dim RST As ADODB.Recordset Dim RecCt As Long Dim strCNN As String Dim strData1 As String Dim strData2 As String Dim xmlTest As MSXML2.DOMDocument 'Connection String strCNN = "driver={SQL Server}; server=appdemo; uid=userid; pwd=password; database=database" Set CNN = New Connection CNN.ConnectionTimeout = 30 CNN.Open strCNN 'レコードセットを開く Set RST = New ADODB.Recordset RST.CursorType = adOpenStatic RST.Open "SELECT * FROM G_JOB_CONTENT;", strCNN RST.MoveFirst 'シートに出力 Do Until RST.EOF ActiveCell.Value = RST.Fields("JOB_ID") ActiveCell.Offset(0, 1).Value = RST.Fields("XML") '---(1) RST.MoveNext ' ActiveCell.Offset(1, 0).Activate Loop 'レコードセットを閉じる Set RST = Nothing '接続を閉じる Set CNN = Nothing End Sub --- (1)の部分でXMLのタグを指定し、任意のデータを得たいと考えています。 参照設定などを見て、おそらくMSXML2オブジェクトを使うのかな、というところまでは想像ついたのですけど・・・。 どなたかご教示の程をお願いいたします。

    • ベストアンサー
    • XML
  • CSVの出力(1行を3行に出力~)

    テキスト式1行 200705 00001 A01 A02 B01 B02 C01 C02があるとします。 200705と00001は3行の先頭を出したいので、どうやってループさせたらいいのかわからないのです。 今の状況 Private Sub Object(lFname As String, lOFilename As String) Dim IUO As Variant ''出力データ Dim lFBnt As Long ''開始位置1 Dim m_Input As String ''レコード退避先データ Dim byteInput() As Byte ''領域確保変数 Dim fs As Object ''ファイルシステムオブジェクト Dim ObjOutFile As Object ''出力先ファイルオブジェクト'' IUO = "" ''出力先ファイルオブジェクトの作成 Set fs = CreateObject("Scripting.FileSystemObject") ''出力先ファイル名の指定 Set ObjOutFile = fs.CreateTextFile(lOFilename, True) ReDim byteInput(レコードの長さ- 1) ''正常ファイル時のファイルオープン Open lFname For Binary As #1 '' ファイルの終端までループを繰り返します。 Do While Loc(1) < LOF(1) IUO= "" ''該当行のレコードデータの取得 Get #1, , byteInput m_Input = StrConv(byteInput, vbUnicode) lFBnt = 1 IUO = IUO + Chr(39) & MidMbcs(m_InputBuffer, lFBnt, 一つ目のパラメータ名) + Chr(39) lFBnt = lFBnt + 一つ目のパラメータ名 IUO = IUO + vbNewLine ''改行 ''ファイルへの書込 ObjOutFile.Write (IUO) Me.Refresh Loop Close #1 ''File close ObjOutFile.Close Set ObjOutFile = Nothing End Sub 以上では1行しか出力できないのですが、どうやったら3行出力できるのでしょうか。 よろしくおねがいします。

  • ACCESSからEXCELに出力する際、時間がかかる。

    よろしくお願いします。 ACCESS VBA を使用して、既存のEXCELファイルにデータを出力しているのですが、すごく時間がかかってしまいます。件数が少ない時はそれほど気にならないのですが。時間短縮する方法を教えてください。 Sub S_ExportExcel_ADO() Dim CN As ADODB.Connection Dim rst As ADODB.Recordset Dim objExcel As Excel.Application Dim i As Integer Dim W_SQL As String On Error GoTo Err_S_ExportExcel_ADO Set objExcel = New Excel.Application objExcel.Workbooks.Open ("test.xls") objExcel.Worksheets("sheet1").Select Set CN = CurrentProject.Connection Set rst = New ADODB.Recordset W_SQL = "SELECT * FROM データ" rst.Open W_SQL, CN, adOpenKeyset, adLockReadOnly i = 1 Do Until rst.EOF objExcel.Cells(i, 4) = Trim("" & rst![データ1]) objExcel.Cells(i, 5) = Trim("" & rst![データ2]) objExcel.Cells(i, 6) = Trim("" & rst![データ3]) objExcel.Cells(i, 7) = Trim("" & rst![データ4]) objExcel.Cells(i, 9) = Trim("" & rst![データ5]) '***省略*** objExcel.Cells(i, 35) = Trim("" & rst![データ15]) objExcel.Cells(i, 36) = Trim("" & rst![データ16]) i = i + 1 rst.MoveNext Loop 'EXCEL保存 objExcel.ActiveWorkbook.Close objExcel.Quit rst.Close CN.Close Set rst = Nothing Set CN = Nothing Set objExcel = Nothing End Sub

  • access 特定のレコード数までエクセルに出力したら、別のシートに出力先を変えたい

    VBA初心者です。宜しくお願い致します。 テーブルのデータをエクセルに出力しているのですが 特定の行まで出力したら、別のシートに出力先を変更したいのです。 以下コードの★部分で処理するのではないかと思っているのですが どのように書けばいいのかさっぱりわからず、ご質問させて いただきました。 どうぞ、宜しくお願い致します。 ----------------------- '既存の Excel Book をテンプレートとして開き、 '位置を指定して、テーブルのデータを出力 Dim cnADO As ADODB.Connection 'ADO コネクション確立 Dim rsADO As ADODB.Recordset Dim xls As Excel.Application Dim wkb As Excel.Workbook Dim fName As Variant Dim stDetail As String 'Query OR Table Name Dim stPath As String 'mdb & Excel Book Path Dim stXLName As String 'Book Name Dim stSheet As String 'Sheet Name Dim stSheet2 As String 'Sheet2 Name Dim stRng As String 'Range Address stPath = "\\marketing\" '自mdb & Excel Book のパス stXLName = "marketing.xls" 'テンプレート用の Book stDetail = "出力テーブル" 'テーブル名 stSheet = "marketing" '出力するシート名1 stSheet2 = "marketing2" '出力するシート名2 stSheet3 = "marketing3" '出力するシート名3 stRng = "A26" '出力開始セル番地 Set cnADO = CurrentProject.Connection Set rsADO = cnADO.Execute(stDetail) 'テンプレート としてオープン Set xls = CreateObject("Excel.Application") xls.Workbooks.Add template:=stPath & stXLName Set wkb = xls.Workbooks(1) '★rsADOのレコード数を1行目のデータから30行目までに制限 '★明細データ貼り付け1(rsADOの1行目のデータから30行目までを貼り付け処理) With wkb.Worksheets(stSheet) .Range(stRng).CopyFromRecordset Data:=rsADO End With '★rsADOのレコード数を31行目のデータから75行目までに制限 '★明細データ貼り付け2(rsADOの31行目のデータから75行目までを貼り付け処理) With wkb.Worksheets(stSheet2) .Range(stRng).CopyFromRecordset Data:=rsADO End With '★rsADOのレコード数を76行目のデータから100行目までに制限 '★明細データ貼り付け3(rsADOの76行目のデータから100行目までを貼り付け処理) With wkb.Worksheets(stSheet3) .Range(stRng).CopyFromRecordset Data:=rsADO End With 'Excel画面を表示して終了(保存しない) xls.Visible = True Set xls = Nothing Set wkb = Nothing Set fName = Nothing rsADO.Close: Set rsADO = Nothing cnADO.Close: Set cnADO = Nothing

  • AccessでCSVをインポートしたい(VBA)

    お世話になります。AccessVBA暦2週間の初心者です。 AccessでCSVをインポートできたらいいなと思い ↓下のサイトにあるVBAサンプルを参考にして以下のようにプログラミングをしました。 http://memo.bz/access/advance/csvinpsam Public Function SplitTest() On Error GoTo myError Dim dbs As Database Dim rst As Recordset Dim varData As Variant Dim lngFileNum As Long Dim strData As String Dim xSQL As String FileName = TestGetFileName '入力元CSVファイルを開く lngFileNum = FreeFile() Open FileName For Input As #lngFileNum 'テーブルを開く Set dbs = CurrentDb Set rst = dbs.OpenRecordset("Data") 'CSVファイルの全レコードを読み込むループ Do Until EOF(lngFileNum) 'CSVファイルより1件分を読み込み Line Input #lngFileNum, strData 'カンマで区切って配列に代入 varData = Split(strData, ",", , vbTextCompare) '各フィールドデータをテーブルに追加 With rst .AddNew ![Code1] = varData(0) ![Code2] = varData(1) ![TS] = varData(2) ![PM] = varData(3) ![金額] = varData(4) ![摘要] = varData(5) ![メモ] = varData(6) .Update End With Loop rst.Close Close #lngFileNum MsgBox "データの取り込みが終了しました" Exit Function myError: MsgBox "ファイル名を指定してください" End Function 'CSVファイル選択 Function TestGetFileName() 'ファイル選択 Const ENABLE_WIZHOOK = 51488399 Const DISABLE_WIZHOOK = 0 Dim strFile As String Dim intResult As Integer WizHook.Key = ENABLE_WIZHOOK ' WizHook 有効化 intResult = WizHook.GetFileName( _ 0, "", "", "", strFile, "", _ "すべてのファイル (*.*)|*.*", _ 0, 0, 0, True _ ) WizHook.Key = DISABLE_WIZHOOK ' WizHook 無効化 TestGetFileName = strFile End Function ダイアログは普通に開けるのですがインポートが出来ず「ファイル名を指定してください」 というメッセージボックスが出ます。 弄っている部分は ![フィールド1] = varData(0)を ![Code1] = varData(0)にしているぐらいです。 何が悪いのか皆目見当がつきません。 こんな初心者でございますがご教授のほどよろしくお願いします。 (ヒントでも構いません) 説明不足等ございましたらご指摘のほどよろしくお願いします。

  • CSV出力に関して

    開発環境:Visual Basic 2008 教えて下さい。 あるホームページを参考に、CSV出力のプログラム(下記)を作成していますが、その際に、 どうやらデータは出力されているももの、ファイルを開いてもデータの中身が見れません。 メモ帳で開くとデータは存在しています。 何か記述漏れ等ありますでしょうか? 初歩的なトラブルで申し訳ありませんが、教えて下さい。 よろしくお願いします。 《記述内容》 Dim dt As DataTable = CType(G_DATA.DataSource, DataTable) '保存先のCSVファイルのパス Dim csvPath As String = "C:\test1.csv" 'CSVファイルに書き込むときに使うEncoding Dim enc As System.Text.Encoding = _ System.Text.Encoding.GetEncoding("Shift_JIS") '開く Dim sr As New System.IO.StreamWriter(csvPath, False, enc) Dim colCount As Integer = dt.Columns.Count Dim lastColIndex As Integer = colCount - 1 'ヘッダを書き込む Dim i As Integer For i = 0 To colCount - 1 'ヘッダの取得 Dim field As String = dt.Columns(i).Caption '"で囲む必要があるか調べる If field.IndexOf(ControlChars.Quote) > -1 OrElse _ field.IndexOf(","c) > -1 OrElse _ field.IndexOf(ControlChars.Cr) > -1 OrElse _ field.IndexOf(ControlChars.Lf) > -1 OrElse _ field.StartsWith(" ") OrElse _ field.StartsWith(ControlChars.Tab) OrElse _ field.EndsWith(" ") OrElse _ field.EndsWith(ControlChars.Tab) Then If field.IndexOf(ControlChars.Quote) > -1 Then '"を""とする field = field.Replace("""", """""") End If field = """" + field + """" End If 'フィールドを書き込む sr.Write(field) 'カンマを書き込む If lastColIndex > i Then sr.Write(","c) End If Next i '改行する sr.Write(ControlChars.Cr + ControlChars.Lf) 'レコードを書き込む Dim row As DataRow For Each row In dt.Rows For i = 0 To colCount - 1 'フィールドの取得 Dim field As String = row(i).ToString() '"で囲む必要があるか調べる If field.IndexOf(ControlChars.Quote) > -1 OrElse _ field.IndexOf(","c) > -1 OrElse _ field.IndexOf(ControlChars.Cr) > -1 OrElse _ field.IndexOf(ControlChars.Lf) > -1 OrElse _ field.StartsWith(" ") OrElse _ field.StartsWith(ControlChars.Tab) OrElse _ field.EndsWith(" ") OrElse _ field.EndsWith(ControlChars.Tab) Then If field.IndexOf(ControlChars.Quote) > -1 Then '"を""とする field = field.Replace("""", """""") End If field = """" + field + """" End If 'フィールドを書き込む sr.Write(field) 'カンマを書き込む If lastColIndex > i Then sr.Write(","c) End If Next i '改行する sr.Write(ControlChars.Cr + ControlChars.Lf) Next row '閉じる sr.Close()

  • ACCESSへの更新に関して

    以下のような記述をして、VBからACCESSのテーブルに書き込みを行おうとしています。 その際に、開発をしているVisual Basic2008のデバックモードでは、問題なくACCESSに 更新ができますが、コンパイルしてできあがった"EXE"から実行した場合、ACCESSへの更新ができません。 エラーが起こっているかと思い、updateのあるfor文にポップアップを出すような仕掛けを作り、試してみましが、 そこを通過するものの、エラーも何も起こらずに正常終了してしまいます。 何が原因でしょうか。。。教えて下さい。 環境  Windows7/ACCESS2000/VB2008/参照設定:Microsoft ActiveX Data Objects 2.8 Library   'データベースファイル名 Dim dname As String = "C:\test.mdb" 'データベースパラメータ Dim strDatbasePara As String Dim Cnn As New ADODB.Connection Dim Rst As New ADODB.Recordset strDatbasePara = "Provider=Microsoft.Jet.OLEDB.4.0;" + _ "Data Source=" + dname + ";" + _ "Jet OLEDB:Engine Type=5;" Try Cnn.Open(strDatbasePara) Rst.Open("table", Cnn, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockOptimistic) If Rst.EOF Then For jcount = 0 To icount - 1 Rst.AddNew() Rst.Fields("項目1").Value = "AAA" Rst.Update() Next End If Rst.Close() Catch ex As Exception smsg = "失敗しました。" MessageBox.Show(smsg, "更新", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End Try Cnn = Nothing Rst = Nothing

専門家に質問してみよう