Microsoft Access 掲示板

6,744 件中 1,841 から 1,880 までを表示しています。
2
初心者 2023/10/04 (水) 08:34:40 ddfe5@21382

確かにクエリーはごちゃごちゃ過ぎますね。顧客毎の締め日は7パターン程で支払条件は20パターン程あり、それを売上日付からSwitch条件でDateSeriaで締め日と回収期日をわりだしているためごちゃごちゃとなってます。それしか思いつかなかったもので。
*全然わからないことはフォームで期日の年や年月でフィルターしたときに実行時エラー2766がでて、他のフォームで非連結にしているコントロールが存在しないとなることです。それとは全く関係してないのに・・・それが全く理解できずにおります。

1
りんご 2023/10/03 (火) 21:08:55 935bc@0e907

 実行時エラーを解決して、なんだかんだで希望通りに動く完成品まで漕ぎ着けたとしても、蓋を開けてみればスパゲティクエリじゃ駄目です。設計が杜撰だからデスマーチが始まって、頑張れば頑張るほどぐちゃぐちゃになっている場合、設計からやり直すしかないです。
 締日と請求日はもう少しテーブルに落とし込まないと。

5
ひよこ 2023/10/01 (日) 04:56:34 87d27@339f3

完全に解決しました。
私のレベルでは途方に暮れて、またパソコンを買うところでした。
ありがとうございました。

4
ひよこ 2023/09/30 (土) 15:27:54 87d27@339f3

ありがとうございます。
しかし、Hatenaさんは本当にすごいですね。
以前も問題解決していただきましたが、恐れ入ります。
これから試してみます。結果は後日報告します。

3
hatena 2023/09/30 (土) 12:02:33 修正

レジストリを変更するのはPCを変えたりしたときとか、その都度設定するしなければないらないので、
共有ロック数の制限を超える前にコミットするよう処理を追加すればいいでしょう。

