ボロボロです。知恵が足りずとても困っています。どなたか教えてください。

テーブル「T_SQL」の各レコードに、
クエリのSQL文(フィールド名=「strSQL」)と
クエリ名(フィールド名=「QName」)と
通しNo.(フィールド名=「No」)
をデータとして入力し、アクション等に応じて、「T_SQL」から
抽出したSQL文を、
マクロの「プロシージャの実行」の
プロシージャ名 SetSQL("クエリー1",FindSQL(No)) により
クエリ「クエリー1」に代入したいのです。

現在以下の通りに作りました。

'データベース定義
Public db As Database
'レコードセット定義
Public rs As Recordset
Public Function SetSQL(QName As String, strSQL As String)


CurrentDb.QueryDefs("QName").SQL = strSQL

End Function

Public Function FindSQL(No As String)

Set db = CurrentDb()

Set rs = db.OpenRecordset("T_SQL", dbopendynaset)

strcriteria = "[No]='" & No & "'"
rs.FindFirst strcriteria


FindSQL = rs!strSQL

rs.Close
db.Close

End Function


これで実行すると、
「コンパイルエラー メソッドまたはデータメンバが
見つかりません」
というエラーメッセージが出ます。
ちょこちょこいろんなところを修正してみても、
このメッセージだけでなく他にもいろんな
エラーメッセージが出ます。

冒頭に書いたような機能を可能にするには、
どのように記述すればよいのでしょうか??

ほんとにほんとに困っています。どなたか助けてください。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

「ぼろぼろ」て言われてもね


当方では問題なくSQL文を返して来ていますが...
テーブルのデータ型はどうなっていますか?
どのような作業をされているか不明なので補足願います。
呼び元の記述もお願いします。

DAOを使っているのでMS DAO 3.6・・・は参照設定でチェックはつけて下さいね。コンパイルが通ってるので問題ないとは思いますが...
    • good
    • 0
この回答へのお礼

ほんとにどうもありがとうございました。
まだ格闘中ですが。。。がんばってみます。

お礼日時:2001/07/11 15:35

Accessのバージョンは記載した方が良いですよ。


大抵レコードセットをパブリックで指定しているのが悪いのでしょう。
通常は実行ではなく「コンパイル」をしてエラー個所を修正した方が良いですね。

下記の内容でコンパイルは通りました。

Public Function FindSQL(No As String)
Dim db As Database
Dim rs As Recordset

Set db = CurrentDb()

Set rs = db.OpenRecordset("T_SQL", dbopendynaset)

strcriteria = "[No]='" & No & "'"
rs.FindFirst strcriteria

FindSQL = rs!strSQL

rs.Close
db.Close

End Function

この回答への補足

ボロボロです。
ご回答ありがとうございました。説明不足で申し訳ありません。
バージョンはAccess2000です。
もともとコンパイルは通っていたのですが、実行すると
エラーがでるような状況でした。

yanmaaさんので早速試してみたところ、コンパイルは通るのですが
なぜかFindSQLが実行されません。
マクロのプロシージャ名の記述が間違っているのでしょうか?
それとも他に原因があるのか、ほんとに何が悪いのか、
全くわかりません・・・
よろしくお願いします。

補足日時:2001/06/28 10:40
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。試してみます。

お礼日時:2001/06/27 17:24

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QACCESSでVBAから選択クエリの抽出条件を指定したい

選択クエリの抽出条件はデザインビューの「抽出条件」欄に直接条件式を書き込むのが普通だと思いますが、この条件式をVBAで記述することは出来るでしょうか?

DoCmd.RunSQL ではアクションクエリしか実行できないようだし、
DoCmsOpenQuery では引数に抽出条件を指定することが出来ないし困っています。

Aベストアンサー

おつかれさま~(^_^)
惜しいですね!
もう少しですね

さてさて、明日出張なので今日はたぶん最後のレスになってしまいますが、
ちなみに明日は返答できないのであしからず。。。

> Forms("サブフォーム").RecordSource = strSQL
駄目でしたか。。。

もし私が記載した内容で埋め込みのサブフォームを
利用しているのであれば
自分を参照する為に「Me」を使って

