各テーブルの列名を一覧で取得する関数
すごく面倒だったのでググった内容を基に関数を作成。
事前準備
- テーブル「W_TABLE_LIST」の作成
- table_name:テキスト型、テーブル名を格納
- col_name:テキスト型、列名を格納
- col_type:テキスト型、列の型名を格納
- col_size:テキスト型、列のサイズを格納
ソース
'各クエリのSQL文をテーブルに格納する関数 Public Sub GetField() On Error GoTo Err_GetField Dim DB As DAO.Database Dim Tableloop As DAO.TableDef Dim Fld As DAO.Field Dim strTablename As String Dim Tdf As DAO.TableDef Dim strSQL As String 'SQL文 Dim strType As String '型名 ''''''''''''''''''''''''''''''''''''''''''''''''''' ''typeの置換は定数でselect case ' '1: dbBoolean ' '2: dbByte ' '3: dbInteger ' '4: dbLong ' '5: dbCurrency ' '6: dbSingle ' '7: dbDouble ' '8: dbDate ' '10: dbText ' '11: dbLongBinary ' '12: dbMemo ' '15: dbGUID ' '18: dbChar ' '20: dbDecimal ' '21: dbFloat ' ''確認用 ' Debug.Print dbBoolean & vbTab & ": dbBoolean" ' Debug.Print dbByte & vbTab & ": dbByte" ' Debug.Print dbInteger & vbTab & ": dbInteger" ' Debug.Print dbLong & vbTab & ": dbLong" ' Debug.Print dbCurrency & vbTab & ": dbCurrency" ' Debug.Print dbSingle & vbTab & ": dbSingle" ' Debug.Print dbDouble & vbTab & ": dbDouble" ' Debug.Print dbDate & vbTab & ": dbDate" ' Debug.Print dbText & vbTab & ": dbText" ' Debug.Print dbLongBinary & vbTab & ": dbLongBinary" ' Debug.Print dbMemo & vbTab & ": dbMemo" ' Debug.Print dbGUID & vbTab & ": dbGUID" ' Debug.Print dbChar & vbTab & ": dbChar" ' Debug.Print dbDecimal & vbTab & ": dbDecimal" ' Debug.Print dbFloat & vbTab & ": dbFloat" ' ''''''''''''''''''''''''''''''''''''''''''''''''''' 'レコード削除・追加時の警告メッセージOFF DoCmd.SetWarnings False 'テーブルのリストを初期化 DoCmd.RunSQL "DELETE * FROM W_table_list" 'DBの各テーブル名を見て、システムテーブルで無いものを判別して処理 Set DB = CurrentDb For Each Tableloop In DB.TableDefs strTablename = Tableloop.Name If Left(strTablename, 2) <> "MS" Then Set Tdf = DB.TableDefs(strTablename) For Each Fld In Tdf.Fields 'typeの置換 Select Case Fld.Type Case 1 'dbBoolean strType = "Boolean" Case 2 'dbByte strType = "Byte" Case 3 'dbInteger strType = "Integer" Case 4 'dbLong strType = "Long" Case 5 'dbCurrency strType = "Currency" Case 6 'dbSingle strType = "Single" Case 7 'dbDouble strType = "Double" Case 8 'dbDate strType = "Date" Case 10 'dbText strType = "Text" Case 11 'dbLongBinary strType = "OLEオブジェクト" Case 12 'dbMemo strType = "Memo" Case 15 'dbGUID strType = "オートナンバー" Case 18 'dbChar strType = "Char" Case 20 'dbDecimal strType = "Decimal" Case 21 'dbFloat strType = "Float" Case Else 'ERROR? strType = "ERROR?(" & Fld.Type & ")" End Select 'テーブルに格納 strSQL = "INSERT INTO W_table_list (table_name, col_name, col_type, col_size) values (" & _ """" & strTablename & """, """ & Fld.Name & """, """ & strType & """, """ & Fld.Size & """)" DoCmd.RunSQL strSQL Next Fld End If Next Tableloop '結果見たいからテーブル初期化しない Exit_GetField: 'DBクローズ、レコード削除・追加時の警告メッセージON、処理完了 DB.Close Set DB = Nothing MsgBox "完了しました。" Exit Sub Err_GetField: MsgBox Err.Description Resume Exit_GetField End Sub
InputBoxのIMEモードの指定方法
windows7のAllUserのデスクトップフォルダ
前にこんなことを書いたんですけど、今度はAllUserのデスクトップが分からなくなったのでメモ。
- ユーザー別
- C:\Users\<ログインユーザー名>\Desktop
- All Users
- C:\Users\Public\Desktop
- C:\Users\All Users\Desktop はショートカットがあるけどアクセス拒否される?
- C:\Users\Public\Desktop
クエリのSQLを確認する方法
すごく面倒だったのでググったらあったのでメモ。
ついでにファイルじゃなくてテーブルに置きました。
事前準備
- テーブル「W_TABLE_LIST」の作成
- TABLE_NAME:文字列型
- QuerySQL:メモ型
- クエリのタイトルを全部「Q_〜」にしておく。
- わかるように統一してあればいいです。
ソース
'各クエリのSQL文をテーブルに格納する関数 Public Sub QueryToSQL() On Error GoTo Err_QueryToSQL Dim strSQL As String Dim cnn As New ADODB.Connection Dim rst As New ADODB.Recordset Dim Dbs As DAO.Database Dim Qdf As DAO.QueryDef 'レコード削除・追加時の警告メッセージOFF DoCmd.SetWarnings False 'テーブルのリストを初期化 strSQL = "DELETE * FROM W_TABLE_LIST" DoCmd.RunSQL strSQL 'データベースセット Set Dbs = CurrentDb '実行中テーブルを参照する場合 'Set Dbs = DAO.OpenDatabase("c:\test.mdb") '別テーブルを参照する場合はこっちでフルパス指定 'クエリ名を取ってくる、「MsysObjects.Type = 5」でクエリ指定、 'さらに「MsysObjects.Name like "Q_*"」でクエリを絞込み(フォームのレコードソースなどを参照しないようにするため) strSQL = "SELECT " & _ "MsysObjects.Name " & _ "FROM " & _ "MsysObjects " & _ "WHERE " & _ "MsysObjects.Type = 5 " & _ "AND MsysObjects.Name like ""Q_*""" 'レコードセットを回してクエリとSQLを抽出 Set cnn = CurrentProject.Connection rst.Open strSQL, cnn, adOpenStatic, adLockReadOnly While rst.EOF = False 'クエリ名&SQLステートメントをそれぞれ格納するSQLを実行 '(SQLに「"」が含まれている時は「""」に、改行は半角スペースに置き換え) strSQL = "INSERT INTO W_TABLE_LIST(TABLE_NAME, QuerySQL) " & _ "VALUES(""" & CStr(Dbs.QueryDefs(CStr(rst("Name").Value)).Name) & """" & _ ", """ & Replace( _ Replace( _ CStr(Dbs.QueryDefs(CStr(rst("Name").Value)).SQL) _ , """" _ , """""" _ ) _ , vbNewLine _ , " " _ ) & """" & _ ")" DoCmd.RunSQL strSQL rst.MoveNext Wend '結果見たいからテーブル初期化しない Exit_QueryToSQL: 'レコードセットの終了、DBのリセット、レコード削除・追加時の警告メッセージON、処理完了 rst.Close cnn.Close Set rst = Nothing Set Dbs = Nothing DoCmd.SetWarnings True Exit Sub Err_QueryToSQL: MsgBox Err.Description Resume Exit_QueryToSQL End Sub
サクラエディタでdiff確認する方法
windows7のスタートアップ・ディレクトリの開き方
- ユーザー別
- All Users
[開く]と[エクスプローラ]って何が違うんだろ。