得意先テーブルをCSV形式で保存してFTPサーバーにアップロードするお手本

図7-5-1 得意先テーブルをCSV形式で保存してFTPサーバーにアップロードするサンプルデータベース
このサンプルデータベースは、Accessの得意先テーブルをCSV形式で保存して、FTPサイトにアップロードします。また、FTPサイトから、CSV形式のファイルをダウンロードして、Accessのテーブルにインポートすることもできます。
フォームから、“CSV形式で保存して送信”のボタンをクリックすると、FTPのフォームが表示されます。このフォームでは、FTPサーバー (FTP Server)、ユーザー名(Username)、パスワード(Password)を入力します。ローカルディレクトリ(Local Dir)には、CSVファイルが保存されているフォルダ(例:C:\Access\Data)を入力します。リモートディレクトリ(Remote Dir)には、FTPサイトの送信先フォルダ(例: Access/Data)を入力します。CSVファイルが保存されているフォルダは、C:\Access\Dataのようにフォルダを”\”で区切りますが、送信先は、Access/Dataのようにフォルダを”/”で区切ります。これらの情報は、事前にテーブルtblFTPServerに登録して、コンボボックスから選択することができます。
ファイル名(Filename)には、CSVファイルの名称を入力します。Put Fileのボタンをクリックすると、FTPサーバーに接続してCSVファイルをアップロードします。結果は、ステータス(Status)に表示されます。アップロードが完了すると自動的に切断します。
このサンプルデータベース(CH7-5.mdb)では、以下のノウハウを習得することができます。
◆ AccessのテーブルをCSV形式で保存する方法
◆ CSVファイルをFTPサイトにアップロードする方法
◆ CSVファイルをFTPサイトからダウンロードする方法
◆ ダウンロードしたCSVファイルをテーブルにインポートする方法
◆ コンボボックスに無いアイテムを入力したときにテーブルに登録する方法
● FTPライブラリBASP21をインストールするには
1 IE5.5などのブラウザを起動して、Webサイト
http://www.hi-ho.ne.jp/babaq/basp21.html からBabaさんの作成したBASP21.EXE (997KB)をダウンロードします。
2 ダウンロードが完了したら、BASP21.EXEを起動してインストールします。
3 BASP21に登録されているFTPオブジェクトには、Connect, GetFile, PutFile,Closeなど12個のメソッドがサポートされています。これらのメソッドの使い方は、http://www.hi-ho.ne.jp/babaq/basp21f.html に記載されていますので参照してください。
● サンプルデータベースで使用するテーブルを準備するには
1 Accessを起動したら作業フォルダに、新規データベース CH7-5.mdbを作成します。
2 メニューから外部データベースの取り込み、インポートをクリックします。インポートのダイアログが表示されたら、Access のサンプルデータベースNorthwind.mdb(デフォルトで、“C:\Program Files\Microsoft Office\Office\Samples”にインストールされます)を選択してインポートボタンをクリックします。オブジェクトのインポートのダイアログが表示されたら、テーブルタブをクリックして得意先テーブルをクリックします。最後に、OKボタンをクリックしてインポートを完了させます。
3 データベースウィンドウのテーブル
をクリックしたら、得意先テーブルを選択してマウスの右ボタンをクリックします。ショートカットメニューが表示されたら、名前の変更をクリックしてtblCustomerに変更します。
4 テーブルtblCustomerを選択したら、マウスの右ボタンをクリックしてショートカットメニューを表示させます。メニューからコピーをクリックしてtblCustomerをコピーします。データベースウィンドウ内の空きスペースをクリックしたら、マウスの右ボタンをクリックしてショートカットメニューを表示させます。メニューから貼り付けをクリックして、テーブルの貼り付けのダイアログを表示させます。ダイアログのテーブル名にtblCustomer2を入力したら、貼り付けの設定からテーブル構造のみをチェックしてOKボタンをクリックします。
図7-5-2 テーブルの貼り付けのダイアログを表示させた例
5 テーブルの準備ができたらAccess を終了させます。
● 得意先テーブルを表示するフォームを作成するには
1 Accessを起動したら、作業フォルダに作成したCH7-5.mdbを開きます。
2 データベースウィンドウからフォーム
をクリックしたら、新規作成のボタンをクリックします。フォームの新規作成ダイアログが表示されたら、リストボックスからオートフォーム:表形式を選択します。基になるテーブル/クエリのコンボボックスから、tblCustomerを選択したらOKボタンをクリックします。

