アクセス講座

トップ > プログラム制御


■テーブルデータを一件づつ取得

Private Sub コマンド0_Click()

Dim db As Database 'データベースを宣言
Dim rs As Recordset 'レコードセットを宣言

Set db = CurrentDb '開いているmdbのアドレスを入れる

Set rs = db.OpenRecordset("select * FROM T_ひらがな") 'SQL文により、情報を入れる

rs.MoveFirst '先頭行へ移動

Do Until rs.EOF 'ループ
Debug.Print rs!データ 'データフィールドに入っているデータをイミデイトウィンドウに表示
rs.MoveNext '次の行へ
Loop

End Sub
コメント挿入で説明。

■VBAにSQL文を直接書く

db.Executeを使用することで、SQL文を書くことができる。

Private Sub コマンド0_Click()

Dim db As Database 'データベースを宣言

Set db = CurrentDb '開いているmdbのアドレスを入れる

db.Execute ("insert into T_空データ select * FROM T_ひらがな")

End Sub
コメント挿入で説明。

■ODBCに接続し、SQLサーバに命令を出す。

Private Sub コマンド0_Click()

Dim QDef As QueryDef '宣言

Set QDef = db.QueryDefs("Q_パススルー") 'クエリに命令を書く(パススルー)
QDef.SQL = "TRUNCATE TABLE T_テーブルデータ"
QDef.Connect = "ODBC;DSN=DB1;UID=administrator;DATABASE=DB1;Trusted_Connection=Yes;AnsiNPW=No"
QDef.ReturnsRecords = False
QDef.Execute
Set QDef = Nothing

End Sub
データベース名:DB1
ユーザID:administrator

TRUNCATE TABLEはバックアップを取得しないため動作が速い。しかし、アクセスでは採用されていないので、
このようにすることがある。

■処理時間計測

Private Sub コマンド0_Click()
Dim stDate As Date

Dim i As Long
stDate = Now()
For i = 1 To 100000

テキスト1 = F_残り時間(stDate, Now(), 100000, i) '処理時間を表示

Next i

End Sub


Private Function F_残り時間(ByVal stDate As Date, ByVal nowDate As Date, ByVal max As Long, ByVal cur As Long) As String

Dim 経過秒 As Long
Dim 残秒 As Long
Dim 秒 As Long
Dim 分 As Long
Dim 時間 As Long

'エラー時は処理抜け
On Error Resume Next

経過秒 = DateDiff("s", stDate, nowDate) '時間差(秒)を計算
残秒 = 経過秒 * max / cur - 経過秒
秒 = 残秒
分 = Int(秒 / 60)
秒 = 秒 Mod 60
時間 = Int(分 / 60)
分 = 分 Mod 60

F_残り時間 = "残り 約" & 時間 & "時間" & 分 & "分" & 秒 & "秒"

End Function
コメント挿入で説明。

■テーブルデータ数を取得

Private Sub コマンド0_Click()

'フィールド名、テーブル名、条件
テキスト1 = DCount("*", "T_テーブル","ID = 10")

End Sub
IDが"10"であるデータ数を取得する。

■テーブルデータの情報を取得

Private Sub コマンド0_Click()

'フィールド名、テーブル名、条件
テキスト1 = DLookUp("データ", "T_テーブル","ID = 10")

End Sub
IDが"10"であるデータを取得する。