Me.埋め込みフォーム.Form.RecordSource = StrSQL
Me.埋め込みフォーム.Requery

に変更すれば動くと強く思います。
# 念じてます(^^)

ちなみに、
Me.
と打ち込んだ時点でオートコンプリート(名称あってるかな~)
機能が働いて参照できるオブジェクトが表示される
はずです。
その中にKojiさんが書いた埋め込みオブジェクトが
きっとあるはず
もしかすると"FormA"とか名前を付けたつもりでも
Visual Basic Editor君が気を利かせて
Form_formA
とかになってる場合があります。
最近やってないんでうろ覚えなんですが、こんな処を注意すれば大丈夫!

追伸
このコードって検索とかで使えますから
覚えておくときっと役に立ちますよ♪

おつかれさま~(^_^)
惜しいですね!
もう少しですね

さてさて、明日出張なので今日はたぶん最後のレスになってしまいますが、
ちなみに明日は返答できないのであしからず。。。

> Forms("サブフォーム").RecordSource = strSQL
駄目でしたか。。。

もし私が記載した内容で埋め込みのサブフォームを
利用しているのであれば
自分を参照する為に「Me」を使って

Me.埋め込みフォーム.Form.RecordSource = StrSQL
Me.埋め込みフォーム.Requery

に変更すれば動くと強く思います。
# 念じてま...続きを読む

QAccessVBAで「dim dbs as database」がエラーになる

済みませんが、非常に基本的なことを聞かせていただきたいと思います。

AccessのVBAで関数を実行すると、いきなりエラーになりました。
dim dbs as database の文でエラーになり、「コンパイルエラー ユーザ定義型が定義されていません」というエラーメッセージが出ました。
databaseが定義されているような感じです。

どうすれば宜しいでしょうか?

Aベストアンサー

こんにちは。maruru01です。

VBEの画面のメニューの[ツール]→[参照設定]で、

「Microsoft DAO X.X Object Library」(X.Xはバージョン)

の項目にチェックが入っていますか?

ちなみに、DatabaseオブジェクトはDAOしかないのでいいですが、Recordsetオブジェクトなどは、ADOとDAOの両方にあるので、

Dim rs As DAO.Recordset

のように、どちらかを明確に記述しないといけません。
統一的で分かりやすいコーディングのためには、Databaseオブジェクトも、

Dim dbs As DAO.Database

のように記述するように心がけましょう。

QAccess VBA(条件付きクエリ実行する方法)

タイトルについて、御教示ください。
以下のような事を実行できるVBAを教えてください。

■前提条件
クエリ1・2:チェックボックス付クエリ

■やりたいこと
・クエリ1・クエリ2に両方一つもチェックが入っていない場合 →クエリAを実行
・クエリ1に1つ以上チェックが入っている(クエリ2には1つもチェックが入っていない)場合 →クエリBを実行
・クエリ2に1つ以上チェックが入っている(クエリ1には1つもチェックが入っていない)場合 →クエリCを実行
・クエリ1・クエリ2に両方1つ以上チェックが入っている場合  →クエリDを実行

上記のように、チェックボックスの入る条件によって、
実行するクエリを変更する事は可能なのでしょうか。

Aベストアンサー

あれ?いつぞやの?

さて、可能ではありますが、その実行トリガーは?
ボタン押下時?

まぁ何にしても、そのクエリのチェックのTrueの数をそれぞれDcount関数で取得し条件分岐すれば出来ますよね。

Q文字列の入っているString値、何も入力されていないString値、Null値の全てを表示されるには?

access2003です。
フォーム1とクエリ1とテーブル1があります。
クエリ1の「テーブル1の番号フィールド」の抽出条件に
「Like "*" & [Forms]![フォーム1]![番号テキスト] & "*"」と入力しています。

フォーム1の番号テキストに「1」を入力しコマンドホ゛タンを押すと
「1」を含むレコードを表示され

フォーム1の番号テキストに「*」を入力しコマンドホ゛タンを押すと
何かしらの文字列が入力されているレコート゛が表示されます。

