Access VBA質問箱 IV

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

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


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

【12481】Re:Indexが外れてしまうケースについて
回答  かるびの  - 14/2/6(木) 2:33 -

引用なし
パスワード
    あるフィールドについてインデックスありだったのが、
いつの間にかインデックスなしに変わってしまったということですか。
 私の知る限りではあり得ないことだと思います。

 ユーザーの誰かがデザインモードでテーブルを開けて、
インデックスのプロパティを手動で変えてしまった
というのが最もありそうなことだと思います。
 あるいは、AccDBファイルないしMDBファイルが壊れかけているとか。
・ツリー全体表示

【12480】Re:レコードセットの値取得について
回答  かるびの  - 14/2/6(木) 2:27 -

引用なし
パスワード
   >SELECTテーブル1.* FROM テーブル1 WHERE ((テーブル1.ID)=1);
>のようにフィールド名ではなく実際の値が書かれたレコードセットを取得することはできるのでしょうか?

 取得できます。

 DAOのOpenRecordsetメソッドの第1引数にSQL文を指定する場合、むしろ、
   SELECT テーブル1.*
   FROM テーブル1
   WHERE ((テーブル1.ID)=[フォーム1].[テキスト0]);
というSQL文の方がエラーになりそうな気がします。
 つまり、SQL文にはフォーム名やコントロール名を書けないので、
「フォーム1」というテーブルが見つからないとか、
「テキスト0」というフィールドが見つからない
ということでエラーになりそうです。

 クエリでは、コントロール名を認識してくれますが、
純粋なSQL文では、
コントロール名を認識してくれないのではないかとと思います。
・ツリー全体表示

【12479】レコードセットの値取得について
質問  たく  - 14/2/5(水) 12:00 -

引用なし
パスワード
   レコードセットにSELECTテーブル1.* FROM テーブル1 WHERE ((テーブル1.ID)=[フォーム1].[テキスト0]);
がセットしてあり、
テキスト0に1を入力後リクエリーした場合
SELECTテーブル1.* FROM テーブル1 WHERE ((テーブル1.ID)=1);
のようにフィールド名ではなく実際の値が書かれたレコードセットを取得することはできるのでしょうか?
よろしくお願いします。
・ツリー全体表示

【12478】Indexが外れてしまうケースについて
質問  さち  - 14/2/4(火) 10:14 -

引用なし
パスワード
   初めまして、さちと申します。

Accessで開発したシステムの保守を担当しています。
担当しているお客様から「検索などのパフォーマンスが著しく
悪くなった」という問い合わせがあり調査したところ
テーブルのインデックスが外れていることが判明しました。

インデックスを付与しなおしたことで元に戻ったのですが、
インデックスが外れてしまう原因が解明できないでいます。

原因が解明できないまでも、お客様にインデックスが外れる
事象の説明がしたいと思い投稿させて頂きました。

環境は以下となります。
・Windows2000でAccess2007を使用
・Indexを変更するようなロジックは無い。
・対象テーブルは外部リンク。

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

【12477】Re:access2003下記の計算方法を教えて下...
回答  かるびの  - 14/2/3(月) 4:09 -

引用なし
パスワード
    どこがどうわからないのか、全く伝わりません。


>B: 2x + 3x -1x
 数学で言えば、
   2x + 3x -1x = (2 + 3 - 1)x
         = 4x
となりますが、こういうことなのでしょうか。
 そうではなく、2xと3xが変数であるというならば、
VBAにおける変数の名前付け規則(数字始まりの変数名はダメ)に従って、
x2とかx3とかとした方がわかりやすいです。


>※3 A < C = 0 A > C = A
 これはどういう意味でしょうか。
 A < C = 0 は代入式ではないですから、条件式のはずですね。
 とすると、条件式 A < C が返す値が、0すなわちFalseであるという条件式なのでしょうか。
 そうだとすると、この条件式の結果をどう使おうというのでしょうか。


>※4 A と B は A - B --- マイナスの場合は、必ず一端0にする
 何を0にするんでしょうか。


 それからA、B、Cの値もよくわかりませんね。つまり、1グループ目の
>A: 10z + 1x + iif(6x-5x <= 0 , 0 , 6x-5x)
のAの値と、2グループ目の
>A: 9z + 10x + iif(5x - 4x <= 0 , 0 , 5x - 4x)
のAの値は、同じであるということなのでしょうか。


>※ 最終が 1x 〜10x の答えです。
 1x 〜 10x の値を求めたいというなら、連立方程式を解けばいいだけのような気もします。
 また、コンピュータなのですから、
