VBでDmax関数が使えないのですが

解決


SSMMCC  2003-05-12 11:30:56  No: 107071  IP: [192.*.*.*]

はじめまして、VB初心者のTIといいます。
データベースをAccess97で作成し、VBでデータベースにアクセスし
そのデータベースの、テーブル(ここではA001)の
フィールド(”シリアルNo”というフィールド)の最大値を検索するのに
Dmax関数を使用したいのですが、下記のように記述したところ、
「データベースオブジェクト参照が無効です」とエラーが出てしまいます。
ただ、データベース(アクセスのファイル)を開いて、プログラムを起動してみると
Dmax関数をちゃんと実行してくれて、エラーが出ないのです。
(普通は、こんな使い方はしないですが。)
いろいろ、調べたのですが原因がわからないので、原因が解かる方は
お願いですから、助けてください。
 
Public Function Demand_Value2(OldTableName As String)

 

Dim x As Variant

Dim EndNo As Integer

Dim TableName As String

 

Dim WK As DAO.Workspace

Dim DB As DAO.DataBase

Dim rs2 As DAO.Recordset

 

TableName = A001                                  ‘製品の品番

DataBase_Name = “Result200305.mdb”

 

Dim strSQL As String

'データベースに接続

'Set WK = DBEngine.Workspaces(0)

'Set DB = WK.OpenDatabase("C:\Result\" & DataBase_Name)

Set DB = DBEngine.Workspaces(0).OpenDatabase

("C:\Result\" & DataBase_Name)

 

strSQL = "SELECT *" & " FROM " & TableName

Set rs2 = DB.OpenRecordset(strSQL, dbOpenDynaset)

 

x = DMax("シリアルNo", TableName) + 1     

 

Demand_Value2 = x

End Function

編集 削除
とろ  2003-05-12 12:41:07  No: 107072  IP: [192.*.*.*]

DMax 関数は Access.Application の関数であって、
VB の関数ではありません。

それなので DMax 関数を使用するには、
Access.Application オブジェクトを作成して、
使用しましょう。(次のような感じ?)

Dim AcccessApp As Object 'Access.Application
Set AccessApp = CreateObject("Access.Application")
x = AccessApp.DMax("シリアルNo", TableName) + 1
AccessApp.Quit
Set AccessApp = Nothing

編集 削除
だっちゃん  2003-05-12 16:39:57  No: 107073  IP: [192.*.*.*]

こんちは。

ちょっと始めのほうは省略しますが、Recordsetに設定するSQL文を下記のように変更しちゃったらどうですか?

strSQL = "SELECT Max(" & TableName & ".シリアルNo) AS MAX_NUM FROM " & TableName

Set rs2 = DB.OpenRecordset(strSQL, dbOpenDynaset)
If NOT rs2.EOF Then
   x = rs2!MAX_NUM  + 1
Else
   x = 1
End If

いかがでしょう?

編集 削除
SSMMCC  2003-05-15 13:39:30  No: 107074  IP: [192.*.*.*]

Dmax関数がVBA用の関数で、そのままだと
使えないなんて、知りませんでした。
かなり助かりました。
みなさん、ありがとうございました。

編集 削除