Access VBA質問箱 IV

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

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


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

【7487】Re:クエリの重複情報をクエリに出力したい
質問  Hg-0310  - 06/3/11(土) 9:28 -

引用なし
パスワード
   ▼Gin_II さん:
>>画面上で重複の結果はでていません。
>
>クエリのデータシートビューを開きたいということでしょうか?
>それなら、クエリとして保存しておいて、
>
>DoCmd.OpenQuery "クエリ名"
>としてください。

DoCmd.OpenQuery "重複結果"
どこに入れるでしょうか?
・ツリー全体表示

【7486】Re:検索結果について
発言  まさ7251  - 06/3/10(金) 23:06 -

引用なし
パスワード
   結局は、私の質問への返答はないってことは、
私の発言は無視なのですかね。

> On Error GoTo LBL_ERROR

正常に動いてもいないのに、このようなエラー処理を入れていると、
原因を調べるのは非常に困難になりますよ。
えらーが発生しても、とりあえず何もメッセージも出ませんし。

一番怪しいのは、
Me.検索区分 の値がおかしいのではないかと思います。
それぞれのラジオボタンの値はどうなっているのでしょうか?

>これを3つの検索区分にして名前を変更するだけの作業で出来るかと
>思ったのですが、簡単ではなくトラブってました。

ご自分の使用しているコードを理解せずに使用していれば、
当然の結果かと思いますけど。
理解できていれば、十分”簡単”な内容ではないかと思います。
・ツリー全体表示

【7485】Re:コンボボックスの表示
お礼  青首  - 06/3/10(金) 20:11 -

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

こんばんわ。

フォームのプロパティ:レコードの移動時イベントで
Me.選択項目.Requery
を入れたら表示されました。

お騒がせしてすみませんでした。
・ツリー全体表示

【7484】Re:クエリの重複情報をクエリに出力したい
回答  Gin_II  - 06/3/10(金) 17:00 -

引用なし
パスワード
   >画面上で重複の結果はでていません。

クエリのデータシートビューを開きたいということでしょうか?
それなら、クエリとして保存しておいて、

DoCmd.OpenQuery "クエリ名"
としてください。
・ツリー全体表示

【7483】Re:クエリの重複情報をクエリに出力したい
質問  hg−0310  - 06/3/10(金) 16:28 -

引用なし
パスワード
   Gin_IIさん
 提示していただいたコードをまねして、マクロの「プロシージャの実行」を
使って、動かしてみました。要領が悪いだと思いますが、画面上で重複の結果は
でていません。
 問題はどこでしょうか?ご指導ください。
・ツリー全体表示

【7482】Re:クエリの重複情報をクエリに出力したい
回答  Gin_II  - 06/3/10(金) 15:40 -

引用なし
パスワード
   >もしこのコードをモジュールのVBコードに訳す場合は、どのようなコードに
>なるのでしょうか?

VBAで、どのように使うのでしょうか?
DAO の Recordset としたいのなら、

Dim strSql As String
Dim rst As DAO.Recordset

strSql = "SELECT Report.発注コード, Report.商品名, Report.管理, Report.単位, Report.合計 " _
    & "FROM Report " _
    & "WHERE (((Report.発注コード) " _
    & "In (SELECT [発注コード] FROM [Report] As Tmp GROUP BY [発注コード] HAVING Count(*)>1 ))) " _
    & "ORDER BY Report.発注コード;"

Set rst = Currentdb.OpenRecordset(strSql)

とか。
・ツリー全体表示

【7481】Re:クエリの重複情報をクエリに出力したい
質問  hg−0310  - 06/3/10(金) 14:37 -

引用なし
パスワード
   確かにこんなような構成だと、実現できません。すみませんでした。

