Microsoft Access 掲示板

views
4 フォロー
6,349 件中 5,641 から 5,680 までを表示しています。
2
reito117 2020/02/18 (火) 10:47:29

mayu様
前回に引き続きありあとうございます。

前回はmayu様の教えて頂いた集約関数のやり方で解決させて頂きましたので、
こちらの方はをあまり見ずに申し訳なく思っています。

上記について教えて頂きたく。
q=テーブルorクエリ名
x.yは何のテーブルorクエリに該当するのでしょうか?(自己結合というもの?)

それにちなんでfrom句の損益計算書 x,損益計算書 yは損益計算書 As x,損益計算書 As yを単純に省略してるだけ?
もしくは最初のx yと関係してる?

お手数ですが宜しくお願い致します。

1

前回の回答、2020/01/25 (土) 09:05:50 に記述した SQL へ
金額が 0 ではない科目が表示対象になるよう 抽出条件を加えれば
ご希望の結果になるでしょう。
 

SELECT Max( IIf( q.勘定科目コード < 5000, q.勘定科目コード ) )  As ex1
     , Max( IIf( q.勘定科目コード < 5000, q.勘定科目 ) )        As ex2
     , Max( IIf( q.勘定科目コード < 5000, q.cost ) )            As 金額_費用
     , Max( IIf( q.勘定科目コード > 4999, q.勘定科目コード ) )  As 勘定科目コード
     , Max( IIf( q.勘定科目コード > 4999, q.勘定科目 ) )        As 勘定科目
     , Max( IIf( q.勘定科目コード > 4999, q.revenue ) )         As 金額_収益
FROM
(
    SELECT x.勘定科目コード
         , x.勘定科目
         , x.[金額(費用)] As cost
         , x.[金額(収益)] As revenue
         , Count(1)      As gnum
    FROM 損益計算書 x
       , 損益計算書 y
    WHERE x.勘定科目コード Between 4000 And 5999
      AND y.勘定科目コード Between 4000 And 5999
      AND x.勘定科目コード \ 1000 = y.勘定科目コード \ 1000
      AND x.勘定科目コード >= y.勘定科目コード
      AND Abs( x.[金額(費用)] ) > 0
      AND Abs( y.[金額(費用)] ) > 0
    GROUP BY x.勘定科目コード
           , x.勘定科目
           , x.[金額(費用)]
           , x.[金額(収益)]
) q
GROUP BY gnum
ORDER BY gnum ;
1
hatena 2020/02/13 (木) 11:54:29 修正

下記と同じ内容の質問ですね。下記で回答が付いていますのでそちらで続けてください。

Access - Accessのショートカット配布可否について|teratail

3
db_sgl 2020/02/08 (土) 18:04:30 bfddf@029ad

アドバイスありがとうございます。
確かに2003はセキュリティ面でも厳しいので、さっそく2019を購入しました。

OutputメソッドでPDFは簡単にできました。
あとは、メール添付の方を、いろいろと試してみたいと思います。

8
和菓子 2020/02/07 (金) 14:15:29 05554@4b4f6

ありがとうございます。
初歩的なミスでお手数をお掛けしました。
何度もすみせんでした。

7

原因は、ウィンドウモードを「ダイアログ」に設定していることですね。
ダイアログで開くとそのウィンドウ以外は操作できなくなります。
ウィンドウモードを「標準」に変更してください。

6
名前なし 2020/02/05 (水) 15:46:05 846ee@4b4f6 >> 5

【レポートBを開く】ボタンは埋込マクロにしています。画像1

9
reito117 2020/01/31 (金) 11:01:53

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

まさか回答頂けると思わなかったので驚きました。
でも教えて頂いたおかげで理解が出来ました。

gEXはグループ化のために作った計算式をフィールドに表示してみるとってことです

これで理解が出来ました。
group byの列は2つ同じ勘定科目コードを作成し、それをグループ化することで一行にできる。

それと同時にこのような事をすぐにわかる事が出来るのが本当にすごいと思いました。
自分もこのような難しい内容をすぐに出来る様になってみたいです。

本当に感謝しかありませんが、改めてありがとうございます。

5
hatena 2020/01/31 (金) 06:12:00 修正

レポートAに【レポートBを開く】ボタンを作成しています。

このボタンのクリック時のイベントプロシージャのコードを提示して下さい。

