Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


159 / 500 ページ ←次へ | 前へ→

【10095】Re:モジュールがインポートできない・・・
回答  サティ  - 07/12/7(金) 16:12 -

引用なし
パスワード
   ▼Gin_II さん:
こんにちは。
回答ありがとうございます。

>Accessのmdbファイルの制限として、2GBというものがあります。
>それを少しでも超えていれば、最適化はできないと思います。

限界だったのですね・・・2GBを少し超えたサイズでした。

>新規ファイルからインポートでダメであれば、既存ファイルからエクスポート
>してみるとどうでしょうか?(フォームだけとか)

全て(テーブル・クエリ・フォーム)のオブジェクトを、新しいMDBに、ひとつひとつエクスポートしてみましたが、現象は変わりませんでした・・・

>それでもダメであれば、望みは薄いかもしれませんが、
>
>Access オブジェクトをテキストファイルに変換する方法
>http://x7net.com/~access/AcTipsVbaHowToConvertAccObjToText.html
>
>こういった方法を試してみるとか・・・

なるほど、こういう方法があるのですね・・・
ありがとうございました。
・ツリー全体表示

【10094】Re:WHERE条件式での日付
お礼  あおぎん  - 07/12/7(金) 15:38 -

引用なし
パスワード
   ▼VBWASURETA さん:

こんにちは。

別記事に書いてますが、#を使ってコードを書いた際にスペースの記述ミスでうまくいかなかったみたいです。

たいへんお手を煩わせました。
今回イミディエイトウィンドウ等いろいろ教えていただきありがとうございました。
記述ミスの発見に役立ちそうで、そそっかしい私には最適のようです。
ありがとうございました。


>この問題はイミディエトウィンドウに表示することで
>問題箇所が理解しやすいと思います。
>因みにイミディエトウィンドウは色々活用できますので
>デバックするのには最適です^^
>
>2つの例:
><イミディエトウィンドウ>
>↓計算式
>?3+1[エンターキー]
>4[結果]
>
>↓関数単体実行(関数名と引数)
>?Test(1)[エンターキー]
>関数の戻り値
・ツリー全体表示

【10093】Re:WHERE条件式での日付
お礼  あおぎん  - 07/12/7(金) 15:19 -

引用なし
パスワード
   ▼小僧 さん:

小僧さんのをコピペしたらうまくいきました!


>受診日& "#
>
>の箇所で半角スペースがなくてエラーになりますね。

半角スペースがなかったのですね・・。
一言一句間違えないように確認した(つもりだった)のですが、それに気づいていたら投稿しなくてもすんだのですね。
いつもそそっかしくてお手を煩わせてすみません。


>その際に
>・全角スペースはだめ
>・余計な半角スペースはいくらあっても影響しない
>・「Where」「Between」等の語句の前後には必ず半角スペース
>
>ができていれば、問題ないはずです。

以後気をつけて記述するようにします!

>str = str & constr & ";"
>Debug.Print str
>
>ど記述すると、イミディエトウィンドウに
>str の内容が表示されますよ^^

記述してみました。
表示されました!
こんな便利なものがあったとは・・。

解説本をさらっと読んだだけではわからないことだらけです^^;。
理解力が鈍いだけかもですが。

いろいろありがとうございました。
・ツリー全体表示

【10092】Re:WHERE条件式での日付
発言  VBWASURETA  - 07/12/7(金) 14:14 -

引用なし
パスワード
   ▼小僧 さん、あおぎん さん:
こんにちは。

この問題はイミディエトウィンドウに表示することで
問題箇所が理解しやすいと思います。
因みにイミディエトウィンドウは色々活用できますので
デバックするのには最適です^^

2つの例:
<イミディエトウィンドウ>
↓計算式
?3+1[エンターキー]
4[結果]

↓関数単体実行(関数名と引数)
?Test(1)[エンターキー]
関数の戻り値
・ツリー全体表示

【10091】Re:WHERE条件式での日付
回答  小僧  - 07/12/7(金) 13:19 -

引用なし
パスワード
   ▼あおぎん さん:

こんにちは。

>constr = " WHERE UQ_コメント印刷用.受診日 between #" & Forms!F_コメント印刷!受診日& "# And #" & Forms!F_コメント印刷!受診日至 & "# "