ファイルの共有ロック数が制限を超えています (Error 3052)レジストリエントリMaxLockPerFileの値を増やして下さい。(#-2147217887) - Excel と Access を連携する方法
とか、
Access 実行時エラー 3052 ”ファイルの共有ロック数が制限を超えています” ”解決方法 | ちびrobo
をご参考に。

私の下記でも同様の処理を追加しています。

グループ毎連番を自動入力する関数 - hatena chips

2
ひよこ 2023/09/30 (土) 09:20:06 87d27@339f3

エラーは「.Edit」ででます。

1
ひよこ 2023/09/30 (土) 09:17:02 87d27@339f3

スタンドアロンで使用していますので不要な制限はできるだけ除きたいです。

9

横罫線は、最初のリンク先の方法で。
余白に応じて行数指定無く用紙の最後まで罫線を出力する - hatena chips

縦罫線と外枠は、ページフォーマット時にVBAでLineメソッドで引けばいいのでは。
質問のコードから横罫線部分を削除すればいいと思います。

2
すずやん 2023/09/27 (水) 11:35:32

ちょっとうまく理解できないのですが、「すでにある売上から請求書を作るとき」という部分だけで判断します。
つまり「すでにある売上を引用して請求書を作るときはどうするか?」ということかなと。

「請求作成用のフォーム」の画面に、「売上内容引用ボタン」などを設置し、クリックしたら別のダイアログで売上テーブルの一覧を表示すればよいのではないでしょうか。
そこで選択したテーブルの内容を「請求作成用のフォーム」の入力部分にそれぞれ反映すれば良いかなと思います。

1
hiroton 2023/09/27 (水) 10:57:37 8c80d@f966d

単に50/12と同じ結果では?(int(intMonth/12)+(intMonth mod 12)/12この分割に意味はないのでは?)

datediffは、m(月指定)は1日(ついたち)を跨ぐとカウントするという仕様があります
たとえば、9月1日入社の9月27日(27日間)は0年ですが、9月20日入社の10月1日(12日間)は0.0833年になります

このような算出方法に問題がなければそれでいいと思います

8
hiroton 2023/09/27 (水) 08:57:56 8c80d@f966d

よく「VBAを使わないで」と話題になるのでリンクを出してますが、VBAで罫線を引くのは質問時点でVBAでやっていますよね?
わざわざ詳細セクションでセクションごとに引く必要はなく、質問のコードの「外枠」部分でやっていることで十分じゃないですか?

7
亞紀姐 2023/09/26 (火) 21:03:33 09e37@4f94c

hirotonさま>
ありがとうございます。
実は詳細セクションの太くしたい縦線を指定してみたのですがうまくいかなくて…
hatenaさんのこんなやり方もあるんですね。
教えて下さりありがとうございます。
今のやり方とあまりにも違うのですが状況によってはこちらも検討してみます。

hatenaさま>
ありがとうございます。
画像(説明付き)を添付しました。
イメージ伝わりますでしょうか?(説明が上手くなくすみません)

よろしくお願い申し上げます。
画像1
画像2
画像3

6

実は罫線を引きたいエリアの下部が余白ではなく違うセクションで固定で表があるため、このままだと下部の表と罫線を引きたい可変エリアの間に隙間ができてしまうため、
どうにかして形の良いおさまりを探しています。

 「違うセクションで固定で表」のセクションとはページフッターセクションのことですか。

あと言葉だけではイメージしづらいので、ご希望のレイアウトイメージを画像でアップしてもらえませんか。

5
hiroton 2023/09/25 (月) 17:47:58 66c64@f966d

縦線だけ別に引いちゃえばいいんじゃないですかね

VBAのMe.Lineでも

レコードがない場合も用紙の最後まで罫線を出力する(hatena chipsさん)

でも

4
亞紀姐 2023/09/25 (月) 17:08:08 09e37@611f8

リンク先の方法とhttps://zawazawa.jp/ms-access/topic/728で新しく作成をし直しています。
https://zawazawa.jp/ms-access/topic/728
の方の様に周りを2ポイントの実線で囲みたいと思っているのですが、
上の線はグループヘッダーの横線(サンプルだと直線12)を2ポイント実線に
下の線は上記でhatena様が提示された方法で太線にすることが出来ました。

こちらの方は左右の外枠縦線を太線に出来たと仰っていたのですがどう頑張っても出来ないで作業が止まっています…(ダミーの空白行の外枠は太線に出来ました)
外枠の左右の縦線を太線にする場合はどこを変更すればよいのでしょうか?

もう一つ
サンプルでは罫線を引きたいエリアに対して均等に罫線を引くわけではなく、
レコード量が多く1ページに収まらない場合に
・詳細セクションの通常(1行分)の高さ
・メモ欄の内容が多かった場合(=印刷時拡張された場合)の高さ
で行を連ねて、レコードが入るところまでいき、下部の余りが次の行の高さに満たなかったら、下部に余白があっても次のページに進んでいます。

実は罫線を引きたいエリアの下部が余白ではなく違うセクションで固定で表があるため、このままだと下部の表と罫線を引きたい可変エリアの間に隙間ができてしまうため、
どうにかして形の良いおさまりを探しています。
今考えているのは
①可変エリアの下辺に合わせて固定部分の位置をずらす
②(できたら)可変エリアを印刷時拡張にするけれど、詳細セクションの倍数で拡張して可変エリアのエリア高さを固定にする(ページによって10行の場合もあれば途中でメモ量が多く1行に収まらない行がある場合は9,8,…と可変する)
なのですが
そもそもこれらはACCESSでの作成が可能なのでしょうか?(①は出来そうな気もしますが②は難しそうなのかしら…)

どんどんと話がずれてきてしまいすみません。
どうぞよろしくお願いいたします。

3

レポートのイベントを使った処理は、イベントの発生メカニズムの理解が必須になります。
まずは、下記のページを読まれて、概要でもいいので理解しておくといいでしょう。

レポートのイベントの発生メカニズムの研究 - hatena chips

レポートのイベントの発生メカニズムの研究 その2 - hatena chips

ページフォーマット時で罫線を引くのが難しい理由は、
ページフォーマットはページ内のイベント(各セクションのフォーマット時,印刷時など)がすべて終了してから最後に発生します。

行数、行高が固定なら、For Nextループで繰り返せば簡単に罫線を引くことができますが、
行数、行高が可変の場内は、やろうと思えばできないことはないですが、複雑になります。
具体的には、各セクションの印刷時で、各セクションの高さを配列なり、Dictionaryなどに格納しておいて、ページフォーマット時でそれを参照して罫線を引くというコードを書くことになります。
それをするぐらいなら、各セクションの印刷時イベントで罫線を引いた方がシンプルです。

1
りんご 2023/09/22 (金) 13:36:16 935bc@0e907

 請求書確認フォームを別に作ればいいじゃない?
 フラグ0のフォームが、請求予定・未請求・請求待ちみたいなもの。フラグ1のフォームが請求実績・請求済・入金待ちみたいなもの。

2
亞紀姐 2023/09/22 (金) 10:12:41 09e37@1f7ba >> 1

hatena様
お返事ありがとうございます。

>提示のページフォーマット時(Report_Page)で罫線を引く方法では、行の高さが可変の場合は、むずかしいと思います。
やはりそうなんですね。
リンク先の方法で頑張ってみます。
すぐに取り掛かれないかもしれないので時間がかかるかもしれませんが必ず報告に上がります。

ありがとうございました。

1

提示のページフォーマット時(Report_Page)で罫線を引く方法では、行の高さが可変の場合は、むずかしいと思います。

下記のリンク先の方法ではだめなんですか。こちらの方がはるかにシンプルに実装できます。

余白に応じて行数指定無く用紙の最後まで罫線を出力する - hatena chips

2
kitasue 2023/09/20 (水) 09:28:26 5eced@95fbc

hatenaさん、ありがとうございます。
対応策までご提示いただき痛み入ります。

1

仕様のようですね。

出力した後、ファイルをリネームすることになるでしょう。

DoCmd.TransferText acExportDelim, , "Tbl1", "C:\test\test.test.txt"
Name "C:\test\test#test.txt" As "C:\test\test.test.txt"
1

状況や運用次第ですね。

商品マスターと売上履歴というテーブルにおける価格について考えると、
厳密に設計するなら、
上記以外に、価格変更履歴テーブルを作成して、
売上履歴の日付を元に、価格変更履歴の該当する価格を表示する設計にします。

ただ、その商品が頻繁に価格が変更されるものなら、管理や設計が大変になります。
その場合は、
商品マスターには現在の価格を格納、
売上履歴には、商品ID と 売上時の価格を格納、
でもいいと思います。
売上時の価格 は売上フォームで入力するときに、VBAでマスターの価格を代入するようにします。

取引先マスタの場合で、社名や住所は、そんなんに頻繁に変更されるものではないので、
社名変更履歴や住所変更履歴のテーブルを作成してもいいかもしれません。

例えば、過去の売上伝票を再発行する場合、価格が変わってしまっていては、問題ですが、
社名や住所は現在のものが表示されていても問題ない、逆に現在のものが表示されていた方がいいという考え方もあると思います。

6

用途や運用次第でしょうね。

例えば、マイナンバーは、一人1個で、死ぬまで変わらない、ということが保証されているので、主キーにしてもいいかもしれません。顧客番号も、一人1個で一度発行したら、絶対変更しない、ということが保証されているなら、主キーにしてもいいでしょう。
自動採番(あるいはオートナンバー型)したものを顧客番号にしてそれを主キーにするということです。
(連番にするか、ランダムな番号にするかは、状況で選択すればいいでしょう、オートナンバー型もランダムの設定があります)

ただ、自動採番されたものは意味がないのですが、それでは、人間が管理しづらい、何らかの情報を持たせたい(意味を持たせたい)ということなら、顧客番号は主キーにせずに、別に主キーフィールドを追加すべきだと思います。

例えば顧客番号でCA001(Cがカスタマー、Aは顧客の頭文字)としたり

こうする必要があるのなら、主キーは別に設けるべきでしょう。
ただ、その必要性はそれほどあると思いえません。

私が今まで設計したものは、オートナンバーを顧客番号にして主キーにしてますね。その方が設計が楽なので。
売上番号、請求書番号もオートナンバーで主キーにしてますね。

単なる数字にしておけば、顧客がみてもそれに意味があるとは考えないでしょうし、
顧客名や日付は伝票自体にデータとしては持たせるので、それを主キーに入れる必要性はないと思いますので。

4

ありがとうございます、そちらはできました!
仮にWith文の中身をSubで記述する場合、どのように書けばよいか知りたいです。

3
hatena 2023/09/19 (火) 10:49:29 修正

 下記のような感じです。

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)

    AutoFontSize Me.住所1, 20, Center

