Microsoft Access 掲示板

views
4 フォロー
6,283 件中 2,001 から 2,040 までを表示しています。
4
access初心者 2023/02/08 (水) 19:57:49 54902@c2e0c >> 3

たびたび申し訳ありません。
いろいろ試してみたところIIF関数を活用することで
当方の考えていた連番を付与することができました。

お騒がせいたしましたが解決することができました。
ご教授ありがとうございました。

3
access初心者 2023/02/08 (水) 19:45:32 54902@c2e0c >> 2

ご教授ありがとうございます。
試したところ下記のように動きました。

整理番号 チェック有無 連番付与
1  true   001    1
2  true   002    2
3  false  -     2
5  fales  -     2
8  true   003    3
10  false  -     3

当方が考えているものとしては望んでいた部分に近づいたのですが
チェックボックスの有~次の有までの間チェック無部分は空白またはゼロなどに
することは可能でしょうか?

3
りんご 2023/02/08 (水) 17:17:35 935bc@0e907

他の人の意見や下記サイトも参考にしながらあれこれやって決めて下さい。
とりあえず、キークリック時に1票。
T'sWare:テキストボックス編集のイベント
T'sWare:キーボード関連イベントの違い

2
nanana 2023/02/08 (水) 16:44:19 e48ae@9a838

大変失礼いたしました。不十分でした。フォーム内非連結テキストボックスの値(文字列)が変更されたときをトリガーとしたいのです。よろしくお願いします。

1
りんご 2023/02/08 (水) 16:01:28 935bc@0e907

…によって、(あるタイミングでどんな操作をトリガーとして)、…切り替えたいのですが

タイミングとトリガーはについtr、貴方の考えを提示すれば回答が付きやすくなるかもしれません。
例えば、文字列の入力完了後、クリックをトリガーとしてなど。

1
hiroton 2023/02/08 (水) 08:22:56 10ee7@f966d

データベースの分割はされてますか?
クライアントファイルは各個人のPCに保存されていますか?
サーバーのACCESSファイルを直接起動している人はいませんか?

2名以上アクセスしている場合とはもう少し具体的に

  • 誰かがACCESS“でない“ファイル(Excel等)を開いている
  • 同じACCESSファイル(データベース)を開いている。ただし、データは読み込んでいない(フォームを開いていたりはしない)
  • 同じデータを読み込んでいる(フォームを開いている)

どのような状態を指していますか?

4
えいじ 2023/02/06 (月) 22:48:55

hatena様と同じコードです。
Outlookには、正常に表示されますが、送信後に、文字化けするときと、しないときがありました。
Outlookの設定の問題だと思いましたが、ご指摘のサイトを参考にして、文字化けは、解消しました。
ありがとうございました。

3

具体的にどのようなコードを作成したのか提示してもらえますか。
当方で動作確認した限りでは文字化けはしませんでした。

自動挿入される署名を使いたいなら、下記の方法が簡単だと思います。

024 Outlook VBA 署名を使う | くのへスタジオ

2
hiroton 2023/02/06 (月) 09:52:35 62a98@f966d

連番は各レコードごとに、自分のレコードまでのレコードがいくつあるかを数えることで求められます

Application.DCount メソッド (Access)

DCount("整理番号","テーブル名","整理番号<=" & [整理番号] & " and チェック有無=true")

いつ適用するか、どのように適用するかはこの連番をどのように使いたいか次第です

2
えいじ 2023/02/05 (日) 23:29:47

hatena様

回答ありがとうございます。

hatena様の方法ですと、署名が文字化けするのです。

それも、文字化けするときと、しないときがあります。
Outlookの設定で、文字化けしないようにしたのですが、文字化けします。

なので、Outlookの署名が保存されている場所から、直接、参照しようかなと思いました。

1
りんご 2023/02/05 (日) 21:19:32 4d616@0e907

整理番号テーブル

整理番号
1
2
3
5
8
10

チェックテーブル

チェック有整理番号連番
1001
2002
8003

登録する際に連番の最大値を求めてカウントアップ

3
hatena 2023/02/05 (日) 11:46:03 修正

現状のクエリに「Q_設計_実績伝票処理_作業別時間集計」に追加して、「作業名No」フィールド同士で結合します。結合線をダブルクリックして結合プロパティをテーブルの全レコードが表示されるというオプションを選択します。

