Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2012年08月28日] [更新 2012年08月28日] Delphi サンプルプログラム集
569_ADO による dBASE データベース接続
動作確認等 Windows 7 U64(SP1) + Delphi XE Pro
569_ADO_dBASE.zip [843 KB] 2012年08月28日版 (EXE 同梱)







ADO による dBASE データベース接続


[dbGo] タブにある ADO 関係のコンポーネントを使用して,dBASE に接続する例です.

ADO 関係のコンポーネントを使用すると,[568_ADO による Paradox データベース接続] の図にあるように,接続文字列のプロバイダに Microsoft.Jet.OLEDB.4.0 を指定した接続ができます.


以下は,サンプルプログラム集の ADO 関係の記事へのリンクです.


図1
設計時画面
図2
実行画面
  • [Button1]クリックで接続

リスト1
ADO による dBASE データベース接続
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, Grids, DBGrids, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    ADOConnection1: TADOConnection;
    Panel1: TPanel;
    Button1: TButton;
    ADOQuery1: TADOQuery;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

uses ShlObj;

{$R *.dfm}

//=============================================================================
//  フォーム生成時の処理
//  配置コントロールは全てデフォルトのままなので,全てコードで設定
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
  ADOConnection1.Connected   := False;
  ADOConnection1.LoginPrompt := False;

  ADOQuery1.Connection := ADOConnection1;
  DataSource1.DataSet  := ADOQuery1;
  DBGrid1.DataSource   := DataSource1;
end;

//=============================================================================
//  フォームを閉じる時の処理
//=============================================================================
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  ADOQuery1.Close;
  ADOConnection1.Connected := False;
end;

//=============================================================================
//  ADOの接続文字列を作成して接続
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);

  //---------------------------------------------------------------------------
  //  特殊フォルダのフルパスを取得する関数
  //  usesにShlObjが必要
  //---------------------------------------------------------------------------
  function GetSpecialFolderPath(IntCSIDL: Integer): String;
  var
    Buff : array[0..MAX_PATH] of Char;
  begin
    FillChar(Buff, SizeOf(Buff), #0);
    SHGetSpecialFolderPath(0, Buff, IntCSIDL, False);
    Result := String(Buff);
  end;
  //---------------------------------------------------------------------------

var
  StrDBFile  : String;
  StrConnect : String;
begin
  ADOQuery1.Close;

  //dBASEデータベース(dBASEではフォルダがデータベース)の場所
  //Delphi をデフォルトでインストールした場合は CodeGear Shared\Data または
  //Borland Shared\Data にある
  StrDBFile := GetSpecialFolderPath(CSIDL_PROGRAM_FILES_COMMON);
  StrDBFile := IncludeTrailingPathDelimiter(StrDBFile) + 'CodeGear Shared\Data';

  StrConnect := '';
  //プロバイダ(当サイトのADO関係サンプルは全てJETプロバイダ
  StrConnect := StrConnect + 'Provider=Microsoft.Jet.OLEDB.4.0;';
  StrConnect := StrConnect + 'Data Source=' + StrDBFile + ';';

  //User ID と Password は,デフォルトではなくてもOK
  StrConnect := StrConnect + 'User ID=Admin;';
  StrConnect := StrConnect + 'Jet OLEDB:Database Password="";';

  //dBASE III または dBASE IV または dBASE 5.0
  StrConnect := StrConnect + 'Extended Properties="dBASE 5.0";';

  //接続文字列
  ADOConnection1.ConnectionString := StrConnect;
  ADOQuery1.ConnectionString      := ADOConnection1.ConnectionString;

  //表名を指定して接続
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select * from holdings.dbf');
  ADOQuery1.Open;
end;

end.