End Sub

第2引数は初期フォントサイズです。このフォントサイズで収まらないときに収まるようにフォントサイズを縮小します。

第3引数は下記のように指定します。

定数縦書「いいえ」の場合縦書「はい」の場合
Top上揃えに配置されます。右寄せで配置されます。
Center中央揃えに配置されます。左右中央に配置されます。
Bottom下揃えに配置されます。左寄せで配置されます。
2

関数自体の機能で実現できたのですね、縦書きテキストボックスだったので使えないかと思い、記述から削除しておりました。

後学の為に、質問文通りの内容を実現するとすれば、どのような記述になりますでしょうか??
Subにまとめる方法で記述を試してみたのですが、色々とエラーが出てしまいます。

5
さーば 2023/09/18 (月) 23:13:02 0237b@de7c2

主キーはデータベースのもの、顧客番号や売上番号、請求書番号などは人がみるもの、という感じでしょうか?
主キーを書類などに記載するものではないので、主キーは1からはじめた自動採番、先述の各番号は、例えば10001からはじめていく、といった具合でほぼ同じようなデータをつくるのが普通ですか?

伝票や請求書に書いてある伝票番号や顧客番号、請求書番号は主キーを書くことはないものでしょうか?

1

AutoFontSize関数自体にテキストの中央配置の機能があるのでそれを使えばどうでしょう。

