Accessの最近のブログ記事

例えば、テーブル名が全て "public_"で始まっている場合に "public_"を削除する方法。

Sub macro1()
Dim myTable As TableDef
For Each myTable In CurrentDb.TableDefs

If Left(myTable.Name, 7) = "public_" Then
Debug.Print myTable.Name ' デバグ用出力
Debug.Print " " & Mid(myTable.Name, 8, Len(myTable.Name)) ' デバグ用出力
myTable.Name = Mid(myTable.Name, 8, Len(myTable.Name))
End If

Next

End Sub


以前に書いた記事「[WSH]VBSからAccessのアクションクエリを実行する方法 (ADO) 」では、アクセス側であらかじめ作っておいたアクションクエリをVBSから実行する方法を紹介しました。

VBSからアクションクエリを発行

今回は、VBSから直接SQLを発行してMDBファイルのデータを削除・更新・追加する方法を紹介します。
Option Explicit

Dim cn
Dim rs

Set cn= CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=C:¥ファイル名.mdb;"

rs.Open "DELETE FROM Table1", cn
rs.Open "INSERT INTO Table1 ( ID, Field1 ) " & _
"SELECT Table2.ID, Table2.Field1 FROM Table2;", cn

rs.Open "UPDATE Table1 SET Field1 = 'abc' WHERE Field1 = 'xyz' ", cn

cn.Close

Set rs = Nothing
Set cn = Nothing
MsgBox "完了しますた。"


注意事項

SQL文の中にダブルクォーテーション(")が入っているとうまく動きません。
文字列を表現したい場合はシングルクォーテーション(')で囲みましょう。


また、Access上で動作するSQL文でも、VBSから発行するとエラーになることがあります。
その場合は、標準SQL文に近い形で記述するとたいてい動きます。

Excel VBAで、Writeステートメントを使ってCSV出力すると、日付が #2008-01-01# のような形式になってしまいます。
このCSVをAccessにインポートするのは大変です。
以下のような自作関数を使って変換しましょう。

Excel側でエクスポートする際に変換してもいいし、Access側でインポートした後にクエリで変換してもいいです。

Function sanitizeDate(str As Variant) As Variant 
    If Left(str, 2) = "#2" And Right(str, 1) = "#" And Len(str) = 12 Then
        sanitizeDate = Mid(str, 2, 10)
    Else
        sanitizeDate = str
    End If
End Function
使い方
Sub test()
   MsgBox sanitizeDate("#2008-01-01#")
End Sub

実行結果: 2008-01-01


3桁の乱数のみで構成される簡易パスワードを、
Accessのクエリで発生させる方法です。

普通にrnd関数を使うと、同じような乱数系列が繰り返されてしまいうまく行きません。
(昨日出たのと同じ数字がまだ出てたりする)

Randomizeステートメントとかを駆使すると回避できるらしいですが、ヘルプを見てもよくわかりませんでした。

そこで、システム時刻をあらわすTime()関数と組み合わせたらとうまく行きました。

クエリのSQLビューで、以下のコードを書いて実行すればOK。

SELECT Right(CLng(Time()*10000000*Rnd()),3) AS 乱数; 


なお、時刻のコンマ何秒という数字は、それ自体が乱数のようなものなので、Rnd関数を省いても一応動きます。

SELECT Right(CLng(Time()*10000000),3) AS 乱数;

これを乱数と呼べるのかはわかりませんが。(^^;


前回でもちょこっと紹介しましたが、AccessのSQL (いわゆるJet SQL)で 1→001 に変換する方法を紹介します。

下記のようなテーブルで、IDを"001"形式で表示させたいとします。
Table1

access_table1.JPG


つぎにこのようなSQLを書きます。
SELECT Right([ID]+1000,3) AS newID FROM Table1;

実行結果
IDがゼロ付きで表示されています。 sql1.JPG
おまけ
"0001"とゼロを3つ表示させたい場合のSQL文
SELECT Right([ID]+10000,4) AS newID FROM Table1;

このアーカイブについて

このページには、過去に書かれたブログ記事のうちAccessカテゴリに属しているものが含まれています。

次のカテゴリはApacheです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

OpenID対応しています OpenIDについて
Powered by Movable Type 5.02