ここから質問投稿すると、最大4000ポイント当たる!!!! >>

お世話になります。
選択クエリの結果を文字列として書き出したいので、いろいろ調べてみると
以下のコードを見つけました。
========================
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim strData As String

Set cnn = CurrentProject.Connection
With rst
.Open "顧客マスタ", cnn, adOpenKeyset, adLockOptimistic, adCmdTableDirect
strData = .GetString(adClipString, 10)
Debug.Print strData
.Close
End With
cnn.Close
==================================
これはテーブルを文字列としてイミディエイトウィンドに書き出すものなのですが、これがテーブルだけしか使えず、難儀しております。変更しようにもなにぶん実力がないもので手が出ません。

どうぞ、選択クエリの結果を文字列として表示させる方法を教えてください。
お願いします。

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

A 回答 (8件)

>「パラメータが少なすぎます。

1を指定してください。」
このエラーはパラメータ付きのクエリをVBAで開こうとしたときにでます
パラメータはAccessウィンドウからクエリを開くときにしか使えません
VBAから開くときにはパラメータを値としてSQLにセットしてやるか
QueryDefのParameterオブジェクトに値をセットしてやります

ここまでのやり取りから判断させてもらったあなたのVBAの実力では
ちょっと難しいかもですね

クエリの結果をタブ区切りのテキストファイルにしたいというだけならVBAなど持ち出さず、
[ファイル][エクスポート]で区切り記号にタブを指定するだけでいいんじゃないの
    • good
    • 0
この回答へのお礼

長くお付き合いいただきありがとうございました。
エクスポートは何度か使ったことがありますが、変数に代入する方法はまだ知りません。今後はこの方面で考えていきます。
目的は達成できませんでしたが、いろいろ勉強になりました。
いつかは私も質問者への回答を返せるように成長したいと思います。
ありがとうございました。

お礼日時:2008/07/28 18:22

>Dim cnn As New ADODB.Connection


>Dim rst As New ADODB.Recordset
>Dim strData As String

>Set cnn = CurrentProject.Connection
>With rst
オープンが抜けてます
strData=""

>Do Until .EOF
strData = strData &[商品名] & vbTab & [型番] & vbTab & [単価] & vbCrLf
>.MoveNext
Loop

>Debug.Print strData
>.Close
>End With
>cnn.Close

この回答への補足

お世話になります。
お手間をかけていただきありがとうございます。
オープンの記述が間違っているためかこのようなエラーが出ます。

「パラメータが少なすぎます。1を指定してください。」」

クエリだけだと正常に表示しています。
すみませんが、どの行をどのように変更すれば動きますでしょうか?
ご迷惑をおかけしますがお答えをいただければ助かります。
よろしくお願いします。


Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim strData As String

Set cnn = CurrentProject.Connection
With rst


.Open "Q注文内容", cnn, adOpenKeyset, adLockOptimistic, adCmdTableDirect ←この行でエラー表示

strData = ""

Do Until .EOF
strData = strData & [商品名] & vbTab & [色] & vbTab & [サイズ] & vbCrLf
.MoveNext
Loop

Debug.Print strData
.Close
End With
cnn.Close

なお、クエリは選択クエリで、条件行にはにフォームにある1個のコントロールと合致するものを抽出するようにしています。

補足日時:2008/07/28 13:31
    • good
    • 0

>「レコードセットをオープン」など、具体的にどうすればいいか困っています。


最初の質問でやっているじゃないですか

この回答への補足

お世話になります。教えていただいていることはこのようにすることだと思いましたが、やっぱり動作しません。
関数なら何とか理解しているだけなので、それ以上は手探り状態です。ご迷惑をおかけしますが、下のようにしなさいという意味ではないのでしょうか??

Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim strData As String

Set cnn = CurrentProject.Connection
With rst

Do Until .EOF
strData = [商品名] & [型番] & [単価] & vbTab
.MoveNext

Debug.Print strData
.Close
End With
cnn.Close

回答いただければうれしいです。よろしくお願いします。

補足日時:2008/07/27 22:47
    • good
    • 0

[文字変数をクリア]


[レコードセットオープン]
with rst
'全てのレコードを読みこむループ
DO until .EOF
[フィールド連結]
[改行連結]
'次のレコードへループ
.Movenext
Loop

この回答への補足