図7-5-3 フォームの新規作成ダイアログから、オートフォーム:表形式を選択して得意先テーブルのフォームを自動作成する
3 得意先テーブルを表示するフォームが表示されたら、デザインビューに切り替えてsfrCustomerの名称で保存して閉じます。このフォームは、サブフォームとして使用します。
図7-5-4 得意先を表示するフォームを自動作成した例
4 データベースウィンドウの一覧からデザインビューでフォームを作成するをダブルクリックします。フォームのデザインが表示されたら、データベースウィンドウからサブフォームsfrCustomerのアイコンをドラッグして、フォーム詳細の左上に貼り付けます。
5 メニューからツールボックスのアイコン
をクリックして、ツールボックスを表示させます。ツールボックスからコマンドボタンのアイコン
をクリックしたら、サブフォームの右側に2個(上から閉じる、CSV形式で保存して送信)のコマンドボタンを作成します。
6 メインフォームに作成したコントロールのプロパティを、表7-5-1のように設定します。
表7-5-1 メインフォームに作成したコントロールのプロパティ
|
コントロールの種類 |
プロパティ |
値 |
|
サブフォーム |
名前 |
sfrCustmer |
|
ソースオブジェクト |
sfrCustomer |
|
|
リンク子フィールド |
空白 |
|
|
リンク親フィールド |
空白 |
|
|
コマンドボタン1 |
名前 |
cmdClose |
|
標題 |
閉じる |
|
|
コマンドボタン2 |
名前 |
cmdSend |
|
標題 |
CSV形式で保存して送信 |

図7-5-5 メインフォームfrmCustomerのレイアウト
7 メニューからコードのアイコン
をクリックして、フォームモジュールを表示させます。CH7-5.mdbを開いて、frmCustomerのフォームモジュールをコピーして貼り付けます。フォームモジュールのソースコードは、リスト7-5-1を参照してください。
CH7-5.mdbから、標準モジュール basMyLibをコピーします。標準モジュールは、フォームモジュールから参照します。basMyLibは、Microsoft DAO 3.6 Object Libraryを参照しますので、VBEのツールメニューから参照設定をクリックして登録します。
8 メインフォームをfrmCustomerの名称で保存したらAccess を終了させます。
cmdSend_Click()イベントの処理
このイベントは、フォームから“CSV形式で保存して送信”のボタンをクリックしたときに発生します。このイベントでは、DoCmdのOpenFormメソッドでfrmFTPを開きます。引数のOpenArgsには、アップロードを意味するアクションコード”PutFile”とCSVのファイル名”Customer.cvs”をセミコロン(;)で区切って指定します。
DoCmd.OpenForm FormName:="frmFtp", OpenArgs:="PutFile;Customer.csv"
CSVファイルの送信は、frmFTPからPutFileボタンをクリックしたときに行います。
cmdClose_Click()イベントの処理
このイベントは、フォームから閉じるのボタンをクリックしたときに発生します。このイベントでは、DoCmdのCloseメソッドでフォームを閉じます。
リスト7-5-1 frmCustomerのソースコード
|
Option Compare Database Option Explicit Private Sub cmdClose_Click() DoCmd.Close End Sub Private Sub cmdSend_Click() DoCmd.OpenForm FormName:="frmFtp", _ OpenArgs:="PutFile;Customer.csv" End Sub |
● ファイルをアップロードまたはダウンロードするフォームを作成するには
1 Access を起動したら、作業フォルダに作成したCH7-5.mdbを開きます。
2 データベースウィンドウからフォーム
をクリックしたら、一覧からデザインビューでフォームを作成するをダブルクリックします。フォームのデザインビューが表示されたら、メニューからツールボックスのアイコン
をクリックします。
3 ツールボックスからコンボボックスのアイコン
をクリックしたら、フォーム詳細の左上に配置します。このコンボボックスは、テーブルtblFTPServerのServerName, UserName, Password, LocalFolder,
RemoteFolderから構成されますが、列幅をServerNameのみ表示されるように調整します。ツールボックスからラベルのアイコン
をクリックしたら、コンボボックスの右に配置します。ラベルの標題には、”?”を入力します。このラベルは、図7-5-6に示すようなヘルプ情報を表示するのに使用します。ヘルプのフォームfrmHelpの作り方は、紙面の都合上省略しますので、事前に作成しておいてください。