しかし
テーブル1番号フィールドには、
Null値と何も入力されていないString値(""←が入っている)も含まれています。
(見た目は空白どちらも空白です)
(String値がある理由はADOを使って何も入力されてない値もまとめてレコードに追加している為)

ここで質問なのですが

フォーム1のコマンドホ゛タンを押したときに
文字列の入っているString値、何も入力されていないString値、Null値の全てを表示されるには
どうすればいいのでしょうか?

よろしくお願い致します。

access2003です。
フォーム1とクエリ1とテーブル1があります。
クエリ1の「テーブル1の番号フィールド」の抽出条件に
「Like "*" & [Forms]![フォーム1]![番号テキスト] & "*"」と入力しています。

フォーム1の番号テキストに「1」を入力しコマンドホ゛タンを押すと
「1」を含むレコードを表示され

フォーム1の番号テキストに「*」を入力しコマンドホ゛タンを押すと
何かしらの文字列が入力されているレコート゛が表示されます。

しかし
テーブル1番号フィールドには、
Null値と何も入力...続きを読む

Aベストアンサー

> 何も入力されていないString値、Null値
は、
Len(Nz([フィールド名],"")) = 0 で得られます。

全てということであれば、
Len(Nz([フィールド名],"")) >= 0 になると思います。

QVBAからADOを使ってクエリのクエリを作成したい

VBAからADOを使ってクエリのクエリを作成したい

ADO初心者です。

VBA側で入力された引数を元に、ADOを使ってあるmdbファイルにあるクエリ(1)の抽出条件を変更した上で(抽出条件はVBA側の引数によって毎回変わります)、クエリ(1)の中から重複したレコードを抽出するクエリ(2)を作成したいと考えています。クエリ(1)並びにクエリ(2)をそれぞれ単独で作成する事は出来たのですが、クエリ(1)の結果を反映したクエリ(2)を作成する方法が分かりません。

なお、クエリ(1)の抽出条件変更は、RecordsetオブジェクトのOpenメソッドを使って行っています。何となくこれはレコードの更新は出来てもクエリの更新は出来ないような気がしており、それが原因のような気がしているのですが、クエリの更新をしたい場合はどうすればよろしいでしょうか?

Aベストアンサー

SELECT文の中にSELECT文ですが、わかりますか?。

重複しているものを検索した結果を一旦テーブルに(作成し)保持すれば
クエリのクエリと同じ結果を得られると思いますし、
重複しているものは何だったかという後から調べることがあったときには重宝します。

処理ができさえすればシンプルでもいいなら、
機能分けてもいいでしょう。

Q実行時エラー'-2147467259(80004005)':

エクセルからADOでアクセスに繋ごうとしたときに
実行時エラー'-2147467259(80004005)':
マシン'マシン名'のユーザー'Admin'がデータベースを開けない状態、またはロックできない状態にしています。

というエラーが出てしまいます。

書いているコードは以下です。

Public cn As ADOdb.Connection
Set cn = New ADOdb.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb"



test.mdb自体はテーブルもクエリもフォームも何も開いていない状態です。
一度アクセスを終了させて再起動させればうまくできるのですが、何が原因でこのメッセージが出るのでしょうか?
もしわかれば教えてください。
よろしくお願いします。

Aベストアンサー

Accessで、test.mdbを開いた状態(テーブルも、クエリも、フォームも何も開かない状態)で、ExcelからADOで接続しようとすると、
「-2147467259"は既に使用されているので、使用できませんでした。」
というエラーが再現されました。(当方Office2000Pro)
そういうものなのでしょう。
何をなさりたいのですか?
AccessからExcelを起動して、データの移し替えをしたり、レポート代わりに印刷させたりという方法ではダメなのでしょうか?
何をしたいかという、切り口で質問をされてはいかがですか。

QVBAでアクセスのクリエの抽出条件を変更

エクセルで、契約管理表を作っています。
仕様としては、エクセルとアクセルを使用し、
エクセルからアクセスのデータベースを操作
するようにしています。
(複数拠点で仕様する為。)

アクセスでは「T_契約メイン」というテーブルと
「T_契約今月」というクエリがあって、今月分の
データのみ抽出できるようになっています。

これを、エクセルのVBAのフォームでADOとSQL等を
利用してデータ取得、編集、新規契約の登録などを
行うように考えています。