> "の数や位置で、結果に違いがありますか??
> それとも半角スペースのとり方とかが問題なのでしょうか??

上記はVBEの画面からコピーされてますでしょうか。
そのままですと、

受診日& "#

の箇所で半角スペースがなくてエラーになりますね。


当方が提示した文は、こちらの掲示板の幅を考えて
改行コードを入れただけですので、
基本的には1行で書いてしまっても結果は変わりません。

その際に
・全角スペースはだめ
・余計な半角スペースはいくらあっても影響しない
・「Where」「Between」等の語句の前後には必ず半角スペース

ができていれば、問題ないはずです。


VBWASURETA さんがご提示されているデバッグの方法にて
SQL文の内容が間違っていないか確認されてみると良いと思います。


> str = str & constr & ";"
>
> この行にブレークを貼ると
> ?strエンターで結果を見ると

str = str & constr & ";"
Debug.Print str

ど記述すると、イミディエトウィンドウに
str の内容が表示されますよ^^
・ツリー全体表示

【10090】Re:WHERE条件式での日付
質問  あおぎん  - 07/12/7(金) 11:11 -

引用なし
パスワード
   ▼小僧 さん:


>
>Q_コメント印刷用 のクエリが他では使用されない場合には
>パラメータ値を直接SQL内に記述すれば該当のエラーは出ない筈です。
>
>
>  constr = " WHERE UQ_コメント印刷用.受診日 between " _
>        & "#" & Forms!F_コメント印刷!受診日 & "# AND " _
>        & "#" & Forms!F_コメント印刷!受診日至 & "#"


おはようございます。
たびたびお世話をおかけします。


他では使用予定がないので、直接記述すればいいのですよね?

投稿前に日付を ##でくくるというのをこちらの記事(番号は忘れました)から見つけたので、そこで記述してあったようにくくってみたのですがエラーになりました。

constr = " WHERE UQ_コメント印刷用.受診日 between #" & Forms!F_コメント印刷!受診日& "# And #" & Forms!F_コメント印刷!受診日至 & "# "

で、今小僧さんのと比較すると微妙に違います。

結果的にはどちらも
between #Forms!F_コメント印刷!受診日# AND # Forms!F_コメント印刷!受診日至#

になると思うのですが、"の数や位置で、結果に違いがありますか??
それとも半角スペースのとり方とかが問題なのでしょうか??
初歩的な質問で申し訳ありません。


日付の指定の仕方以外はコードがおかしいわけではないのですよね??
小僧さんのをコピーして実行してみようと思います。
・ツリー全体表示

【10089】Re:モジュールがインポートできない・・・
回答  Gin_II  - 07/12/7(金) 10:46 -

引用なし
パスワード
   >ファイルが肥大化してしまいました。(約2GB!!)
>
>大きなテーブルを削除し、最適化を試みたのですが、ファイルが大きすぎる
>ようで、いくら待っても最適化完了しませんでした。。。

Accessのmdbファイルの制限として、2GBというものがあります。
それを少しでも超えていれば、最適化はできないと思います。

新規ファイルからインポートでダメであれば、既存ファイルからエクスポート
してみるとどうでしょうか?(フォームだけとか)

それでもダメであれば、望みは薄いかもしれませんが、

Access オブジェクトをテキストファイルに変換する方法
http://x7net.com/~access/AcTipsVbaHowToConvertAccObjToText.html

こういった方法を試してみるとか・・・
・ツリー全体表示

【10088】Re:WHERE条件式での日付
質問  あおぎん  - 07/12/7(金) 10:41 -

引用なし
パスワード
   ▼VBWASURETA さん:
>▼あおぎん さん:
>こんにちは。
>
>先ほど回答しましたがstr変数(実行手前)の中身をイミディエイトで
>見てもらうとわかり易いと思います。

おはようございます。
ご丁寧にありがとうございます。

イミディエイトで見るということがやっとわかったので、
(理解できてないのかもしれませんが)
さっそくやってみました。

str = str & constr & ";"

この行にブレークを貼ると
?strエンターで結果を見ると
SELECT UQ_コメント印刷用.* FROM UQ_コメント印刷用
しか出ないので

その下の行にブレークを貼って実行してみました(これでいいのでしょうか?)。