つまり、大量の計算を短時間で行えるのですから、
欲しい計算結果となるまで、
ループを使って、愚直に 1x 〜 10x に値を代入していく
なんて方法も考えられます。
・ツリー全体表示

【12476】Re:Access2010で抽出プログラムの構築
お礼  rinrin  - 14/2/1(土) 21:24 -

引用なし
パスワード
   hatenaさん
ホントにありがとうございました。。。。。。。

▼hatena さん:
>前回の回答のコードですべて完結しています。
>
>現状のフォームのコードは
>先頭の
>Option Compare Database
>Option Explicit
>を残してすべて削除して、
>
>12468 のコードをそのあとに貼り付けてください。
>
>その上で、
>メインフォームのデザインビューでコンボボックスを全て選択した状態で、
>「更新後処理」プロパティ欄に
>
>=SetFilter()
>
>と設定します。
>
>以上で動作するはずです。
・ツリー全体表示

【12475】access2003下記の計算方法を教えて下さい
質問  みちひ E-MAIL  - 14/2/1(土) 18:16 -

引用なし
パスワード
   access2003 でプログラムを作成している者で御座います。 見よう見まねで覚えてきた者で基本がマスターしておらず、下記計算方法で悩んでおります。
どう考えても判らず、SOS状態になりました。
どなたか 宜しくお願い致します。

1z 〜10z の元数に対して 1x 〜10x の 答えを求めるのが目的です
※1 1z 〜10z はエンドレス状態になっています 1〜10→1〜10→1〜10→1〜10
※2 iif は引き算を行った場合でマイナスの場合は、必ず一端0にする
※3 A < C = 0 A > C = A
※4 A と B は A - B --- マイナスの場合は、必ず一端0にする
※5 ※4のA残 < C = 0 ※4のA残 > C = ※4のA残のまま

※ 1 〜10 の z を x にどの様な方法で変換して計算していくか
※ 最終が 1x 〜10x の答えです。

A: 10z + 1x + iif(6x-5x <= 0 , 0 , 6x-5x)
B: 2x + 3x -1x
C: 7x +8x - 6x

A: 9z + 10x + iif(5x - 4x <= 0 , 0 , 5x - 4x)
B: 1x + 2x - 10x
C: 6x + 7x - 5x

A: 8z + 9x + iif(4x - 3x <= 0 , 0 , 4x - 3x)
B: 10x + 1x - 9x
C: 5x +6x - 4x

A: 7z + 8x + iif(3x - 2x <= 0 , 0 , 3x - 2x)
B: 9x + 10x - 8x
C: 2x + 3x - 1x

A: 6z + 7x + iif(2x - 1x <= 0 , 0 , 2x - 1x)
B: 8x + 9x - 7x
C: 3x + 4x - 2x

A: 5z + 6x + iif(1x - 10x <= 0 , 0 , 1x - 10x)
B: 7x + 8x - 6x
C: 2x + 3x - 1x

A: 4z + 5x + (10x - 9x <= 0 , 0 , 10x - 9x)
B: 6x + 7x - 5x
C: 1x + 2x - 10x

A: 3z + 4x + iif(9x - 8x <= 0 , 0 , 9x - 8x)
B: 5x + 6x - 4x
C: 10x + 1x - 9x

A: 2z + 3x + iif(8x - 7x <= 0 , 0 , 8x - 7x)
B: 4x + 5x - 3x
C: 9x + 10x - 8x

A: 1z + 2x + iif(7x - 6x <= 0 , 0 , 7x - 6x)
B: 3x + 4x - 2x
C: 8x + 9x - 7x

以上 宜しくお願い致します。
・ツリー全体表示

【12474】Re:サブルーチンの検索方法
お礼  PPP  - 14/1/29(水) 16:02 -

引用なし
パスワード
   ありがとうございます。
初心者かつ急ぎの質問に答えていただいて、感謝です。

なお、これで終了します。

▼hatena さん:
>>他のプログラミング言語はいじったことはありますが、
>>VBAは書いたことがありません。
>>
>>簡単に書くと、以下のように記述されています。
>>
>>Sub main_module()
>>    Call SR1
>>    Call SR2
>>    Call SR3
>>    Call SR4
>>End Sub
>>
>>質問: SR1-4を検索する方法を教えてください。
>>
>>状況としては、標準モジュールの下に、以下のようなモジュールがぶら下がっていますが、どのモジューにSR1-4が含まれるのかわかりません。
>
>そのコード上で右クリックして[定義] をクリックすると、そのプロシージャに移動します。
>移動先で右クリックして[元の位置に移動]をクリックすれば元の位置に戻ります。
・ツリー全体表示

