Microsoft Access 掲示板

6,744 件中 4,281 から 4,320 までを表示しています。
2
ワッフル 2021/04/07 (水) 12:39:05 9fdff@73a2b

早速のご返事誠にありがとうございます。

試してみたいと思います。

2
hiroton 2021/04/07 (水) 11:40:44 bb98d@f966d

コードの記述はちょっと気に掛けてあげると問題にも気づきやすくなります

問題のあるコードそのまま書き換え

Dim strSQL As String
strSQL = strSQL & "insert into T_UserLog (場所,行為,ユーザー名,マシン名)"
strSQL = strSQL & " values ('" & PN & "','" & AN & "','" & WSH.UserName & "','" & WSH.ComputerName & "')"
strSQL = strSQL & " T_UserLog IN '' [MS Access; DATABASE=C:\略\MnfctMng_BEDB.accdb;PWD=PASSWORD;];"""
CurrentDb.Execute strSQL

INSERT INTO ステートメント

外部ファイルに接続する場合の記述は

複数のレコードを追加するクエリは、次のとおりです。

INSERT INTO target [(field1[, field2[, ...]])] [IN externaldatabase]
SELECT [source.]field1[, field2[, ...]
FROM tableexpression

1 つのレコードを追加するクエリは、次のとおりです。

INSERT INTO target [(field1[, field2[, ...]])]
VALUES (value1[, value2[, ...])

VALUESを使った記述の場合「外部ファイルに接続する方法」の記述がありませんね・・・

まぁ、Microsoftの公式資料なんてそんなもんです。きっと似たような記述をすればなんとかなるはず

INSERT INTO target [(field1[, field2[, ...]])] [IN externaldatabase]
VALUES (value1[, value2[, ...])

Dim strSQL As String
strSQL = strSQL & "insert into T_UserLog (場所,行為,ユーザー名,マシン名)"
strSQL = strSQL & " IN '' [MS Access;DATABASE=C:\略\MnfctMng_BEDB.accdb;PWD=PASSWORD;]"
strSQL = strSQL & " values ('" & PN & "','" & AN & "','" & WSH.UserName & "','" & WSH.ComputerName & "')"
CurrentDb.Execute strSQL

お試しを

1
ゲッキョク駐車場 2021/04/07 (水) 11:07:42 修正 cb55f@f6500

変更後のVBA(下の方)のDim strSQL行の最後に select * from を加筆し、

  Dim strSQL As String: strSQL = "insert into T_UserLog (場所,行為,ユーザー名,マシン名) values ('" _
  & PN & "','" & AN & "','" & WSH.UserName & "','" & WSH.ComputerName & "') select * from "
  
  CurrentDb.Execute strSQL & "T_UserLog IN '' [MS Access; DATABASE=C:\略\MnfctMng_BEDB.accdb;PWD=PASSWORD;];"""

と書き直した所、CurrentDb.Execute行に 最後の;が足りないエラーが出てしまいました。
strSQLの内容がまずい気がするんですが、いかがでしょうか…。

5
hatch 2021/04/07 (水) 09:37:49 0d922@b524f

解決しました!!
リレーション先登録されている社員番号と一致しないせいでエラーが出ていました・・・
同じように登録するとエラーなしで表示されました!
お手数をお掛けし申し訳ありません。

1

レコードソースのパラメータはそのまま参照できます。
テキストボックスを2つ配置して、コントロールソースにそれぞれ下記のように設定すればOKです。

=[はじまりの日付【例:2021/3/1】]

=[終わりの日付【例:2021/4/2】]

4
hiroton 2021/04/06 (火) 14:36:50 修正 6edc5@f966d
SELECT 社員マスタ.社員番号, 全社員住所歴マスタ.社員番号, 社員マスタ.氏名, 社員マスタ.入社年月日, 社員マスタ.生年月日, 全社員住所歴マスタ.郵便番号,
 全社員住所歴マスタ.都道府県, 全社員住所歴マスタ.市区町村, 全社員住所歴マスタ.番地,
 全社員住所歴マスタ.[マンション等], ([全社員住所歴マスタ].[都道府県] & ([全社員住所歴マスタ].[市区町村]) & [全社員住所歴マスタ].[番地] & ([全社員住所歴マスタ].[マンション等])) AS 全住所,
DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd")) & "歳" AS 年齢, 全社員住所歴マスタ.登録日
FROM 社員マスタ LEFT JOIN 全社員住所歴マスタ ON 社員マスタ.社員番号 = 全社員住所歴マスタ.社員番号
WHERE 全社員住所歴マスタ.社員番号 IS NULL;

このクエリを実行するとエラーは表示されますか?または、レコードが表示されませんか?

3
りんご 2021/04/06 (火) 14:24:29 48103@0e907

素人がググっただけですが、社員番号がnullになるものが無くても、LEFT JOINの結果、組み合わせでnullになっているせいとか?

2
hatch 2021/04/06 (火) 13:48:39 0d922@b524f

hiroton様
回答いただき誠にありがとうございます。
私も原因がそれだと思い探したのですが社員番号がnullになるのはありませんでした。。。

1
hiroton 2021/04/06 (火) 13:26:27 6edc5@f966d

SELECT 社員マスタ.社員番号, 社員マスタ.氏名, 社員マスタ.入社年月日, 社員マスタ.生年月日, 全社員住所歴マスタ.郵便番号,
 全社員住所歴マスタ.都道府県, 全社員住所歴マスタ.市区町村, 全社員住所歴マスタ.番地,
 全社員住所歴マスタ.[マンション等], ([全社員住所歴マスタ].[都道府県] & ([全社員住所歴マスタ].[市区町村]) & [全社員住所歴マスタ].[番地] & ([全社員住所歴マスタ].[マンション等])) AS 全住所,
DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd")) & "歳" AS 年齢, 全社員住所歴マスタ.登録日
FROM 社員マスタ LEFT JOIN 全社員住所歴マスタ ON 社員マスタ.社員番号 = 全社員住所歴マスタ.社員番号
WHERE (((全社員住所歴マスタ.登録日)=DMax("登録日","全社員住所歴マスタ","社員番号 =" & [全社員住所歴マスタ].[社員番号])) AND ((社員マスタ.退職の有無)=False));

[全社員住所歴マスタ].[社員番号]がnullになるレコードがあるのでは?

4

高さに応じて上位置を少し小さくすることになるかと。その辺はトライ&チェックが微調整するしかないかなと思います。

3
積み木 2021/04/06 (火) 04:44:42 2a30e@05952

例えばヘッダーや詳細の一番下におきたいときにはどうすればいいのでしょうか?
数値指摘での位置合わせは、どうもその要素の真ん中が基準になっているような、気がします

2
積み木 2021/04/06 (火) 00:49:31 2a30e@05952

おー!気が付きませんでした
線に見えるけど細い四角なんですね
調整もしやすそうです!
大変参考になりました!

1
hatena 2021/04/05 (月) 21:01:11 修正

Accessのレポートで罫線はなかなか難しいですね。
細線とか1ポイントとか設定しても、プリンターによって太さが異なったりします。

直線コントロールの代わりに四角形コントロールで、境界線は透明、背景色を黒にして、高さをいろいろ変更すると細かく調整できます。

下記は、直線コントロールの幅、四角形コントロールの高さを変更したものをプレビューで500%ズームしたもののキャプチャーです。

画像1

3

履歴テーブルをつくるとそれなりのコストがかかるというのはどういった意味でしょうか?

設計する手間やコード量が増えるという意味です。
再請求や修正・削除が無制限にできるという自由度と引き換えに、作成する時間がかかるし、メンテナンスも大変そうです。
一度、作成してしまえばいいですが。

いっそ削除したものは、データベースには残さずに請求書発行時にPDFとして写しを作成し、確認用としてとっておく、とかが楽なのかもしれないと思ってきました

インボイス制度がもうすぐ始まるそうですが、請求書の発行者もなんからの形で控えを保存しておく必要があるそうです。
下記で議論してますのでご参考に。

請求書をPDFで保存するかどうか Microsoft Access 掲示板 - zawazawa

50
もんぞう 2021/04/05 (月) 18:19:09 62ea7@f778d

hirotonさんへ

「クロス集計クエリからレポート印刷」に関して最初の設計図と現状は大幅に変わってしまいました。
アクセスでクロス集計表を作る場合は列と値は1つしか設定できないという認識がありました。
現状は最終的にクロス集計表としての複数の列と値を設定できるようになり求める設計図が大幅に広がってしまいました。
「クロス集計クエリからレポート印刷」というトピックへの書き込みはこれで最後にします。
一か月近い期間のアドバイスありがとうございました。
また機会がありましたらよろしくお願いします。

2
積み木 2021/04/05 (月) 17:32:47 58219@ca66a

頭で考えれば単純な処理なんですが体系立てるのはなかなかむずかしいみたいですね
削除請求書番号に記載するにしても、用意したフィールドよりも削除が発生するかもしれない(常識的に考えれば2つも用意すれば十分でしょうけど)といった不安もありますね

履歴テーブルをつくるとそれなりのコストがかかるというのはどういった意味でしょうか?
保存容量や動作の軽さに影響するという意味ですか?

いっそ削除したものは、データベースには残さずに請求書発行時にPDFとして写しを作成し、確認用としてとっておく、とかが楽なのかもしれないと思ってきました

起こる確率の低いイレギュラーなことばかり考えてしまい、全然進まなくなるのが悪い癖ですね

1

その要件は、昔からなかなか難しい要件の一つです。
いろいろな方法があると思います。

請求した通りに間違いなく、遅れもなく入金してくれれば問題はないのですが、いろいろイレギュラーなことがありますからね。

期限までに入金してくれなかったり、
一部だけ入金してきたり、
まとめて入金してきたり、
たまに、余分に入金してきたり、
・・・

こちら側にも、入力間違いとか、ありますしね。

これらのイレギュラーにも柔軟に対応できるようにするには、ある程度データに冗長性を持たせることになりますね。

売上テーブルのレコードにはどの請求書で請求したか、を何らかの形で残すものですか?(売上レコードの請求書番号フィールドなどに番号をいれる?)

自分もそのような設計にすると思います。
あと、入金日も持たせるかな。
期限をすぎても、入金されない場合は、再請求する必要がありますので、
再請求時の請求書番号も必要になりますね。
品番に再請求が発生するなら、別テーブルに履歴として保存しておく必要があるかも知れません。

後から誤りが発覚してつくりなおすときに請求書を削除するときには、その後の問い合わせにも対応できるように論理削除にしようと思います

これは、当然そうすべきでしょうね。

削除した請求書に記載していた売上レコードは、別の請求書に記載することになると思います
番号を付与するようにしていても、新たな請求書に記載したときに上書きされてしまうので、過去の請求書に表示させられなくなります

売上テーブルに、請求書番号、削除請求書番号、というフィールドを持たせるか、
別テーブルにして履歴をすべて残すか、ですね。
履歴には上記の再請求も含めて残すといいでしょう。

再請求や修正/削除がどの程度発生するかによってどちらかに決めることになると思います。
別テーブルで履歴を残すというのはそれなりにコストがかかりますので、それに見合うかどうか、検討してください。

49
hiroton 2021/04/05 (月) 08:49:46 36a0e@f966d

区切りをどこで付けるかというのは悩みどころですが、そろそろ質問を分けたほうがよさそうです

当初の質問として

ワンクリックぐらいで印刷できるように

とあり、それに対してデータベース的なアプローチ(クエリ・SQLを駆使してデータ整形)で回答を付けました。ACCESS的なアプローチで連番を振ったり、処理速度的に厳しいところをVBAで対応したりもしましたが、元データに依存するような部分はなかったと思います。
言葉にすると「大きなデータをページ毎のデータに整形する方法」ですね

追加の質問は元データから項目が追加されてきているし、「各ページのデータができた後のレポート表示のしかた」といった感じで最初の質問からは内容が離れてきているので、改めて必要な内容(データ構造、レポートの表示イメージ等)を整理した上で新たな質問にしてください

48

[テキスト122]~[テキスト125]は適切な名前で運用するか、

[テキスト122]→n0ケース数表示

等、注釈を追記するようにしてください(質問者以外中身のわからないモノでは回答しにくいです)

それと、コードはなるべくコピペで提示するようにしましょう。いろいろ捗ります
コードブロック

1

Accessに関する情報交換の掲示板ですが、どの辺がAccessと関係ありますか。

AccessのVBAで実現したいという話ですか。
AccessからWSHを呼び出すという話ですか。

1

標準モジュールのプロシージャをFunctionにしておけば、
「クリック時」プロパティに
=プロシージャ名()
と設定すれば呼び出せます。

47
もんぞう 2021/04/03 (土) 17:33:56 62ea7@f778d

hirotonさんへ

上の書き込みの追加です。

テーブルAにテキスト型の[入荷引当]というフィールドがあります。
0か1の判定があり、0のときは空白で1のときは「予」という文字を合計数量と各店舗の数量の左にいれたいと思っております。
1店舗でも「予」があれば合計数量にも「予」を入れて、1店舗も「予」がなければ合計数量も無しでお願いします。
画像1
よろしくお願いします。

3

もう一度、私の回答をよく読んでください。

データ型を数値型にしておいて、
桁数をそれえたいときは、書式プロパティに 0000000 とすれば見た目上そろいますので。

とか、

なにかの都合でテキスト型にする必要があるとき(そうすべき合理的な都合は思いつきませんが)、

それを理解したうえでどの点に疑問をお持ちですか。

私の場合は、主キーは数値型(あるいはオートナンバー型)以外(テキスト型とか)にしたことはないです。

2
サガノヘルマー 2021/04/03 (土) 15:35:28 2a30e@05952

決めたことがないということは1 10と増えていくということですか?

ソートするとき、も数値系ならご指摘のようにはなりませんか?

1

私は決めたことがないです。
データ型を数値型にしておいて、
桁数をそれえたいときは、書式プロパティに 0000000 とすれば見た目上そろいますので。

なにかの都合でテキスト型にする必要があるとき(そうすべき合理的な都合は思いつきませんが)、
桁数を揃えておかないと、並び替えのときに想定通りにならないことになります。

例えば1~12までを昇順にすると下記のようになっちゃいます。(それが想定通りならいいですが)

1
10
11
12
2
3
4
5
6
7
8
9

46
もんぞう 2021/04/02 (金) 16:22:47 62ea7@f778d

hirotonさんへ

追加アドバイスありがとうございます。

「ケース、バラの算出は[数量]を合計してから機械的にという方法です。」
こちらのやり方で大丈夫です。
無事できましたありがとうございます。

「合計数量の表示をVBAで対応する場合」がおかしくなってしまいました。
2ページ目以降に数量は空白なのですが単位が表示されてしまいます。

 , IIf([n0ケース数]>0,[n0ケース数]) AS n0ケース数表示
  , IIf([n0ケース数]>0,"ケース") AS n0ケース文字
  , IIf([n0バラ数]>0,[n0バラ数]) AS n0バラ数表示
  , IIf([n0バラ数]>0,"バラ") AS n0バラ文字

レポートは上記のやり方でしてます。
画像貼り付けますのでよろしくお願いします。
情報不足でしたら申し訳ありません。
画像1
画像2
画像3

45
hiroton 2021/04/02 (金) 10:19:47 修正 c5a8f@f966d

あ、見落としてました。[合計数量]もケース、バラに分解するんですね。やろうとした感じで出来るはずですがうまくいかないですか?

  , ケース入数

  , Sum(数量) AS 合計数量
  , Int([合計数量]/[ケース入数]) AS 合計ケース数
  , [合計数量] Mod [ケース入数] AS 合計バラ数

  , f0

  , Sum(IIf([店舗名]=[f0],[数量])) AS n0
  , Int([n0]/[ケース入数] ) AS n0ケース数
  , [n0] Mod [ケース入数] AS n0バラ数

それと、上記の方法はケース、バラの算出は[数量]を合計してから機械的にという方法です。そうではなく、
例えば

商品店舗数量ケース入数
あA1510
あA1610

なんてデータの場合、現実に即して数字を出すと

商品店舗数量合計ケース入数ケース合計バラ合計
あA3110211

となることが考えられます(バラ数合計がケース入数を超える)。こういう計算をしたいのであれば合計する前の[数量]からケース数、バラ数を算出する必要があります

  , ケース入数

  , Sum(数量) AS 合計数量
  , Sum(Int([数量]/[ケース入数])) AS 合計ケース数
  , Sum([数量] Mod [ケース入数]) AS 合計バラ数

  , f0

  , Sum(IIf([店舗名]=[f0],Int([数量]/[ケース入数]))) AS n0ケース数
  , Sum(IIf([店舗名]=[f0],[数量] Mod [ケース入数])) AS n0バラ数

Int([数量]/[ケース入数]と[数量] Mod [ケース入数])が複数回でてきますが、レポート出力用クエリ「Qレポート出力データ」は集計を使ったクエリなので、これを個別のフィールドに置くことはできません。わかりやすく処理するなら事前にフィールドを作っておく必要があります。ちょうど前段階として「Q出力全ページデータ」があるので

Q出力全ページデータ

SELECT Py, テーブルA.*, Q出力店舗.*, Int([数量]/[ケース入数]) AS ケース数, [数量] Mod [ケース入数] AS バラ数
FROM Q出力店舗, テーブルA INNER JOIN Q出力商品ページグループ ON テーブルA.棚番号 = Q出力商品ページグループ.棚番号;

とすれば
Qレポート出力データ


  , Sum([数量]) AS 合計数量
  , Sum([ケース数]) AS 合計ケース数
  , Sum([バラ数]) AS 合計バラ数

  , f0

  , Sum(IIf([店舗名]=[f0],[ケース数])) AS n0ケース数
  , Sum(IIf([店舗名]=[f0],[バラ数])) AS n0バラ数

と作ることができます

「テーブルA」に
ケース入数
ケース数:Int([数量] / [ケース入数] )
バラ数: [数量] Mod [ケース入数]
の3つを追加してます。

なので、こっちのほうがやりたいことだったかな?

4

FileCopyステートメントだと、開いているファイルをコピーしようとするとエラーになるようです。
FileSystemObjectを使うとエラーにならずコピーできます。

3
まいまい 2021/04/01 (木) 18:39:35 58219@1d072

そうです。Application.CurrentProject.FullNameなどを使ったり、FileCopyステートメントでやってましたがエラーになって四苦八苦しておりました
リンク先をみてもう一度やってみようと思います

2

ひょっとして、現在開いてるAccessファイル(自分自身のファイル)のバックアップを取りたいということでしょうか。

だとしたら、下記辺りをご参考に。

データベースを開いている状態で自分自身をバックアップする 《FileSystemObject》|Access|ヘルプの森

1

ファイルコピーは FileCopyステートメントで。

タイムスタンプ文字列はFormat関数とDate関数またはNow関数で生成できます。

上記ヒントでチャレンジしてみてください。簡単ですよ。

44
もんぞう 2021/04/01 (木) 18:07:07 62ea7@f778d

hirotonさんへ

素早いアドバイスいつもありがとうございます。
まだ試せていませんので、できましたらまた書き込みさせていただきます。

2
セロハン 2021/04/01 (木) 11:47:22 0029a@1c915 >> 1

仰る通りです…(><)
うっかりして見落としてお手を煩わせて申し訳ありません。助かりました!ありがとうございました。

1

コード全体を提示してもらわないと適切な回答は難しいですが、
提示されている部分だけで推測すると、下記のような感じでしょうか。

strFilter = strFilter & " AND (([01] Is Null AND [01c] = False ) OR ([02] Is Null AND [02C] = False))"
6
hatena 2021/04/01 (木) 09:49:38 修正 >> 5

レコードは1件のみで、検索終了後はデータはクリアすればいいでしょう。

過去の抽出条件を再利用する可能性があるなら、レコードを追加して利用するのもありです。
開いたときは新規レコードにしておいて、コンボボックスで過去の条件データを選択することも可能にするという設計にしてもいいでしょう。

43
hiroton 2021/04/01 (木) 09:25:42 74598@f966d

ケース数:Int([数量] / [ケース入数] )
バラ数: [数量] Mod [ケース入数]

この計算自体はレポート出力の直前でやればいいですね

合計ケース数:Int([合計数量] / [ケース入数] )
合計バラ数: [合計数量] Mod [ケース入数]

レポート出力用のクエリは次のような形になっていると思います

  , Sum(数量) AS 合計数量

  , f0

  , Sum(IIf([店舗名]=[f0],[数量])) AS n0

GROUP BY

  , Q出力全ページデータ.Py
  , Q出力全ページデータ.Px

[合計数量]は各商品の全店舗の合計ですね。店舗ごとの数量としては、「(Px,Py)ページの1列目の店舗はf0フィールドの値、その時の数量はn0」のように作っているので、この「n0」に対して計算式を当ててあげればいいです

  , Sum(数量) AS 合計数量

  , f0

  , Sum(IIf([店舗名]=[f0],[数量])) AS n0
  , Int([n0] / [ケース入数] ) AS n0ケース数
  , [n0] Mod [ケース入数] AS n0バラ数

GROUP BY

  , Q出力全ページデータ.Py
  , Q出力全ページデータ.Px

0の場合、レポートに表示するときは空白でお願いします。

数値をチェックして必要な時(0より大きいとき)だけ出力すればいいですね

  , IIf([n0ケース数]>0,[n0ケース数]) AS n0ケース数表示
  , IIf([n0ケース数]>0,"ケース") AS n0ケース文字
  , IIf([n0バラ数]>0,[n0バラ数]) AS n0バラ数表示
  , IIf([n0バラ数]>0,"バラ") AS n0バラ文字

または、レポートに配置したあと書式を設定するでもいいかもしれません
数値フィールドまたは通貨フィールドの書式を設定する

n0ケース数
コントロールソース|n0ケース数
書式        |0;; 

n0バラ数
コントロールソース|n0バラ数
書式        |0;; 

n0ケース文字
コントロールソース|n0ケース数
書式        |ケース;; 

n0バラ文字
コントロールソース|n0バラ数
書式        |バラ;; 

表示できないですが、「;;」の後に「半角スペース」が入っています。
レポートのデザインビューで入力するときは自動整形が働くので、例えば、「0;;" "」と入力する必要があります。または「0;; 」(最後の文字は全角スペース)でもいいでしょう

5
ロマサガ 2021/04/01 (木) 01:46:13 2a30e@05952 >> 4

ありがとうございます

検索条件用入力用のテーブルのレコードは常に一つということですか?検索のたびに増えていきませんか?
それらのフィールドを元に検索をかけるのですよね?

4

VBAを使えば可能ですよ。
ラベルとチェックボックスを並べて作成すればできます。
ただ、面倒ですよね。

検索条件用入力用のテーブルを作成して、各フィールドは「複数値フィールド」にすれば、リストからチェックボックスで選択できるUIになります。これを使えば楽できそうですね。

複数値を持つフィールドの作成または削除 - Access

画像1