ここまでの内容は無事、作成する事が出来ています。

ここからが質問なのですが、クエリ「T_契約今月」の抽出
条件をエクセルVBAから変更するにはどのようにコードを
書けばいいのでしょうか?

毎月毎月、アクセルを開いてクエリのデザインビューで
抽出条件を変更すればいいのでしょうが、あんまりスマート
では無いですよね。

出来れば、エクセル側からVBAで設定変更等のフォームや
ボタンを作って、処理したいのですが…。

とりあえずアクセスに繋げるところまでは分かるので、
クエリの抽出条件変更の部分のコードの記載方法を
教えて頂けないでしょうか?

どうぞよろしくお願いいたします。

エクセルで、契約管理表を作っています。
仕様としては、エクセルとアクセルを使用し、
エクセルからアクセスのデータベースを操作
するようにしています。
(複数拠点で仕様する為。)

アクセスでは「T_契約メイン」というテーブルと
「T_契約今月」というクエリがあって、今月分の
データのみ抽出できるようになっています。

これを、エクセルのVBAのフォームでADOとSQL等を
利用してデータ取得、編集、新規契約の登録などを
行うように考えています。

ここまでの内容は無事、作成する事が出来て...続きを読む

Aベストアンサー

VBAを持ち出さずとも、Excelに抽出条件を入力するセルを設け
Accessにリンクして抽出条件とすればいいのでは

リンクテーブルの名前を「エクセル」、フィールド名を「抽出条件」とすれば
Accessのクエリの抽出条件欄に

In (select 抽出条件 from エクセル)

QVBAの実行時エラー'2522'について

前任者がAccess2003により作成したデータベースがあります。
CSVデータを取り込む仕組みがあるのですが、下記のエラーが出て困っています。

実行時エラー '2522':
このアクションまたはメソッドを実行するには[File Name/ファイル名]引数が必要です。

どうやらVBAによるエラーだと判明しましたが、それ以上はよくわかりません。
以下のような構文になっています。

Option Compare Database
----------
Private Sub CSV取込_Click()
TextConv strFileName, "マスター定義", "T_マスター"
End Sub
----------
Sub TextConv(strFle, strInp, strTbl)
Dim strSQL As String
strSQL = "DELETE * FROM " & strTbl
If MsgBox("テーブルデータを更新しますか?", 4, "テーブル更新") = vbYes Then
CurrentProject.Connection.Execute strSQL
DoCmd.TransferText acImportDelim, strInp, strTbl, strFle, True
MsgBox "テーブルデータを更新しました"
End If
End Sub
----------
Private Sub 参照_Click()
Dim strFileName As String
strFileName = GetFileName()
If Len(strFileName) > 0 Then
Me.filepath = strFileName
Else
MsgBox "取込対象ファイルを選択してください! "
End If
End Sub

以上のようになっています。
デバッグを実行すると「strFle」の値がEmptyになっているのでここだとは思うのですが、どうしたらよいかわかりません。
どなたかお知恵をお貸し願えませんでしょうか。
宜しくお願いします。

前任者がAccess2003により作成したデータベースがあります。
CSVデータを取り込む仕組みがあるのですが、下記のエラーが出て困っています。

実行時エラー '2522':
このアクションまたはメソッドを実行するには[File Name/ファイル名]引数が必要です。

どうやらVBAによるエラーだと判明しましたが、それ以上はよくわかりません。
以下のような構文になっています。

Option Compare Database
----------
Private Sub CSV取込_Click()
TextConv strFileName, "マスター定義", "T_マスター"
End ...続きを読む

Aベストアンサー

Private Sub CSV取込_Click()
  TextConv Me.filepath "マスター定義", "T_マスター"
End Sub
でしょうか?

> Option Compare Database
の次に
Option Explicit
を追加すると、このようなエラーは発見しやすくなります。

VBEの画面で
[ツール] - [オプション] - [編集]タブで
「変数の宣言を強制する」にチェックを入れると
新しく作成するモジュールでは
自動で「Option Explicit」が挿入されるようになります。

QVBAをつかってクエリの情報を抽出するには??