【12473】Re:サブルーチンの検索方法
回答  hatena  - 14/1/29(水) 15:47 -

引用なし
パスワード
   >他のプログラミング言語はいじったことはありますが、
>VBAは書いたことがありません。
>
>簡単に書くと、以下のように記述されています。
>
>Sub main_module()
>    Call SR1
>    Call SR2
>    Call SR3
>    Call SR4
>End Sub
>
>質問: SR1-4を検索する方法を教えてください。
>
>状況としては、標準モジュールの下に、以下のようなモジュールがぶら下がっていますが、どのモジューにSR1-4が含まれるのかわかりません。

そのコード上で右クリックして[定義] をクリックすると、そのプロシージャに移動します。
移動先で右クリックして[元の位置に移動]をクリックすれば元の位置に戻ります。
・ツリー全体表示

【12472】サブルーチンの検索方法
質問  PPP  - 14/1/29(水) 14:57 -

引用なし
パスワード
   他人のコードを検証する仕事をしています。

他のプログラミング言語はいじったことはありますが、
VBAは書いたことがありません。

簡単に書くと、以下のように記述されています。

Sub main_module()
    Call SR1
    Call SR2
    Call SR3
    Call SR4
End Sub

質問: SR1-4を検索する方法を教えてください。

状況としては、標準モジュールの下に、以下のようなモジュールがぶら下がっていますが、どのモジューにSR1-4が含まれるのかわかりません。
main
MJ1
MJ2
MJ3...

必要最小限の労力で終了したいので、よろしくお願いします。
・ツリー全体表示

【12471】Re:Access2010で抽出プログラムの構築
回答  hatena  - 14/1/20(月) 21:17 -

引用なし
パスワード
   前回の回答のコードですべて完結しています。

現状のフォームのコードは
先頭の
Option Compare Database
Option Explicit
を残してすべて削除して、

12468 のコードをそのあとに貼り付けてください。

その上で、
メインフォームのデザインビューでコンボボックスを全て選択した状態で、
「更新後処理」プロパティ欄に

=SetFilter()

と設定します。

以上で動作するはずです。
・ツリー全体表示

【12470】Re:Access2010で抽出プログラムの構築
発言  rinrin  - 14/1/20(月) 18:39 -

引用なし
パスワード
   hatenaさん

お忙しい中いろいろ教えてくれてありがとうございます。。。。。。^^
あたしなりに必死に何とかして。。。ってがんばってはいるんですけど。。。。。。。;;

求める状態には至りません。。。。。。;;

サブフォームで抽出ができないんです。。。。。。;;

まだまだあきらめません。。。。。^^
経過報告させていただきます。。。。^^

今日までにあがいたソースコードです。。。。。^^


  Dim stCri As String
  Dim MyPublic As String
  Dim MyPublic2 As String


Private Sub 購買依頼番号_AfterUpdate()
  MyPublic2 = Me.購買依頼番号.Value
  Call Call呼出
End Sub

Public Sub Call呼出()
  On Error Resume Next
  Dim Ctl As Variant
  Dim stCri As String
  
'パブリック変数に選択したコンボBOXの名前を取得
  MyPublic = Me.ActiveControl.Name
  
'このフォーム内のすべてのコントロールを検索
  For Each Ctl In Me.Controls
  With Ctl
    If .ControlType = acComboBox And Ctl.Name <> MyPublic Then
'コントロールの種類がテキストボックスなら値をNULL(空)に設定
    .Value = Null
    End If
  End With
  Next Ctl
  
  stCri = "" & "='" & MyPublic2 & "'"
  Mypublic3 = " WHERE " & "='" & MyPublic2 & "'"
  
  Me.購買実績一覧.Form.Filter = stCri
  Me.購買実績一覧.Form.FilterOn = True
End Sub

  
Private Sub CmdCancel_Click()
  Me.購買依頼番号.Value = ""
  Me.購買発注番号.Value = ""
  Me.受入番号.Value = ""
  Me.整理番号.Value = ""
  Me.見積番号.Value = ""
  Me.原価センタ.Value = ""
  Me.会社名.Value = ""
  Me.担当者名.Value = ""
  Me.年度 = ""
  
  ComboBoxInit
  Forms![Main購買実績]![購買実績一覧].SetFocus
  Me.[購買実績一覧].Form.Filter = ""
  Me.[購買実績一覧].Form.FilterOn = False