フォームでいろいろ条件指定して、イミディエイトウインドウに出た以下の4つのクエリを実行してみたのですが、どれも大丈夫でした。
デバッグを閉じてクエリーをデータ表示させると指定したとおりのデータが取得できました。

SELECT UQ_コメント印刷用.* FROM UQ_コメント印刷用 WHERE UQ_コメント印刷用.判定番号 < 4 AND (UQ_コメント印刷用.カナ氏名 Like '*スエ*') AND UQ_コメント印刷用.受診日 between Forms!F_コメント印刷!受診日 and Forms!F_コメント印刷!受診日至;

SELECT UQ_コメント印刷用.* FROM UQ_コメント印刷用 WHERE UQ_コメント印刷用.判定番号 < 4 AND (UQ_コメント印刷用.社員コード = 517) AND UQ_コメント印刷用.受診日 between Forms!F_コメント印刷!受診日 and Forms!F_コメント印刷!受診日至;

SELECT UQ_コメント印刷用.* FROM UQ_コメント印刷用 WHERE UQ_コメント印刷用.判定番号 < 4 AND UQ_コメント印刷用.受診日 between Forms!F_コメント印刷!受診日 and Forms!F_コメント印刷!受診日至;


SELECT UQ_コメント印刷用.* FROM UQ_コメント印刷用 WHERE UQ_コメント印刷用.受診日 between Forms!F_コメント印刷!受診日 and Forms!F_コメント印刷!受診日至;

やり方が間違ってたり、お気づきの点などありましたら、またご指摘ください。
よろしくお願いします。
・ツリー全体表示

【10087】Re:モジュールがインポートできない・・・
質問  サティ  - 07/12/7(金) 9:49 -

引用なし
パスワード
   ▼VBWASURETA さん:

>修復はMDB起動時に確認があると思いますがないですか?
ふつうあるのですか?

この場合、確認はありません。

>後、勝手に強制終了されるのですか?

残業時間対策のようなもので、社内規定で強制終了されてしまいます・・・

>少なくとも最適化中に強制終了するのはよくないです。
>最悪のケースMDBが修復不可/起動不可にもなったりする場合があります。

そうですよね。
強制終了はしたくなかったのですが、やむを得ず(T T)

>2Gぐらいだと時間かかった(マシンスペックにもよると思います)覚え
>ありますので、壊れたフォームが1本だけでしたらモジュールを
>コピー&ペーストして新しくフォーム作るほうが早いと思います。

そうしたいところなのですが、
 オブジェクトを選択
  ⇒プロパティを開く
   ⇒イベントの[イベントプロシージャ]からVBA画面を起動
させると、
「現在実行しているコードはリセットされます。 」
等等、なんらかのエラーメッセージが100%出て、モジュールを記載できないような状態なもので、コピー&ペーストもできない状態なのです。
・ツリー全体表示

【10086】Re:モジュールがインポートできない・・・
回答  VBWASURETA  - 07/12/7(金) 9:31 -

引用なし
パスワード
   ▼サティ さん:
こんにちは。


修復はMDB起動時に確認があると思いますがないですか?
そうなってくると最適化/修復になるのですが。

>1時間くらい待っても最適化が終わらなく、PCが強制終了(会社のPCは一定時間に強制終了されるので・・・)されてしまう時間になったため、タスクマネージャで自分から強制終了させてしまいました・・・

後、勝手に強制終了されるのですか?

少なくとも最適化中に強制終了するのはよくないです。
最悪のケースMDBが修復不可/起動不可にもなったりする場合があります。
2Gぐらいだと時間かかった(マシンスペックにもよると思います)覚え
ありますので、壊れたフォームが1本だけでしたらモジュールを
コピー&ペーストして新しくフォーム作るほうが早いと思います。
・ツリー全体表示

【10085】Re:モジュールがインポートできない・・・
質問  サティ  - 07/12/7(金) 9:12 -

引用なし
パスワード
   ▼VBWASURETA さん:
>▼サティ さん:
>こんばんは。
>
>回答ではないですが、もしかすると最適化中に
>強制終了されたりしていませんか?
>もしされたのでしたら、その影響かも知れません。
>修復して逆にエクスポートしてみては?