4
和菓子 2020/01/30 (木) 13:49:52 05554@4b4f6

レポートA・レポートB 共に「いいえ」にしています。

8
hiroton 2020/01/30 (木) 11:54:58 7cddf@f966d

集計直前の状態をイメージできるとわかると思いますよ
SQLからGROUP BY句を消し、集計関数のMAXもなくすと

ex1ex2金額_費用勘定科目コード勘定科目金額_収益gEX
4001仕入250004001
5001売上35004001
4002売上原価04002
5002商品売買益04002
4003発送費04003
5003受取手数料04003

こんな感じになります
gEXはグループ化のために作った計算式をフィールドに表示してみるとってことです

gEXでグループ化し、各列MAXをとれば、MAXといっても2レコードの内片方にしか値がないので必ずその値を拾ってきます

並べたいレコードがちょうどセットになるようなgEXを作ればいいので
q.勘定科目コード - IIf( q.勘定科目コード < 5000, 0, 1000 )GROUP BYだから何か特別なことをしているということはありません

ついでにORDER BYも同じ式を使っているので4001からきれいに並んでいるわけですね

7
reito117 2020/01/30 (木) 10:07:20

度重なる質問に対して誠にありがとうございます。
正直なところ力不足でまだ理解が追い付いていない部分もありますが、理解が出来る様に頑張っていきます。
また何かありましたら力を貸して頂ければ幸いです。

27
mayu 2020/01/29 (水) 19:33:07 修正 9b175@61ad5 >> 26

少し気になって、期首在庫は必要ないのでしょうか?
それによってはすべてアウトになりそうで^^;;

フック船長さんのテーブル構成だと、棚卸をおこなった時点で

 ・ 製品ID毎に、実在庫に対して過不足があった場合は
   過不足分の数量を登録したレコードを DB登録して 不整合を解消する。
 ・ 製品ID毎に、詳細テーブルは 実在庫分の数量を記載した1レコードのみ の状態にし、
   棚卸実行日以前の全レコードは、別の場所へバックアップした上で削除

のどちらかで実現可能でしょうし、
テーブル設計が きちんと出来ていることから
フック船長さんは こういった業務知識や手法を身につけている可能性が高いのではないか
というのが、私の見解です。 
 

上記でどうでしょうか?
クエリーでも使用できると思いますし、少し工夫すれば、期首在庫にも対応できるはず^^;;

N + 1 問題
に該当しています、とだけ。

3

レポートBの作業ウィンドウ固定が、はいになってませんか。なっていたら、いいえにしてください。

2
和菓子 2020/01/29 (水) 11:33:53 05554@4b4f6

お返事いただきありがとうございます。
言葉不足で本当に申し訳ございません。

レポート上のテキストボックスをクリックするのですか。
⇒はい。レポート上のテキストボックスをクリックして、入力フォームを立ち上げています。

レポートはレポートビューで開いているということですか。
⇒はい。レポートビューで開いています。

これは無理です。アクティブなオブジェクトは一つだけですので。
⇒勉強不足で申し訳ございません。

レポートAに【レポートBを開く】ボタンを作成しています。
レポートAを開いて(レポートA上にある)【レポートBを開く】ボタンをクリックすることで、レポートBを開いています。
この場合、レポートBがアクティブになっているのですが、各々の詳細セクションをクリックするなどして、
レポートAをアクティブにしたり、レポートBをアクティブにしたりしたいのです。(クリック動作でアクティブを切り替えたい)

教えていただいたコードをレポートAの詳細セクション⇒イベント⇒クリック時に入力してみましたが、レポートAをアクティブにすることができませんでした。

すみません…
あまりにも基礎が理解できていませんでしょうか…
申し訳ございません。

1

レポートを用い、テキストボックスをクリックすることで入力フォームを立ち上げる仕様にしています。

レポート上のテキストボックスをクリックするのですか。
レポートはレポートビューで開いているということですか。