クエリの現状のDLookupの式を下記に変更。

総作業時間: Nz([時間の合計], 0)

以上でどうでしょう。

2
かめ 2023/02/04 (土) 16:57:48 5acda@57997

ありがとうございます
言われたように今回のは集計クエリです
参照だけのフォームで問題ないのですが、、
いまいち集計クエリで整合性ができなく、、、やりかたがしりたいです、、、

1

挿入したい「署名」はOutLookの下記のページの機能で自動挿入される署名のことでしょうか。

署名を作成してメッセージに追加する - Microsoft サポート

参考にしたコードが理解できず応用できないなら、単純に mailBody変数の最後に署名の文字列を追加するのではだめですか。

mailBody = Me![txt本文]

mailBody = mailBody & vbCrLf & vbCrLf & _
           "------------------------" & vbCrLf & _
           "〇〇 〇〇" & vbCrLf & _
           "Mail: myname@sample.com" & vbCrLf & _
           "------------------------" 
1
hatena 2023/02/02 (木) 11:38:17 修正

まず、

    Me.作業名時間1 = IIf(IsNull(DLookup("時間の合計", "Q_設計_実績伝票処理_作業別時間集計", "作業名No = 1")), 0, DLookup("時間の合計", "Q_設計_実績伝票処理_作業別時間集計", "作業名No = 1")) & " H"

同じDLookupの式を2回呼び出しているのは無駄ですね。Nz関数を使えば1回ですみます。

    Me.作業名時間1 = Nz(DLookup("時間の合計", "Q_設計_実績伝票処理_作業別時間集計", "作業名No = 1"), 0) & " H"

ただ、これはそれほど処理速度に影響はないですね。呼び出しが2回か1回かなので。

クエリにDLookup関数を使用すると、クエリのレコード件数分繰り返し呼び出されますので重くなります。

これはDLookup関数を使わずに、クエリのオートルックアップ機能を使うと高速化できるでしょう。下記のリンク先を参考にトライしてみてください。

Accessの「オートルックアップクエリ」とは | できるネット

ACCESSの基本技 オートルックアップクエリは超便利 | KEIYU企画

ただし、Q_設計_実績伝票処理_作業別時間集計 は集計クエリだと思いますが、そうだとしたらこのフォームではデータの更新はできないので参照だけのフォームになります。
データ編集はこのフォームから編集用の単票フォームを呼び出すというような設計にする必要がありますね。

あと、クエリ内のテーブルのフィールドのインデックスを適切に設定することで処理速度は改善する可能性があります。これも下記を参考にして設定をしてみてください。

インデックスの作成と使用によりパフォーマンスを向上させる - Microsoft サポート

Accessのテーブルの[インデックス]とは | できるネット

上記で学習したうえで、具体的にどう設定したらいいかわからないという場合は、現状の各テーブルのフィールド構成(フィールド名や主キー設定)を提示してください。

4
チョコ 2023/02/01 (水) 00:21:20 7a4e5@dab18

返信ありがとうございます。
hirotonさんのおっしゃるとおりですね。
その方法が一番らくですよね。

教えて頂きましてありがとうございました。

8

ありがとうございます。
今後は範囲を超える可能性がない箇所はバイト型を積極的に使っていこうと思います。

3
みどり 2023/01/30 (月) 22:07:13 a8670@45a76

りんごさん、toneさん
ご教示ありがとうございます。

cat.Procedures("q2").Command = cmd

でパススルークエリのSQL文を書き換えることができました
とても嬉しいです
これでSQLServerなどの
ウィンドウ関数(OLAP関数)がAccess側で
柔軟に使用するとこができます。

お忙しいところお力添えいただき
誠にありがとうございました。
これからもよろしくお願いします。
以上

11

なるほど。
ご教示有難うございました。
大変参考になりました。

2

cat.Procedures("q2")

ではいかがですか?

cat をVBEのウォッチ式で観察したところ、

cat.Tables
・システムテーブル
・リンクテーブル
・ローカルテーブル(というのかわかりませんが、Accessのテーブル)

cat.Procedures
・ローカルテーブルのみを参照するクエリ
・パススルークエリ

cat.Views
・リンクテーブルを参照するクエリ

となるようです。

7

