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

解決


SSMMCC  2003-05-12 20:30:56  No: 107071

はじめまして、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 21:41:07  No: 107072

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-13 01:39:57  No: 107073

こんちは。

ちょっと始めのほうは省略しますが、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 22:39:30  No: 107074

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加