Q、ほかにいい方法はありませんか?
A、VBで手続き無用の関数を書くと大抵のことが出来ます。
**********************************************************************************************
[イミディエイト]
? FileWrite("c\在庫\在庫表.txt", DBSelect("SELECT 品番,在庫数 FROM T_在庫表",",",vbCrLf))
True
***********************************************************************************************
tab1:
ID_fld1
1__9-1
2__9-001
3__9-0001
4__90-1
を、[C:\Temp\Test.csv]に出力し[メモ帳]でオープン。
C:\Temp\Test.csv
1,9-1
2,9-001
3,9-0001
4,90-1
これは、フォームのイミディエイトウインドウで次のようにして達成。
[イミディエイト]
? FileWrite("C:\Temp\test.csv", DBSelect("SELECT * FROM Tab1",",",vbCrLf))
True
つまり、DBSelect関数の戻り値をFikeWrite関数で[C:\Temp\Test.csv]に出力。
DBSelect関数では、列区切り子(、)と行区切り子(vbCrLf)を指定しています。
? DBSelect("SELECT * FROM Tab1",",",vbCrLf)
1,9-1
2,9-001
3,9-0001
4,90-1
指定しなければ、ズラズラと全てのレコードデータがセミコロンで繋がって戻されます。
? DBSelect("SELECT * FROM Tab1")
1;9-1;2;9-001;3;9-0001;4;90-1;
もちろん、以下のような FileWrite関数、DBSelect関数を標準モジュールに用意する必要があります。
なお、 FileWrite関数、DBSelect関数の動作保証はしていません!
十分に動作確認をされて自分のものにされた後に利用なさってください。
Public Function FileWrite(ByVal FileName As String, _
ByVal Text As String) As Boolean
On Error GoTo Err_FileWrite
Dim fso As Object
Dim txs As Object
Set fso = CreateObject("Scripting.FIleSystemObject")
Set txs = fso.CreateTextFile(FileName, True)
txs.Write Text
FileWrite = True
Exit_FileWrite:
Exit Function
Err_FileWrite:
MsgBox Err.Description & "(FileWrite)", vbExclamation, " 関数エラーメッセージ"
Resume Exit_FileWrite
End Function
Public Function DBSelect(ByVal strQuerySQL As String, _
Optional ByVal strSeparator1 As String = ";", _
Optional ByVal strSeparator2 As String = ";") As String
On Error GoTo Err_DBSelect
Dim I As Integer
Dim J As Integer
Dim R As Integer
Dim C As Integer
Dim M As Integer
Dim N As Integer
Dim rst As ADODB.Recordset
Dim fld As ADODB.Field
Dim Datas As String
Set rst = New ADODB.Recordset
' =================
' Begin With: rst
' -----------------
With rst
.Open strQuerySQL, _
CurrentProject.Connection, _
adOpenStatic, _
adLockReadOnly
If Not .BOF Then
M = .RecordCount - 1
N = .Fields.Count - 1
.MoveFirst
For R = 0 To M
For C = 0 To N
Datas = Datas & .Fields(C)
If C <> N Then
Datas = Datas & strSeparator1
End If
Next C
If Len(strSeparator2) Then
Datas = Datas & strSeparator2
End If
.MoveNext
Next R
End If
End With
' ---------------
' End With: rst
' ===============
Exit_DBSelect:
DBSelect = Datas
Exit Function
Err_DBSelect:
MsgBox "SELECT 文の実行時にエラーが発生しました。(DBSelect)" & Chr$(13) & Chr$(13) & _
"・Err.Description=" & Err.Description & Chr$(13) & _
"・SQL Text=" & strQuerySQL, _
vbExclamation, " 関数エラーメッセージ"
Resume Exit_DBSelect
End Function
お礼
有難うございます。 テーブル T_在庫表 をまるごと在庫表.txt にしたいのです。 メインフォームなんかにクリック時の更新作業として おきたいのです。 何卒おねがいします。