2014年3月7日

【Access】 あれば更新なければ追加


データベースを使ったシステムを開発しているとよく本テーブルからデータを抽出して、ワークテーブルで編集してまた本テーブルに格納するなんてことをやるんですが、そんなとき2つのテーブルを比較して、データがあれば更新なければ追加といったことをします。




例えば次のようなテーブルがあったとします。

T_Animals(本テーブル)

このテーブルからデータをワークテーブルに持ってきて、変更と追加を行ったとします。

W_Animals(ワークテーブル)

4:サル → 4:キツネザル に変更
9:カバを追加

この更新と追加を本テーブルに反映させるにはクエリで次のようにやります。

2014年3月6日

【Access】独自メニューバーが他のファイルでも表示される



今日たまたま気づいたんですが、以前作ったAccessの独自メニューバーが、デフォルトで新規作成されたファイルにも表示されていたんです。

マジでビックリです。
ヤバいですよコレ。

だって、以前お客さんに作ったAccessのシステムのメニューが表示されちゃってんだもん。


ちょっと試しに新たにメニューバーを追加してみたんですけど、
やっぱり新規作成したものにもデフォルトで出てきますね。
Access2010なんでアドインのところに表示されています。


この現象が自分のPC内だけならいいんですけど、
まさか別の顧客のシステムにも勝手に表示されちゃってるなんてことないよね?

たぶんないことを祈りつつ、とりあえず削除する方法を探してみました。

2014年3月5日

【PowerShell】SQL Serverのデータベースを復元


PowerShellを使ってSQL Serverのデータベースを復元するやり方です。

今回もInvoke-Sqlcmdを使った方法です。

まず、PowerShellを管理者権限で立ち上げ、
SQLPSと打ち込んでください。

そして、次のように入力して実行してください。

Invoke-Sqlcmd "RESTORE DATABASE TESTDB FROM DISK = 'C:\work\backup\TESTDB.bak' WITH REPLACE" -ServerInstance "SVRNAME\SQLEXPRESS" -QueryTimeout 300

TESTDBはデータベース名です。
FROM DISKでファイル名を指定しています。
WITH REPLACEは上書きでの復元という意味です。

<参考サイト>
Invoke-Sqlcmd コマンドレット
RESTORE (Transact-SQL)
RESTORE の引数 (Transact-SQL)


2014年3月3日

【PowerShell】SQL Serverのデータベースバックアップ


システムでSQL Serverを使うことがあるのですが、コマンドで操作することがよくあります。

PowerShellでも当然SQL Serverを扱えるようになっています。

たとえばデータベースのバックアップは次のように行います。

まず、PowerShellを管理者権限で立ち上げ、
SQLPSと打ち込んでください。


このSQLPSユーティリティ(SQLPS.exe)を実行すると、コマンドレットやスクリプトでSQL Serverのインスタンスとそのオブジェクトを操作出来るようになるみたいです。

ただ、TechNetをいま見たらこの機能は将来削除される予定らしいです。
代わりにsqlps PowerShell モジュールを使ってくれとのことです。

まあちょっと時代遅れになってしまってるんですけど、今回はこのやり方で。


それで、データベースのバックアップですが、次のように行います。

Invoke-Sqlcmd "BACKUP DATABASE TESTDB TO DISK = 'C:\work\backup\TESTDB.bak' WITH FORMAT, NAME = 'TESTDB_20140303'" -ServerInstance "SVRNAME\SQLEXPRESS" -QueryTimeout 300

TESTDBというのはデータベース名です。
あと、NAMEというのは、バックアップセット名です。

<参考サイト>
BACKUP (Transact-SQL)
SQL Server PowerShell を使用した管理手法 第 2 回 実践編
Invoke-Sqlcmd コマンドレット