AutoFontSize関数を垂直文字配置の指定ができるよう改良 - hatena chips

使用例

    AutoFontSize Me.テキストボックス名, 12, Center

第3引数に Centerを指定すると中央配置になります。
縦書きのテキストボックスでも大丈夫です。

4

ハンドルネームを入力し忘れました。失礼。

3
名前なし 2023/09/15 (金) 10:45:02 77762@3d5b4

データベースではコードに意味を持たせてはいけない、とききますが

@IT: システムの寿命はコードで決まる!

そのコードが「業務で利用するコード」であるかどうかによります。

それとは別の問題として、有意コードや「後から変更される可能性がある情報」を格納するためのフィールドをテーブルの主キー(個々のレコードを一意に識別するためのインデックス)として定義することは、できるだけ避けた方が良いでしょう。

顧客番号でCA001(Cがカスタマー、Aは顧客の頭文字)としたり

顧客の名前(の頭文字)は、後から変更(改名、または誤って入力された情報の修正)される可能性があります。

請求書番号をCA001-23001(顧客番号と2023の23と発行数)としたりする

同上。

顧客番号とは別に00001、00002といったIDをリレーションにつかい、
顧客番号は文字と同じ扱いにする、などは問題とされませんか?

そういう形でよいと思いますが、それと「[顧客番号]を有意コードとするべきか否か」はあくまで別の問題です。
例えば、もし顧客の名前(の頭文字)が変更されたら、わざわざ[顧客番号]も新たに発行し直したりするのでしょうか。

2
りんご 2023/09/15 (金) 08:43:11 935bc@0e907

>それですと0001の顧客や新たな顧客に発行した番号が0015などだと、顧客が少ないと見られて不利になりそうな気もします
 表示する必要がない。下記のように、わかりやすい形で表示する事にしたのではないのか?

数値だけでは分かりにくいので、それは「キーとしてのコード」ではなく、「意味のある管理番号」として別途追加するのが良いだろう、ということではないでしょうか。
 

1
すずやん 2023/09/15 (金) 08:15:37

わたしもさほど詳しくないので想像が多分に含まれる所感として記載してみます。

>データベースではコードに意味を持たせてはいけない

「コード」を「キー」として扱う場合、まずその内容は数値のみで構成されるのが良いのはご存知のとおりだと思います。
ただ「顧客番号」や「商品番号」とする場合、数値だけでは分かりにくいので、それは「キーとしてのコード」ではなく、「意味のある管理番号」として別途追加するのが良いだろう、ということではないでしょうか。

なので「00001、00002といったIDをリレーションにつかい、顧客番号は文字と同じ扱いにする」が問題になる理由がわかりません。これはなぜでしょうか。