End Sub


Private Sub ComboBoxInit()
'コンボボックスの初期化
  Dim Ctl As Control
  
  For Each Ctl In Me.Controls
  With Ctl
    If .ControlType = acComboBox And _
      .Name <> Me.ActiveControl.Name Then
'コンボボックスをNULL(空)に設定(アクティブコントロール以外)
      .Value = Null
    End If
  End With
  Next Ctl
End Sub

Public Function SetFilter()
'メインフォームのデザインビューでコンボボックスをすべて選択した状態で、「更新後処理」プロパティ欄に=SetFilterと設定
  Dim stCri As String
  
  ComboBoxInit
  
  With Me.ActiveControl
    stCri = .Name & .Value & "'"
  End With
  
  Me.購買実績一覧.Form.Filter = stCri
  Me.購買実績一覧.Form.FilterOn = True
End Function


▼hatena さん:
>コード中のコンボボックス名とフィールド名が一致しないものがあるし、
>実際のクエリでどうなっているのか不明ですが、
>とりあえず抽出対象のフィールドのデータ型はすべてテキスト型のようなので、
>そうだとして回答します。
>
>メインフォームのモジュールは下記のようになります。
>
>Private Sub ComboBoxInit()
>'コンボボックスの初期化
>  Dim Ctl As Controlt
>
>  For Each Ctl In Me.Controls
>  With Ctl
>    If .ControlType = acComboBox And _
>      .Name <> Me.ActiveControl.Name Then
>'コンボボックスをNULL(空)に設定(アクティブコントロール以外)
>    .Value = Null
>    End If
>  End With
>  Next Ctl
>
>End Sub
>
>Private Sub CmdCancel_Click()
>  ComboBoxInit
>  Me.[購買実績一覧].SetFocus
>  Me.[購買実績一覧].Form.Filter = ""
>  Me.[購買実績一覧].Form.FilterOn = False
>End Sub
>
>Public Finction SetFilter()
>  Dim stCri As String
>
>  ComboBoxInit
>
>  With Me.AciveControl
>    stCri = .Name & "='" & .Value & "'"
>  End With
>  
>  Me.購買実績一覧.Form.Filter = stCri
>  Me.購買実績一覧.Form.FilterOn = True
>End Finction
>
>
>メインフォームのデザインビューでコンボボックスを全て選択した状態で、
>「更新後処理」プロパティ欄に
>
>=SetFilter()
>
>と設定します。
>
>以上でどうでしょうか。
・ツリー全体表示

【12469】Windows8(64bit)上でACCESS2007作成のツ...
質問  GOODAY E-MAIL  - 14/1/20(月) 14:44 -

引用なし
パスワード
   初めまして。ご助力いただければと思います。
はじめに環境として
【環境】
機種名:Lenovo H520S
OS:Windows8 (64bit)
CPU:Intel Core i3-3240CPU 3.40GHz
メモリ:4GB
HDD:IDE 1TB

ACCESSなし、ランタイムをインストール

ACCESS2007で作成したSQLのアクセスツールを使用しているのですが、WindowsXP、Windows7で動作していましたが、Windows8 64bit版で動かしたところ、ツールがログインの際、前歴のIDからログイン者名が呼び出された時、またIDを打ち込んで、ログイン者名が呼び出された時、下記のエラーが発生しツールが停止、動作しません。
対処として
・ACCESS2007〜2013 Runtimeのインストール
・ACCESS2010 Runtime 64bit対応のインストール
・.NetFramework3.5、4.5のインストールと有効化
・これらの対処実行後、VBによるデバッグ(正常終了せず。下記に警告メッセージ)
 ビルドを実行。

以上を行いましたが改善できませんでした。
お知恵をお貸し頂きたく書き込ませていただきました。
よろしくお願いします。

-------------------------エラー内容------------------------------
Microsoft .Net Framework
【メッセージ】アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。[続行]をクリックすると、アプリケーションはこのエラーを無視し、続行しようとします。[終了]をクリックすると、アプリケーションは直ちに終了します。

DLL 'kernel32.dll'の'InterlokedIncrement'というエントリポイントが見つかりません。
【詳細】
Just-In-Time (JIT) デバッグを呼び出すための詳細については、
ダイアログ ボックスではなく、このメッセージの最後を参照してください。

