access-vbaでネットワークプログラム作って遊ぶ

CCNAを昔取得したので、ネットワークに興味があります。IPV6はわからないですが、IPV4ならばある程度。 理解を深めるために、VBAでネットワークのプログラムを組もうと思ったのですが、仕掛けがわかりません。仕方ないのでAPIの「wininet」で作ってみました。
フォームのテキストボックスに条件を入れ、コマンドボタンで実行するものです。
初めにAPI利用方法取得するために簡単なプログラムを作成してから、FTPのプログラムにチャレンジした。

Private Sub cmd_conn_Click()
‘===============================================
‘ 領域確保とFTP接続
‘===============================================
Dim wserver As String
Dim wuser As String
Dim wpassword As String

hOpen = 0
hConnection = 0
wserver = Me!txtserver    ’フォームのテキストボックス
wuser = Me!txtuser      ‘フォームのテキストボックス
wpassword = Me!txtpassword ’フォームのテキストボックス

Me!txtopen_msg = “”
Me!txtopen_msg = “— start ” & Format(Now(), “hh-mm-ss”) & ” ———-”

‘インターネットサービスのハンドル取得 – hOpen
hOpen = InternetOpen(“FTPSample”, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
If (hOpen <> 0) Then ‘ハンドル取得成功
Me!txtopen_msg = Me!txtopen_msg & vbCrLf & “領域確保 成功 hOpen:” & hOpen

‘インターネットセッションのハンドル取得(FTPサーバへ接続) – hConnection
hConnection = InternetConnect(hOpen, wserver, INTERNET_INVALID_PORT_NUMBER, _
wuser, wpassword, INTERNET_SERVICE_FTP, 0, 0)
If (hConnection <> 0) Then ‘接続成功
Me!txtopen_msg = Me!txtopen_msg & vbCrLf & “ftp接続 成功 hConn:” & hConnection
Else
Me!txtopen_msg = Me!txtopen_msg & vbCrLf & “ftp接続 エラー:” & Err.LastDllError
‘インターネットセッションを閉じる
If (hConnection <> 0) Then
InternetCloseHandle hConnection
Me!txtopen_msg = Me!txtopen_msg & vbCrLf & “ftp接続 close”
End If
If (hOpen <> 0) Then
InternetCloseHandle hOpen
Me!txtopen_msg = Me!txtopen_msg & vbCrLf & “領域解放”
End If
End If
Else
Me!txtopen_msg = Me!txtopen_msg & vbCrLf & “領域確保 エラー:” & Err.LastDllError
‘インターネットサービスを閉じる
If (hOpen <> 0) Then
InternetCloseHandle hOpen
Me!txtopen_msg = Me!txtopen_msg & vbCrLf & “領域解放”
End If
End If
End Sub

ここまでたどりつくには、3-4回作り直した。

API毎にコマンドボタンでの実行をしたときは、コネクション番号でエラーとなる、

セッションが切れるからなのか。

タイムアウトなのか、プログラムの終了によるのか原因をつかめていない。

ここには、API宣言はないがAPIの使い方がわかれば、難しいことではない。

API利用時に注意することは、下記の3点です

① 引数がおかしいと、実行時ACCESSが異常終了する--OSレベルのエラー発生?

② APIの実行は時間がかかるーー慌てないで待つことが大切

③ エラーの原因がよくわからない。

それでも、ネットワークの勉強に役に立った。

64ビットOSでもAPIはあるのかな?

Comments are closed.