たびたびのご回答ありがとうございます。
ただ、せっかく回答をいただきましたが、「レコードセットをオープン」など、具体的にどうすればいいか困っています。
そのコードを乗せていただくわけにはいかないでしょうか?

わからないながらあれこれやっては見たもののまだ動作しておりません。ご面倒をおかけしますがどうぞよろしくお願いします。

補足日時:2008/07/27 00:01
    • good
    • 0

>結果で表示される複数行のレコードを、1つのまとまった文字列として変数に入れる方法を望んでいます。



1レコード内の各フィールドは&で繋げるだけですね(間にタブを挟んで)
&で繋げれば数字もテキストに型変換されます
ちなみにタブの文字コードは9ね

複数レコード分をつなげるのは、読み出しはレコード単位でしか出来ませんから
レコード読み出しをループでまわして次々と結合するだけです(間に改行を挟んで)
改行の文字コードは13

この回答への補足

ご回答ありがとうございます。

はい、フィールドを&でつなげたり、vbTABやchr(13) & chr(10)も理解しています。ただ、複数行をまとめる方法が思いつかないため、最初のコードを利用しようと思った次第です。
恥ずかしながら、ループでまわす方法がよくわかっていないのです。
もし、それがお手数じゃなければ教えていただいてもよろしいでしょうか?
お願いします。

補足日時:2008/07/25 21:59
    • good
    • 0

>選択クエリの結果が



>商品番号1/あああああ/いいいい/5000

ってどういうこと
この4つはフィールドですか


選択クエリの結果が

>商品番号1/あああああ/いいいい/5000

>商品番号1 あああああ いいいい 5000
の違いは何?

この回答への補足

回答ありがとうございます。

そうです。最初の4つはフィールドです。
たくさんのフィールドの中から4つだけを選んでいます。

フィールド1/フィールド2/フィールド3/フィールド4

さらに、それを条件で絞り込んで、3レコードや5レコードや1レコードを抽出させています。

この結果を文字列として、変数 StrData に改行コードごとまとめて代入したいのです。

3レコードなら、
StrData には
「フィールド1 tab フィールド2 tab フィールド3 フィールド4 (改行)
フィールド1 tab フィールド2 tab フィールド3 フィールド4 (改行)
フィールド1 tab フィールド2 tab フィールド3 フィールド4( 改行)」

と結果がほしいのです。

結果で表示される複数行のレコードを、1つのまとまった文字列として変数に入れる方法を望んでいます。

すみませんがよろしくお願いします。

補足日時:2008/07/24 21:00
    • good
    • 0

>選択クエリの結果を文字列として表示させる方法


これだけのことならVBAなど持ち出さないで
クエリでCStr関数やFormat関数を使って文字列に変換してやればいいだけのことでは

この回答への補足

回答ありがとうございます。

選択クエリの結果が

商品番号1/あああああ/いいいい/5000
商品番号2/aaaaaaaaaa/BBBBBBB/4600
商品番号3/ももももも/のののの/5400

の時に、文字列として

「商品番号1 あああああ いいいい 5000
商品番号2 aaaaaaaaaa BBBBBBB 4600
商品番号3 ももももも のののの 5400」

を抽出することが可能でしょうか?
よい方法が思いつかないのです。
その方法を具体的に教えてもらえませんでしょうか
よろしくお願いします。

補足日時:2008/07/24 12:54
    • good
    • 0

たぶんadCmdTableDirectのオプションが問題かと思います。



データの変更や削除を可能にするオプション VS 変更不可のクエリ という矛盾です。

そこで、
.Open~の部分を
.Open "クエリ名称", cnn, adOpenStatic, adLockReadOnly
のようにしたらいけるんじゃないかと・・・

参考URL:http://www.geocities.jp/cbc_vbnet/ADO/recordset. …

この回答への補足

ありがとうございます。
しかしながら、クエリに条件を設定してないときは結果が表示されるのですが、条件を設定して必要なものだけを抜き出そうとすると

実行時エラー'
パラメータが少なすぎます。1を指定して下さい。

と表示されます。

クエリに条件をつけてエラーが出ないようにしようと、リンク先をじっくり読んだつもりなのですが、いまひとつよくわかりません。
引き続きお願いします。
よろしくお願いします。

補足日時:2008/07/24 12:46
    • good
    • 0

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


人気Q&Aランキング