• ベストアンサー

VBでBtrieveファイルにアクセスする方法

ご存知の方、教えて下さい。下記のようなサンプルまでは見つけたのですが、それぞれに何をセットすればよいのかわかりません。OPENのときとGETEQUALのときとセットする内容は違うのでしょうか。よろしくお願いします。 Declare Function BTRCALL Lib "w3btrv7.dll" ( _ ByVal Operation As Integer, _ Posblock As Byte, _ Databuffer As Any, _ Databuflen As Long, _ Keybuffer As Any, _ ByVal Keybuflen As Integer, _ ByVal Keynum As Integer _ ) As Integer

質問者が選んだベストアンサー

  • ベストアンサー
  • Shimo88
  • ベストアンサー率100% (1/1)
回答No.2

各パラメータの内容ですが、 Operation→オペレーションコードをセットします。 Posblock→Byte型の128バイトの配列を持った構造体をセットします。  (こちらはAs BtyeではなくAs Anyで記述しています。) DataBuffer→読み込むデータベースのレコード長以上の構造体をセットします。 DataBuflen→上記DataBufferのエリア長をセットします。 KeyBuffer→Open命令の時は、データベースのファイル名  GetEqual命令の時は、検索するキーの内容をセットします。 KeyBuflen→上記のKeyBufferのエリア長をセットします。 KeyNum→Openモードの時は、データベースに対するOpenモードの値を  セットします。  (通常モードは0をセットします。)  GetEqualの時は、データベースのキー番号をセットします。 とこんな感じにセットすればいいはずです。 参考になったでしょうか?

その他の回答 (1)

  • momopi
  • ベストアンサー率10% (4/39)
回答No.1

以前、VB2.0でNetWareサーバーにあるBtrieveにアクセスするシステムを開発していました。でも、もうそんな古い話ではないのですよね。 Btrieveは参考書類もほとんどなくて大変な思いをしました。今も大変なのは同じだと思いますが、頑張ってください。 参考にならなくてごめんなさい。

