リード開発メモ

大阪のソフトウェア会社です。 技術的な事柄についてのメモとしてブログを始めます。

2013年02月

C# で mdb のバージョンを調べる

C# で、mdb が ACCESS のどのバージョンのものかを調べる方法。

まず、参照の追加を行っておく。バージョンは環境に依る。
 COMタブのMicrosoft Access 14.0 Object Library

string GetAccessVersion(string fileName)
{
	var acc = new Microsoft.Office.Interop.Access.Application();
	try
	{
		acc.OpenCurrentDatabase(fileName);
		var ver = acc.CurrentProject.FileFormat;
		switch (ver)
		{
			case Microsoft.Office.Interop.Access.AcFileFormat.acFileFormatAccess2:
				return "Access2";
			case Microsoft.Office.Interop.Access.AcFileFormat.acFileFormatAccess95:
				return "Access95";
			case Microsoft.Office.Interop.Access.AcFileFormat.acFileFormatAccess97:
				return "Access97";
			case Microsoft.Office.Interop.Access.AcFileFormat.acFileFormatAccess2000:
				return "Access2000";
			case Microsoft.Office.Interop.Access.AcFileFormat.acFileFormatAccess2002:
				return "Access2002";
			case Microsoft.Office.Interop.Access.AcFileFormat.acFileFormatAccess2007:
				return "Access2007";
		}
	}
	catch (Exception ex)
	{
		return "Error! " + ex.Message;
	}
	finally
	{
		acc.Quit();
	}

	return "Unknown";
}

Access 2013 リンクテーブルで #Deleted エラー

Access 2013 で SQL Server 2008 R2 へのリンクテーブルを作成してみたところ、いくつかのテーブルですべての値が "#Deleted" と表示されてしまった。

調べたところ、SQL Server の bigint 型に対応できず(それ以外の場合でも起こるらしいが)、こうなる模様。Access の仕様であり、回避方法はない。

ただ、参照するだけなら、パススルークエリを作成することで可能となる。
パススルークエリは SQL コマンドを直接リンク先のデータベースに送信する機能。というわけで SQL Server の構文で SQL を書くことになる。

Access 2013 でのパススルークエリの作成方法は以下のとおり。

1. まず、ODBC データソースを作っておく。
  ODBC データソースは、外部データタブのODBCデータソースから。
2. 作成タブのクエリデザインを選ぶ。
3. テーブルの表示ダイアログを何もしないで閉じる。
4. デザインタブのパススルーを選ぶ。
5. デザインタブのプロパティシートを選ぶ。
  プロパティシートが表示される。
6. プロパティシートの ODBC接続文字列 にカーソルを移動すると、
  ボタンが表示されるのでこれを選ぶ。
7. データソースの選択ダイアログが表示されるので、作成しておいたデータソースを選ぶ。
8. データソースが SQL Server の場合、ログインダイアログが表示されるので、
  ログインID、パスワードを入力する。
9. ODBC 接続文字列ビルダーダイアログが表示され、接続文字列にパスワードを含めるか
  聞いてくるので、任意のほうを選ぶ。
10. あとは、好きなSQL を書いて、実行する。

Thunderbird のバックアップ

メーラーは Thunderbird を使っているのだが、バックアップは

C:\Users\XXXX\AppData\Roaming\Thunderbird\Profile

をコピーしておくだけ。
復元するときは、上のフォルダをバックアップしたものに差し替える。

Windows7 で nslookup が効かない

ある日、nslookup をしてみたら動かない。

C:\Users\XXXX>nslookup yahoo.co.jp
サーバー:  UnKnown
Address:  2001:a401:436a:0:23a:9dff:fe57:b6b4

*** UnKnown が yahoo.co.jp を見つけられません: Query refused

社内のマシンで試してみたところ、Windows7 で nslookup が動かないだけで、XP では問題なく動くもよう。
どうやら、IPv6 で DNS に問い合わせにいっていることが原因らしい。
私がDNSとして設定している 8.8.8.8 は IPv4 のものだ。

Google は IPv6 用の DNS も公開している。以下がそれだ。

2001:4860:4860::8888 
2001:4860:4860::8844 

上記、IPv6 の DNS を設定すればいいのはずだが、どうもうまくいかない。
とりあえず IPv6 の設定を無効にしておく。

Apache localhost でバーチャルホストを使う

ローカル環境でバーチャルホストを使いたい場合、サーバー名を aaa.localhost と bbb.localhost などとして設定すればいい。

まず、hosts ファイルを以下のように編集しておく。hosts ファイルは Windows XP では C:\WINDOWS\system32\drivers\etc にある。

127.0.0.1       localhost aaa.localhost bbb.localhost

つぎに C:\pleiades\xampp\apache\conf\extra\httpd-vhosts.conf にバーチャルホストの設定を追記する。

<VirtualHost *:80>
  ServerAdmin postmaster@aaa.localhost
  DocumentRoot "C:\pleiades\xampp\htdocs\aaa"
  ServerName aaa.localhost
  ErrorLog "logs/aaa.localhost-error.log"
  CustomLog "logs/aaa.localhost-access.log" combined
  
  <Directory "C:/pleiades/xampp/htdocs/aaa/">
    Options FollowSymLinks Includes ExecCGI MultiViews
    AllowOverride All
    Allow from all
  </Directory>
</VirtualHost>

<VirtualHost *:80>
  ServerAdmin postmaster@bbb.localhost
  DocumentRoot "C:\pleiades\xampp\htdocs\bbb"
  ServerName bbb.localhost
  ErrorLog "logs/bbb.localhost-error.log"
  CustomLog "logs/bbb.localhost-access.log" combined
  
  <Directory "C:/pleiades/xampp/htdocs/bbb/">
    Options FollowSymLinks Includes ExecCGI MultiViews
    AllowOverride All
    Allow from all
  </Directory>
</VirtualHost>

アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

livedoor 天気
「livedoor 天気」は提供を終了しました。