************** 例外テキスト **************
System.EntryPointNotFoundException: DLL 'kernel32.dll' の 'InterlockedIncrement' というエントリ ポイントが見つかりません。
  場所 System.Data.Common.SafeNativeMethods.InterlockedIncrement(IntPtr lpAddend)
  場所 Microsoft.Data.Odbc.DBCWrapper..ctor()
  場所 Microsoft.Data.Odbc.OdbcConnection..ctor(String connectionString)
  場所 PGSystem.c_fnc.SetComboData_MUser(String[]& wComboData)
  場所 PGSystem.frmLogin.frmLogin_Load(Object sender, EventArgs e)
  場所 System.EventHandler.Invoke(Object sender, EventArgs e)
  場所 System.Windows.Forms.Form.OnLoad(EventArgs e)
  場所 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
  場所 System.Windows.Forms.Control.CreateControl()
  場所 System.Windows.Forms.Control.WmShowWindow(Message& m)
  場所 System.Windows.Forms.Control.WndProc(Message& m)
  場所 System.Windows.Forms.Form.WndProc(Message& m)
  場所 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** 読み込まれたアセンブリ **************
mscorlib
  アセンブリ バージョン: 4.0.0.0
  Win32 バージョン: 4.0.30319.18051 built by: FX45RTMGDR
  コードベース: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll
----------------------------------------
frmLogin
  アセンブリ バージョン: 1.0.0.0
  Win32 バージョン: 1.0.0.0
  コードベース: file:///C:/KeySystem/bin/frmLogin.exe
----------------------------------------
Microsoft.VisualBasic
  アセンブリ バージョン: 10.0.0.0
  Win32 バージョン: 11.0.50709.17929 built by: FX45RTMREL
  コードベース: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
----------------------------------------
System
  アセンブリ バージョン: 4.0.0.0
  Win32 バージョン: 4.0.30319.18045 built by: FX45RTMGDR
  コードベース: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Core
  アセンブリ バージョン: 4.0.0.0
  Win32 バージョン: 4.0.30319.17929 built by: FX45RTMREL
  コードベース: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Windows.Forms
  アセンブリ バージョン: 4.0.0.0
  Win32 バージョン: 4.0.30319.18046 built by: FX45RTMGDR
  コードベース: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
  アセンブリ バージョン: 4.0.0.0
  Win32 バージョン: 4.0.30319.18022 built by: FX45RTMGDR
  コードベース: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Runtime.Remoting
  アセンブリ バージョン: 4.0.0.0
  Win32 バージョン: 4.0.30319.17929 built by: FX45RTMREL
  コードベース: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
----------------------------------------
System.Data
  アセンブリ バージョン: 4.0.0.0
  Win32 バージョン: 4.0.30319.18046 built by: FX45RTMGDR
  コードベース: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_64/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------
System.Configuration
  アセンブリ バージョン: 4.0.0.0
  Win32 バージョン: 4.0.30319.18058 built by: FX45RTMGDR
  コードベース: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
  アセンブリ バージョン: 4.0.0.0
  Win32 バージョン: 4.0.30319.18058 built by: FX45RTMGDR
  コードベース: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Transactions
  アセンブリ バージョン: 4.0.0.0
  Win32 バージョン: 4.0.30319.17929 built by: FX45RTMREL
  コードベース: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_64/System.Transactions/v4.0_4.0.0.0__b77a5c561934e089/System.Transactions.dll
----------------------------------------
System.Data.resources
  アセンブリ バージョン: 4.0.0.0
  Win32 バージョン: 4.0.30319.18010 built by: FX45RTMGDR
  コードベース: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Data.resources/v4.0_4.0.0.0_ja_b77a5c561934e089/System.Data.resources.dll
----------------------------------------
mscorlib.resources
  アセンブリ バージョン: 4.0.0.0
  Win32 バージョン: 4.0.30319.18010 built by: FX45RTMGDR
  コードベース: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_ja_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------
Microsoft.Data.Odbc
  アセンブリ バージョン: 1.0.3300.0
  Win32 バージョン: 1.0.4030.0
  コードベース: file:///C:/WINDOWS/assembly/GAC/Microsoft.Data.Odbc/1.0.3300.0__b77a5c561934e089/Microsoft.Data.Odbc.dll
----------------------------------------
System.Windows.Forms.resources
  アセンブリ バージョン: 4.0.0.0
  Win32 バージョン: 4.0.30319.18010 built by: FX45RTMGDR
  コードベース: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_ja_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------