VBWASURETA さん
返信ありがとうございます。

はい・・・
1時間くらい待っても最適化が終わらなく、PCが強制終了(会社のPCは一定時間に強制終了されるので・・・)されてしまう時間になったため、タスクマネージャで自分から強制終了させてしまいました・・・

「修復」とは、どのようにすればよいのでしょうか?

質問ばかりですみませんが、教えてください・・・
・ツリー全体表示

【10084】Re:モジュールがインポートできない・・・
発言  VBWASURETA  - 07/12/7(金) 0:55 -

引用なし
パスワード
   ▼サティ さん:
こんばんは。

回答ではないですが、もしかすると最適化中に
強制終了されたりしていませんか?
もしされたのでしたら、その影響かも知れません。
修復して逆にエクスポートしてみては?
・ツリー全体表示

【10083】モジュールがインポートできない・・・
発言  サティ  - 07/12/6(木) 22:27 -

引用なし
パスワード
   OS:windowsXP
Access Version:ACCESS2000

oracleの巨大なdbにodbcでリンクを張って作業していたら、
ファイルが肥大化してしまいました。(約2GB!!)

大きなテーブルを削除し、最適化を試みたのですが、ファイルが大きすぎるようで、いくら待っても最適化完了しませんでした。。。

なので、新しいmdbファイルを作成し、すべてのオブジェクトをインポートしました。(このファイルの容量は約3MB)

ここまではいいのですが、フォームの各イベントに紐づいていたモジュールが、何一つインポートされていませんでした。
それどころか、フォームのオブジェクトのプロパティのイベントでモジュールを起動させると、空のVBAウィンドウが表示され、モジュールを書くことができない状態になってしまいました。

とても困っております・・・

どなたかこの解決方法をご存知の方がいましたら、ぜひ教えていただけると幸いです。

よろしくお願い致します。
・ツリー全体表示

【10082】Re:WHERE条件式での日付
発言  VBWASURETA  - 07/12/6(木) 18:53 -

引用なし
パスワード
   >▼あおぎん さん、小僧 さん:
こんにちは。

パラメータについては、確かに小僧さん指摘されました
通りでいけるような気がします。

以下の内容については既に確認されているようです。
エラー詳細は不明ですが。

>Q_コメント印刷用 のクエリが他では使用されない場合には
>パラメータ値を直接SQL内に記述すれば該当のエラーは出ない筈です。
>
>
>  constr = " WHERE UQ_コメント印刷用.受診日 between " _
>        & "#" & Forms!F_コメント印刷!受診日 & "# AND " _
>        & "#" & Forms!F_コメント印刷!受診日至 & "#"
・ツリー全体表示

【10081】Re:WHERE条件式での日付
回答  小僧  - 07/12/6(木) 18:39 -

引用なし
パスワード
   ▼あおぎん さん、VBWASURETA さん:
こんにちは。

> エラー「実行時エラー’3061’ パラメータが少なすぎます。」が出ます。

パラメータクエリを Recordset オブジェクトに入れるためには
パラメータを指定してあげないと上記のようなエラーがでます。


Q_コメント印刷用 のクエリがこのプロシジャ以外から呼ばれる場合は

  'クエリの作成
  str = str & constr & ";"
  Set db = CurrentDb()
  Set qdf = db.QueryDefs("Q_コメント印刷用")
  qdf.SQL = str
  qdf.Parameters(0) = Forms!F_コメント印刷!受診日
  qdf.Parameters(1) = Forms!F_コメント印刷!受診日至
  
  Set rst = qdf.OpenRecordset 'qdfからレコードセットを生成
  qdf.Close          '上記理由により、Closeする場所の変更
  rst.MoveLast  '←追加
  If rst.RecordCount = 0 Then
  …

のようにしてQueryDefオブジェクトから
レコードセットを生成する事になります。


Q_コメント印刷用 のクエリが他では使用されない場合には
パラメータ値を直接SQL内に記述すれば該当のエラーは出ない筈です。


  constr = " WHERE UQ_コメント印刷用.受診日 between " _
        & "#" & Forms!F_コメント印刷!受診日 & "# AND " _
        & "#" & Forms!F_コメント印刷!受診日至 & "#"
・ツリー全体表示

【10080】Re:WHERE条件式での日付
回答  VBWASURETA  - 07/12/6(木) 17:57 -

引用なし
パスワード
   ▼あおぎん さん:
こんにちは。

先ほど回答しましたがstr変数(実行手前)の中身をイミディエイトで
見てもらうとわかり易いと思います。
・ツリー全体表示

【10079】Re:WHERE条件式での日付
回答  VBWASURETA  - 07/12/6(木) 17:46 -

引用なし
パスワード
   ▼あおぎん さん:
こんにちは。

>恥ずかしながらブレークを貼ってクエリー実行がよくわからないのですが、、、
ブレークというのはデバックで合ってます。
止めたい箇所でF9キーを押すことでブレークを貼れたと思います。

>>strに代入されているSQLの文字列でクエリー実行を
>>試して貰っても宜しいでしょうか?

これですが、モジュール画面にイミディエイトウィンドウというウィンドウを
表示することができます。確かツールバーの表示辺りにあったと思います。
表示できましたら、以下の内容を入力してエンターキーをその続きで押すと
現在変数に入っている内容の文字列が下に表示されます。
その表示された文字列をクエリーに貼り付けて確認してみてください。

?str[ここでエンターキーを押す]
・ツリー全体表示

【10078】Re:WHERE条件式での日付
質問  あおぎん  - 07/12/6(木) 17:22 -

引用なし
パスワード
   ▼VBWASURETA さん:

それと、
検索条件を

'検索条件・・・日付
  If constr = "" Then
    constr = " WHERE UQ_コメント印刷用.受診日 between Forms!F_コメント印刷!受診日 and Forms!F_コメント印刷!受診日至"
  Else
    constr = constr & " AND WHERE UQ_コメント印刷用.受診日 between Forms!F_コメント印刷!受診日 and Forms!F_コメント印刷!受診日至"
  End If

から
'検索条件・・・日付
  If constr = "" Then
    constr = " WHERE UQ_コメント印刷用.受診日 between Forms!F_コメント印刷!受診日 and Forms!F_コメント印刷!受診日至"
  Else
    constr = constr & " AND UQ_コメント印刷用.受診日 between Forms!F_コメント印刷!受診日 and Forms!F_コメント印刷!受診日至"
  End If

に書き換えました。

WHERE はいらないですよね?


 
・ツリー全体表示

【10077】Re:WHERE条件式での日付
質問  あおぎん  - 07/12/6(木) 17:16 -

引用なし
パスワード
   ▼VBWASURETA さん:
>▼あおぎん さん:
>
>>  'クエリの作成
>>  str = str & constr & ";"
>
>この部分でブレークを貼ってstrに代入されているSQLの文字列でクエリー実行を
>試して貰っても宜しいでしょうか?
>
>恐らくそれで問題となっている点が見える気がします。


こんにちは。
お返事ありがとうございます、

恥ずかしながらブレークを貼ってクエリー実行がよくわからないのですが、、、

わからないなりにやってみましたので、間違ってたらご指摘ください。(多分間違いだと思いますが・・)

ブレークを貼るというのは
デバッグ(D)のブレークポイントの設定というのでいいのでしょうか?
とりあえず指定の行にブレークポイントを設定し、フォーム上から実行してみました。
で、
ブレークポイントのところで止まったので、継続を実行してみました。
すると
やはり同じエラーが出ました。
パラメータが少ないとのことです。

>strに代入されているSQLの文字列でクエリー実行を
>試して貰っても宜しいでしょうか?

↑ここのところもよくわからないので、お手数ですが教えていただけませんか?

どうぞよろしくお願いします。
・ツリー全体表示

【10076】Re:フォームの操作禁止
発言  VBWASURETA  - 07/12/6(木) 16:20 -

引用なし
パスワード
   ▼ヒッキー さん、小僧 さん:
こんにちは。

多分ですが、モーダルウィンドウと同じことだと思いますが違いますでしょうか?

その前面になっているウィンドウが閉じられると解除されるはずなので
特にソース追加は必要ないかと思います。

イメージ的に例えば、メッセージボックスのYes/No選択ウィンドウ表示中は
メイン画面を触れないだったかと思います。
・ツリー全体表示

159 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1083146
(SS)C-BOARD v3.8 is Free