まず、データベースのフィールドのデータ型とVBAなどのブログラム言語の変数のデータ型は別ということは意識しましょう。

byte型で数値を扱うなとも見たので、どちらがいいのかなと…。

たぶん、ブログラム言語の変数のデータ型の話ではないかなと。これも時代によって変わってきてます。

データベースに関しては、必要とされる最小を選択しておけばいいと思います。ただし将来的に範囲を超える可能性があるなら、メンテナンス性を考えて余裕を持たせたサイズにすることもありだと思います。

10

グループヘッダーの”セクション繰り返し”→”はい”にして、そのグループヘッダーで連番をリセットすると、各ページの先頭に繰り返し表示されてフォーマット時イベントが発生するために連番はページごとにリセットされてしまいます。

そのため、私の回答ではグループヘッダーではなくグループフッターで連番リセットするようにしました。その場合、先頭ページではリセットされないのでレポートヘッダーでもリセットするようにしました。

この方法なら、”セクション繰り返し”→”はい”の影響は受けないと思います。

1
りんご 2023/01/30 (月) 00:23:11 4d616@0e907

取り敢えずググっただけなので的外れでしたら、ごめんなさい。
Views コレクションおよび CommandText プロパティの例 (VB)

' Get the command.
Set cmd = cat.Views("AllCustomers").Command
これに相当するコードが必要なのかしら。

6
りんご 2023/01/29 (日) 23:31:59 4d616@0e907 >> 5

 保守が楽だからと考えました。お叱りを受けるかもしれませんが。
 
 

9

もう一つ教えてください。
3つのグループ化されたもので、2つ目のグループヘッダーは”セクション繰り返し”→”はい”になっている場合で、次ページから、”0”から始まる場合の解消法となるといかがでしょうか?
これは、単純にグループ化されたものが増えた場合の対処法としてご教示いただければ幸いです。

5

Introduction to data types and field propertiesで調べてみましたが、数値型の説明に、
Tip: For best performance, always specify the smallest sufficient Field Size.
とありますねり
ということはやはり最小のbyteが理想ということで良いのでしょうか…

integerにしておいたほうが良い考える理由はなんですか?

4
りんご 2023/01/29 (日) 16:58:50 4d616@0e907

byte型が正解だとしても、なんだかんだで取り敢えずintegerに1票。
Introduction to data types and field propertiesでググると公式サポートがヒットするかな。

3

ありがとうございます。
アクセスのフィールドのデータ型の話です。

数値型で扱う場合に、byteで間に合う範囲しかデータが入らないなら、byteにしておいたほうが良いということになりますか?
byte型で数値を扱うなとも見たので、どちらがいいのかなと…。

2

テーブルのフィールドのデータ型の話ですよね。(VBAのデータ型だと別の話になりますので)

ACCDBやMDBはファイルサイズの上限(2GB)があるので、大量のデータを扱う可能性がある場合はフィールドサイズは必要最低限のものにした方がいいと思います。
処理速度的にも有利になるとは思いますが体感できる差はおそらくでないでしょう。

ちなみに、VBAの変数のデータ型の場合、LongとIntegerだと32bit環境以上(現在はすべてそうですが)だとLong型の方が処理速度は速いです。ただしこちらも体感できるような差はでないですが。

VBAでミリ秒以下の高精度で処理時間計測 - hatena chips

8

参加班ヘッダーの"セクション"は"はい"になっていました。そして、hatenaさんのおっしゃる通りのことに気付き、実行してみた結果、思い通りになりました。有難うございました。お礼が遅くなり失礼しました。

りんごさんもアドバイス有難うございます。
スクショは諸事情ありで、上がれませんでしたが、次回からは、例え、を文字に起こして質問するようにしてみます。

1
りんご 2023/01/28 (土) 22:02:13 4d616@0e907

状況がわかりませんが、もしあれならば、Javaあたりで勉強していくと、いろんなサンプルを見ているうちに、勘所がわかるようになるのかもしれませんね。

例えば、アクセスのファイル容量を極力小さくしたい場合

極力小さくすれば、安全・安心なデータベースになるのかな?

7
hatena 2023/01/28 (土) 15:42:58 修正

参加班のグループヘッダーの「セクション繰り返し」は「はい」「いいえ」のどちらになってますか。

