アプリ版:「スタンプのみでお礼する」機能のリリースについて

4つのテーブルから各々2つのクエリーを作り、その2つのクエリーから1つのクエリーを作り最終的に1つのrecordsetを抽出するという作業をVBで書きたいのですが、最初の2つのクエリーのrecordsetは取得できますが、そのrecordsetを使った最終クエリーがうまく動いてくれません。サンプルとしてどういう風に構文にしたらいいか、だれか教えてgoo?ちなみに超初心者なので、わかりやすくお願いします。

A 回答 (4件)

VBによるSQLの結果の取得について勘違いされているようなので最初から整理します。



1.SQL文は、VBの文字列である必要があります。
2.SQL文の中で使用するフィールド名、テーブル名は、実際のデータベースに存在する必要があります。
3.1度のSELECT文の発行で、1つのRecordsetのみ取得することができます。

です。

>rs1は複数件の結果を返します。
ということは、3に引っかかりますよね。
つまり、考えられる組み合わせの回数分SELECT文を発行してRecordsetを取得する必要があります。


>それと副問合わせというものはどういうことですか?
副問い合わせというのは、1つのSQLの中でSELECT文で抽出した結果を使用して別の結果を取得したりレコードを更新したりすることです。

詳しくはこちらをどうぞ。
http://www.atmarkit.co.jp/fnetwork/rensai/sql07/ …

ただし、今回のようにテーブル名やフィールド名が格納されているテーブルの内容を元に副問い合わせを行うことはできません。
    • good
    • 0
この回答へのお礼

詳しく説明していただきありがとうございました。参考になりました。

お礼日時:2002/08/04 22:26

>指摘されたとおりにSQL文を書き直しましたが、やはりレコードセットを取得できません。



FROM句や、WHERE句も直しましたか?

もしかして、rs1は複数件の結果を返すなんてことありませんか?

この回答への補足

rs1は複数件の結果を返します。

補足日時:2002/07/16 15:06
    • good
    • 0

>sql3 = " SELECT rs1![a], rs1![b], rs2![a], rs2![b] "



SQL文字列の中に、”rs1![a]”はだめです。

sql3 = " SELECT " & rs1![a] & ", " & rs1![b] & ", " & rs2![a] & ", " & rs2![b]

のように、レコードセットの中身の文字列を取り出してSQL文を作成してください。

この回答への補足

指摘されたとおりにSQL文を書き直しましたが、やはりレコードセットを取得できません。いろいろ考えたあげくINSERT INTOを使い空のテーブルを作ってレコードを代入し、再びSQLでレコードセットを作るというようにしました。他に構文に誤りはないでしょうか?

補足日時:2002/07/15 03:40
    • good
    • 0

VBで書くということは、sqlを書いてレコードセットを開くということなんでしょうか?最終クエリーがどうなってるのかがわかりませんが、4つのテーブルから副問合せを使ってsqlをつくり、それをレコードセットで開くというのではダメなのでしょうか。



最終クエリーというのがどのようなものか、教えてください。

この回答への補足

sqlを使ってレコードセットを開きます。
まず1つめのクエリーは----
Dim cn1 As ADODB.Connection
Dim rs1 As ADODB.Recordset
Dim sql1 As String

Set cn1 = CurrentProject.Connection

sql1 = " SELECT A.[a], A.[b], B.[a], B.[b]" _
& " FROM A INNER JOIN B ON A.[a] = B.[b]) " _
& " WHERE A.[b] = me!ID; " _

Set rs1 = New ADODB.Recordset
rs1.Open sql1, cn1, adOpenKeyset, adLockOptimistic

2つめは----
Dim cn2 As ADODB.Connection
Dim rs2 As ADODB.Recordset
Dim sq2 As String

Set cn2 = CurrentProject.Connection
sql2 = "SELECT C.[a], C[b], D.[a], D[b] " _
& "FROM C INNER JOIN D ON C.[a] = D.[b]; "

Set rs2 = New ADODB.Recordset
rs2.Open sql2, cn2, adOpenKeyset, adLockOptimistic

最終のつもりなんですが------
Dim cn3 As ADODB.Connection
Dim rs3 As ADODB.Recordset
Dim sql3 As String
Dim str As String

Set cn3 = CurrentProject.Connection
sql3 = " SELECT rs1![a], rs1![b], rs2![a], rs2![b] " _
& " FROM rs2 LEFT JOIN rs1 ON rs2![a] = rs1![b] " _
& " WHERE rs1![a] = 1 _
& " ORDER BY rs2![a] ; "
Set rs3 = New ADODB.Recordset
rs3.Open sql3, cn3, adOpenKeyset, adLockOptimistic
sql自体はここに書いたものはいいかげんですが、まわりの構文はそのまま写しました。sql自体をいじらなければならないのであれば勉強し直しですが、構文にミスがあるのであれば教えてください。sqlはクエリーをアクセスで構築し、動作確認の後sql表示をコピーしました。それと副問合わせというものはどういうことですか?なにもわからないので恐縮なのですが詳しく教えてください。

補足日時:2002/07/12 15:42
    • good
    • 0

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

関連するカテゴリからQ&Aを探す