【 Excel を DB として使用する場合の技術的な注意事項 】

1. 接続文字列
2. アプリケーションからの接続とExcel との同時利用の禁止
3. データベースのテーブルとしてのワークシートの指定方法
4. テキストデータ出力時の注意事項
5. 更新の制限

VB における接続文字列の作成
	GetConnectionString = _
		"Provider=Microsoft.Jet.OLEDB.4.0;" & _
		"Data Source=" & strTarget & ";" & _
		"Extended Properties=""Excel 8.0;"""
 


  • strTargetは、文字列変数であり、.XLS ファイルへのパスを指定します

  • プロバイダのバージョンは、Jet 4.0 を使用する必要があります。Jet 3.51 は Jet ISAM ドライバを
    サポートしていません。Jet 3.51 を指定すると実行時に次のエラー メッセージが表示されます。

  • Excel 95 ブック (Excel Version 7.0) に対しては Excel 5.0 を指定し、Excel 97・Excel 2000・および
    Excel 2002 ブック (Excel Version 8.0、9.0、および 10.0) に対しては Excel 8.0 を指定します


  • EXCEL の第一行を列タイトルとしない
    	GetConnectionString = _
    		"Provider=Microsoft.Jet.OLEDB.4.0;" & _
    		"Data Source=" & strTarget & ";" & _
    		"Extended Properties=""Excel 8.0;HDR=No;"""
     
    


  • デフォルトでは、HDR=Yesであり、Excel の第一行目は列の見出しとして扱われます。もしデータに
    そのような対応がなされていない場合は、HDR=Noを指定すると、列見出しが自動的に作成されます

  • 但し、HDR=Yes であっても第一行目のデータが空であれば、列見出しは自動的に作成されます


  • SQLの窓等、アプリケーションからDBとしてからExcelファイルへアクセスする場合、
    同時にExcelを使用しないで下さい。場合よってはトラブルが発生する事があります。

  • また、メモリ上に Excel が残る場合もあります。その場合はタスクマネージャー等より Excel を終了
    させて下さい


  • ワークシートの指定方法には3通りあります

  • ワークシートの指定方法
  • ワークシート全体
  • ワークシート上の名前なしセル範囲
  • ワークシート上の名前付きセル範囲



  • ワークシート全体
     
    	SELECT * FROM [Sheet1$]
     
     
    


  • Sheet1は、ワークシート名です。ワークシート名の後ろに $ を付加して全体を [] で囲みます
  • 角かっこは不確定なデータベースオブジェクト名に対する有効な表記方法です

  • ワークシート上の名前なしセル範囲
     
    	SELECT * FROM [Sheet1$A1:D10]
     
     
    


  • 標準的な Excel の行および列表記を角かっこ内のシート名の終わりに追加します

  • ワークシート上の名前付きセル範囲
     
    	SELECT * FROM セル範囲名
     
     
    


  • この場合、角かっこは必要ありません。
  • Version 2.5 以前の MDAC では、名前付き範囲をレコードソースとして指定する場合、定義済み範囲
    の限界を超えて新しいレコードを追加することはできません

  • CREATE TABLE 文でワークシートを作成した場合、名前付とワークシート全体と両方の指定方法が
    できるようになります。但し、ワークシート全体でデータを挿入してしまうと、名前付の範囲がその行
    以前で確定しまってレコードを追加する事ができなくなります

  • CREATE 文でワークシートを作成
    CREATE TABLE 電話帳 (
    名前 TEXT,
    電話番号 TEXT
    );
    INSERT INTO 電話帳 VALUES('田中','123-456-7890');
    INSERT INTO [電話帳$] VALUES('山田','123-456-7891');
    INSERT INTO 電話帳 VALUES('鈴木','123-456-7892');
     
    


  • この例では、3つ目のインサート文がエラーとなります

  • また、CREATE TABLE 文では [ワークシート名$] は使用できません
  • 問題を避ける為には、CREATE 文で作成したワークシートに対しては常に名前でアクセス
    するようにして下さい

  • シングルクォーテーションの自動付加
  • ADO からテキストデータをセルにセットとすると、文字列の先頭
    シングルクォーテーションが付きます。後から、Excel でデータ
    編集する場合は注意して下さい



  • 使用できないSQL
  • DELETE FROM テーブル
  • DROP テーブル

  • DELETE と DROP は一般的な SQL ですが、「削除」Excel では
    できません