あと「コード」(キー)に「顧客番号」として「CA001」とした場合、後から修正できません(キーは通常修正しないので)
ただ企業などで使用する場合なにがおこるかわかりませんので、修正ができない「コード」(キー)に意味を与えるべきではない、ということではないでしょうか。

>それですと0001の顧客や新たな顧客に発行した番号が0015などだと、顧客が少ないと見られて不利になりそうな気もします

これは単純に開始番号を「1234」とかにすればいいと思いますが。
つまり意味が発生するとそういった意味でも使いにくくなるということかなと思います。

16
ちちみ 2023/09/14 (木) 15:39:15 2d148@1925b

そこに、IF式を入れるだけで、そんなに意味合いが変わるのですね!無事に出来上がりました。長々と本当に、本当にありがとうございました。

2

Hatenaさん、お世話になります。
テラテイルの質問が未クローズでしたが、修正依頼荒らしによる再三の嫌がらせのため、退会致しました。

アドバイス通り、コードを切り分けてデバッグを行っていたところ、原因に行き当たりました。
レポートデザイン上の社名テキストボックスのフォントサイズが15になっており、社名2か3にデータがない場合、
If文で社名1~3のフォントサイズを小さなものに揃えると15が採用されてしまい、結果社名1のテキストボックスの表示が小さくなってしまうようでした。
VBAで社名1~3に.FontSize = 22を設定すると、テキストボックスの大きさにあったフォントサイズに変更されるようになりました。

アドバイスありがとうございました😊

15

下記でどうでしょう。

    StrSQL = _
        " SELECT TOP 1 基4, 変位4, №" & _
        " FROM T_01_地耐力" & _
        " WHERE (T_01_地耐力.№ Between 1 And 9)" & _
        " ORDER BY T_01_地耐力.変位4 DESC , T_01_地耐力.№ DESC"
    Set rs = CurrentDB.OpenRecordSet(StrSQL)
    If rs![変位4] <> 9 Then
        rs.Edit
        rs![基4] = "※"
        rs.UpDate
        rs.Close
    End If
14
ちちみ 2023/09/14 (木) 12:38:37 2d148@1925b

返信ありがとうございます。「[No]が1から9まで」の範囲で[変位4]か一番大きいレコードの[No]が9の時は※マークをつけない ということです。可能でしょうか?お願いいたします。

13

更新条件で[No]が1から9まで、[変位4]の値が一番大きいものに※マークを付けるだけではなく、でも一番大きい[変位4]の値が[No]が、9ではないものに限定したいです。

抽出条件が、「[No]が1から9まで」かつ「[No]が、9ではないもの」ということでしょうか。
だとしたら、「[No]が1から8まで」ということになりますが、そういうことではないのですか。

ではなくて、
「[No]が1から9まで」の範囲で[変位4]か一番大きいレコードの[No]が9の時は※マークをつけない(更新しない)ということでしょうか。

1

フォントサイズが必要以上に小さくなってしまう
上記の質問の同じ人ですよね。

上記の質問の修正依頼の方にコメントしましたので、ご参照ください。

上記の質問のコードを見る限りは、AutoFontSizeの使い方を間違っているのだと思います。

12
ちちみ 2023/09/13 (水) 16:58:58 2d148@1925b

お返事が遅くなり申し訳ありません。もう一度教えていただいた文章を読み直し、デバッグ用コードも使い書き直しまして無事に進めることができました。ありがとうございました。そのうえで追加質問をさせてください。
更新条件で[No]が1から9まで、[変位4]の値が一番大きいものに※マークを付けるだけではなく、でも一番大きい[変位4]の値が[No]が、9ではないものに限定したいです。通常のクエリなら2つ3つ重ねていけばできますがsqlでは、どのように追記すれば良いのでしょうか?おねがいいたします
'''" WHERE T_01地耐力.№ Between 1 And 9" &
            " ORDER BY T_01_地耐力.変位" & A1 & " DESC , T_01_地耐力.№ DESC;"
'''

2

おはようございます

返信ありがとうございます
まさにそれでした!フィルターでした
1日謎に振り回されていたので助かりました

解決しました
ありがとうございます!!