参加班のグループフッターは表示されてますか。=「フッターセクション付き」になっているか。
そのグループフッターのフォーマット時のイベントプロシージャは下記になっているか。

Private Sub グループフッター2_Format(Cancel As Integer, FormatCount As Integer)
    Me.txtCnt = 0
End Sub

「グループフッター2」の部分は実際のグループフッター名にしてください。

とりあえず上記を確認してください。

そのうえでりんごさんも言われてますが現状のレポートのスクリーンショットがあるとわかりやすいですね。

6
りんご 2023/01/28 (土) 14:24:08 4d616@0e907

レポート画面のスクショ、コード画面のスクショがあったほうが解決するのではなくて?
現状の、希望のスクショじゃなくて、回答No2のコードを試した結果を示して説明しないとね。

5

現状の出力 → 全てのページに対して、連番が1~最終番号まで振られました。
希望の出力 → 参加班ごとに連番を振りたい

が希望でした。

4

上の回答ではご希望の結果と異なりますか。

もし、異なるなら、現状の出力例、ご希望の出力例を提示してもらえますか。

3

早速ご回答いただき有難うございます。

言葉足らずで恐縮です。

”2つのグループ化されたもの”の意味合い的には、
1グループ目 → 参加班
2グループ目 → ここに割り振られたID(3人参加の場合は、Nameが異なっても同じ番号が振られており、そのIDで”グループ化”をしています。

上の2グループを、”参加班”をヘッダーでグループ化、”ID”をフッターでグループ化しているのですが、”参加班”ごとに連番を振りたい感じです。

この場合ですと、いかがでしょうか?

2

参加班ヘッダーの「セクション繰り返し」プロパティが「はい」になっているとしたら、各ページの先頭で参加班ヘッダーが表示されるのでtxtCntが0になりますので、質問のような結果になります。

グループヘッダーではなくグループフッターを表示させてそこで Me.txtCnt = 0 とすればどうでしょう。
あと、レポートヘッダーのフォーマット時でも Me.txtCnt = 0 とします。

グループフッター、レポートヘッダーを表示したくないなら、高さを0にしておけばいいでしょう。

Private Sub グループフッター2_Format(Cancel As Integer, FormatCount As Integer)
    Me.txtCnt = 0
End Sub

Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer)
    Me.txtCnt = 0
End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
    If FormatCount = 1 Then
        Me.txtCnt = Me.txtCnt + 1
    End If
End Sub

グループフッター2 の部分は実際のグループフッター名にしてください。

1

「2つのグループ化されたもの」の意味がよく分かりませんが、
レポートのグループ化/並べ替えの設定で「参加班」フィールドでグループ化されていて、さらにその下に別のフィールドでグループ化されているということでしょうか。

参加班のヘッダーの「セクション繰り返し」プロパティが「はい」「いいえ」のどちらになってますか。

3
hiroton 2023/01/27 (金) 08:59:29 c4746@f966d

やってみたらたしかにプロパティで取れないですね

AcWindowMode 列挙 (Access)

acDialog 3 フォームまたはレポートのモーダル プロパティと PopUp プロパティは[はい]に設定 されます。

こうあるのでなにがしかの制御はされてるんでしょうけど、回りくどい方法取らざるを得ない(標準機能にない方法)よりも

フォームを呼び出して開くときに、変数などに状態を保存しておく方法もアルのでしょうが‥

をサクッと実装してしまったほうが楽そうです
Form.OpenArgs プロパティ (Access)

2
チョコ 2023/01/26 (木) 23:59:36 7a4e5@dab18

説明不足で申し訳ありません。

ダイアログ(フォーム)は、ポップアップで開いて、そのフォームを閉じるまで他のフォームなどに触れない
フォームです。

フォームAのプロパティーでポップアップを「いいえ」と設定したとします
フォームBからdocmd.openform で呼び出すときに、引数で「acDialog」とするとポップアップで開きます。
form.PopUpの値は、フォームAで設定した「値」しか取得出来ないので、
フォームが「acDialog」で開いていても、form.PopUpの値は「いいえ」になってしまうので
開いている状態を調べるには意味がないと書いてしまいました。

実際に開いている状態(通常か、ポップアップか等)を知りたいのですが可能でしょうか?
フォームを呼び出して開くときに、変数などに状態を保存しておく方法もアルのでしょうが‥