************** JIT デバッグ **************
Just-In-Time (JIT) デバッグを有効にするには、このアプリケーション、
またはコンピューター (machine.config) の構成ファイルの jitDebugging
値を system.windows.forms セクションで設定しなければなりません。
アプリケーションはまた、デバッグを有効にしてコンパイルされなければ
なりません。

例:

<configuration>
  <system.windows.forms jitDebugging="true" />
</configuration>

JIT デバッグが有効なときは、このダイアログ ボックスで処理するよりも、
ハンドルされていない例外はすべてコンピューターに登録された
JIT デバッガーに設定されなければなりません。
----------------------------------以上---------------------------------

--------------------------デバッグ時の警告メッセージ-------------------
sWDATA(0):0
sWDATA(1):c:\*********************
'System.InvalidOperationException' の初回例外が System.Data.dll で発生しました。
'System.IO.DirectoryNotFoundException' の初回例外が mscorlib.dll で発生しました。
'System.EntryPointNotFoundException' の初回例外が Microsoft.Data.Odbc.dll で発生しました。
--------------------------------以上-----------------------------------
・ツリー全体表示

【12468】Re:Access2010で抽出プログラムの構築
回答  hatena  - 14/1/19(日) 18:00 -

引用なし
パスワード
   コード中のコンボボックス名とフィールド名が一致しないものがあるし、
実際のクエリでどうなっているのか不明ですが、
とりあえず抽出対象のフィールドのデータ型はすべてテキスト型のようなので、
そうだとして回答します。

メインフォームのモジュールは下記のようになります。

Private Sub ComboBoxInit()
'コンボボックスの初期化
  Dim Ctl As Controlt

  For Each Ctl In Me.Controls
  With Ctl
    If .ControlType = acComboBox And _
      .Name <> Me.ActiveControl.Name Then
'コンボボックスをNULL(空)に設定(アクティブコントロール以外)
    .Value = Null
    End If
  End With
  Next Ctl

End Sub

Private Sub CmdCancel_Click()
  ComboBoxInit
  Me.[購買実績一覧].SetFocus
  Me.[購買実績一覧].Form.Filter = ""
  Me.[購買実績一覧].Form.FilterOn = False
End Sub

Public Finction SetFilter()
  Dim stCri As String

  ComboBoxInit

  With Me.AciveControl
    stCri = .Name & "='" & .Value & "'"
  End With
  
  Me.購買実績一覧.Form.Filter = stCri
  Me.購買実績一覧.Form.FilterOn = True
End Finction


メインフォームのデザインビューでコンボボックスを全て選択した状態で、
「更新後処理」プロパティ欄に

=SetFilter()

と設定します。

以上でどうでしょうか。
・ツリー全体表示

【12466】Re:Access2010で抽出プログラムの構築
発言  rinrin  - 14/1/19(日) 9:33 -

引用なし
パスワード
   ▼hatena さん:
>使ってない変数や関数があったり、無駄なコードがあったり、とても見てられないコードですね。
>コードの意味をあまり理解していないのでは。
何も言い返せないです。。。。。。ごめんなさい。。。。。;;
スキルが至らないことは自覚しております。。。

>
>とりあえず、サブフォームのレコードソースの各フィールドのデータ型はなんでしょうか。
>それによって条件式の記述が変わってきますので、それを提示してください。
下記8個のテーブルをリレーションシップで結合してます。。。


☆購買実績一覧
ID            年度    原価センタWBS要素・指図    取引先    依頼担当者    入庫報告処理
オートナンバー型    数値型    数値型            数値型    数値型        テキスト型
主キー


☆年度日付
ID            入力月日    受入日        SAP納期        発注日付    実納品日
オートナンバー型    日付/時刻型    日付/時刻型    日付/時刻型    日付/時刻型    日付/時刻型
主キー


☆購買番号
ID            購買依頼番号    購買発注書番号    受入番号    整理番号    見積番号
オートナンバー型    テキスト型    テキスト型    テキスト型    テキスト型    テキスト型
主キー


☆金額その他
ID            見積金額    来月繰越    先行発注    備考
オートナンバー型    数値型        テキスト型    テキスト型    テキスト型
主キー


☆原価設定値
ID            原価センタ WBS要素・指図
オートナンバー型    テキスト型
主キー


☆従業員
ID            名前
オートナンバー型    テキスト型
主キー


☆取引先企業
企業番号        企業名        電話番号
オートナンバー型    テキスト型    テキスト型
主キー