図7-5-6 フォームfrmHELPのレイアウト
4 ツールボックスからテキストボックスのアイコン
をクリックしたら、コンボボックスの下にUsername, Password, Local Dir,
Remote Dir, Filename, Statusのテキストボックスを作成します。
5 ツールボックスからコマンドボタンのアイコン
をクリックしたら、フォーム詳細の右上から3個(上からExit, Get File, Put
File)のコマンドボタンを作成します。
6 フォームに作成したコントロールのプロパティを、表7-5-2のように設定します。
表7-5-2 フォームに作成したコントロールのプロパティ
|
コントロールの種類 |
プロパティ |
値 |
|
コンボボックス |
名前 |
cboFTPServer |
|
値集合タイプ |
テーブル/クエリ |
|
|
値集合ソース |
SELECT tblFTPServer.ID, tblFTPServer.ServerName, tblFTPServer.UserName, tblFTPServer.Password, tblFTPServer.LocalFolder, tblFTPServer.RemoteFolder FROM tblFTPServer ORDER BY
tblFTPServer.ID; |
|
|
連結列 |
2 |
|
|
列数 |
6 |
|
|
列幅 |
0cm;3.6cm;0cm;0cm;0cm;0cm |
|
|
ラベル |
名前 |
lblHelp |
|
標題 |
? |
|
|
ハイパーリンクサブアドレス |
Form frmHelp |
|
|
背景色 |
65535 |
|
|
立体表示 |
浮き出し |
|
|
テキストボックス1 |
名前 |
txtUsername |
|
テキストボックス2 |
名前 |
txtPassword |
|
テキストボックス3 |
名前 |
txtLocalDir |
|
テキストボックス4 |
名前 |
txtRemoteDir |
|
テキストボックス5 |
名前 |
txtFilename |
|
テキストボックス6 |
名前 |
txtStatus |
|
背景色 |
16777177 |
|
|
編集ロック |
はい |
|
|
コマンドボタン1 |
名前 |
cmdExit |
|
標題 |
Exit |
|
|
コマンドボタン2 |
名前 |
cmdGetFile |
|
標題 |
Get File |
|
|
コマンドボタン3 |
名前 |
cmdPutFile |
|
標題 |
Put File |

