Tutorials and Guide to Samples (v11)

レッスン 2:Visual Basic で Btrieve API を使用する

Visual Basic プロジェクトで PALN32.DLL を参照させる

  1. [プロジェクト]メニューの[参照設定]をクリックします。
  2. [Pervasive Btrieve Alignment Library]のモジュールを選択します。このモジュールが表示されていない場合は、[参照]ボタンをクリックしてこのモジュールをリストに追加します。このモジュールは、Btrieve API 用の Visual Basic サンプル アプリケーションと同じディレクトリにインストールされます。



  3. ¥Program Files¥Pervasive Software¥PSQL¥SDK¥INTF¥VB(デフォルトの場所にダウンロードした場合)から BTR32VB.BAS をプロジェクト ディレクトリにコピーし、プロジェクトに追加します。

グローバル構造体を初期化する

Pervasive Btrieve Alignment ライブラリ(PALN32.DLL)は、Pervasive PSQL SDK に用意されています。このライブラリは、アライメント調整された構造体のパックや、データベースの行のアンパックに使用されます。

データベースをアクセス可能にするには、データ操作のためのデータ構造体が必要です。以下の項目を保存する必要があります。

基本的なファイル操作を実行する

ファイルを開く

この操作を実行するには、ポジション ブロック、ファイル名、オーナーの3 つの情報が必要です。ポジション ブロックとして、長さ 128 バイトのバイト配列変数を作成することにより、メモリを割り当てる必要があります。ファイル名は後ろにヌル文字を付けてキー バッファーに格納し、オーナーも同様に後ろにヌル文字を付けてデータ バッファーに格納します。BTRCALL の DataSize パラメーターと KeySize パラメーターは、それぞれ最後に付けられたヌル文字も含む名前の長さに設定します。

  1. ポジション ブロックの変数を作成します。
    ' Customer テーブルを開く準備をする 
    Type posblk 
        pbelements(0 To 127) As Byte 
    End Type 
    ' ポジション ブロックとして 128 バイトの配列を定義する 
    Global CustPosBlk As posblk 
    
  2. 次に、キー バッファー用のバイト配列を定義し、割り当てる必要があります。この配列は、キー バッファー パラメーターの最大長または 255 バイトに設定することが推奨されます。
    'キー バッファー長をバイト単位で定義 - 最大の 255 を定義 
    Global Const KEY_BUF_LEN = 255 
    ' キー バッファーのバイト配列を定義 
    Type kb_tmpb 
        keybuff(1 To KEY_BUF_LEN) As Byte 
    End Type 
    Global KeyBufferByteArray As kb_tmpb 
    
  3. さらに、データ バッファーのバイト配列を定義して割り当てる必要があります。
    'オーナー ネーム用のデータ バッファー長をバイト単位で定義 
    Global Const OWNER_MAX_LEN = 9 
    ' データ バッファーのバイト配列を定義 
    Type db_tmpb 
        databuff(1 To OWNER_MAX_LEN) As Byte 
    End Type 
    Global db_datb As db_tmpb 
    
  4. 次に、オーナー ネームとパス文字列を保持する構造体を定義および設定する必要があります。
    Public Type KeyBufferString 
        FilePath As String * KEY_BUF_LEN 
    End Type 
    Global KeyBufferWorkingArea As KeyBufferString 
     
    Public Type OwnerDataBufferString 
        OwnerName As String * OWNER_MAX_LEN 
    End Type 
    Global OpenFileOwnerDataBuffer As OwnerDataBufferString 
    
  5. パックおよびアンパックに必要なフィールド情報を保持する領域も定義する必要があります。
    Global KeyBufferFldMap(0 To 0) As FieldMap 
    Global OpenFileDataBufferFldMap(0 To 0) As FieldMap 
     
    'これらのフィールドは次のように設定することができます。 
    SetField KeyBufferFldMap(0), FLD_STRING, KEY_BUF_LEN 
    SetField OpenFileDataBufferFldMap(0), FLD_STRING, 
    OWNER_MAX_LEN 
    
  6. キー バッファーにテーブル名、OWNER にオーナー ネームを設定します。
    KeyBufferWorkingArea.FilePath = ddfpath & "¥" & 
    "customer.mkd" & Chr$(0) 
     
    ' オーナー ネームに空文字列を設定 
    OpenFileOwnerDataBuffer.OwnerName = "" & Chr$(0) 
    
  7. 次に、これらの文字列を保持している構造体を、データ バッファーおよびキー バッファーバイト配列にコピーします。
    StructToRow KeyBufferByteArray.keybuff, 
    KeyBufferFldMap, KeyBufferWorkingArea, 
    LenB(KeyBufferWorkingArea) 
    StructToRow db_datb.databuff, 
    OpenFileDataBufferFldMap, OpenFileOwnerDataBuffer,  
    LenB(OpenFileOwnerDataBuffer) 
    
  8. Open オペレーションを使用して BTRCALL オペレーションを呼び出します。
    ' Customer テーブルを開く 
    status = BTRCALL(BOPEN, CustPosBlk, db_datb, _ 
      OWNER_MAX_LEN, KeyBufferByteArray, KEY_BUF_LEN, 0) 
    
  9. 返されたステータスが正しいことを確認します。
    ' 返されたステータスを確認する 
    If status% <> 0 Then 
      MsgBox "Customer テーブルのオープン エラー。Btrieve " & _ 
          "は次のステータスを返しました:" & status% 
    End If 
    