☆年度
ID            年度
オートナンバー型         テキスト型
以上です。このような形で取り組もうとしてます。。。いかがでしょうか?ごしどう
>
>
>後、提示のコードから下記のようにフォーム設計になっていると推測しましたが、あってますか。
その通りです。。。
>
>メインフォームは非連結、そこにサブフォームのレコードソースのフィールドと同じ名前の非連結のコンボボックスが配置されている。
>
>コンボボックスを更新したら、そのコンボボックスの名前のフィールドを対象に選択した値でフィルターをかける。

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

【12465】Re:Access2010で抽出プログラムの構築
回答  hatena  - 14/1/18(土) 17:43 -

引用なし
パスワード
   使ってない変数や関数があったり、無駄なコードがあったり、とても見てられないコードですね。
コードの意味をあまり理解していないのでは。

とりあえず、サブフォームのレコードソースの各フィールドのデータ型はなんでしょうか。
それによって条件式の記述が変わってきますので、それを提示してください。


後、提示のコードから下記のようにフォーム設計になっていると推測しましたが、あってますか。

メインフォームは非連結、そこにサブフォームのレコードソースのフィールドと同じ名前の非連結のコンボボックスが配置されている。

コンボボックスを更新したら、そのコンボボックスの名前のフィールドを対象に選択した値でフィルターをかける。
・ツリー全体表示

【12464】Access2010で抽出プログラムの構築
質問  rinrin  - 14/1/18(土) 9:29 -

引用なし
パスワード
   今 Access2010でデータ抽出プログラムを構築しようとしてます。。。

Mainフォームにサブフォームを組み込んで街頭レコードを抽出できるものを構築しようとしてます。。。。。。。
データの抽出ができません。。。。。。。。。。;;

今までXPでAccessをやってました。。。
でも
今回からAccess2010でやってます。。。。。。。
ハッキリ言ってとても難しいです。。。。;;

ご指導お願いします。。。。。。。。。^^
  Dim stCri As String
  Dim MyPublic As String
  Dim MyPublic2 As String
  
Private Sub CmdCancel_Click()
  Me.購買依頼番号.Value = ""
  Me.購買発注番号.Value = ""
  Me.受入番号.Value = ""
  Me.整理番号.Value = ""
  Me.見積番号.Value = ""
  Me.原価センタ.Value = ""
  Me.会社名.Value = ""
  Me.担当者名.Value = ""
  Me.年度 = ""
  
  Forms![Main購買実績]![購買実績一覧].SetFocus
  Me.[購買実績一覧].Form.Filter = stCri
End Sub

Private Sub 会社名_AfterUpdate()
  MyPublic2 = Me.会社名.Value
  Call Call呼出
End Sub

Private Sub 見積番号_AfterUpdate()
  MyPublic2 = Me.見積番号.Value
  Call Call呼出
End Sub

Private Sub 原価センタ_AfterUpdate()
  MyPublic2 = Me.原価センタ.Value
  Call Call呼出
End Sub

Private Sub 購買依頼番号_AfterUpdate()
  MyPublic2 = Me.購買依頼番号.Value
  Call Call呼出
End Sub

Public Sub Call呼出()
  On Error Resume Next
  Dim Ctl As Variant
  Dim stCri As String
  
'パブリック変数に選択したコンボBOXの名前を取得
  MyPublic = Me.ActiveControl.Name
  
'このフォーム内のすべてのコントロールを検索
  For Each Ctl In Me.Controls
  With Ctl
    If .ControlType = acComboBox And Ctl.Name <> MyPublic Then
'コントロールの種類がテキストボックスなら値をNULL(空)に設定
    .Value = Null
    End If
  End With
  Next Ctl
  
  stCri = "" & "='" & MyPublic2 & "'"
  Mypublic3 = " WHERE " & "='" & MyPublic2 & "'"
  
  Me.購買実績一覧.Form.Filter = stCri
  Me.購買実績一覧.Form.FilterOn = True
End Sub

Public Sub Call2()
  Dim Ctl As Variant
  
  For Each Ctl In Me.Controls
  With Ctl
    If .ControlType = acComboBox Then
'コントロールの種類がテキストボックスなら値をNull(空)に設定
      .Value = Null
    End If
  End With
  Next Ctl
End Sub

Private Sub 購買発注番号_AfterUpdate()
  MyPublic2 = Me.購買発注番号.Value
  Call Call呼出
End Sub

Private Sub 受入番号_AfterUpdate()
  MyPublic2 = Me.受入番号.Value
  Call Call呼出
End Sub

Private Sub 整理番号_AfterUpdate()
  MyPublic2 = Me.整理番号.Value
  Call Call呼出
End Sub

Private Sub 担当者名_AfterUpdate()
  MyPublic2 = Me.担当者名.Value
  Call Call呼出
End Sub

Private Sub 年度_AfterUpdate()
  MyPublic2 = Me.年度.Value
  Call Call呼出
End Sub
・ツリー全体表示

【12463】Re:フォームの検索をするプログラムのエ...
お礼  まき  - 14/1/10(金) 15:09 -

引用なし
パスワード
   ▼hatena さん:
ご回答ありがとうございます

>コンボボックスの値集合ソースには、注文日がありますが、フォームのレコードソースに、注文日 フィールドがないのではないですか。
>フォームを対象に検索するのですから、フォームのレコードソースのフィールド名を指定する必要があります。

確かにありませんでした 汗

>そもそも論を言えば、
>元テーブルに主キーがあればそれのフィールドを検索対象にすればいいのですがね。
>演算でフィールドを合成しないとユニークにならないようなテーブル設計なら、本来はそれを見直すべきですね。

あっ!!主キーあります
それを検索対象にするべきだったんですね。
なんですか・・・思案の外でした。
そもそもどこかのサイトからコピーしてきたコードをそのまま使ったので全然理解できてませんでした。

勉強になりました、そして、教えていただいた通りにしたら
ちゃんと動きました。ありがとうございました。
・ツリー全体表示

【12462】Re:フォームの検索をするプログラムのエ...
回答  hatena  - 14/1/10(金) 14:48 -

引用なし
パスワード
   >実行時エラー3070
>'注文日'を有効なフィールド名、または式として認識できません
>

コンボボックスの値集合ソースには、注文日がありますが、フォームのレコードソースに、注文日 フィールドがないのではないですか。
フォームを対象に検索するのですから、フォームのレコードソースのフィールド名を指定する必要があります。

>※IDコードを先頭にするとプログラムは動きますが、実はIDコードは年度ごとに一新されるため同じコードが何年分も複数であります(2010年の1、2011の1というように)そして先頭の1番である2010年のフォームが検索されてしまいます。
>なのでどうしても注文日というフィールドを作ってそれで検索しないといけないのです

そもそも論を言えば、
元テーブルに主キーがあればそれのフィールドを検索対象にすればいいのですがね。
演算でフィールドを合成しないとユニークにならないようなテーブル設計なら、本来はそれを見直すべきですね。
・ツリー全体表示

【12461】フォームの検索をするプログラムのエラー
質問  まき  - 14/1/10(金) 14:33 -

引用なし
パスワード
   フォームの検索
既存のフォームを検索するために
フォーム上のコンボ87というコントロールを作り、そこから選ぶと該当のフォームが出る設定にしたいです。
コンボ87の値集合ソースが下記の通りになっているとします

値集合ソース:

SELECT Str(Val(Val([日付]) & Format([IDコード],"0000"))) AS 注文日, クエリA.IDコード, クエリA.日付, 部署マスタ.部署, Sum([数量]*[単価]) AS 金額の合計
FROM (クエリA INNER JOIN 部署マスタ ON クエリA.部署コード = 部署マスタ.部署コード) INNER JOIN 商品マスタ ON クエリA.商品コード = 商品マスタ.商品コード
GROUP BY Str(Val(Val([日付]) & Format([IDコード],"0000"))), クエリA.IDコード, クエリA.日付, 部署マスタ.部署
ORDER BY Str(Val(Val([日付]) & Format([IDコード],"0000")));

コンボ87の更新後処理イベントに下記のようなコードを書いています

Private Sub コンボ87_AfterUpdate()
  Dim rs As Object

  Set rs = Me.Recordset.Clone
  rs.FindFirst "[注文日] = " & Str(Nz(Me![コンボ87], 0))
  If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

すると下記のようなエラーが出てイベントが止まってしまいます

実行時エラー3070
'注文日'を有効なフィールド名、または式として認識できません

※IDコードを先頭にするとプログラムは動きますが、実はIDコードは年度ごとに一新されるため同じコードが何年分も複数であります(2010年の1、2011の1というように)そして先頭の1番である2010年のフォームが検索されてしまいます。
なのでどうしても注文日というフィールドを作ってそれで検索しないといけないのです

おかしいところをご指摘ください
よろしくお願いします
・ツリー全体表示

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