• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBに関するエラー)

VBに関するエラー

このQ&Aのポイント
  • VBに関するエラーが発生しました。エラーメッセージ「オブジェクトが必要」が表示されます。
  • 「mysql2」の箇所で、「mysql3」のレコードを利用したい場合、「RSOUT3.record」をそのまま使用するとエラーが発生します。
  • 質問者は、「mysql2」で「mysql3」のレコードを使用するためにどのようにすれば良いか質問しています。

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

  • ベストアンサー
noname#5584
noname#5584
回答No.2

> mysql1="select qry2.F From (SELECT qry1.C , qry1.D From (SELECT Tabel1.A,Tabel1.B sum(Tabel1.A) as C, sum(Tabel1.B) as D From Tabel1) qry1)qry2" Jetの構文では、サブクエリーは [ ] で括ります。 ただし、複数ネストすることはできないはずです。 ですので、この場合、qry1、またはqry2のどちらかをクエリーとして保存する必要があるはずです。 仮にqry1が保存済みのクエリーであるとすると、下記の構文となります。 mysql1="select qry2.F From [SELECT qry1.C , qry1.D From qry1]. qry2" ※ 「.」(ドット)がないと構文エラーになりますので、ご注意。 しかし、qry2には、[F]という列は存在しない (qry2にある列は、[C]、[D]のみ) ため、このSQLはエラーになります。 [F]列にどのような内容を期待しているのか、文面から読み取れないため、これ以上は申し上げられません。

Sikabu
質問者

お礼

ご回答、ありがとうございました。 複数ネストすることはできないですか、勉強になりました。またよろしくお願いいたします。

すると、全ての回答が全文表示されます。

その他の回答 (1)

noname#5584
noname#5584
回答No.1

気が付いた問題点を6点ほど。 (1) > Private CN As New ADODB.Connection As New宣言は実行速度に問題があり、推奨されません。 (WEBで検索すれば見つかりますので、説明は割愛します) (2) > Private RSOUT, RSOUT2, RSOUT3 As New ADODB.Recordset > Private mysql1, mysql2,mysql3 As String VB6.0以前では、上記の変数宣言の記述では、RSOUT、RSOUT2、mysql1、mysql2 の4つはVariant型となります。 (これについても、WEBで検索すれば解説は多数見つかりますので、説明は割愛します) # VB.NETでは、RSOUT、RSOUT2 は ADODB.Recordset 型に、 # mysql1、mysql2 はString型になりますが、ご使用のバージョンが明示されていないので、何とも・・・・。 (3) > mysql3 = "SELECT Tabel1.A,Tabel1.B sum(mysql3.Tabel1.A) as C, sum(Tabel1.B) as D From Tabel1" 上記は、 mysql3 = "SELECT Tabel1.A,Tabel1.B sum(Tabel1.A) as C, sum(Tabel1.B) as D From Tabel1" の誤記では? (4) > mysql2 = "SELECT RSOUT3.C , RSOUT3.D From RSOUT3" SQL文のデータソースに指定できるのは、表(テーブル/ビュー)の識別子だけです。 この場合、 mysql2 = "SELECT qry1.C , qry1.D From (SELECT Tabel1.A,Tabel1.B sum(Tabel1.A) as C, sum(Tabel1.B) as D From Tabel1) qry1" とすればよいと思われます。 (SQLの構文は、使用DBMSに依存) (5) > Open FileName For Output As #1 > '出力処理 > Close #1 1レコードずつ出力する方法では、レコード件数が多いと性能が劣化します。 Jetなら、SELECT......INTO......文で処理する、SQL ServerならBCP、DTS等を使用する、の方がよいのでは? (6) > Private Sub CMD_Action_Click() > > On Error GoTo err_form_load ・イベントを持つオブジェクトの識別子には「_」(アンダーバー)は使用しないほうが無難。 VBではイベントプロシージャの先頭1文字が「_」なので、オブジェクト名とイベント名の誤認識により、不具合が発生する場合があります。 ・ラベル行の命名が不適切。 以上、ご参考まで。

Sikabu
質問者

お礼

ご回答をいただき、ありがとうございます。 こちらの環境は:vb6.0 sp5 とAccess97です。 ご指摘された問題点の中、一番気になったのは、4番です。 質問:qry1は、SELECT Tabel1.A,Tabel1.B sum(Tabel1.A) as C, sum(Tabel1.B) as D From Tabel1のことですよね? mysql2 = "SELECT qry1.C , qry1.D From (SELECT Tabel1.A,Tabel1.B sum(Tabel1.A) as C, sum(Tabel1.B) as D From Tabel1) qry1" ------------------------------------------------ 以下のようなSQL文が有効でしょうか? mysql2から、またデータを利用すること。 mysql1="select qry2.F From (SELECT qry1.C , qry1.D From (SELECT Tabel1.A,Tabel1.B sum(Tabel1.A) as C, sum(Tabel1.B) as D From Tabel1) qry1)qry2" 要は、直接的にほしいデータを作れないため、 3ステップで、クエリーを作って、mysql3→mysql2→mysql1順番でデータを求めたいです。 >SQL文のデータソースに指定できるのは、表(テーブル/ビュー)の識別子だけです。 なら、3ステップでクエリーを作って、データを求めるのは、相当難しい(長くなること?)ことですか? ご指導をお願いいたします。

すると、全ての回答が全文表示されます。

関連するQ&A