ACCESS VBAを使ってプログラムを組んでいるVBA初心者です。ヘルプやいろんなHPを参考にしているのですが、どうしてもわからないことがあるのでおしえてください。
クエリの情報をフォームの日付から抽出し、csvファイルを作成するというものを作ろうとしています。
クエリの抽出条件でフォームの日付の期間で抽出するようにしてあります。
VBAにてOpenRecordsetでクエリから情報を抽出しようとするのですがクエリがありませんとエラーをはかれてしまいます。クエリの指定方法がまちがっているのでしょうか?
また、以下の方法とは別の方法でクエリから抽出するやりかたがありましたら教えていただけませんでしょうか?よろしくお願いいたします。
以下にどのように記述しているか記します。
------------
Public Function value()
On Error GoTo ERRORRR
Set db = CurrentDb
Dim rs As Recordset

Set rs = db.OpenRecordset("[開通チェック]", dbOpenDynaset)
Debug.Print rs.EOF
Do Until rs.EOF
Debug.Print rs!ID
Debug.Print rs!登録状態
Debug.Print rs!開通年月日
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
Exit Function
ERRORRR:
msgbox Err.number & ":" & Err.description
End Function

--------
開通チェック:クエリ (開通年月日には Between [Forms]![開通チェック]![開始日] And [Forms]![開通チェック]![終了日] の抽出条件が書かれています。)

使用しているACCESS Ver:ACCESS97

ACCESS VBAを使ってプログラムを組んでいるVBA初心者です。ヘルプやいろんなHPを参考にしているのですが、どうしてもわからないことがあるのでおしえてください。
クエリの情報をフォームの日付から抽出し、csvファイルを作成するというものを作ろうとしています。
クエリの抽出条件でフォームの日付の期間で抽出するようにしてあります。
VBAにてOpenRecordsetでクエリから情報を抽出しようとするのですがクエリがありませんとエラーをはかれてしまいます。クエリの指定方法がまちがっているのでしょうか?
...続きを読む

Aベストアンサー

パラメータがあるクエリはパラメータをParametersで入れてあげないと開けません。
パラメータを読み取れないのでRecordsetにクエリを渡せない状態でエラーが出ていると思います。

Dim db as Database
Dim qd as QueryDefs
Dim rs as Recordset
Dim pr1 As Date, pr2 As Date

Set db = CurrentDb()

pr1 = Format(Forms("開通チェック")("開始日"), "yyyy/mm/dd")
pr2 = Format(Forms("開通チェック")("終了日"), "yyyy/mm/dd")

Set qd = db.QueryDefs("開通チェック")
qd.Parameters("pr1").Value = pr1
qd.Parameters("pr2").Value = pr2

Set rs = qd.OpenRecordSet() 'ここでRecordsetにクエリを渡します。

これでいけると思います。

パラメータがあるクエリはパラメータをParametersで入れてあげないと開けません。
パラメータを読み取れないのでRecordsetにクエリを渡せない状態でエラーが出ていると思います。

Dim db as Database
Dim qd as QueryDefs
Dim rs as Recordset
Dim pr1 As Date, pr2 As Date

Set db = CurrentDb()

pr1 = Format(Forms("開通チェック")("開始日"), "yyyy/mm/dd")
pr2 = Format(Forms("開通チェック")("終了日"), "yyyy/mm/dd")

Set qd = db.QueryDefs("開通チェック")
qd.Parameters("pr1")....続きを読む

Q実行時エラー '3464': 抽出条件でデータ型が

フォームにフィルタをかけようとすると
実行時エラー '3464': 抽出条件でデータ型が一致しません。

になります。

Private Sub Form_Load()
Me.Form.Filter = "フィールド1 =200"
Me.Form.FilterOn = True
End Sub

コードはこれです。
フィールド1はテキスト型です。
何がダメなのでしょう?

Aベストアンサー

Me.Form.Filter = "フィールド1 =200"

Me.Form.Filter = "フィールド1 ='200'"
に変更してください。
フィールドのデータ型によって
テキスト型→ ' で括る
日付/時刻型→ # で括る
数値型 → 何も括らない。
と合わせる必要があります。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング