アクセスvbaについて
更新クエリを実行するとき
DoCmd.RunSQL strSQL
cn.Execute strSQL
の違いは、
アクションクエリの確認のメッセージボックスを表示するかしないかの違いだけですか?
(Executeは確認画面が表示されない)

A 回答 (1件)

私自身は、「マクロをVBAに変換」でVBAに移ってきたこともあって、


DoCmd.RunSQLばかり使っていますが・・・(汗)

こちらのサイトが簡潔でわかりやすいかと思いますが、
http://www.mahoroba.ne.jp/~mw_ken/transrunsql.html
Executeを使用した場合はRollbackを使用することで元に戻せる
一方で、RunSQLの場合は、「DoCmd.SetWarnings False」を
予め指定した場合、戻すことができなくなります。
(「True」にした場合も、『更新対象レコード数が表示されたときの
 メッセージで「いいえ」を選択した場合だけ』と非常に限定的)
※「Rollback」については、VBEのヘルプで検索してみて下さい。


その意味では、
 実行中に、(想定済みの)エラーが発生したらRollbackを行う
  →Executeが必須
 SQL実行後のコードでエラーしても元に戻す必要がない
 (または(私のように)そこまでの制御はできないので諦める(汗))
  →ExecuteでもRunSQLでも可
といったことになるかと思います。
(Executeの方ではメッセージボックスが表示されないのは、Rollbackという
 取り消し手段を持っているから、ということかと)


なお、「同期・非同期」の話が過去の質問で出ていますが、
そこでのNo.2の実験では、差が見られなかったとのことです。
(この辺り、不勉強なためわかりませんが・・・(汗))
http://oshiete1.goo.ne.jp/qa2680886.html
    • good
    • 0
この回答へのお礼

ありがとうございます。参考になりました。

お礼日時:2009/05/23 20:50

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qアクセスのフィールドに値をペースト(VB・Access)

Visual Basic 2005 Express Editionで、
フォーム上のボタンをクリックすると変数内の文字列を
Accessフォームの特定のフィールドにセットするというVBを作りたいのですが、
AccessのVBは未経験であるため難儀しております。
Accessのフィールドに値を入れるところがわかりません。

AccessVB初心者の同僚は以下のように教えてくれましたがまったく動きません。

Dim copy_text
Dim myAccess
copy_text = "○○株式会社"
set myAccess = CreateObject("Access.Application")
myAccess.Forms("フォーム1").Controls("会社名").text = copy_text

本来"○○株式会社"は変数ではなくクリップボード内に入っています。
なのでクリップボード内の値をアクセスのフィールドにペーストするのでもかまいません。

ネットはいろいろ調べていますが、未経験の自分は基礎編・入門編であっても理解できません。
未経験の自分が作ることに問題がありますが、他にやる人がいないので仕方がありません。
どなたか助けて下さい(涙)

Visual Basic 2005 Express Editionで、
フォーム上のボタンをクリックすると変数内の文字列を
Accessフォームの特定のフィールドにセットするというVBを作りたいのですが、
AccessのVBは未経験であるため難儀しております。
Accessのフィールドに値を入れるところがわかりません。

AccessVB初心者の同僚は以下のように教えてくれましたがまったく動きません。