関連するQ&A

  • VB6のAdressOfをVB.NETに変換したい

    以下のソースをVB.NETに変換したいのですが... XOpenDLL関数の AddressOfのあたりがエラーになって変換できません。 (Microsoft Visual Basic .NET 2003の変換機能) Private Declare Function XOpenDLL Lib _ "Maser.dll" _ Alias "OpenDLL" _ (ByVal nModel As Long, _ ByVal nLens As Long, _ ByVal nLensMfr As Long, _ ByVal nGSpeed As Long, _ ByVal nSocketPort As Long, _ ByVal nRS232Port As Long, _ ByVal pCallbackFn As Long) _ As Boolean Private Declare Function XSendCommand Lib _ "Maser.dll" _ Alias "SendCommandVB" _ (ByVal OpCode As Long, _ ByVal PropCode As Long, _ ByVal InputString As String, _ ByRef Output As String) _ As Integer Private Declare Sub XCloseDLL Lib _ "Maser.dll" _ Alias "CloseDLL" () Then to use these functions: ‘ Open the DLL bInstance = XOpenDLL(nModel, nLens, nLensMfr, nGSpeed, nSocketPort, nRS232Port, AddressOf MyCallbackFn) ‘ Send a command nRet = XSendCommand(nOpCode, nPropCode, szInputData, szOutput) ‘ Close the interface Call XCloseDLL お教えください。

  • VB2003で レジストリを格納する

    レジストリを格納するために、以下のように宣言し、 Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Integer, ByVal lpSubKey As String, ByVal Reserved As Integer, ByVal lpClass As String, ByVal dwOptions As Integer, ByVal samDesired As Integer, ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, ByRef phkResult As Integer, ByRef lpdwDisposition As Integer) As Integer Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Integer, ByVal lpValueName As String, ByVal Reserved As Integer, ByVal dwType As Integer, ByRef lpData As String, ByVal cbData As Integer) As Integer Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Integer) As Integer 以下のようなコードで、ユーザーエージェントをmozillaからoperaへ(またはoperaからmozilla)書き換えようとしていますが、うまくいきません。 問題点1.同じuser agentの下に”(既定)”が2つできてしまう 問題点2.データが正しく(operaと)書き込まれず、文字化けしたものが書き込まれている。 C言語用のサンプルやVB6.0のサンプルは見ますが、VB2003ではどのように指定するのか、わかりませんでした。 Dim ret As Long Dim hKey As Long, lngDisposition As Long Dim udt As SECURITY_ATTRIBUTES Dim myroot_key As String, mysub_key_user_agent As String, myName As String,StrValue As String myroot_key = &H80000002 '"HKEY_LOCAL_MACHINE" を指定している mysub_key_user_agent ="Software\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent" myName = "(既定)" strValue="Opera" ret = RegCreateKeyEx(myroot_key, mysub_key_user_agent, 0&, vbNullString, _ 0, &H4 Or &H2, udt, hKey, lngDisposition) If ret = 0 Then ret = RegSetValueEx(hKey, myName, 0, 1, strValue, Len(strValue) + 1) RegCloseKey(hKey)

  • VB6.0で、DLLを動的に参照したい

    VB6.0では、DLLを利用する際の宣言部分で、パスを""で括った静的な記載でなく、動的な記載にできるのでしょうか。 色々と調べてみたのですが、イマイチピンとくるものがなかったので質問させていただきました。 例:Public Declare Function Ztest Lib "C:\Test1\Test2" Alias "Test3" (ByVal data1 As Long) As Long                           ↓動的に変更したい   Public Declare Function Ztest Lib "○○:\Test1\Test2" Alias "Test3" (ByVal data1 As Long) As Long

  • APIって

    VBで簡単なプログラムを作成しています。 APIも便利なのでサンプルを見ながら使っていますが ふと疑問に思ったので教えて下さい。 以下の"advapi32.dll"と"ADVAPI32"の違いは何なのでしょうか。 大文字、小文字の違いだけで同じなのですか? dllを省略すると引数に&をつけるつけないの違いが出るのでしょうか? 'レジストリの値を取得する Public Declare Function RegQueryValueExstr Lib "ADVAPI32" Alias "RegQueryValueExA" (ByVal hKey&, ByVal lpValueName$, ByVal lpReserved&, ByVal lpType&, ByVal lpData$, lpcbData&) As Long 'レジストリの値を設定する Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As Any, ByVal cbData As Long) As Long ネット上にたくさんサンプルはあるので、やりたいことの方法を調べてできればOKといったやり方です。 きちんと勉強したい気持ちもありますので、参考書籍等紹介して頂いてもうれしいです。

  • EXCELVBA フォルダ検索API

    エクセルからVBAでフォルダを選択させるコマンドを、APIを使ってフォルダ検索ダイアログボックスを出すまでは見よう見真似でできるのですが、このとき「あたらしいフォルダ」のボタンは必要ないので出したくないのですが、どこかに定数を指定すればよろしいかご存知でしたら教えてください。 (使用OS: Windows2000,Excel:2003) ちなみにコピペした宣言部分は以下のものです。 *************** Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" _ (ByVal pidl As Long, ByVal pszPath As String) As Long Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" _ (lpBrowseInfo As BROWSEINFO) As Long Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal pv As Long) Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Any) As Long Public Const WM_USER = &H400 Public Const BFFM_SETSELECTIONA = (WM_USER + 102) Public Const BFFM_INITIALIZED = 1 ********************

  • GetProcessWorkingSetSizeでエラーが発生します

    VB6で画像処理アプリケーションの開発を行っている者です。 下記記述でワーキングセット領域を変更しようとしていますが、GetProcessWorkingSetSizeの部分でエラーが発生します。 使用PCにより、「問題が発生したため、Visual Basic を終了します。 ご不便をおかけして申し訳ありません。」や有無を言わさず開発環境が終了してしまう場合がありますが、いずれにしても原因が分かりません。 どなたかアドバイスいただけませんでしょうか? よろしくお願い致します。 (標準モジュールで宣言) Declare Function GetCurrentProcessId Lib "kernel32.dll" () As Long Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long Declare Function GetProcessWorkingSetSize Lib "kernel32" (ByVal qq As Integer, ByVal pp As Integer, ByVal rr As Integer) As Long Declare Function SetProcessWorkingSetSize Lib "kernel32" (ByVal phph1 As Long, ByVal wkminwkmin1 As Long, ByVal wkmaxwkmax1 As Long) As Long Declare Function GetLastError Lib "kernel32.dll" () As Long (実行部) Sub WorkingSetChange() Dim id As Long 'アプリケーションプログラムのID用変数 Dim ph As Long 'アプリケーションプログラムのハンドル用変数 Dim wkmin As Long '最小ワーキングセット用変数 Dim wkmax As Long '最大ワーキングセット用変数 Dim bret As Long Const PROCESS_SET_QUOTA = &H100 Const PROCESS_QUERY_INFORMATION = &H400 'アプリケーションプログラムのIDを取得する id = GetCurrentProcessId() 'アプリケーションプログラムのハンドルをオープンする ph = OpenProcess(PROCESS_SET_QUOTA + PROCESS_QUERY_INFORMATION, False, id) 'アプリケーションプログラムの最大ワーキングセット値と最小ワーキングセット値を取得 bret = GetProcessWorkingSetSize(ph, wkmin, wkmax) '最小ワーキングセット値を1MBに設定 wkmin = 1 * 1024 * 1024 '最大ワーキングセット値を3MBに設定 wkmax = 3 * 1024 * 1024 'アプリケーションプログラムの最大ワーキングセット値と最小ワーキングセット値を変更 bret = SetProcessWorkingSetSize(ph, wkmin, wkmax) 'アプリケーションプログラムのハンドルをクローズする bret = CloseHandle(ph) End Sub

  • VB2008 iniファイルの全セクション取得方法

    こんばんわ。iniファイルの全セクションを取得したく、 以下のコードを使うことはわかったのですが、ここから先がVB初心者の為全く解かりません。ボタン1を押したらC:\Test.ini のファイルの全セクションを取得というコードはどのように記入すればよいのでしょうか。 どうぞ宜しくお願いいたします。 Declare Function GetPrivateProfileSectionNames Lib "Kernel32.dll" _ Alias "GetPrivateProfileSectionNamesA" _ (ByVal lpszReturnBuffer As String, ByVal nSize As Long, _ ByVal lpFileName As String) As Long

  • 64ビットエクセルでのAPI宣言/PtrSafe

    エクセルのInputboxで、入力された文字列を自動的にアスタリスクで隠すようにする方法を探し http://okwave.jp/qa/q2371878.html の回答No1のコードがまさに最適なコードで、これまで非常に助かっていました。 ところが、64bitのエクセルでは動かないことがわかりました。 表示されたエラーメッセージの言葉から調べて、PtrSafeという言葉を入れなければならないようなのでAPI宣言を以下のようにしてみました。 #If VBA7 And Win64 Then '64ビット版 Private Declare PtrSafe Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _ ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare PtrSafe Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long Private Declare PtrSafe Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _ (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, _ ByVal dwThreadId As Long) As Long Private Declare PtrSafe Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long Private Declare PtrSafe Function SendDlgItemMessage Lib "user32" Alias "SendDlgItemMessageA" _ (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal wMsg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare PtrSafe Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, _ ByVal lpClassName As String, _ ByVal nMaxCount As Long) As Long Private Declare PtrSafe Function GetCurrentThreadId Lib "kernel32" () As Long #Else '32ビット版 Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _ ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _ (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, _ ByVal dwThreadId As Long) As Long Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long Private Declare Function SendDlgItemMessage Lib "user32" Alias "SendDlgItemMessageA" _ (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal wMsg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, _ ByVal lpClassName As String, _ ByVal nMaxCount As Long) As Long Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long #End If ところが、回答No1のコードで Sub Report_Open() を実行すると Public Function InputBoxDK(Prompt, Optional Title, Optional Default, Optional XPos, _ Optional YPos, Optional HelpFile, Optional Context) As String のところがハイライトされてエラーになります。 どう直せば良いのでしょうか? 全文のコードを乗せると字数制限に引っかかりますので、申し訳ありませんが宣言以外の部分は http://okwave.jp/qa/q2371878.html の回答No1のコードを見てくださいますようお願いします。

  • VB(6.0)で作成したDLLをVB(.Net)で呼び出す方法

    VB(6.0)で作成したDLLをVB(.Net)で呼び出すのに Public Declare Function 関数名 Lib "~.dllのパス"               (ByVal ・・・) As 型 このように呼び出してみているのですが 上手くいきません。整数データの変更も しました。 このDLLを呼び出せないと次に進めないので 本当に困っています。 よろしくお願いします。

  • Access Win32 API使用 検索方法

    32bit版で開発したAcceessを64bit版で開いたところ、Win32 APIのソースコードでエラーが発生しました。 ネットで検索したところ、対処法はすぐHITしました。 「#If~#Else~#End If」の条件付きコンパイルを使うそうです。 例) #If VBA7 And Win64 Then '64ビット版 Declare PtrSafe Function GetFileTitle Lib "comdlg32.dll" Alias "GetFileTitleA" (ByVal lpszFile As String, ByVal lpszTitle As String, ByVal cbBuf As Integer) As Integer #Else '32ビット版 Declare Function GetFileTitle Lib "comdlg32.dll" Alias "GetFileTitleA" (ByVal lpszFile As String, ByVal lpszTitle As String, ByVal cbBuf As Integer) As Integer #End If ここで質問ですが、改修するにあたり、APIのソースコードを使用しているところって どう検索をすればいいでしょうか?