一応Accessの重複ツールを使って、一つのクエリに対して、重複のレコードを
抽出することができました。
SQLコードは
SELECT Report.発注コード, Report.商品名, Report.管理, Report.単位, Report.合計
FROM Report
WHERE (((Report.発注コード) In (SELECT [発注コード] FROM [Report] As Tmp GROUP BY [発注コード] HAVING Count(*)>1 )))
ORDER BY Report.発注コード;

もしこのコードをモジュールのVBコードに訳す場合は、どのようなコードに
なるのでしょうか?
おしえていただけませんか?
・ツリー全体表示

【7480】Re:[編集\→[元に戻す(U)]〜が可能な時
お礼  ひろのしま  - 06/3/10(金) 14:20 -

引用なし
パスワード
   ▼hatena さん:
>▼ひろのしま さん:
>>If CurrentDb.Properties(????)=True Then
>> '[元に戻す]が可能な時にそれを行う。
>> Docmd.Runcommand accmdUndo
>>Else
>>  Exit sub
>>End If
>>
>>のような処理を行いたいのですが、??の部分が分かりません。
>>あるいは、他の方法がもしかしたらあるのかもしれません。
>
>Me.Undo なら、Me.Dirty で判断できますが、accmdUndo の
>はちょっと動作が異なりますので、プロパティでは無理ぽっい
>気がします。エラートラップをしてはダメですか。
>いろいろな書き方がありますが、例えば、
>
>On Error Resume Next
>
>  DoCmd.RunCommand acCmdUndo
>  If Err = 2046 Then
>    MsgBox "元に戻せません!"
>  End If

hatena さん、ご返信ありがとうございます。
すみません。小僧さんの方法を取らせていただきました。
2046は[元に戻す&(U)]のみならず、他の実行時エラーでも表示されます。
・ツリー全体表示

【7479】Re:[編集\→[元に戻す(U)]〜が可能な時
お礼  ひろのしま  - 06/3/10(金) 13:42 -

引用なし
パスワード
   ▼小僧 さん:
>▼ひろのしま さん、hatena さん:
>こんにちは。
>
>余り行わない事ですので検証不足かもしれませんが、
>
>Sub 元に戻す()
>  Debug.Print Application.CommandBars("Menu Bar") _
>        .Controls(2).Controls(1).Caption
>End Sub
>
>こちらで判断できませんでしょうか。

ありがとうございます。小僧さん。
上記プロシージャを使用したら、元に戻す(&U)と記入されました。
で、実際に悩んでいた箇所も解決いたしました。
ありがとうございました。
・ツリー全体表示

【7478】Re:クエリの重複情報をクエリに出力したい
回答  Gin_II  - 06/3/10(金) 12:31 -

引用なし
パスワード
   > 発注クエリ
> 発注コード  発注元
> A1      あ
> A2      い
> A1      う
>
> 納品クエリ
> 製品コード  製品名
> B1      アア
> B3      イイ
> B1      エエ

この情報では、重複なんて判断はできませんよね?
発注クエリに、製品コードフィールドがあるんでしょうか?
・ツリー全体表示

【7477】Re:検索結果について
質問  TB1  - 06/3/10(金) 11:49 -

引用なし
パスワード
   大元は下記のようなものなんです。
フォームの検索区分には会員番号、会員名、郵便番号、住所、売上商品名の5つのラジオボタンがあって、ひとつえらんで検索ワードを入れる(例えば住所を選んで新宿)とやると、その下に該当するデータが出てきます。テーブルにはもうひとつ、環境設定というものがあって、それぞれの項目に0から3の番号を割り振り完全検索、前方検索、後方検索、ランダム検索、を指定します。
これを3つの検索区分にして名前を変更するだけの作業で出来るかと思ったのですが、簡単ではなくトラブってました。現在、なんとか検索できるようになったのですが、環境設定を、元々の5つの列から3つタイトルを変えて、残りの2列はいらないので削除したところ、フォームで検索しても結果が返ってこなくなったのです。ですから、いまは環境テーブル上で名前を変更した3つの項目と必要ない郵便番号、住所を残したままの状況です。質問は、下記のコードでMe.部分を3つにしているのに、環境設定のテーブル項目を1つでも削ると検索できなくなるのはなぜか、という点です。宜しくお願いします。


Option Compare Database
Option Explicit
Private Sub Form_Load()
 Set Me.Recordset = Nothing
 
 Me.会員番号.ControlSource = ""
 Me.会員名.ControlSource = ""
 Me.郵便番号.ControlSource = ""
 Me.住所.ControlSource = ""
 Me.売上商品名.ControlSource = ""
End Sub

Private Sub 検索_Click()
 Dim cnn As ADODB.Connection
 Dim recN As ADODB.Recordset
 Dim recM As ADODB.Recordset
 Dim strSQL As String
 Dim strSearch As String
 
 Set Me.Recordset = Nothing
 Me.会員番号.ControlSource = ""
 Me.会員名.ControlSource = ""
 Me.郵便番号.ControlSource = ""
 Me.住所.ControlSource = ""
 Me.売上商品名.ControlSource = ""
 
On Error GoTo LBL_ERROR
 Set cnn = New ADODB.Connection
 Set recN = New ADODB.Recordset
 Set recM = New ADODB.Recordset
 
 Set cnn = Application.CurrentProject.Connection
 
 strSQL = "SELECT * FROM 会員マスタ "
 If IsNull(Me.検索ワード) = False And Len(Me.検索ワード) <> 0 Then
  strSearch = "SELECT * FROM 環境設定 WHERE 選択フラグ=1;"
  recN.Open strSearch, cnn, adOpenDynamic, adLockReadOnly
  If recN.EOF = False And recN.BOF = False Then
   strSQL = strSQL & "WHERE " & recN(CInt(Me.検索区分)).Name & " "
   Select Case recN(CInt(Me.検索区分))
    Case 0
     strSQL = strSQL & "='" & Me.検索ワード & "' "
    Case 1
     strSQL = strSQL & "LIKE '" & Me.検索ワード & "%' "
    Case 2
     strSQL = strSQL & "LIKE '%" & Me.検索ワード & "' "
    Case 3
     strSQL = strSQL & "LIKE '%" & Me.検索ワード & "%' "
   End Select
  End If
  recN.Close
 End If
 strSQL = strSQL & "ORDER BY 会員番号;"
 
 recM.Open strSQL, cnn, adOpenKeyset, adLockReadOnly
 If recM.EOF = False And recM.BOF = False Then
  Set Me.Recordset = recM
  Me.会員番号.ControlSource = recM("会員番号").Name
  Me.会員名.ControlSource = recM("会員名").Name
  Me.郵便番号.ControlSource = recM("郵便番号").Name
  Me.住所.ControlSource = recM("住所").Name
  Me.売上商品名.ControlSource = recM("売上商品名").Name
 End If
 recM.Close

 Me.Requery
 
LBL_EXIT:
 Set cnn = Nothing
 Set recN = Nothing
 Set recM = Nothing
 Exit Sub
 
LBL_ERROR:
 Resume LBL_EXIT
End Sub
・ツリー全体表示

【7476】クエリの重複情報をクエリに出力したい
質問  Hg-0310 E-MAIL  - 06/3/10(金) 11:47 -

引用なし
パスワード
   二つのクエリがあります、ここでそれぞれのクエリの発注コード、
製品コードの重複をチェックし、重複があるものをチェッククエリに
出力したいと思います。試行錯誤でやってみましたが、詰まっています。
ご指導ください。
よろしくお願いします。

発注クエリ
発注コード  発注元
A1      あ
A2      い
A1      う

納品クエリ
製品コード  製品名
B1      アア
B3      イイ
B1      エエ

チェッククエリ
発注コード  発注元   製品コード   製品名
A1      あ     B1       アア      
A1      う     B1       エエ
・ツリー全体表示

【7475】Re:コンボボックスの表示
発言  小僧  - 06/3/10(金) 10:32 -

引用なし
パスワード
   ▼青首 さん:
こんにちは。

テーブル構成を拝見させて頂きましたが、フィールド数が増えていますよね。
そちらに応じて SQL文の変更をなされてますでしょうか。

Load時)
  strSQL = "UPDATE T_Work " _
      & "INNER JOIN T_日報情報 " _
      & "ON T_Work.社員ID = T_日報情報.社員ID " _
      & "SET T_Work.業務内容 = T_日報情報!業務内容, " _
      & "T_Work.残業時間 = T_日報情報!残業時間, " _
      & "T_Work.残業区分ID = T_日報情報!残業区分ID, " _
      & "T_Work.選択項目ID = T_日報情報!選択項目ID " _
      & "WHERE T_日報情報.日付=Date();"

UnLoad時)
  strSQL = "UPDATE T_日報情報 INNER JOIN T_Work " _
      & "ON (T_日報情報.社員ID = T_Work.社員ID) AND " _
      & "(T_日報情報.日付 = T_Work.日付) " _
      & "SET T_日報情報.業務内容 = T_Work.業務内容, " _
      & "T_日報情報.残業時間 = T_Work.残業時間, " _
      & "T_日報情報.残業区分ID = T_Work.残業区分ID, " _
      & "T_日報情報.選択項目ID = T_Work.選択項目ID"