図7-5-7 フォームfrmFtpのレイアウト
7 メニューからコードのアイコン
をクリックして、フォームモジュールを表示させます。CH7-5.mdbを開いて、frmFtpのフォームモジュールをコピーして貼り付けます。フォームモジュールのソースコードは、リスト7-5-2を参照してください。
8 フォームをfrmFtpの名称で保存したらAccess を終了させます。
Form_Load()イベント処理
このイベントは、フォームが開かれてデータをロードするときに発生します。このイベントでは、コンボボックスから先頭アイテムItemData(0)のFTP Serverを選択して、Username, Password, Local Dir, Remote Dir情報を表示します。
Me.cboFTPServer =
Me.cboFTPServer.ItemData(0)
フォームのOpenArgsプロパティを調べて、アクションコード(PutFile/GetFile)とCSVファイル名を取得します。CSVファイル名は、フォームのFilenameに表示させます。アクションコードが”PutFile”なら、Get Fileのコマンドボタンを使用不可にします。アクションコードが”GetFile”なら、Put Fileのコマンドボタンを使用不可にします。
If Len(Me.OpenArgs) Then
strAction = Left(Me.OpenArgs,
7)
Me.txtFilename =
Mid(Me.OpenArgs, 9)
If strAction = "PutFile" Then
Me.cmdGetFile.Enabled = False
Else ' GetFile
Me.cmdPutFile.Enabled = False
End If
End If
cboFTPServer_AfterUpdate()イベント処理
このイベントは、FTP ServerのコンボボックスからFTPサイトを選択したときに発生します。このイベントでは、コンボボックスから、Username, Password, Local Dir, Remote Dir情報を取得してテキストボックスに表示させます。Local Dir情報が空白のときは、デフォルトとしてカレントデータベースのパス名を表示します。
Me.txtUsername = .Column(2)
Me.txtPassword = .Column(3)
Me.txtLocalDir = .Column(4)
Me.txtRemoteDir = .Column(5)
If Len(Me.txtLocalDir) = 0 Then
Me.txtLocalDir =
CurrentProject.Path
End If
cboFTPServer_NotInList()イベント処理
このイベントは、FTP Serverのコンボボックスから一覧に無いアイテムを入力したときに発生します。このイベントでは、コンボボックスから入力したFTP Serverを新規登録します。“XXXXがFTP serverに登録されていません! 登録しますか?”のメッセージに対して”Yes”を選択したときは、DoCmdのOpenFormメソッドでfrmAddFtpSiteをダイアログモードで開きます。(ダイアログモードでフォームを開くと、DoCmd.OpenFormは、frmAddFtpSiteが非可視状態になるか、閉じられるまで待たされます。)DoCmd.OpenFormの待ち状態が解除されたら、IsLoaded()関数でfrmAddFtpSiteがロードされているか調べます。ロードされているときは、OKボタンをクリックしたことを意味しますので、引数ResponseにacDataErrAddedを設定してフォームを閉じます。
DoCmd.OpenForm conFormname, _
DataMode:=acFormAdd, _
WindowMode:=acDialog, _
OpenArgs:=NewData
If IsLoaded(conFormname) Then
Response =
acDataErrAdded
DoCmd.Close acForm,
conFormname
Else
Response =
acDataErrContinue
End If
“・・・・登録しますか?”のメッセージに対して”No”を選択したときは、引数ResponseにacDataErrContinueを設定します。この場合、Accessからエラーメッセージが表示されます。
cmdExit_Click()イベント処理
このイベントは、フォームからExitボタンをクリックしたときに発生します。このイベントでは、DoCmdのCloseメソッドでフォームを閉じます。
cmdPutFile_Click()イベント処理
このイベントは、フォームからPut Fileボタンをクリックしたときに発生します。このイベントでは、得意先テーブルをCSV形式で保存してFTPサイトにアップロードします。
DoCmdのTransferTextメソッドでテーブルtblCustomerをCSV形式で保存します。引数SpecificationNameで指定しているファイル定義情報(defCustomer)は、事前に登録しておきます。
SpecificationName:="defCustomer", _
TableName:="tblCustomer", _
FileName:=strFilename, _
HasFieldNames:=True
CSVファイルを作成したら、Connect_ftp()関数でFTPサーバーに接続します。FTPサーバーに接続したら、FTPオブジェクトのPutFileメソッドでCSVファイルをアップロードします。PutFileメソッドの引数には、ローカルのファイル名、リモートサイトのフォルダ、タイプ(0-Ascii, 1-Binary)を指定します。
例:
mobjFTP.PutFile("C:\Access\Data\Customer.csv", "Access/Data", 0)
PutFileメソッドの戻り値を取得したら、AddStatusを呼び出して結果を表示します。
mlngRC =
mobjFTP.PutFile(strLocal, strRemote, 0)
If mlngRC = 0 Then
AddStatus "Transfer
Error!"
AddStatus "Transfer
Complete."
End If
最後に、Disconect_ftpを呼び出して切断します。
cmdGetFile_Click()イベント処理
このイベントは、フォームからGet Fileボタンをクリックしたときに発生します。このイベントでは、FTPサイトからファイルをダウンロードします。Connect_ftp()関数で、FTPサイトに接続したら、FTPオブジェクトのGetFileメソッドでファイルをダウンロードします。GetFileメソッドの引数には、リモートサイトのファイル名、ローカルのフォルダ、タイプ(0-Ascii, 1-Binary)を指定します。
例:
mobjFTP.GetFile("Access/Data/customer.csv", "C:\Access\Data”, 0)
GetFileメソッドの戻り値を取得したら、AddStatusを呼び出して結果を表示します。ダウンロードしたCSVファイルは、ImportTableを呼び出してテーブルtblCustomer2にインポートします。
mlngRC =
mobjFTP.GetFile(strRemote, strLocal, 0)
If mlngRC = 0 Then
AddStatus "Transfer
Error!"
Else
AddStatus "Transfer Complete."
AddStatus
"Importing " & Me.txtLocalDir & "\" &
Nz(Me.txtFilename, "")
ImportTable
Me.txtLocalDir & "\" & Nz(Me.txtFilename, "")
End If
最後に、Disconnect_ftpを呼び出して切断します。
Connect_ftp()
この関数は、コンボボックスで選択したFTPサイトに接続します。CreateObjectで、BASP21.FTPのインスタンスを生成したら、オブジェクト変数mobjFTPにポンタを設定します。
Set mobjFTP =
CreateObject("basp21.FTP")
FTPオブジェクトのConnectメソッドでFTPサイトに接続します。Connectメソッドには、引数としてFTP Server, Username, Passwordを指定します。例えば、マイクロソフト社のFTPサイトに接続するには、
mobjFTP.Connect("ftp.microsoft.com","anonymous","")
のように指定します。
mlngRC = mobjFTP.Connect( _
Me.cboFTPServer, _
Nz(Me.txtUsername,
"anonymous"), _
Nz(Me.txtPassword, ""))
Connectメソッドの戻り値を取得したら、AddStatusを呼び出して結果を表示します。
If mlngRC <> 0 Then
AddStatus "Connection Failed!"
Connect_ftp = False
Else
AddStatus "Connected."
Connect_ftp = True
End If
最後に、戻り値としてTrue/Falseを設定して終了します。
Disconnect_ftp()
このプロシージャは、FTPサイトを切断します。FTPサイトを切断するには、FTPオブジェクトのCloseメソッドを使用します。
mobjFTP.Close
AddStatus()
このプロシージャは、引数で指定されたメッセージをステータスのテキストボックスに表示させます。
IsLoaded()
この関数は、引数で指定されたフォームがロードされているか調べてTrue/Falseを返します。
ImportTable()
このプロシージャは、引数で指定されたCSVファイルをインポートして表示させます。
DoCmdのSelectObjectメソッドでtblCustomer2を選択したら、DeleteObjectメソッドで削除します。
DoCmd.SelectObject acTable, conTablename
DoCmd.DeleteObject acTable, conTablename
DoCmdのTransferTextメソッドでCSVファイルをtblCustomer2にインポートします。
DoCmd.TransferText
TransferType:=acImportDelim, _
SpecificationName:="defCustomer", _
TableName:=conTablename, _
FileName:=strFilename, _
HasFieldNames:=True
最後に、DoCmdのOpenTableメソッドでインポートしたtblCustomer2を表示させます。
リスト 7-5-2 frmFtpのフォームモジュール
|
Option Compare Database Option Explicit #Const LOG = True Private mobjFTP As Object Private mlngRC As Long Private Sub cboFTPServer_AfterUpdate() With Me.cboFTPServer Me.txtUsername = .Column(2) Me.txtPassword = .Column(3) Me.txtLocalDir = .Column(4) Me.txtRemoteDir = .Column(5) If Len(Me.txtLocalDir) = 0 Then Me.txtLocalDir = CurrentProject.Path End If End With End Sub Private Sub cboFTPServer_NotInList( _ NewData As String, Response As Integer) Dim strMsg As String Const conFormname = "frmAddFtpSite" strMsg = NewData _ & " がFTPServerテーブルに存在しません!" _ & vbCrLf & "登録しますか?" If MsgBox(strMsg, vbYesNo + vbQuestion, "FTP Server") _ = vbYes Then DoCmd.OpenForm conFormname, _ DataMode:=acFormAdd, _ WindowMode:=acDialog, _ OpenArgs:=NewData If IsLoaded(conFormname) Then Response = acDataErrAdded DoCmd.Close acForm, conFormname Else Response = acDataErrContinue End If Else Response = acDataErrContinue End If End Sub Private Sub cmdExit_Click() DoCmd.Close End Sub Private Sub cmdGetFile_Click() Dim strRemote As String Dim strLocal As String
Me.txtStatus = vbNullString If Connect_ftp() Then strRemote = Me.txtRemoteDir _ & IIf(Len(Me.txtRemoteDir), "/", "") _ & Nz(Me.txtFilename, "*") strLocal = Me.txtLocalDir AddStatus "Receiving " & strRemote & " -> " & strLocal mlngRC = mobjFTP.GetFile(strRemote, strLocal, 0) If mlngRC = 0 Then AddStatus "Transfer Error!" Else AddStatus "Transfer Complete." AddStatus "Importing " _ & Me.txtLocalDir & "\" & Nz(Me.txtFilename, "") ImportTable Me.txtLocalDir & "\" & Nz(Me.txtFilename, "") End If Disconnect_ftp End If
End Sub Private Sub cmdPutFile_Click() Dim strLocal As String Dim strRemote As String Dim strFilename As String
Const conFilename = "Customer.csv"
strFilename = Me.txtLocalDir _ & "\" & Nz(Me.txtFilename, conFilename)
' 得意先マスタをCSV形式で保存します DoCmd.TransferText TransferType:=acExportDelim, _ SpecificationName:="defCustomer", _ TableName:="tblCustomer", FileName:=strFilename, HasFieldNames:=True
Me.txtStatus = vbNullString If Connect_ftp() Then strLocal = Me.txtLocalDir _ & "\" & Nz(Me.txtFilename, "*") strRemote = Me.txtRemoteDir AddStatus "Sending " & strLocal & " -> " & strRemote mlngRC = mobjFTP.PutFile(strLocal, strRemote, 0) If mlngRC = 0 Then AddStatus "Transfer Error!" Else AddStatus "Transfer Complete." End If Disconnect_ftp End If
End Sub Private Sub Form_Load() Dim strAction As String Me.cboFTPServer = Me.cboFTPServer.ItemData(0) cboFTPServer_AfterUpdate If Len(Me.OpenArgs) Then strAction = Left(Me.OpenArgs, 7) Me.txtFilename = Mid(Me.OpenArgs, 9) If strAction = "PutFile" Then Me.cmdGetFile.Enabled = False Else ' GetFile Me.cmdPutFile.Enabled = False End If End If End Sub Private Function Connect_ftp() As Boolean AddStatus "Connecting to " & Me.cboFTPServer Set mobjFTP = CreateObject("basp21.FTP") #If LOG Then mobjFTP.OpenLog CurrentProject.Path & "\log.txt" #End If mlngRC = mobjFTP.Connect( _ Me.cboFTPServer, _ Nz(Me.txtUsername, "anonymous"), _ Nz(Me.txtPassword, "")) If mlngRC <> 0 Then AddStatus "Connection Failed!" Connect_ftp = False Else AddStatus "Connected." Connect_ftp = True End If End Function Private Sub Disconnect_ftp() If mobjFTP Is Nothing Then Exit Sub End If #If LOG Then mlngRC = mobjFTP.CloseLog() #End If mobjFTP.Close Set mobjFTP = Nothing AddStatus "Disconnected." End Sub Private Sub ImportTable(strFilename As String) Const conTablename = "tblCustomer2"
If Len(strFilename) = 0 Then Exit Sub End If
On Error Resume Next DoCmd.SelectObject acTable, conTablename DoCmd.DeleteObject acTable, conTablename On Error GoTo 0
' CSV形式の得意先マスタをインポートして表示します DoCmd.TransferText TransferType:=acImportDelim, _ SpecificationName:="defCustomer", _ TableName:=conTablename, _ FileName:=strFilename, _ HasFieldNames:=True
DoCmd.OpenTable conTablename End Sub Private Sub AddStatus(strMsg As String) Me.txtStatus = Me.txtStatus & vbCrLf & strMsg End Sub Private Function IsLoaded(strName As String) _ As Boolean IsLoaded = _ (SysCmd(acSysCmdGetObjectState, acForm, strName) <> 0) End Function |
● FTPサイトを登録するフォームを作成するには
1 Access を起動したら、作業フォルダに作成したCH7-5.mdbを開きます。
2 データベースウィンドウからフォーム
をクリックしたら、新規作成のボタンをクリックします。フォームの新規作成ダイアログが表示されたら、リストボックスからオートフォーム:単票形式を選択します。基になるテーブル/クエリのコンボボックスからtblFTPServerを選択したら、OKボタンをクリックします。
図7-5-8 フォームの新規作成ダイアログからオートフォーム:単票形式を選択して自動作成する
3 フォームが自動作成されて表示されたら、デザインモードに切り替えます。フォームからIDとAddDateのテキストボックスを削除します。

図7-5-9 オートフォームで自動作成されたフォームからIDとAddDateのテキストボックスを削除する
4 ツールボックスからコマンドボタンのアイコン
をクリックしたら、フォーム右上に2個(上からOK、Cancel)のコマンドボタンを作成します。
5 フォームに作成したコントロールのプロパティを、表7-5-3のように設定します。
表7-5-3 frmAddFtpSiteに作成したコントロールのプロパティ
|
コントロールの種類 |
プロパティ |
値 |
|
テキストボックス1 |
名前 |
txtFTPServer |
|
テキストボックス2 |
名前 |
txtUsername |
|
テキストボックス3 |
名前 |
txtPassword |
|
テキストボックス4 |
名前 |
txtLocalDir |
|
テキストボックス5 |
名前 |
txtRemoteDir |
|
コマンドボタン1 |
名前 |
cmdOK |
|
標題 |
OK |
|
|
コマンドボタン2 |
名前 |
cmdCancel |
|
標題 |
Cancel |

図7-5-10 フォームfrmAddFtpSiteのレイアウト
6 メニューからコードのアイコン
をクリックして、フォームモジュールを表示させます。CH7-5.mdbを開いて、frmAddFtpSiteのフォームモジュールをコピーして貼り付けます。フォームモジュールのソースコードは、リスト7-5-3を参照してください。
7 フォームをfrmAddFtpSiteの名称で保存したら、Access 2000を終了します。
Form_Load()
このイベントは、フォームが開かれてデータをロードするときに発生します。このイベントでは、引数OpenArgsで指定されたFTPサーバー名(例: frp.friendlyswcom)をテキストボックスに表示させます。
cmdOK_Click()
このイベントは、フォームからOKボタンをクリックしたときに発生します。このイベントでは、フォームの可視(Visible)プロパティをFalseに設定します。フォームの可視プロパティをFalseに設定すると、このフォームを開いたDoCmd.OpenFormの待ち状態が解除されて、後続するVBAコードが実行されます。
cmdCancel_Click()
このイベントは、フォームからCancelボタンをクリックしたときに発生します。このイベントでは、フォームのUnDoメソッドでレコードを復元して、DoCmdのCloseメソッドでフォームを閉じます。フォームが閉じられると、このフォームを開いた、DoCmd.OpenFormの待ち状態が解除されて、後続するVBAコードが実行されます。
リスト7-5-3 frmAddFtpSiteのフォームモジュール
|
Option Compare Database Option Explicit ' *************************** Private Sub cmdCancel_Click() Me.Undo DoCmd.Close acForm, Me.Name End Sub ' *********************** Private Sub cmdOK_Click() Me.Visible = False End Sub ' ********************* Private Sub Form_Load() If Len(Me.OpenArgs) > 0 Then Me.txtFTPServer = Me.OpenArgs End If End Sub |
● 得意先テーブルをテキストファイルにエクスポートするための定義ファイルを作成するには
1 Access を起動したら、作業フォルダに作成したCH7-5.mdbを開きます。
2 データベースウィンドウからテーブル
をクリックしたら、tblCustomerを選択します。ファイルメニューからエクスポートをクリックしてダイアログを表示させたら、ファイルにCustomerを入力します。ファイルの種類のコンボボックスからは、テキストファイルを選択して、保存ボタンをクリックします。
3 保存ボタンをクリックすると、テキストのエクスポートウィザードが起動されますので、フィールドの区切り記号としてカンマを選択します。設定ボタンをクリックするとダイアログが表示されますので、保存ボタンをクリックします。定義名を入力するダイアログが表示されますので、”defCustomer”を入力してOKボタンをクリックします。

図7-5-11 tblCustomerをCSV形式でエクスポートするための定義ファイルを作成
● 得意先マスタをアップロード/ダウンロードするメニューフォームを作成するには
1 Access を起動したら、作業フォルダに作成したCH7-5.mdbを開きます。
2 データベースウィンドウからフォーム
をクリックしたら、一覧からデザインビューでフォームを作成するをダブルクリックします。
3 フォームのデザインビューが表示されたら、ツールボックスからコマンドボタンのアイコン
をクリックして、フォーム中央に2個のコマンドボタンを作成します。
4 フォームに作成したコントロールのプロパティを、表7-5-4のように設定します。
表7-5-4 frmMainに作成したコントロールのプロパティ
|
コントロールの種類 |
プロパティ |
値 |
|
コマンドボタン1 |
名前 |
cmdUpload |
|
標題 |
得意先マスタをメンテしてCSVファイル形式でWeb Serverにアップロードする |
|
|
コマンドボタン2 |
名前 |
cmdDownload |
|
標題 |
得意先マスタのCSVファイルをWeb Serverからダウンロードして表示する |

図7-5-12 フォームfrmMainのレイアウト
5 メニューからコードのアイコン
をクリックしてフォームモジュールを表示させます。CH7-5.mdbを開いて、frmMainのフォームモジュールをコピーして貼り付けます。フォームモジュールのソースコードは、リスト7-5-4を参照してください。
6 フォームをビューモードに切り替えたら、“得意先マスタをメンテしてCSVファイル形式でWeb Serverにアップロードする”のコマンドボタンをクリックします。フォームfrmCustomerが表示されて、得意先マスタの内容がデータシート上に表示されます。得意先マスタをメンテしたら、“CSV形式で保存して送信”のボタンをクリックします。フォームfrmFTPが表示されたら、FTP Serverのコンボボックスから、FTPサイトを選択します。FTPサイトを選択すると、Username, Password, Local Dir, Remote Dirが表示されます。FilenameのテキストボックスにCSVファイルの名称Customer.csvを入力したら、Put Fileのコマンドボタンをクリックします。FTPサイトに接続されて、ファイルがアップロードされます。アップロードが完了すると切断されます。

図7-5-13 得意先マスタをCSV形式で保存してアップロードする例
7 FTPサイトにアップロードしたCSVファイルをダウンロードして表示するには、フォームfrmMainから“得意先マスタのCSVファイルをWeb Serverからダウンロードして表示する”をクリックします。フォームfrmFTPが表示されたら、FTP Server, Username, Passwordを入力します。Local Dirには、ダウンロードしたファイルを保存するフォルダを入力します。Remote Dirには、ダウンロードするファイルのFTPサイトのフォルダを入力します。Filenameには、ダウンロードするファイル名を入力します。Get Fileボタンをクリックすると、FTPサイトに接続して指定したファイルをダウンロードします。結果は、Statusに表示されます。ダウンロードされたCSVファイルは、tblCustomer2にインポートされて表示されます。

図7-5-14 FTPサイトからCSVファイルCustomer.csvをダウンロードした例

図7-5-15 ダウンロードしたCSVファイルをtblCustomer2にインポートして表示させた例
8 フォームをfrmMainの名称で保存したらAccess を終了させます。
cmdUpload_Click()イベント処理
このイベントは、フォームからアップロードのボタンをクリックしたときに発生します。このイベントでは、DoCmdのOpenFormメソッドでフォームfrmCustomerを開きます。
cmdDownload_Click()イベント処理
このイベントは、フォームからダウンロードのボタンをクリックしたときに発生します。このイベントでは、DoCmdのOpenFormメソッドでフォームfrmFTPを開きます。引数のOpenArgsには、アクションコードとCSVファイル名(”GetFile;Customer.csv”)をセミコロン(;)区切りで指定します。”GetFile”は、ダウンロードすることを意味します。”Cusomer.csv”は、ダウンロードするファイル名です。
DoCmd.OpenForm
FormName:="frmFtp", OpenArgs:="GetFile;Customer.csv"
リスト 7-5-4 frmMainのフォームモジュール
|
Option Compare Database Option Explicit Private Sub cmdDownload_Click() DoCmd.OpenForm FormName:="frmFtp", _ OpenArgs:="GetFile;Customer.csv" End Sub Private Sub cmdUpload_Click() DoCmd.OpenForm "frmCustomer" End Sub |