ファイルを閉じる

ファイルを閉じる操作は簡単です。BCLOSE オペレーションを呼び出してポジション ブロックを渡すのみです。ステータスが返され、この操作が正しく完了したかどうかを確認できます。

  1. ポジション ブロックを引数として Close オペレーションを呼び出します。
    status% = BTRCALL(BCLOSE, CustPosBlk, 0, 0, 0, 0, 0) 
    
  2. 返されたステータスを確認します。
    If status% Then 
        MsgBox "Customer テーブルのクローズ エラー。  " & _ 
          "Btrieve は次のステータスを返しました:" & status% 
    End If 
    

ファイルを作成する

ファイルを作成するには、新しい Btrieve ファイルの作成に必要な情報を含む構造体を作成する必要があります。

  1. 必要な構造体および定数を含めます。
    Type BtrFileSpec 
        Length As Integer 
        PageSize As Integer 
        NumIndexes As Integer 
        Reserved As Long 
        FileFlags As Integer 
        NumDupPtr As Byte 
        NotUsed As Byte 
        Allocation As Integer 
    End Type 
    ' ファイルのフラグを指定するために使用される定数: 
    Global Const VAR_RECS = &h1 
    Global Const BLANK_TRUNC = &h2 
    Global Const PRE_ALLOC = &h4 
    Global Const DATA_COMP = &h8 
    Global Const KEY_ONLY = &h10 
    Global Const BALANCED_KEYS = &h20 
    Global Const FREE_10 = &h40 
    Global Const FREE_20 = &h80 
    Global Const FREE_30 = &hC0 
    Global Const DUP_PTRS = &h100 
    Global Const INCLUDE_SYSTEM_DATA = &h200 
    Global Const NO_INCLUDE_SYSTEM_DATA = &h1200 
    Global Const SPECIFY_KEY_NUMS = &h400 
    Global Const VATS_SUPPORT = &h800 
    
  2. ファイル仕様の構造体を作成して値を入力します。
    Dim NewFileSpec As BtrFileSpec 
    ' 長さ 100 のレコードを含むファイルを作成する 
    With NewFileSpec 
        .Length = 100 
        .PageSize = 4096 
        .NumIndexes = 0 
        .Reserved = 0 
        .FileFlags = 0 
        .NumDupPtr = 0 
        .NotUsed = 0 
        .Allocation = 0 
    End With 
    
  3. ファイル名を指定します。
    KeyBufferWorkingArea.FilePath = "Example.btr" + Chr$(0) 
    
  4. 構造体からパックされたキー バッファー バイト配列にコピーします。
    StructToRow KeyBufferByteArray.keybuff, 
    KeyBufferFldMap, KeyBufferWorkingArea, 
    LenB(KeyBufferWorkingArea) 
    
  5. Btrieve Create 関数を呼び出します。
    ' Btrieve コマンドを呼び出してファイルを作成する 
    status% = BTRCALL(BCREATE, 0, NewFileSpec, 16, _ 
            KeyBufferByteArray, KEY_BUF_LEN, -1) 
    
  6. ステータスを確認します。
    ' 返されたステータスを確認する 
    If status% <> 0 Then 
        MsgBox "ファイルの作成エラー。Btrieve " & _ 
            "は次のステータスを返しました:" & status% 
    End If 
    

データの変更

レコードの挿入

挿入する行をデータ バッファに設定して BINSERT を呼び出すことにより、行の挿入が行えます。

  1. 構造体をパックされた行に変換します。
    StructToRow custrow.buf, CustFldMap, custrec, 
    LenB(keyrec) 
    
  2. Btrieve Insert 関数を呼び出します。
    status% = BTRCALL(BINSERT, CustPosBlk$, custrow, _ 
        LenB(custrow), 0, 0, -1) 
    
  3. ステータスを確認します。
    If status% <> 0 Then 
        MsgBox "Insert エラー:" & status% 
    End If 
    

レコードの更新

行を更新するには、Get オペレーションまたは Step オペレーションを実行してカレンシーを確立する必要があります。完了後、その行は変更可能になります。

  1. 構造体をパックされた行に変換します。
    StructToRow custrow.buf, CustFldMap, custrec, 
    LenB(keyrec) 
    
  2. Btrieve Update 関数を呼び出します。
    status% = BTRCALL(BUPDATE, CustPosBlk, custrow, _  
        LenB(custrow), KeyBufferByteArray, KEY_BUF_LEN, 0) 
    
  3. ステータスを確認します。
    If status% <> 0 Then 
        MsgBox "Update エラー:" & status% 
    End If 
    

レッスン 1:Visual Basic で ActiveX を使用する

レッスン 3:Visual Basic で ODBC を使用する