Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7全般 : Access 2013)
#Deleteを表示させたくない
投稿日時: 17/12/29 06:02:49
投稿者: yamasho

お世話になります。
 
バックエンド、フロントエンドともにmdbです。
クライアント側のフロントエンドmdbには
作業テーブルがあり、
必要な情報をファイルサーバーより
取り込んでいます。
 
作業テーブルを元に表形式のフォームを表示させています。
行が社員名、列が1週間の日付の予定表になっています。
 
フォームには「先週」「翌週」のボタンがあり、
ボタンを押すと先週や翌週の予定表が出るようになっています。
 
ファイルサーバーからの取り込みは1週間単位でやっていて、
「翌週」などのボタンを押したら、
いったん作業テーブルを削除して該当データーを
取り込んでいます。
 
ファイルサーバーには過去10年以上のデーターが保存してあり、
いっぺんに取り込むのは時間がかかる為、
1週間単位で取り込んでいます。
 
作業テーブルを削除後、フォームには一瞬ですが、
「#Delete」と表示されてしまいます。
 
一瞬なのですが、この「#Delete」を表示させないように
することは可能でしょうか?
 
 

回答
投稿日時: 17/12/29 10:23:04
投稿者: hatena
投稿者のウェブサイトに移動

フォームのソースの作業テーブルの削除を、削除クエリなど別の場所てやっているので#Deleteと表示されます。フォーム側で削除すれば表示されません。
  
Docmd.RunCommand acCmdSelectAllRecords
Docmd.RunCommand acCmdDeleteRecord

回答
投稿日時: 18/01/04 11:52:55
投稿者: Suzu

こんにちは。
 
連結フォームの連結を一度切ってしまう方法もあります。
 
>---------------------------------------------------------------
Dim ctr As Control
 
'画面更新停止
Application.Echo False
 
'フォーム上のテキストボックスのコントロールソースを
'そのコントロールのTagプロパティーに書き込み
'コントロールソースに空白を渡し 非連結コントロール化
For Each ctr In Me.Controls
  If ctr.ControlType = acTextBox Then
    ctr.Tag = ctr.ControlSource
    ctr.ControlSource = ""
  End If
Next ctr
 
'フォームのレコードソースに空白を渡し 非連結フォーム化
Me.RecordSource = ""
 
 
'削除クエリ発行 命令
'追加クエリ発行 命令
 
 
'フォームのレコードソースにクエリ/テーブル名を渡し 連結フォーム化
Me.RecordSource = "レコードソース名"
 
'フォーム上のテキストボックスのTagプロパティーの値を
'そのコントロールのコントロールソースに書き込み
'連結コントロール化
 
For Each ctr In Me.Controls
  If ctr.ControlType = acTextBox Then
    ctr.ControlSource = ctl.Tag
    ctr.Tag = ""
  End If
Next ctr
 
'画面更新再開
Application.Echo True
>---------------------------------------------------------------

回答
投稿日時: 18/01/04 15:50:54
投稿者: Suzu

隠してしまえば良い と言う発想で・・
 
ラベルを #Delete 表示されるコントロール 全てを隠す大きさで 最前面に配置
そのラベル中央に「---処理中---」の様に一瞬表示させたい文字を入力
そのラベルを非表示に
 
あとは VBA にて Visible プロパティー を制御すれば良いでしょう。

回答
投稿日時: 18/01/04 22:51:29
投稿者: hatena
投稿者のウェブサイトに移動

連結フォームにてすでにレコードセットを開いているのに、
別にまたレコードセットを開いてそこでデータ操作(削除)をするというのは、
自分としては不自然な気がします。
 
前回の回答のコードだと、
削除しても良いか確認のメッセージがでます、
また、一瞬、全レコードが選択されるのが見えます。
それが気になるなら、下記のコードで。
 

Private Sub コマンド1_Click()
    With DoCmd
        .Echo False
        .SetWarnings False
        .RunCommand acCmdSelectAllRecords
        .RunCommand acCmdDeleteRecord
        .SetWarnings True
        .Echo True
    End With
End Sub

回答
投稿日時: 18/01/04 23:08:18
投稿者: hatena
投稿者のウェブサイトに移動

DoCmd.Echo で画面更新を抑制すれば、
#Deleteを見せないようにはできますが。
 

    DoCmd.Echo False
    CurrentDb.Execute "DELETE * FROM 作業テーブル;"
    Me.Requery
    DoCmd.Echo True

投稿日時: 18/01/06 09:01:48
投稿者: yamasho

皆様、お世話になります。
 
実はhatenaさんの1回目の投稿で解決したのですが、
年末年始と何故かログインできずにお礼が遅くなってしまいました。
 
Suzuさんの方法もなるほど、と目から鱗でした。
いろんな方法があるのですね。
 
勉強になりました。
hatenaさん、Suzuさん、ありがとうございました。