まずはこちらからチェックしてみて下さい。
・ツリー全体表示

【7474】Re:[編集\→[元に戻す(U)]〜が可能な時
発言  小僧  - 06/3/10(金) 9:54 -

引用なし
パスワード
   ▼ひろのしま さん、hatena さん:
こんにちは。

余り行わない事ですので検証不足かもしれませんが、

Sub 元に戻す()
  Debug.Print Application.CommandBars("Menu Bar") _
        .Controls(2).Controls(1).Caption
End Sub

こちらで判断できませんでしょうか。
・ツリー全体表示

【7473】Re:[編集\→[元に戻す(U)]〜が可能な時
回答  hatena  - 06/3/10(金) 9:09 -

引用なし
パスワード
   ▼ひろのしま さん:
>If CurrentDb.Properties(????)=True Then
> '[元に戻す]が可能な時にそれを行う。
> Docmd.Runcommand accmdUndo
>Else
>  Exit sub
>End If
>
>のような処理を行いたいのですが、??の部分が分かりません。
>あるいは、他の方法がもしかしたらあるのかもしれません。

Me.Undo なら、Me.Dirty で判断できますが、accmdUndo の
はちょっと動作が異なりますので、プロパティでは無理ぽっい
気がします。エラートラップをしてはダメですか。
いろいろな書き方がありますが、例えば、

On Error Resume Next

  DoCmd.RunCommand acCmdUndo
  If Err = 2046 Then
    MsgBox "元に戻せません!"
  End If
・ツリー全体表示

【7472】[編集]→[元に戻す(U)]〜が可能な時
質問  ひろのしま  - 06/3/9(木) 23:36 -

引用なし
パスワード
   If CurrentDb.Properties(????)=True Then
 '[元に戻す]が可能な時にそれを行う。
 Docmd.Runcommand accmdUndo
Else
  Exit sub
End If

のような処理を行いたいのですが、??の部分が分かりません。
あるいは、他の方法がもしかしたらあるのかもしれません。
分かる人がおりましたらよろしくお願いします。
・ツリー全体表示

【7471】[編集\→[元に戻す(U)]〜が可能な時
質問  ひろのしま  - 06/3/9(木) 23:35 -

引用なし
パスワード
   If CurrentDb.Properties(????)=True Then
 '[元に戻す]が可能な時にそれを行う。
 Docmd.Runcommand accmdUndo
Else
  Exit sub
End If

のような処理を行いたいのですが、??の部分が分かりません。
あるいは、他の方法がもしかしたらあるのかもしれません。
分かる人がおりましたらよろしくお願いします。
・ツリー全体表示

【7470】Re:コンボボックスの表示
発言  青首  - 06/3/9(木) 22:57 -

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


>あまり関係ないかもしれないのですが、
>なぜか残業区分で[修理]を選択していた場合のみコンボボックス:選択項目は
>レコード移動時にも表示されます。

やっぱり[修理]の時でも消えてしまうようです。
・ツリー全体表示

【7469】Re:コンボボックスの表示
発言  青首  - 06/3/9(木) 21:30 -

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

すみません。
現状の説明で抜けている点があったため、追記させていただきます。

テーブル:T_社員
  
  フィールド名 データ型
   社員ID   オートナンバー型
   社員名   テキスト型

テーブル:T_残業区分
 フィールド  データ型
 残業区分ID  オートナンバー型
 残業区分   テキスト型


テーブル:選択項目
   フィールド名 データ型
    選択項目ID  オートナンバー型
    選択項目   テキスト型
    残業区分ID  数値型


テーブル:T_日報情報

  フィールド名 データ型
  日報ID    オートナンバー型
  社員ID    数値型
  日付     日付/時刻型
  業務内容   テキスト型
  残業時間   数値型
  残業区分ID  数値型   
  選択項目ID  数値型

テーブル:T_Work(ワークテーブル)

  フィールド名 データ型
  社員ID    数値型   (主キー)
  日付     日付/時刻型
  業務内容   テキスト型
  残業時間   数値型
  残業区分ID  数値型  
  選択項目ID  数値型

F_日報情報
  レコードソース:T_Work

  オプショングループ:残業区分

    残業区分は ・改善
          ・修理
  
  コンボボックス:選択項目

 残業区分のどちらかにチェックを入れるとコンボボックスが
絞り込まれるような形になっております。


>コンボボックスのコントロールソースが指定されているという事ですので、
>次のレコードに移った際に値は保存されているはずですね。

はい。T_日報情報をみるとちゃんと値は保存されています。

>当方が気になった事として、
>
>・コンボボックスのコントロールソースが T_Work の 選択項目ID

F_日報情報のレコードソースはT_Workでフィールドリストから
選択項目IDを選択しました。
コンボボックスのコントロールソースは選択項目IDです。


>・T_Work の 選択項目ID は数値型

はい。数値型になっています。

>コンボボックスの値集合ソースはどのようになっていますか?
>(数値を返すようになっていますか)


値集合ソースは絞込みができるように
クエリビルダで
T_選択項目を表示させ、

フィールド  選択項目ID   選択項目     残業区分ID  
テーブル   T_選択項目   T_選択項目     T_選択項目
抽出条件                 [Forms]![F_日報情報]![残業区分]


のような形になっております。

あまり関係ないかもしれないのですが、
なぜか残業区分で[修理]を選択していた場合のみコンボボックス:選択項目は
レコード移動時にも表示されます。

[改善]を選んでた場合にも選択項目が表示されればいいのですが・・・。
・ツリー全体表示

【7468】Re:新規と追加フォームで重なるデータの表...
発言  小僧  - 06/3/9(木) 13:10 -

引用なし
パスワード
   ▼歩き始めのaccess信者 さん:
こんにちは。

>新規登録で入力した氏名、ID等はそのまま表示され、
>入力番号だけが、新規になり、テーブル上に新たなレコードとして認識させたい

フォームが連結フォームであるのでしたら、

Private Sub 新規ボタン_Click()
Dim strValue(1 To 2) As String

  strValue(1) = Me.氏名.Value
  strValue(2) = Me.ID.Value

  DoCmd.GoToRecord acDataForm, Me.Name, acNewRec
  
  Me.氏名.Value = strValue(1)
  Me.ID.Value = strValue(2)
  
End Sub

のようなコードでいかがでしょうか。
(やりたい事が良く解りませんので、外していたら申し訳ないです。)
・ツリー全体表示

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