先に開いた「レポートA」にフォーカスを移動することができません。(

いつ、どこでというのが不明確ですが、「レポートA」をアクティブにする(フォーカスを移動させる)のは、下記のコードになります。

    DoCmd.SelectObject acReport, "レポートA", False

(若しくは、どちらのレポートもアクティブにすることはできますか?)

これは無理です。アクティブなオブジェクトは一つだけですので。

26
スナフキン 2020/01/28 (火) 11:16:24 837f8@06760

横から失礼。
はじめまして、スナフキンと申します。
少し気になって、期首在庫は必要ないのでしょうか?
それによってはすべてアウトになりそうで^^;;

一応、標準モジュールに
Public Function F_出庫数(int製品ID As Integer, str年月 As String, Optional bln集計区分 As Integer = 0) As Double

    Dim strQuery As String

    If bln集計区分 = 0 Then
        strQuery = "SELECT SUM(S.出庫数量) AS 出庫数量 FROM 出庫詳細 S LEFT JOIN 出庫 SH ON S.出庫ID=SH.出庫ID WHERE S.製品ID=" & int製品ID & " AND Format(SH.出庫日,'YYYYMM')='" & str年月 & "'"
    Else
        strQuery = "SELECT SUM(S.出庫数量) AS 出庫数量 FROM 出庫詳細 S LEFT JOIN 出庫 SH ON S.出庫ID=SH.出庫ID WHERE S.製品ID=" & int製品ID & " AND Format(SH.出庫日,'YYYYMM')<'" & str年月 & "'"
    End If

    Dim cn As New ADODB.Connection
    Dim rec As New ADODB.Recordset

    Set cn = CurrentProject.Connection
    Set rec = cn.Execute(strQuery)

    If rec.EOF = False Then
        F_出庫数 = Nz(rec.Fields("出庫数量"), 0)
    Else
        F_出庫数 = 0
    End If

    rec.Close: Set rec = Nothing
    cn.Close: Set cn = Nothing

End Function

Public Function F_入庫数(int製品ID As Integer, str年月 As String, Optional bln集計区分 As Integer = 0) As Double

(出庫と同じなので省略)

End Function

上記参照設定でADOにチェックです^^/

を用意したとして
製品IDを1
2020年1月の場合

前月在庫数=F_入庫数(1,"202001",1)-F_出庫数(1,"202001",1)
当月入庫数=F_入庫数(1,"202001")、当月出庫数=F_出庫数(1,"202001")
当月在庫数=F_入庫数(1,"202001",1)-F_出庫数(1,"202001",1)+F_入庫数(1,"202001")-F_出庫数(1,"202001")

上記でどうでしょうか?
クエリーでも使用できると思いますし、少し工夫すれば、期首在庫にも対応できるはず^^;;

かな??

25

質問ですが作成していただいたSQL文にx.~やy.~と記載されていますが
どのような意味があるのでしょうか。
(IIF関数に必要な条件のようなものでしょうか)

xy は、 エイリアス と言って
SQL文の中で、一時的に テーブルやクエリに 別の名前をつけています。

 x ---> 製品 ( 実在のテーブル )のこと
 y ---> ユニオンクエリ ( SELECT 入庫詳細.製品ID ... DateSerial( ... , 0 ) ) のこと

私がエイリアスを付与する理由は、主に以下のようなものになります。

【 1 】
SELECT 句や WHERE 句 など、各句の中で
列の名前を エイリアスで修飾( エイリアス名.列の名前 )すると
どのテーブルの列を 射影や選択といった操作の対象としているのか、明確になります。

【 2 】
画数の多いテーブルやクエリに 画数の少ないエイリアス を付与すると
オブジェクト修飾する記述を用いた際に
タイピングが楽(?)で、SQL の見映えがすっきりするという利点があります。( 多分 )

【 3 】
SQL 文中で使用するテーブルやクエリの名前に 予約語や記号などが含まれていて
Microsoft が推奨していない 命名規則 になっている場合、
( 例えば T-table とか T名前(hoge) とか currency とか )
オブジェクト修飾の際に [] で括る記述を強要されて 非常に見映えが悪いため、
( [T-table].列名 とか [T名前(hoge)].列名 とか [currency].列名 とか )
せめて SQL文の中だけでも、まともな命名規則のオブジェクト名を付与したい

【 4 】
複数のオブジェクトに共通して存在する名前の列 を操作する場合だけは
 オブジェクト名.列名
というように、
どのオブジェクトを操作するのか、明確に指定する必要がありますが
( 今回の場合だと 製品ID が該当し、オブジェクト修飾しないとエラーになります )
列によって、修飾したり しなかったりという記述にしてしまうと
長文 SQL の場合は、可読性が落ちますし、一貫性も欠如してしまいます。

 
ですから、単一のテーブルのみを使用している SQL では
エイリアスの付与も、オブジェクト名の修飾も不要です。

24
フック船長 2020/01/27 (月) 16:55:39 f3309@31d50

mayu様
返信が遅くなり申し訳ありません。レポートを作成できました。ありがとうございます。

質問ですが作成していただいたSQL文にx.~やy.~と記載されていますがどのような意味があるのでしょうか。(IIF関数に必要な条件のようなものでしょうか)

見当違いで意味がないのであれば申し訳ありません。

6

GROUP BY q.勘定科目コード - IIf( q.勘定科目コード < 5000, 0, 1000 )

並びの肝の部分だと思うのですが、
この条件式でなぜこんなきれいな並びになるかわかりません。

勘定科目コードの 4000番台と5000番台の下3桁同士を
同じグループ( 母集団 )に所属させるための演算になります。
例えば

  ・ 4000 と 5000 が同じグループ ( 4000 - 0 = 4000, 5000 - 1000 = 4000 )
  ・ 4011 と 5011 が同じグループ ( 4011 - 0 = 4011, 5011 - 1000 = 4011 )
  ・ 4999 と 5999 が同じグループ ( 4999 - 0 = 4999, 5999 - 1000 = 4999 )

になります。
( 並び替えも演算結果の数値順になるよう、ORDER BY句に同様の式を記述しています )

したがって、

GROUP BY q.勘定科目コード - IIf( q.勘定科目コード < 5000, 0, 1000 )
ORDER BY q.勘定科目コード - IIf( q.勘定科目コード < 5000, 0, 1000 )

GROUP BY q.勘定科目コード Mod 1000
ORDER BY q.勘定科目コード Mod 1000

 
と記述しても 同様の結果を得ることが可能です。

5
reito117 2020/01/27 (月) 11:48:18

mayu様

回答ありがとうございます。
正に思う通りの内容を記載して頂いた上に、様々教えて頂き大変恐縮です。

SQLはわずかながらに読める程度なので後学の為に教えて頂きたいです。
教えて頂いた3つのうちの1つ、集計クエリでのGROUP BY句の部分です。
GROUP BY q.勘定科目コード - IIf( q.勘定科目コード < 5000, 0, 1000 )

並びの肝の部分だと思うのですが、この条件式でなぜこんなきれいな並びになるかわかりません。
色々と調べてみてもわからないので教えて頂きたくお願い致します。

4

hatenaさん、こんにちは。
各方面でのご活躍、いつも拝見させていただいております。
管理者権限での表の編集、承知いたしました。わざわざのご連絡、ありがとうございます。

3

mayuさん、いつも回答ありがとうございます。
質問の編集は私が管理者権限で行いました。見やすくする為にテーブルをマークダウン書式にしました。

2

2020/01/24 (金) 15:00:34 に私が回答した後
2020/01/24 (金) 19:11:55 に投稿内容が編集されているようですが
その上で未解決ということは、もしかすると SQLの扱いが初めて なのでしょうか。

SQLは、フォームやレポートのレコードソースへも直に記述できるため
記述場所としては、色々あるわけですが

クエリを作るという状況において
SQLをどこに記述すればいいのか わからない
ということでしたら、以下をご覧になるといいでしょう。
 

クエリ SQL文でクエリを編集する: ACCESSとVBAとシステム開発
 ACCESSのクエリデザイン画面は、SQLの構文が分からなくても、感覚的な操作でクエリを作成することが出来る、とても便利なツールです。  SQLを直接書けるレベルになっても、キーボードからテーブル名や項目名を入力しなくて良いので、ちょっとした検索や集計をするのに便利です。  SQLServerやOracleなどの本格的なデータベースを使用するようになっても、ACCESSのクエリの便利さを一度覚えると、ACCESSが手放せなくなります。  簡単なクエリを作る場合、ACCESSのクエリデザインの画面はとても便利ですが、扱う項目数やテーブル数が多くなったり、複雑な条件を入力する場合や、サブクエリを利用したい場合は、デザイン画面ではやりにくいことがあります。  複雑な条件の場合は、グリッド..
ACCESSとVBAとシステム開発

 
なお、

損益計算書

勘定科目コード勘定科目金額(費用)金額(収益)
4001仕入25000-25000
4006通品費7000-7000
4010旅費交通費-1400014000
5006受取配当金-100100
5008有価証券利息00

 
上記のように、勘定科目コードの属性毎に欠番がある場合、
 

Expr1000Expr1001金額(費用)勘定科目コード勘定科目金額(収益)
4001仕入25000
4006通品費70005006受取配当金100
5008有価証券利息0
4010旅費交通費-14000

 
下3桁で完全外部結合するのではなく
 

Expr1000Expr1001金額(費用)勘定科目コード勘定科目金額(収益)
4001仕入250005006受取配当金100
4006通品費70005008有価証券利息0
4010旅費交通費-14000

 
同属の科目を昇順に並べるだけの場合は、SQLのロジックにもう一工夫必要になります。
 

SELECT Max( IIf( q.勘定科目コード < 5000, q.勘定科目コード ) )  As ex1
     , Max( IIf( q.勘定科目コード < 5000, q.勘定科目 ) )        As ex2
     , Max( IIf( q.勘定科目コード < 5000, q.cost ) )            As 金額_費用
     , Max( IIf( q.勘定科目コード > 4999, q.勘定科目コード ) )  As 勘定科目コード
     , Max( IIf( q.勘定科目コード > 4999, q.勘定科目 ) )        As 勘定科目
     , Max( IIf( q.勘定科目コード > 4999, q.revenue ) )         As 金額_収益
FROM
(
    SELECT x.勘定科目コード
         , x.勘定科目
         , x.[金額(費用)] As cost
         , x.[金額(収益)] As revenue
         , Count(1)       As gnum
    FROM 損益計算書 x
       , 損益計算書 y
    WHERE x.勘定科目コード Between 4000 And 5999
      AND y.勘定科目コード Between 4000 And 5999
      AND x.勘定科目コード \ 1000 = y.勘定科目コード \ 1000
      AND x.勘定科目コード >= y.勘定科目コード
    GROUP BY x.勘定科目コード
           , x.勘定科目
           , x.[金額(費用)]
           , x.[金額(収益)]
) q
GROUP BY gnum
ORDER BY gnum ;

 
ただし、データベースというのは 本来
第三者が見ても「 行単位でデータ構造を把握できる形 」になっている必要があり、
関連のない複数のデータが同じ行に並んでいるのは、不自然と言っていいでしょう。

投稿文のタグに クエリ・フォーム・レポート の3つが付与されていることから
どのオブジェクトにおいても段組で表示したい のだと想像しますが
コードの体系別に2列表示したいだけなら、レポートのみで行うことをお薦めします。

1

どのようにすればいいか教えて頂きたくお願い致します。

3パターンの SQL を載せておきます。

■ 集計クエリ

SELECT Max( IIf( q.勘定科目コード < 5000, q.勘定科目コード ) )  As ex1
     , Max( IIf( q.勘定科目コード < 5000, q.勘定科目 ) )        As ex2
     , Max( IIf( q.勘定科目コード < 5000, q.[金額(費用)] ) )    As 金額_費用
     , Max( IIf( q.勘定科目コード > 4999, q.勘定科目コード ) )  As 勘定科目コード
     , Max( IIf( q.勘定科目コード > 4999, q.勘定科目 ) )        As 勘定科目
     , Max( IIf( q.勘定科目コード > 4999, q.[金額(収益)] ) )    As 金額_収益
FROM 損益計算書 q
WHERE q.勘定科目コード Between 4000 And 5999
GROUP BY q.勘定科目コード - IIf( q.勘定科目コード < 5000, 0, 1000 )
ORDER BY q.勘定科目コード - IIf( q.勘定科目コード < 5000, 0, 1000 ) ;

 
■ 自己結合

SELECT x.勘定科目コード As ex1
     , x.勘定科目       As ex2
     , x.[金額(費用)]   As 金額_費用
     , y.勘定科目コード
     , y.勘定科目
     , y.[金額(収益)]   As 金額_収益
FROM      損益計算書 x
LEFT JOIN 損益計算書 y
ON
( 
      ( x.勘定科目コード Between 4000 And 4999 ) 
  AND
      x.勘定科目コード = y.勘定科目コード - 1000
)
ORDER BY x.勘定科目コード ;

 
■ 完全外部結合

SELECT y.勘定科目コード As ex1
     , y.勘定科目       As ex2
     , y.[金額(費用)]   As 金額_費用
     , z.勘定科目コード
     , z.勘定科目
     , z.[金額(収益)]   As 金額_収益
FROM
(
    (
        SELECT 勘定科目コード
        FROM 損益計算書
        WHERE 勘定科目コード Between 4000 And 4999
        UNION
        SELECT 勘定科目コード - 1000
        FROM 損益計算書
        WHERE 勘定科目コード Between 5000 And 5999
    ) x
    LEFT JOIN 損益計算書 y
           ON x.勘定科目コード = y.勘定科目コード
)
LEFT JOIN 損益計算書 z
       ON x.勘定科目コード = z.勘定科目コード - 1000
ORDER BY x.勘定科目コード ;
3
Access大好き 2020/01/23 (木) 19:07:22 39c03@a34e4

テーブルに書き込もうかと思います。サーバにテキストファイルとして一括出力を考えていたのですが
無理そうですので。。

2
kitty 2020/01/23 (木) 16:09:56 e4054@a3086

スナフキン様
ご連絡ありがとうございます。

ご指摘の件、実際のフィールド名を変えて質問していたため誤記です。
RS![名前] = Me![名前] となります。

このコードの前に、
 RS![check] = Me![check] ←チェックボックスがあるんですが、じつはここが問題だったようです。
フォームを開いた時に、チェックボックスがfalseになっていませんでした。
フォームロード時にチェックボックスを、
Me.check.Value = Falseにすることで解決できました。

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

1
スナフキン 2020/01/23 (木) 13:34:51 796a1@06760

meibo_Tのデザインはどうなってますか?

RS.Find "名前 LIKE '" & Me![検索用名前] & "'"

RS![氏名] = Me![氏名]

で名前なのですか?
氏名なのですか?

後はどんなフォームを作成されているのでしょうか?

2
hiroton 2020/01/23 (木) 09:00:44 4ac42@f966d

ログって「一括出力」するようなものでしたっけ?

一つのファイルに対して複数人が書き込みが可能なのか?

どのような場合においても不可能であり、可能です

・「ログデータ(ファイル)」はアクセス可能な場所か
・「ログデータ(ファイル)」が存在するか
・「ログデータ(ファイル)」が上書き可能な状態で開けるか
・「ログデータ(ファイル)」がロックできるか

等、根本的な出力場所の環境や同時にアクセスする可能性、その場合の処理を適切に組むことによって「1つのファイルに複数人が同時に書き込める」ような仕組みは作れるでしょう

ログ出力先がデータベースであればこの辺の考え方は標準機能なのでデータベースを扱う技術だけで実現できると思います
それこそ構築中のACCESS自身に出力するだけでいいのであれば追加クエリ1つ実行するだけです

ログ出力に何が必要か(タイミング、内容、データ形式)とログをどのように閲覧したいかを考えてみるといいと思います

1

「Webシステム(Java)の場合はログ出力用のモジュール」というのがどのようなもので、どのようなログを出力するのか分からないので具体的に回答が難しいです。
テキストファイルですか。
Accessのテーブルとか、他のデータベースなら複数人の書き込みは可能だと思います。

6
kitty 2020/01/21 (火) 16:14:42 e4054@a3086

hatena様
ご連絡ありがとうございます。

アクセスのアンインストールやってみます。
それでもダメな場合の、Microsoft DAO 3.6 Object Liblaryの参照設定 ですが、
これは旧バージョンで使っていましたが、2010ではこれも「DLL読み込み時のエラーです」とエラー表示されます。

ご連絡待っている間、2010でDAO⇒ADOに変更しておりました。
そんなに複雑なプログラムではないのでADOに作り替えたほうが楽な気がしてきました。
昨日ご教授いただいた、AC2007以降の帳票フォームで画像表示も通常設定でできましたし。

とりあえずADOで進めてみたいと思います。
また何かありましたらよろしくお願いします。

5

「DLL読み込み時のエラーです」とエラーがでます。

Access(Office)をインストールするとき、Microsoft office 16.0 Access Database・・・ も同時にインストールされるはずなんですが、失敗しているのかもしれません。
Access(Office)をいったんアンインストールして、もう一度インストールしてみたら解決するかもしれません。

それでダメなら、Microsoft DAO 3.6 Object Liblary を参照設定してみてください。
DAOの古いバージョンですが、機能に差はないので問題なく使えるはずです。

4
kitty 2020/01/21 (火) 08:19:17 e4054@a3086

hatena様
ご丁寧にありがとうございます。

ご連絡を待っている間、2010形式で作り替えてみたところ、
2000で作っていたDAOが機能しませんでした。
ネットで調べたところ、Win10 64ビットのためかDAOの参照設定が無効になっていたため
Microsoft office 16.0 Access Database・・・を参照設定するようにと記載がありましたのでチェックを入れたところ、「DLL読み込み時のエラーです」とエラーがでます。

これはどうしたらよろしいでしょうか?
今後のために教えていただきたくお願い致します。

3

詳細セクションにイメージコントロールを配置して、VBAでイメージコントロールのPictureプロパティに画像のパスを設定します。レコード毎に変更したいので、フォーマット時のイベントプロシージャに記述します。

下記のような感じのコードになります。(フィールド名などは適当ですので適宜変更してください。)

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
    Dim ImgPath As String
    Select Case Me.資格コード
    Case 1
        ImgPath = "C:\test\image\pic1.bmp"
    Case 2
        ImgPath = "C:\test\image\pic2.bmp"
    Case 3
        ImgPath = "C:\test\image\pic3.bmp"
    End Select
    Me.イメージコントロール.Picture = ImgPath
End Sub
2
kitty 2020/01/20 (月) 13:44:11 e4054@a3086

hatena様
お返事ありがとうございます。
アクセスのバージョンは2000です。

レポート印刷のイメージは画像のとおりです。
(資格3種類、1名×2種類の場合)

バージョン替えて作り替えるよりこのまま進めたいのですが
何か良い方法がありましたらアドバイスいただけましたら幸いです。

画像1

1
hatena 2020/01/20 (月) 12:02:07 修正

Accessのバージョンは何でしょうか。
AC2007以降なら、イメージコントロールのコントロールソースプロパティに画像パスを設定することで簡単に表示させることができます。

下記の「画像ファイル名のみ格納してイメージコントロールで表示する方法」の項目を参照ください。
帳票フォームでの説明になってますが、レポートでもまったく同じ方法で使用できます。

AC2007以降の帳票フォームで画像表示
AC2003以前は画像の取り扱いはなかなか大変でした。OLEオブジェクト型に画像データを格納すれば、帳票フォームでも簡単に表示できて便利なんですが、Jpegなどの圧縮ファイルでも展開された状態で格納されるので、データベースファイルが肥大化したり、OLEサーバーに対応した画像処理ソフトが必要だったり、といろいろ問題点も抱えています。 そこで、ファイル名をテーブルに格納して、VBAでイメージコントロールにファイルパス...
fc2

6

とりあえず週単位の場合の集計を作成する方向でいましょう。
それができたら、月単位に応用するのは簡単ですね。

週単位は7日の間に、という意味です

すべての日付に対して、直近7日間での合計ということでしょうか。

例えば下記のような感じでしょうか。

氏名勤務日勤務時間(演算値)直近7日間計
AAA1月1日22
AAA1月2日35
AAA1月3日49
AAA1月4日110
AAA1月5日212
AAA1月6日315
AAA1月7日419
AAA1月8日522
AAA1月9日221
AAA1月10日623

表示させるとして、どこに、どのタイミングで表示さようと考えてますか。
入力フォームで 勤務開始時間 勤務終了時間 を入力したときに、規定時間をオーバーしていたらテキストボックスにそれを表示させる。
あるいは、入力完了後、レポートに一覧を表示させてそのときに規定時間オーバーを表示させるとか。

やろうとしていることを具体的かつ詳細に説明してもらえませんか。

5

まだ作成していませんが単純に
勤務id(主キー) 氏名 勤務日 勤務開始時間 勤務終了時間
適当です

週単位は7日の間に、という意味です

4
スナフキン 2020/01/17 (金) 11:57:23 c4b84@06760

週単位というのが...
今年初めの場合、12/29(日)~1/4(土)を週単位とみなすのですか?
それとも、1/1(水)~~1/4(土)を週単位とみなすのですか?

2
スナフキン 2020/01/17 (金) 11:44:02 c4b84@06760

こんにちは!
https://tsware.jp/tips/tips_522.htm
この形で保存して、
BASP21で送信するのがいいかと思います