
既存のプログラムを元に、
以下のようなソースを作成したのですが、
取得出来ませんでした。
参照設定やパスの設定、SQL文は正しいです。
どこがマズイのでしょうか?
アドバイスをお願い致します。
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim SQL As String
'データベース接続
Set db = OpenDatabase("DBのパス")
'データ検索SQL
SQL = ""
SQL = " SELECT文 "
'ACCESSより取得
Set rs = db.OpenRecordset(SQL)
db.Close
rs.Close
No.10
- 回答日時:
>Getrowsの箇所(※の箇所)を、GetValuesにすると
>コンパイルエラー「メソッドまたはデータ メンバが見つかりません」
あちゃ、またチョンボしちゃいました。すみません。
Getrowsが正解です。
>「カレントレコードがありません」のエラーが出ます。
そのままです。レコードが取得されていません。
Debug.Print SQL
で、SQL文を表示してみてください。
せっかく直前に設定した年月日の条件、何にも入っていませんよね。
そのSQLですと、日付が'取得開始日'という文字列から'取得終了日'という文字列の間のものを抽出しようとします。
もちろんそんなのないのでレコードが取得できないわけです。
SQL = " SELECT * From カレンダー where 日付 between " & 取得開始日 & " and " & 取得終了日 & " order by 日付 ; "
としてください。
あと、9月より大きい月、0ついちゃってますよ。
#おまけにアドバイス。
取得開始日 = 年 * 10000 + 月 * 100 + 1
だったら月の桁数気にしなくても・・・
回答ありがとうございます。
SQLの発行はうまくいきましたが、
SQL発行以下で質問があります。
'レコードセット取得
Set rs = db.OpenRecordset(SQL)
Set vntValues = rs.GetRows(最大値)
Debug.Print vntValues(0, 0)
vntValuesはvariant型で定義したのですが、
「型が一致しません」のエラーになりました。
String型など他の型を使ってみましたが、ダメでした。
アドバイスや他のやり方などがありましたら、
書き込みお待ちしております。
No.9
- 回答日時:
>SQL文を書くと、
>
>SELEST * FROM カレンダー
>WHERE 日付 BETWEEN YYYYMM+01 AND YYYYMM+その月の最終日
#7の方の他に、あと
ORDER BY 日付
を入れたほうがいいんでは?
>取得したその月の日付と休日状況を、配列なり変数なりに
>入れるということです。
ということであれば、DAOを使っていることですし、
GwrRowsメソッドを使えば一発です。
'ACCESSより取得
Set rs = db.OpenRecordset(SQL)
Dim vntValues As Variant
Set vntValues = rs.GetValues(31) '最高で31行
Debug.Print vntValues(0, 0) '最初の行の最初の列の値
rs.Close
db.Close
vntValuesは、レコードがあれば2次元の配列になっています。
>う~ん。一つ気になったのがtaka_tetsuさんのNo6の回答の中で
>loopの前に"rs.MoveNext" が抜けているように思います。
>
>これはどうですか?MoveNextしないと永久ループになるのですが?
失礼しました。チョンボしました(^^;;
ないとまずいですね。
でも、上の例では要らないです。
回答ありがとうございます。
回答を元に、以下のソースを作りました。
'データベース接続
Set db = OpenDatabase("DBのパス", True)
'データ検索SQL
SQL = ""
If 月 <= 9 Then
取得開始日 = 年 & 0 & 月 & 0 & 1
取得終了日 = 年 & 0 & 月 & 表示月の最終日
End If
If 月 > 9 Then
取得開始日 = 年 & 0 & 月 & 0 & 1
取得終了日 = 年 & 0 & 月 & 表示月の最終日
End If
SQL = " SELECT * From カレンダー where 日付 _
between '取得開始日' and '取得終了日 ' order by 日付 ; "
'レコードセット取得
Set rs = db.OpenRecordset(SQL)
Dim vntValues As Variant
Set vntValues = rs.Getrows(表示月の最終日)※
Debug.Print vntValues(0, 0)
rs.Close
db.Close
End Select
これを実行すると、
「カレントレコードがありません」のエラーが出ます。
ヘルプを表示しても参照出来ませんでした。
DBもデータもSQLもチェックしましたが、ダメでした。
Getrowsの箇所(※の箇所)を、GetValuesにすると
コンパイルエラー「メソッドまたはデータ メンバが見つかりません」
(Error 461)が出ました。
環境設定が間違っているのでしょうか?
No.8
- 回答日時:
こんにちは No7のものです
>SELEST * FROM カレンダー
>WHERE 日付 BETWEEN YYYYMM+01 AND YYYYMM+その月の最終日
>SELEST * FROM カレンダー
>WHERE 日付>= YYYYMM+01 AND 日付=< YYYYMM+その月の最終日
了解です。YYYYMM+01とYYYYMM+その月の最終日の部分というのは
200210+01で20021001となっているから
↓正解ということですよね。
>日付の文字列編集はOKでした。
このまま数値だと200210+01で200211となりそうですが・・・
>また、ACCESSでSQL文のチェックも行いました。
ちゃんとクエリを実行されましたか?
その時結果のシートも表示されましたか?
それでる駄目ということは
う~ん。一つ気になったのがtaka_tetsuさんのNo6の回答の中で
loopの前に"rs.MoveNext" が抜けているように思います。
これはどうですか?MoveNextしないと永久ループになるのですが?
No.7
- 回答日時:
こんにちは
>SQL文でBETWEEN文を使ったり、
>for文を使って1回ずつSQLを切ったりしたのですが、ダメでした。
>申し訳ありませんが、再度アドバイスを頂ければ幸いです。
ということですが、どういうSQL文なのか示していただかないと
みんな答えようがないと思います。
で、ですね。私がよくやる、SQL文がうまく動かない場合のデバッグ
方法を書きますのでご自身でチャレンジしてください
1.アクセスからVBへ、SQLの貼り付け
これはやりたいことがわかっている場合、アクセスでクエリを作成し
それが正しければ、SQL文を表示しVBへコピペ。
2.VBからアクセスへ、1.の逆です
VBのデバッグウィンドでSQL文を表示させ、アクセスのクエリにコピペ
ちょっとした構文のタイプミスでもSQL文のエラーになるので
正常に動くVBのSQLでアクセスにクエリ化しもそこに手を加えていく
というやり方がいいでしょう
回答ありがとうございます。
どういうSQL文かと言うと
カレンダーと言うテーブルがありまして、
指定した年月分の内容を取得するものです。
カレンダーの構成はこうなっています。
・日付(数値型8桁、YYYYMMDD)
・休日(YES/NO型、休日はオン)
例えば2002年xx月分のデータを取得するとしたら、
2002xx01TRUE, 2002xx02TRUE…といったように
取得したその月の日付と休日状況を、配列なり変数なりに
入れるということです。
SQL文を書くと、
SELEST * FROM カレンダー
WHERE 日付 BETWEEN YYYYMM+01 AND YYYYMM+その月の最終日
又は
SELEST * FROM カレンダー
WHERE 日付>= YYYYMM+01 AND 日付=< YYYYMM+その月の最終日
です。
日付の文字列編集はOKでした。
また、ACCESSでSQL文のチェックも行いました。
再度アドバイス等頂ければ幸いです。
No.6
- 回答日時:
では、途中から
'ACCESSより取得
Set rs = db.OpenRecordset(SQL)
'最後のレコードまで取得
Do While rs.EOF = False
'下の3種類のどの方法でもかまいません。
'速度的には下になるほど遅くなります
Debug.Print rs(0) 'SELECT文中の、一番左の項目
Debug.Print rs![フィールド名]
Debug.Print rs("フィールド名")
Loop
'クローズ(後から開いたものを先に閉じましょう)
rs.Close
db.Close
回答ありがとうございました。
上記のソースを使って動かしてみたら、
取得は出来ました。
Set rs = db.OpenRecordset(SQL)の部分のSQLを、
範囲指定して複数の内容を取得し、配列の中に格納したいのですが、
SQL文でBETWEEN文を使ったり、
for文を使って1回ずつSQLを切ったりしたのですが、ダメでした。
申し訳ありませんが、再度アドバイスを頂ければ幸いです。
No.4
- 回答日時:
>こけた所は、プログラムを実行しても
>取得が出来ませんでした(set rsの所)
ということは、エラーは発生していないということなんですけど。
>Debug Printを使うと「型が一致しません」の
>エラーになりました。
あのう、rsをDebug.Printしてもオブジェクトなんで中身が見えるわけではないのですが・・・
Recordsetは、”取得したレコードの結果のセットです”
もしかして、rsの中身に単純に文字列が入っているとお考えでしょうか?
あと、
>Set rs = db.OpenRecordset(SQL)
と、
>db.Close
>rs.Close
の間の処理はどうされていますか?
>もしかして、rsの中身に単純に文字列が入っているとお考えでしょうか?
その通りです(^^;
SELECT文の結果が入ってくると思っていました。
処理としてはSELECT文の結果を取得したいだけなので、
その方法例を教えて頂ければ幸いです。
No.3
- 回答日時:
No.2
- 回答日時:
こんばんわ。
確かにtaka_tetsuさんのおっしゃる通り、どこでこけてるのかわからないです。
ので、私なら
dim ws as workspace
dim db as database
dim rs as recordset
set ws = dbEngine.workspace(0)
set db = ws.opendatabase("dbpath",true)
set rs = db.openrecordset("select・・・",dbopendynaset)
てな感じでアクセス使ってます。
手法はいろいろあると思いますので、参考程度に・・・
>回答者の方へ
回答ありがとうございます。
こけた所を書いていませんでしたね。
すみませんでした。
こけた所は、プログラムを実行しても
取得が出来ませんでした(set rsの所)
Debug Printを使うと「型が一致しません」の
エラーになりました。
このプログラムの中には、INSERT文を使って
処理する箇所がありまして、そちらは
正常終了するのですが。SELECT文の箇所はダメでした。
引き続き、書き込みをお待ちしております。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー3131 FROM 句の構...
-
テキストボックスに入れた内容...
-
Accessのテーブルへ複数の主キ...
-
LocalのNotesメールDBをVBAで参...
-
phpPgAdminでテーブルが作成で...
-
PHPからデータベースに接続した...
-
phpでcsvをhtmlにしたい
-
mySQLで結果が無いときの処理
-
XAMMPが起動しません。
-
C# で発生したException.Messag...
-
ズブの素人です。mysqlについて...
-
MySQLにHTMLタグを挿入したい
-
教えて下さい。
-
MySQLのデーター送信について。...
-
dbに登録したデータをphpのプル...
-
テーブル内の文字によりログイ...
-
PHPよりMySQLの操作のコードの...
-
テーブルにINSERTができません...
-
PHP セレクトメニューの呼び出...
-
開始日と期間で終了日を求める...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックスに入れた内容...
-
VBAをつかってクエリの情報を抽...
-
実行時エラー3131 FROM 句の構...
-
Accessのテーブルへ複数の主キ...
-
LocalのNotesメールDBをVBAで参...
-
エラー3011
-
SQL文が実行できません
-
phpのPEARのMDB2を使って出たエ...
-
SQL文の実行に失敗しました???
-
PDOで取得される値がすべて文字...
-
SQLiteのデータベースについて
-
SELECT文を発行して、ACCESSよ...
-
時刻型にNULLでセットしたい
-
zend(phpフレームワーク)でトラ...
-
pearのdisconnect()が使えない。
-
classの使い方について
-
DBデータをcsvで出力の際カンマ...
-
ExcelVBAでAccessのデータを検...
-
PHP(PDO)でDBの情報を完全一...
-
例外処理
おすすめ情報