Dim copy_text
Dim myAccess
copy_text = "○○株式会社"
set myAccess = CreateObject("Access.Application")
myAccess.Forms("フォーム1"...続きを読む

Aベストアンサー

探したらこんな方法ありました・・・

すでに開いているなら
Dim myAccess
copy_text = "○○株式会社"
Set myAccess = GetObject(, "Access.Application")
myAccess.Forms("フォーム1").Controls("会社名").Text = copy_text
Set myAccess = Nothing
とかではどうでしょう?
エラーチェック必要ですが。

開くなら
http://www.ken3.org/vba/backno/vba015.html
などがありました。

QAccessのアクションクエリ実行時にメッセージが出ないようにするには

マクロで追加クエリと更新クエリを続けて、5回処理する場合、
確認メッセージが何回も出てきて、使いづらいのですが
メッセージを表示しないようにするには、どうしたらいいですか。
ちなみに現在は「質問には全て[はい]で答えてください」とユーザーに伝えています。
よろしくお願いします

Aベストアンサー

クエリの実行をマクロで制御しているならば、
クエリの実行前に
アクション メッセージの設定を“いいえ”
クエリの実行後に
アクション メッセージの設定を“はい”
とします。

クエリの実行をモジュールで制御している場合は
クエリの実行前に
DoCmd.SetWarnings False
クエリの実行後に
DoCmd.SetWarnings True
と記述します。

試してみてください。

QAccessがインストールされていなくても、アクセスのアプリケーション

Accessがインストールされていなくても、アクセスのアプリケーションが動かせると聞きましたが、本当でしょうか?
お客様から、「AccessがインストールされていないPCで、別PCで作成したAccessのアプリケーション
を動かしているものがある」と聞きました。
私はそんな手段を使ったことがないのでよく分からないのですが、もし本当でしたら、その方法等教えて下さい。

Aベストアンサー

> AccessがインストールされていないPC

正確には、「製品版のAccessがインストールされていない」で、
「Accessのランタイム版がインストールされている」ということ
だと思います。

大雑把にいうと、製品版は新規MDBファイルの作成や、既存
MDBファイルの編集が行えるのに対し、ランタイム版は既存の
MDBファイルの参照とデータ編集しか行えない、という違いが
あります。

ですので、もしも「新規ファイルの作成/既存ファイルの編集」が
目的だとすると、残念ながらランタイム版では目的に合いません。
(Accessで作成したデータベースの配布などに使用します)

なお、Access2003では別途購入の必要があったようですが、
Access2007・2010では無償提供となっています。

googleでの検索結果を参考までに載せておきます:
http://www.google.co.jp/search?hl=ja&q=access+%E3%83%A9%E3%83%B3%E3%82%BF%E3%82%A4%E3%83%A0+%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89&aq=f&aqi=g2g-cr3&aql=&oq=&gs_rfai=

> AccessがインストールされていないPC

正確には、「製品版のAccessがインストールされていない」で、
「Accessのランタイム版がインストールされている」ということ
だと思います。

大雑把にいうと、製品版は新規MDBファイルの作成や、既存
MDBファイルの編集が行えるのに対し、ランタイム版は既存の
MDBファイルの参照とデータ編集しか行えない、という違いが
あります。

ですので、もしも「新規ファイルの作成/既存ファイルの編集」が
目的だとすると、残念ながらランタイム版では目的に合いません。
(Acc...続きを読む

QAccessクエリ実行時のメッセージ表示について

クエリ実行時にメッセージが表示されるのが面倒なので以下のようにしました
DoCmd.SetWarnings False
クエリ実行
DoCmd.SetWarnings True

こうするとメッセージが表示されなくなりますが、他の箇所 (テーブルを開いてデータを削除とか、フォームの削除とか)
でもメッセージが出なくなってしまいます。
他のところではメッセージが出るようにしたいのですが…
また、一度mdbを閉じて開きなおすと、ちゃんと出ます

Aベストアンサー

VBAですよね。
僕もメッセージ表示を回避する際にはこの方法を使うんですけど、メッセージが出なくなるってことはないんですが・・・。

一度F8を押しながら、1行づつ実行して、
DoCmd.SetWarnings True
が実行されているかどうか確認されてはどうでしょうか?

Q.htaccessでアクセス制限動作しません

.htaccessを設置しましたが、正常に動作しません。
ニフティ法人Webホスティングにて、独自ドメイン使用のホームページを開設
しています。(.htaccess利用可、ファイルのパーミッション(属性)を「604」に
するということをニフティに確認済み)

サイト全体に対して、123.net123456780.t-com.ne.jp からのアクセス制限をしたく、.
htaccessを設置しました。.t-com.ne.jp より前の部分、またIPアドレスも一定では
ない為、t-com.ne.jp 特定ホストからのアクセス制限をしました。

---------.htaccess記述--------
order allow,deny
allow from all
deny from .t-com.ne.jp

-----------------------------
・ 各行、最終行は改行
・ FTPファイル転送後、ファイル名を「.htaccess」に、属性を「604」に変更

上記では、アクセスされてしまい、「.t-com.ne.jp」の「.(ドット)」を削除し、
 「t-com.ne.jp」に書き換え、前手順で設置をしましたが、.htaccessが
動作せず、依然として t-com.ne.jp からアクセスされています。

サイト全体のアクセス制限をしたいので、図の様にサイトトップページ、
および各ページフォルダと同じ場所に、.htaccessを設置しました。

.htaccessの記述方法、設置場所が間違っているのでしょうか?
どのようにすれば、アクセスを制限するようになるでしょうか?
ご存知の方いらっしゃいましたら宜しくお願いいたします!

.htaccessを設置しましたが、正常に動作しません。
ニフティ法人Webホスティングにて、独自ドメイン使用のホームページを開設
しています。(.htaccess利用可、ファイルのパーミッション(属性)を「604」に
するということをニフティに確認済み)

サイト全体に対して、123.net123456780.t-com.ne.jp からのアクセス制限をしたく、.
htaccessを設置しました。.t-com.ne.jp より前の部分、またIPアドレスも一定では
ない為、t-com.ne.jp 特定ホストからのアクセス制限をしました。

---------.htaccess記述-------...続きを読む

Aベストアンサー

ごめん。ドメイン全部なら

deny .t-com.ne.jp

でオッケーだったわ。

あと、考えられるのは「.htaccessをサーバーに転送する際に、バイナリモードで転送してる」だな。

一部のftpクライアントは、拡張子でテキスト転送かバイナリ転送を判断するから「.htaccess」は、転送モードを明示的に指定して、テキストモードで転送してやんないといけない。

さもないと、改行コードの違いで、全部の行がすべて無視されちゃう。

これ、.htpasswordとか、他のファイルでも起きるから注意。

Qクエリ実行結果0件の場合のフォーム展開中止とメッセージ表示

Access初心者です。
テーブルのデータをクエリで抽出し、フォームで表示しようと考えています。
たとえば、
「テーブル1」に、「ID」「氏名」「部署」「趣味」のフィールドが、
「結果表示フォーム」にも対応するレコードソースを持つボックスがあり、
「条件指定フォーム」に「部署」という名のボックスと、「マクロ1」を割り当てた「ボタン1」がある場合に、
「テーブル1」を基にした「クエリ1」で、「部署」の抽出条件に「[条件指定フォーム]![部署]」と設定し、
「マクロ1」では、「クエリ1」をフィルタにして、「フォームを開く」コマンドで「結果表示フォーム」を開きたいと考えています。
この場合、
「条件指定フォーム」の「部署」ボックスにたとえば「総務部」と入力して「ボタン1」をクリックすると、「テーブル1」中に総務部の社員がいれば「結果表示フォーム」は問題なく展開しますが、「総務部」の社員がデータ中にないときには、すべてのテキストボックスが空欄のまま「結果表示フォーム」が展開してしまいます。
そこで、
「クエリ1」実行の際、結果のレコード数が0件の場合には、「結果表示フォーム」の展開を中止してメッセージボックスを表示するような修正を「マクロ1」に追加したいと思います。
どのような条件付けをすればよいでしょうか。
どなたかよいアドバイスをお願いいたします。

Access初心者です。
テーブルのデータをクエリで抽出し、フォームで表示しようと考えています。
たとえば、
「テーブル1」に、「ID」「氏名」「部署」「趣味」のフィールドが、
「結果表示フォーム」にも対応するレコードソースを持つボックスがあり、
「条件指定フォーム」に「部署」という名のボックスと、「マクロ1」を割り当てた「ボタン1」がある場合に、
「テーブル1」を基にした「クエリ1」で、「部署」の抽出条件に「[条件指定フォーム]![部署]」と設定し、
「マクロ1」では、「クエリ1」をフィ...続きを読む

Aベストアンサー

マクロの条件で
Dcount("*","クエリ1")<>0 →フォームを開く
ではどうでしょう?

又は、
Dcount("*","クエリ1")=0 →メッセージボックス
...            →マクロの中止
             →フォームを開く

Q携帯サイトの.htaccessによるアクセス制限

携帯・PC両者で閲覧できるサイトを作っていて、.htaccessでアクセス制限(Basic認証) をかけています。
PCはもちろん、docomo,auでは正常に動作するのですが、vodafoneの一部の端末では、「このサイトはvodafone端末ではご利用になれません」と表示されて、閲覧することができません。
もとから、vodafone端末はhtaccessに対応していないのでしょうか?また、具体的に、全ての端末で閲覧することができる方法はないでしょうか?

セキュリティの面から、できれば.htaccessを利用したいのですが、無理なのであれば、その他のアクセス制限方法を教えてください。(条件を満たすもので)

また、htaccessが利用できない携帯電話端末名一覧が掲載されているHP等ご存知なら、ぜひ教えてください。

Aベストアンサー

> htaccessが利用できない携帯電話端末

.htaccessファイルはサーバー側のディレクトリを設定するもので、クライアントには全く関係ありません。
言い方を返れば、PCのブラウザも携帯のブラウザも.htaccessファイルには対応していません。

で、BASIC認証には、対応していないキャリアもあったはずです。
「キャリア basic認証」などで検索すると見つかると思いますが、とりあえず↓
http://www1.anx.co.jp/~kuwahara/cgi-bin/cgi/press110/6.shtml

もし対応しているはずのキャリアなら、
おそらく、何か別の理由、たとえば各端末ごとに表示できるページ(HTML)が決まっていたりサイズに制限がありますが、この点でvodafoneでは表示できないだけなのでは。
それを確かめるために、ためしに.htaccessファイルを削除してみて、vodafoneで表示できるか確認し、
表示できなければ、原因は.htaccessファイルではなくページそのものにあり、
表示できたら、原因はBASIC認証または他の記述、
と言うことになります。

> htaccessが利用できない携帯電話端末

.htaccessファイルはサーバー側のディレクトリを設定するもので、クライアントには全く関係ありません。
言い方を返れば、PCのブラウザも携帯のブラウザも.htaccessファイルには対応していません。

で、BASIC認証には、対応していないキャリアもあったはずです。
「キャリア basic認証」などで検索すると見つかると思いますが、とりあえず↓
http://www1.anx.co.jp/~kuwahara/cgi-bin/cgi/press110/6.shtml

もし対応しているはずのキャリアなら、
おそらく、...続きを読む

QDoCmd.RunSQL "DROP Query

アクセスVBAで
DoCmd.RunSQL "DROP Query クエリ1;"
はできないのですか?

DROP TABLE または DROP INDEX ステートメントの構文エラーです。
(エラー 3295)

となります。

テーブルを削除する場合は
DoCmd.RunSQL "DROP Table テーブル1;"
でエラーにならずにできました。

DROPはクエリに対しては使えないのか教えてください。

Aベストアンサー

追伸、
普段は、DoCmd.DeleteObject acQuery ,"クエリ名"
にしてます。

Qhtaccessでのアクセス拒否が効かない

あるホスト(xxxx.com)からホームページに
アクセスされないように、.htaccess で次のように設定いたしました。
(注:『xxxx.com』は、仮のアドレスで、実際はxxxxの部分は異なります)

order allow,deny
allow from all
deny from .xxxx.com

その.htaccessを設置した日から、
毎日閲覧されていたそのホスト(xxxx.com)からのアクセスがばったり、無くなりました。

しかし、約1ヶ月後、再びそのアドレス(xxxx.com)からの閲覧が始まりました。
.htaccessで拒否設定していても、アクセスできる抜け道があるのでしょうか?

よろしくお願いします。

Aベストアンサー

>アドレス(xxxx.com)からの閲覧が始まりました。
access.logを確認して上記の状態ですか?
access.logにログは残っているが、HTTPコード403を返しているならば
「閲覧」は出来ていませんよ

あと、apacheの設定ファイルの該当ディレクトリの上位ディレクトリ設定で、
AllowOverrideをNoneに変更したか
あるいは、Limitを外したりしませんでしたか?

Qフォームを表示してからメッセージボックスを表示する

メッセージボックスが表示される前に、フォームを表示させたいです。アクセスです。
ナビゲーションウインドウからフォームをダブルクリックしてフォームを開くのですが、
今のままだとメッセージボックスが表示されてからフォームが表示されてしまいます。

フォームを表示してからメッセージボックスを表示するにはどうすればいいでしょう?

Private Sub Form_Open(Cancel As Integer)
MsgBox "Form_Open"
End Sub

だと、先ほど述べたように、メッセージボックスが表示されてからフォームが表示されてしまいます。

フォームを開いたときのイベントは複数あるようで、
Private Sub Form_Activate()
MsgBox "Form_Activate"
Debug.Print "Form_Activate"
End Sub

Private Sub Form_Current()
MsgBox "Form_Current"
Debug.Print "Form_Current"
End Sub

Private Sub Form_GotFocus()
MsgBox "Form_GotFocus"
Debug.Print "Form_GotFocus"
End Sub

Private Sub Form_Open(Cancel As Integer)
MsgBox "Form_Open"
Debug.Print "Form_Open"
End Sub

Private Sub Form_Load()
MsgBox "Form_Load"
Debug.Print "Form_Load"
End Sub

をすると、
・Form_Load
・Form_Activate
・Form_GotFocus
・Form_Open
・Form_Current
の順に開きますが、やはりフォームが最後に表示されてしまいます。

どうにかして先にフォームを表示させる方法はないでしょうか?
ご回答よろしくお願いします。

メッセージボックスが表示される前に、フォームを表示させたいです。アクセスです。
ナビゲーションウインドウからフォームをダブルクリックしてフォームを開くのですが、
今のままだとメッセージボックスが表示されてからフォームが表示されてしまいます。

フォームを表示してからメッセージボックスを表示するにはどうすればいいでしょう?

Private Sub Form_Open(Cancel As Integer)
MsgBox "Form_Open"
End Sub

だと、先ほど述べたように、メッセージボックスが表示されてからフォームが表示されてしまいま...続きを読む

Aベストアンサー

>メッセージボックスが表示される前に、フォームを表示させたいです。
何故こんな事がしたいのか疑問ですが
これで近いことが出来るかも。

フォームの『タイマー間隔』欄に、5000
その上の『タイマー時』イベントの内容は
MsgBox "5秒経過"
Me.TimerInterval = 0


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング