2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

Access総合相談所 29

1 :名無しさん@そうだ選挙にいこう:2019/09/23(月) 20:02:25.84 .net
ACCESSに関する質問はこちらへ
▼━ 質問のしかた ━━━━━━━━━━━━━━━━━━━━
★ 質問内容は具体的に書いてください。
  業務上の守秘義務も大事ですが、貴方の所属組織を特定できるほど、特異な業務・システムは滅多にありません。
 作りたいものの内容を隠しすぎないようにし、列名、データ値を適当に変更して例示するなどしましょう。
★ 事前にGoogle等で調べられる範囲は調べてください。
★ 完全初心者はまず、新規作成テンプレから「NorthWind」を開いて、一通り触ってみてください。ACCESSの概念を理解する
もっとも簡単な方法です。
★ お金の管理でシステム設計ミスが会社経営に重大な支障が予見される場合は、パッケージソフトに誘導する場合があります。
格安なソフトもあるので設計に取りかかってから悩む前に、市場調査も行なってください。
★ アドバイスを貰ったら、必ず経過・結果の報告をして下さい。
  ギブアンドテイクで情報を共有しましょう。
▼━初心者用質問テンプレ ━━━━━━━━━━━━━━━━━
【Windows】 7, 8,10 【Access】 365,2013,2016,2019
【作りたいものの業務分野】
販売管理,買掛管理,営業予算管理,営業実績管理,生産管理,
財務管理,労務管理,学術研究統計,文字格納を主体としたDB,その他()
【あなたのスキル】
LV1:完全初心者,
LV2:ACCESSの基本要素(テーブルやクエリーなど)の役割を知っている
LV3:VBAが打てる
【どのオブジェクトに関する質問か】
テーブル,クエリー,フォーム,レポート,サブフォーム(サブレポート),リレーション,VBA
【やりたいこと】
(質問によっては各テーブル名と列名を例示)
(クエリーの場合は、左上の「表示」を押し”SQLビュー”に変更して表示される”SQL文”を貼り付けると回答者がわかりやすい)
(得たい出力結果や挙動)
【エラーメッセージに関する質問】
・エラーメッセージの内容 ・windowsは32bit版か64bit版か
前スレ
Access総合相談所 28
https://mevius.5ch.net/test/read.cgi/bsoft/1535638568/

164 :名無しさん@そうだ選挙にいこう:2019/11/17(日) 20:46:21.95 .net
>>162>>163
そう
俺も自作した、vbaのopenqueryがautoになった
幸いあまり使わないものだから良かったけど、
これ毎日使う物だったら地獄だろうな

165 :名無しさん@そうだ選挙にいこう:2019/11/17(日) 22:56:45.52 .net
autoになったなら楽ちんじゃん

166 :名無しさん@そうだ選挙にいこう:2019/11/18(月) 07:23:57.51 .net
>>161
シンプルで心に沁みる言葉だな

167 :名無しさん@そうだ選挙にいこう:2019/11/18(月) 07:27:39.29 .net
>>164
このスレでautoはアウトじゃなくてautoexecだから

168 :名無しさん@そうだ選挙にいこう:2019/11/18(月) 13:54:09.49 .net
先週まで大丈夫だったけど
ついにやられた。
office365だけど、修正手順が複雑すぎてあきらめた。
どうしよ、結構、重要な業務に使ってるんだけど。

169 :名無しさん@そうだ選挙にいこう:2019/11/18(月) 15:33:17.67 .net
【 システム環境  】 Windows10, Access2016
【 VBAが使えるか 】 否(excelでは経験あり)
【 VBAでの回答  】 可

ACCESSに挑戦してます
社員テーブルに社員NO・氏名・課があります
メインの数値テーブルに共通の項目と課毎に入力するフィールドを作成予定で
フォームには共通項目とその課に該当するフィールドだけを表示させて
打ち込むようにしたい、と考えています

┏━━┓
┃氏名┃
┗━━┛
↓T_社員から自動取得
┏━━┓
┃課一┃
┗━━┛
↓課に該当する項目を表示し、数値を入力
┏━━━━━━━┓
┃共通打込項目一┃←表示
┗━━━━━━━┛
┏━━━━━━━┓
┃共通打込項目二┃←表示
┗━━━━━━━┛
┏━━━━━━━┓
┃課一打込項目一┃←表示
┗━━━━━━━┛
┏━━━━━━━┓
┃課二打込項目一┃←表示されない
┗━━━━━━━┛

上記みたいなイメージですが可能でしょうか

170 :名無しさん@そうだ選挙にいこう:2019/11/18(月) 18:27:17.92 .net
>>169
課によって入力項目変わるんですね。
課マスターに
打たせる項目をboolean(yes no)か
1 0で入れときましょう。
フォーム用のクエリーは従業員のidをもとに従業員マスター経由で課マスターから課の名前、
打たせる項目の制御値を出しましょう。
フォームでは打たせる項目制御値を配置して非表示にしましょう。
実際に打たせる項目の表示非表示は
どこで発火させるか、私も常々トライアンドエラーなので
オブジェクトのイベント(更新後処理など)で試してください

171 :名無しさん@そうだ選挙にいこう:2019/11/18(月) 23:33:38.38 .net
>>169
可能でしょう。いくつかヒントをお伝えします。

ヒント1
社員NO(主キー),氏名,課

T_課
課ID(主キー),課名
T_社員
社員NO(主キー),氏名,課ID

課名の入力間違いがあるといけません、二つのテーブルに分けましょう。そして、その両者を課IDでリレーションシップしてください。

ヒント2
コンボボックスのプロパティの
データタブにある値集合ソースをT_社員にして
連結列を1に
書式タブの列数を2、列幅を、0cm;(コンボボックスの幅)cmに
こうすると、見かけ上は氏名を選択して、実質は社員NOを選択することができます。

ヒント3
フォーム上で課毎の打込項目コントロ-ルは重ねることができます。
とはいえ、フォームを開いたとき全部を表示されると
みっともないので、まず、フォームの「開く時」イベントで課毎の打込項目全てを.Visible=falseにします。
社員NOを選択すれば課は特定できますから、そのコンボボックスの「更新後処理」イベントで

dim 課ID as long
課ID=Dlookup("課ID","T_社員","社員NO ="&Me.[社員NO])

とかで課IDを取得し、それをselect case文で使って、それぞれのCASEに該当するものだけ.Visible=trueにし、それ以外は.Visible=falseにします。

不明な点があれば、追加で聞いてください。

172 :名無しさん@そうだ選挙にいこう:2019/11/19(火) 01:15:40.60 .net
不具合関連
https://support.office.com/en-us/article/access-error-query-is-corrupt-fad205a5-9fd4-49f1-be83-f21636caedec
このドキュメントが言ってるのは
update系のクエリーで
テーブルの対象レコードを直接的にフィルターして
update sqlをかけるとコケるから
一回、テーブルを単にセレクト * from tableとしたクエリー
作って、対象をそのクエリーに置き換えろ、
ってことなのかね。

エライこと面倒くさい。

173 :名無しさん@そうだ選挙にいこう:2019/11/19(火) 11:50:28.54 .net
>>170-171
ありがとうございます!
非表示にするということは非表示項目は歯抜けになっていくイメージですよね
非表示は詰められるといいなぁと思ってましたので考えます

また別件ですが売上を記録していくDBで売と買で売上が発生して
更に複数人に売上がつくケースもあるのですが
その場合、売と買で別々の売上テーブルを設計したほうがいいでしょうか
項目は同じだから同じテーブルにまとめたほうが良いですか?

174 :名無しさん@そうだ選挙にいこう:2019/11/19(火) 12:38:42.34 .net
>>173
一緒でいいです
売買は買が発生して完結します

売の個数>買の個数なら、売状態が継続ですね

175 :名無しさん@そうだ選挙にいこう:2019/11/19(火) 13:04:00.23 .net
とりあえず、テーブルの名前を集めて一時ファイルに保管し
片っ端から頭に"t_"をつけてリネームし、
単なる"SEELECT * FROM t_なんちゃら"
をSQLとするクエリー(クエリー名を元のテーブル名)を保存する
module 作ってみた。
単なるテキストファイルなので参考まで。
https://thuploader.orz.hm/miniup/?mode=edit&id=5699
危ない場所があったら、ご教示ください。

戻すときは、sub modosu です。

176 :名無しさん@そうだ選挙にいこう:2019/11/19(火) 14:39:20.02 .net
>>174
ありがとうございます

更に質問なんですが、売上種別みたいなものをもって
支払いも売上テーブルの中に入れてよいですかね

また直接的な商品・エンド顧客がない売上(紹介料など)を
その売上テーブルに入れるか分けるか悩んでいるのですが
どちらが良いですか?

今イメージしているテーブルを貼ってみます
アドバイスいただければ幸いです
https://imgur.com/Wy0P12k.jpg

177 :名無しさん@そうだ選挙にいこう:2019/11/19(火) 14:56:13.78 .net
>>176
横からだけど売上テーブルに商品名入れといたほうがいいよ。
一年も他の人に打たせてたら、
商品番号1 みかんを
りんごに変えるアホンダラが発生するのでこれまでの売上が全部、りんごになる。
商品名欄を儲けることで商品番号999 販売促進費としておいて、
売上のときに(広告協賛費)みたいに自由に書くことができる。
得意先ってあれやこれやの意味不明な逆請求を頻繁にかけるから。

178 :名無しさん@そうだ選挙にいこう:2019/11/19(火) 15:26:10.43 .net
>>177
ありがとうございます!

ボカしたせいですね、申し訳ないです
商品は不動産なんですよね

なので、他業者が買い取りして、それをウチで再販することがあったり
購入者が事情があってすぐ売り出すことはあっても基本同じ商品が
売に出ることはないないんですよね
なので上記のような設計になりました!

179 :名無しさん@そうだ選挙にいこう:2019/11/19(火) 23:15:50.44 .net
>>176
対価を受け取る行為も商品として扱って良いと思います。
それを決算時に会計処理上分ける予定なら、それだけを取り出す
選択クエリを作ればよいのです。

>>177
売上テーブルには商品コードだけで十分ではないですか?
ただし、フォーム上では商品名として表示させる工夫は必要でしょう。
テキストボックスのコントロールソースに商品コードから
商品名を導き出すdlookup関数を使ったコードを置くとか
>>171のヒント2の様な方法で表示は可能でしょう。

コードは裏方です、商品名のフリをした商品コードにするだけで
かなり使い勝手は良くなります。

また、フォーム上に非表示のコントロールを置いてそれで制御するとかも

売上フォームでは、備考フィールド以外はコードと数値の羅列のテーブルをレコードソースにすれば足りますし、徒にファイルサイズを大きくしません。

180 :165:2019/11/20(水) 09:01:22.33 .net
>>179
実績系はこーどだけ保持していればよいかの話。
業態による。
質問者の例は、商品は使い回さないので、コードだけで可。
この場合の商品マスターは実は売上明細そのものだったりする。
利用可能な業態としては労務提供、受託開発、建築工事不動産など。
いっぽうプロパー商品(決まったものを何回も仕入れて売る)は、マスターに動きがある可能性を
考えるべき。
売上明細をコードと個数だけ、あとは参照としましょうよ。
165で書いた「みかん」を「りんご」に上書きするバカがいると
過去のみかんの売上がすべて、りんごの売上になりますよね?
これを内部統制で禁止しましょう。
じゃあ「みかん」の仕入値は刻々と変わるので建値も変えます。特売もあるかもしれません。
参照だと、過去のすべての売上が
「最新の単価」で実績化されます。
さらにマスターの単価などの編集を内部統制で禁止しましょう。
商品1 みかん100円、2 みかん103円 3みかん95円 というマスターができて「マスター」の役割がやや揺らぎます。

リレーショナルデータベース開発で、最初に失敗しやすい事象です。

181 :名無しさん@そうだ選挙にいこう:2019/11/20(水) 09:37:00.18 .net
>>180
上書きするのは、それが出来てしまうからなんですよね。
内部統制という運用でなんとかするのは、無理なこともあるのでは?
>>177の事例はまさにそれです。

商品名に変化が無いなら、その商品名を商品マスター以外に置くのが良いと考えます。
仕入値や個数などはマスターに置くべきですが

182 :名無しさん@そうだ選挙にいこう:2019/11/20(水) 13:14:10.98 .net
今、Officeの更新したらバージョンが20390に上がってて
クエリは破損していますの不具合出なかった。
Offcie365です。

183 :名無しさん@そうだ選挙にいこう:2019/11/20(水) 16:29:41.20 .net
>>182
同じく

184 :名無しさん@そうだ選挙にいこう:2019/11/20(水) 19:16:24.88 .net
2016のC2Rだけど、メッセージ出たからアプデ止めた
KB探したけど無かったから(探せなかっただけ?)
Accessだけ起動してアカウントの Office 更新プログラムやったら
なんか入ってきて、「クエリ”は破損・・」のメッセージ出なくなった めでたし?

185 :名無しさん@そうだ選挙にいこう:2019/11/20(水) 21:07:10.33 .net
ページ更新されてた 修正予定が前倒しになった模様
https://support.office.com/en-us/article/access-error-query-is-corrupt-fad205a5-9fd4-49f1-be83-f21636caedec

11/20の現状対策済なのは
Access2016 MSI版・C2R版
Access2019 (ボリュームライセンス版除く)
Office365
これらは今最新版に更新もしくは対応のKBインストールすれば直る

あとは11/23頃にAccess2010・Access2013
12/10頃にAccess2019ボリュームライセンス版の更新で修正される模様

>>184
C2RにはKBのアップデート無いよ Office単体の更新プログラムだけしか来ない

186 :名無しさん@そうだ選挙にいこう:2019/11/20(水) 21:25:33.21 .net
じゃあ、なんでメッセージ出なくなった? 更新試したの昨日の朝イチだけど?
前倒しが来てくれたのかな? とりま、めでたし?

187 :名無しさん@そうだ選挙にいこう:2019/11/20(水) 23:36:57.18 .net
>>185
2016だけど、該当KBが無いということは、
Office comからのインストール版だから?
手動更新して治ったけどやれやれだわ

188 :名無しさん@そうだ選挙にいこう:2019/11/21(木) 00:38:07.32 .net
2013だけど4484119が見つからない…
会社のだからよく知らないけどC2R版ってことですかね?

189 :名無しさん@そうだ選挙にいこう:2019/11/21(木) 00:39:17.12 .net
C2Rで更新振ってくきたのっていつからだったんだろう

190 :名無しさん@そうだ選挙にいこう:2019/11/21(木) 12:11:40.89 .net
C2R版がどういうものかくらい調べましょう
パッチがないことも、見分け方もわかるでしょう

191 :名無しさん@そうだ選挙にいこう:2019/11/21(木) 12:23:58.46 .net
Acだけで起動して右画面に『Office 更新プログラム』と『バージョン情報』の
二つが縦に並んでるのが C2R
RuntimeはKB入る  そんな感じ?

192 :名無しさん@そうだ選挙にいこう:2019/11/21(木) 17:39:10.91 .net
>>169です
おかげさまで個人の月毎売上合計クエリまでは作成できました
次に課毎の売上を出そうと思ったのですが詰まってます

https://www.accessdbstudy.net/entry/20080419/p1
上記URLを参考にもとになる社員一覧テーブルと異動があった場合に記録していく異動テーブルを作りました

過去の売上を出す場合、その契約日当時の課を出したいのですが
売上が同一な移動前と異動後の課が表示されてしまいます
https://imgur.com/YTKof4Y.jpg

とても初歩的なことで申し訳ないですがよろしくお願いいたします…。

193 :名無しさん@そうだ選挙にいこう:2019/11/21(木) 21:35:45.02 .net
>>192
配属日が契約日より前という条件だけでは足りません。
"where条件"ではなく"最大"にしてみてください。
そうすれば契約日の直前の配属日の配属先だけに絞り込まれるはずです。

なお、配属日と契約日が同日でも(つまり配属直後に契約でも)良いのですから
抽出条件は<=[契約日]が良いと思います。

194 :名無しさん@そうだ選挙にいこう:2019/11/22(金) 00:15:43.07 .net
windows updateでc2r版も更新されたとは思うけど、
いつ更新されたか、履歴とかあるのかな?どこで確認したら良い?

195 :名無しさん@そうだ選挙にいこう:2019/11/22(金) 04:11:57 .net
c2rならインストール日が更新される
いいかげんPCの使い方みたいな話やめよう

196 :名無しさん@そうだ選挙にいこう:2019/11/22(金) 10:50:33.83 .net
>>193
ありがとうございます
早速試してみました!

ですが、最大にしても異動テーブルで複数記載している社員は
課が二つ出てきてしまいました…
ここがクリア出来たら、あとは入力値を詰めていって
フォームに取り掛かれると思ってたんですが…

https://imgur.com/RaTQZyV.jpg

197 :名無しさん@そうだ選挙にいこう:2019/11/22(金) 11:10:05.82 .net
ちなみにSQL文は以下のようになってました

SELECT T_配属.社員名, T_売上.契約日, Max(T_配属.配属日) AS 配属日の最大, T_配属.配属先, T_売上.仲介手数料, T_売上.仲介消費税
FROM T_配属 INNER JOIN T_売上 ON T_配属.社員名 = T_売上.社員
GROUP BY T_配属.社員名, T_売上.契約日, T_配属.配属先, T_売上.仲介手数料, T_売上.仲介消費税
HAVING (((Max(T_配属.配属日))<=[契約日]));

198 :名無しさん@そうだ選挙にいこう:2019/11/22(金) 21:23:16.71 .net
ACCESSのアプデーと来ました!!

199 :名無しさん@そうだ選挙にいこう:2019/11/22(金) 22:09:13.13 .net
まじか!

200 :名無しさん@そうだ選挙にいこう:2019/11/24(日) 11:28:19.17 .net
何度も申し訳ございません
>>196-197で解決策がわかる方、どなたかいらっしゃいませんか…
異動問題がここを解決したいのですが、2日間自分で考えたり調べたりしても無理でした

最悪、月毎に全社員の所属情報を記録するテーブルでも作ろうとも考えましたが…

201 :名無しさん@そうだ選挙にいこう:2019/11/24(日) 11:34:26.04 .net
12月っていってたアップデート、365で来てたのね
早速適用して治ったわ。末までに来なかったらテーブル手作業更新の地獄が待ってた

202 :名無しさん@そうだ選挙にいこう:2019/11/24(日) 16:49:15.51 .net
帳票ツールとして使ってるユーザー多いのに、こういうバグが発生するとな
いくらマイクロソフトが力入れてないとしても

203 :名無しさん@そうだ選挙にいこう:2019/11/24(日) 20:15:58.26 .net
ゆうパックで業務止まってたらしいし
月末系だとタイムカード集計で発生したら給与出せなく成るし TimeP@ckだっけ
月一しか使わない機能だと周知されてないと悲劇起きるな

204 :名無しさん@そうだ選挙にいこう:2019/11/24(日) 23:57:14.71 .net
他のバージョン使ってなんとかなったけど、2013 C2Rの修正12/10とか殺す気かよw

205 :名無しさん@そうだ選挙にいこう:2019/11/25(月) 00:11:55.32 .net
>>204
他のバージョンも最初は全部その日だったんだぜ…?

206 :名無しさん@そうだ選挙にいこう:2019/11/25(月) 07:11:17.94 .net
さすがに前倒しにはなると思ったけど予想以上に早かったな

207 :165:2019/11/25(月) 08:24:02.84 .net
>>200
インスタントに答え求めるんじゃないよ。
だいたい皆さん、余裕があるときに書いてるんだから。
まずさ、その配属テーブルだけじーっと見てみ。
一行で「いつから」『いつまで』の配属か分かればもっと楽だよね。こっちも考えるけどおまいも
真剣に考えろ。

208 :195:2019/11/25(月) 10:29:41.11 .net
>>200
===Q_配属M===
"セレクト” TBL_配属M.RECID, TBL_配属M.社員番号, TBL_配属M.配属,
TBL_配属M.配属日,
DCount("配属日","TBL_配属M",[WHERE句])+1 AS インデックス,
"社員番号=" & [社員番号] & " AND 配属日<#" & [配属日] & "#" AS WHERE句,
[インデックス]+1 AS インデックス2 FROM TBL_配属M;
===Q_配属M2===
SELECT Q_配属M.RECID, Q_配属M.社員番号, Q_配属M.配属, Q_配属M.配属日,
Q_配属M.[インデックス], [Q_配属M_1].[配属日]-1 AS 転属1,
IIf(IsNull([転属1]),DateAdd("yyyy",100,[Q_配属M].[配属日]),[転属1]) AS 転属日
FROM Q_配属M LEFT JOIN Q_配属M AS Q_配属M_1
ON (Q_配属M.[インデックス2] = Q_配属M_1.[インデックス])
AND (Q_配属M.社員番号 = Q_配属M_1.社員番号);

209 :196:2019/11/25(月) 10:39:39.19 .net
続き
===売り上げとの紐付け
SELECT T_URI.RECID, T_URI.売上日, T_URI.売上,
T_URI.社員番号, Q_配属M2.配属, Q_配属M2.配属日, Q_配属M2.転属日
FROM T_URI LEFT JOIN Q_配属M2 ON T_URI.社員番号 = Q_配属M2.社員番号
WHERE (((T_URI.売上日)>=[配属日] And (T_URI.売上日)<=[転属日]));
やってること
クエリー1つめ、社員番号の配属先の古い順にインデックス番号を生成する
ついでに次のインデックスも+1で埋めて置く
クエリー2つめ、Q_配属Mを2つ並べる。1つめの「Q_配属M」の
「社員」および「インデックス2」と2つめの「Q_配属M」の「社員および」「インデックス」
を紐づける。尚、当然、空値もあるので、紐付けはLEFT JOINとする。
そのうえで、転属1: [Q_配属M_1].[配属日]-1(次の配属日の1日前)
さらに最後の所属の空値対策で、
転属日: IIf(IsNull([転属1]),DateAdd("yyyy",100,[Q_配属M].[配属日]),[転属1])
(最後の所属は、配属日の100年後)とする。
最後に、売り上げとQ_所属M2をつなげる。
Q_所属M2からは、(T_URI.売上日>=[配属日]) And (T_URI.売上日)<=[転属日])
を条件とする。
https://i.imgur.com/6WtnoHn.jpg

210 :名無しさん@そうだ選挙にいこう:2019/11/25(月) 18:32:36.20 .net
>>196
上手くいきませんでしたか、それは失礼しました。
既に他の方が回答されているようですが、これが私の回答になります。改めて以下の手順でやってみてください。

選択クエリを作成
T_売上とT_配属を表示させ
社員と社員名で結合
フィールドは以下の3つ
T_売上.*,配属日、配属先
配属日の抽出条件に
<=[契約日]
を入れます。
これをQ_売上+配属という名前で保存

これでそれぞれの契約日以前の配属日と配属先がT_売上に付加されます。
ただ、これには過去の複数の配属日が含まれます。

次に、別のクエリを作成
Q_売上+配属だけを表示させ
フィールドは以下の2つ
Q_売上+配属.*,配属日

配属日の表示のチェックを消して、抽出条件に
DMAX("配属日","Q_売上+配属","[社員]=" & [社員] & "AND [契約日]=#" & [契約日] &"#")
を入れます。
これにより、[社員]毎に[契約日]直前の配属日と配属先が特定されます。

このクエリとT_売上のレコード数は一致するはずです。
どうですかね?

211 :名無しさん@そうだ選挙にいこう:2019/11/26(火) 10:12:50 .net
レスが遅くなってしまい申し訳ございません
>>208さん、>>210さんお二人ともありがとうございます!
昨日は体調不良で何も出来てないので今日頑張ってみます!!

また催促するような真似をしてしまい申し訳ございません
以後気を付けます

212 :198:2019/11/26(火) 12:55:46.92 .net
>>211
一部訂正です
二つ目の抽出条件のANDの前後には半角スペース入れて下さい

ちなみにDMAXのような定義域集計関数は処理に時間が掛かる事があります
その場合はサブクエリに置き換える方法もあるのですが、エラーになることもあり
こちらをオススメします

213 :名無しさん@そうだ選挙にいこう:2019/11/26(火) 19:56:35.44 .net
>>200です
>>208さん、>>210さんのおかげで求めたいものが出せました!
ただご指摘にもあった通り、DMAXで計算時、重たいものとなってしまいました。
調べてみた限りだとVBAのほうが軽くなるみたいなので
やっぱりそっちも勉強していかないとダメですね

難しいと思って今まで逃げてきた道だけど、やっぱり難しい…

214 :名無しさん@そうだ選挙にいこう:2019/11/30(土) 15:51:56.92 .net
【 システム環境  】 Windows10, Access2010
【 VBAでの回答  】 可 SQLでも可

教えてください。

[日付] [店舗名] [購入品] [購入金額]

というフィールド構成のテーブルがあります。
このテーブルから、それぞれの店舗ごと、一番最初に買物をした日付と
その時の購入品、購入金額を抽出したいのですが、どうやればいいのでしょうか?
店舗ごとの一番最初の日付というだけならクエリを作れるのですが、
その最初の日付のときの購入品や購入金額も同時に取得することができません。

よろしくお願いいたします。

215 :165:2019/11/30(土) 19:42:07.98 .net
>>214
あえて一つのqueryに詰め込まないよ。
日付と商店だけ選択して
集計クエリーに変更
日付を最小値
これで一旦保存 q1
q1と元のテーブルを並べて日付と商店を線で結ぶ。

なお、同じ日に2アイテム買ったら
2アイテム出てくるのは、そういうもんだと思ってくれ。

216 :名無しさん@そうだ選挙にいこう:2019/11/30(土) 22:22:37.06 .net
>>214-215

集計クエリにして、
[日付]  =最小値
[店舗名] =グループ化
[購入品]  =先頭
[購入金額] =先頭

これでダメ?

217 :名無しさん@そうだ選挙にいこう:2019/12/01(日) 09:21:16.30 .net
>>216
先頭や最後は使わないです
https://www.feedsoft.net/access/sql/sql54.html
にもあるように望みのレコードを得られないことがあるのです
これはデータベースというのがハッシュテーブルというレコードの順序をあえてランダムに記録するテーブルだからでしょう

218 :名無しさん@そうだ選挙にいこう:2019/12/01(日) 10:56:55.24 .net
>>214
そのテーブルをT_購入履歴とするなら
そのテーブルの選択クエリ作って
日付フィールドの抽出条件に
=DMin(“日付”,”T_購入履歴”,”[店舗名]=“&[店舗名])
を入れる

当然だけど、一番最初の日付で複数の商品を購入してたら、クエリの結果もそれが反映されて
1店舗で複数のレコードが表示されるけどね

それから更に絞り込むかどうかは別の問題

219 :名無しさん@そうだ選挙にいこう:2019/12/01(日) 11:37:47.12 .net
>>218
自己レス訂正
抽出条件は
=DMin(“日付”,”T_購入履歴”,”[店舗名]=‘“&[店舗名]&”’”)
だった。
Criteriaでフィールド値を指定する場合
数値はそのまま
文字列はアポストロフィ'で挟む
日付は#で挟むんだったわ

これは定義域集計関数だけじゃなくて
フィルターでも同じ

220 :名無しさん@そうだ選挙にいこう:2019/12/02(月) 21:34:29.00 .net
【 システム環境  】 Windows10, Access2010

VBAのイミディエイトウィンドウにて

?30.76666666666667-29
 ↓
1.76666666666667

でOK、しかし

?30.76666666666667-30
 ↓
0.766666666666669

と結果がおかしい
どうしてでしょうか?

221 :名無しさん@そうだ選挙にいこう:2019/12/02(月) 23:06:48.64 .net
ヒント:有効数字、2進数の丸め

222 :名無しさん@そうだ選挙にいこう:2019/12/02(月) 23:07:23.34 .net
通貨型でやってみ

223 :名無しさん@そうだ選挙にいこう:2019/12/03(火) 07:09:04 .net
>>220
1.まずは、浮動小数点数というものを理解して、コンピュータでは実数を正確に
表せないので近似を使っていることを理解する
さらに、significant digitというものについて調べておく

2.現在使われている標準的な倍精度浮動小数点数の規格に準拠すると、「普通は」それぞれ
1.7666666666666693
0.7666666666666693
を返すことを認めましょう(ブラウザのjavascript consoleで試せます)

3. で、VBA独自の仕様として、「signiifcant digitは15を超えない」という規則があるため、
前者は、16番目の数の9を切り上げて
1.76666666666667
後者は、(0.xxxの0はsignificant digitではないので)17番目の3を切り捨てて
0.766666666666669
となります。

224 :名無しさん@そうだ選挙にいこう:2019/12/03(火) 13:41:16.83 .net
すげ。2ヶ月くらい前にも
この話題、出てたよね。
小数点4桁以下を扱う仕事を
したことないから、型の仕様の違いに気づくことなかったわ。

225 :名無しさん@そうだ選挙にいこう:2019/12/03(火) 14:29:16.92 .net
現在、毎日社員が件数を打ち込む日報なようなものを作成しています
EXCELでVBAを触っていたのでVBAの知識はそれなりにあると思います


課毎で項目が変わるのでフォームで課を入力すると、テーブルに保存してある
「課に適した項目・表示する箇所」をもとに抽出して、それをテキストボックスに項目を表示させます
また件数用のテキストボックスを作成して、そこに打ち込んだあと
登録ボタンを押すとテーブルに保存させるようにしました(ここまでは完成済み)


更に件数を打ち込んだ時点で自動的にテーブルに保存させれないかなと考えてハマりました

・テキストボックスの合計を保持するテキストボックスを使用してその値が更新されたらテーブルに保存
 →テキストボックスが60個あるので、似たような処理を全てに入れるのは大変
   →classを作成して、読み込もうとしてもエラーになって上手くいかない
     (classの冒頭で行うテキストボックスの宣言でエラーになる)

・サブフォームでフィールドを読み込んで出来ないか?更新を自動的に行えないか?
 →調べても出来ない状態

何か良い案あるでしょうか?

226 :名無しさん@そうだ選挙にいこう:2019/12/03(火) 21:15:24.87 .net
>>225
Access特有の仕様で、フォームにテーブルなとをレコードソースにしている限りは
入力後にそのコントロールを外れた瞬間に値の仮確定、
レコード移動ボタンやフォームを閉じるだけでレコードの保存が完了します。
レコードを移動しないで保存を完了するには、me.requeryや
>108さんご教示のme.dirty=falseなど。
課ごとの入力項目は、そういったテーブルを用意してテーブルのフィールド名を1レコード1フィールド名で保存、
フォームのコントロール名はテーブルのフィールド名と一致させておきます。
課選択後に入力項目テーブルを読みにいかせて、ぶん回して
me.controls(value).visible=true
enabled(入力可 不可選択)でもいい。
じゃあ、入力項目以外をどうロックするかだけど
入力項目のテーブルからいわゆる60項目を並べたものをクエリーにして
レコード移動時イベントプロシージャに入ったときに
このクエリーを読みにいかせ、
dbo方式なら
rst.fields.countでループ回数を取得、
ループに入ってから
rst.fields(変数).nameで名前を拾って
上記のような手法で全部、非表示にしてはどうでしょうか。

227 :名無しさん@そうだ選挙にいこう:2019/12/03(火) 21:16:31.24 .net
スマホで打ったら、
改行入らなかった。
すまん。

228 :名無しさん@そうだ選挙にいこう:2019/12/04(水) 21:41:14.67 .net
フォームあれこれ1

レコードソースにレコードが無いとフォームビューでコントロールすら表示されない。
レコードソースがテーブルで、レコードセットがDynasetなら新規レコードが常にありますからそんなことにならないのですが
選択クエリだと、選択の結果が0レコードってこともあるので、その場合はコントロールすら表示されず、背景がただ表示されるだけになります。

解決方法
選択クエリで対象となるテーブルどうしのリレーションシップを設定します。
リレーションシップで選択クエリと同じ結合をします。
主キー側が1、そうでない側が∞の表示になります。
フィールドの連鎖更新等のチェックは全部いれてかまいません。
これを1:多の結合といいます。
フォームビューを見る前に、選択クエリのテーブルビューで*が最後のレコードの次に表示されているか確認しましょう。

229 :名無しさん@そうだ選挙にいこう:2019/12/04(水) 21:43:17.13 .net
フォームあれこれ2

サブフォームとの連携はどうする?

メインフォームで選んでいるコントロールの値を選択条件の設定には
1 サブフォームのプロパティでリンク親フィールド(メインフォームのコントロール名)と
対応するリンク子フィールド(サブフォームのコントロール名)をそれぞれ指定する方法
2 サブフォームのレコードソースをメインフォームのコントロールの値で選択する設定をした選択クエリにする方法
があります。やりやすい方で良いかと

230 :名無しさん@そうだ選挙にいこう:2019/12/04(水) 21:44:54.04 .net
フォームあれこれ3

絞り込み機能付きの帳票フォームはサブフォームでないといけないの?

絞り込みということであれば、メインフォームのフォームヘッダに選択条件を設定するコントロールを置いて
その値で絞り込むことも可能です。
なお、絞り込みは、フィルターで設定するのが確実です。

231 :名無しさん@そうだ選挙にいこう:2019/12/05(木) 18:59:41.03 .net
今日は設計の失敗発覚。
サブフォームのフッターに合計式入れて、親フォーム(親テーブル)の同項目フィールドに代入するやり方、
あんましやらないほうがいいね。
あちこちのイベントにrecalc仕込んで置かないと、合計ゼロになったりサブの最後の入力レコードが
算入されなかったりする。
たぶん、親フォームのボタンアクションで、サブフォームのクローン取ってきてネストで合計作ったほうが確実なような気がする。

232 :名無しさん@そうだ選挙にいこう:2019/12/06(金) 18:03:01 .net
>>231
自分はフォームのコントロール同士で計算させるってのが考えるに面倒なので
レコードソースのクエリで計算させて
フォームはただそれを表示するだけにしてる

まあ合計や平均とかの集計値をフッタで表示させても良いんだけど、表示させるだけで
それを別のコントロールで参照してとか面倒に感じるのです

コントロールの表示って泡沫のようなもので
実態はテーブルにのみあるわけですからね

233 :名無しさん@そうだ選挙にいこう:2019/12/07(土) 19:09:02.22 .net
PCリカバリしたいんだけど
サポート終了したOffice再インストールすると
サポート期間中にリリースされたアップデートも
OfficeUpdateで取得できなくなっちゃうんろうか?

234 :名無しさん@そうだ選挙にいこう:2019/12/07(土) 20:07:44.65 .net
認証でハネられる インストール完了しない

235 :221:2019/12/07(土) 22:23:44.54 .net
ごめん見つけた

Windows XP/Office 2003サポート終了後の「世界」:「XPサポート終了」の具体的影響 - @IT
https://www.atmarkit.co.jp/ait/articles/1402/19/news116.html
> ●サポート終了日以前にリリースされたパッチは引き続き適用できる
> ●アクティベーション(ライセンス認証)も引き続き実行できる

236 :名無しさん@そうだ選挙にいこう:2019/12/10(火) 08:14:02.92 .net
>>233
アップデートファイルのダウンロードページが消える事もあるので
それらもバックアップしてるよ
>>235
はダウンロードページの閉鎖はしないとは言ってない

237 :名無しさん@そうだ選挙にいこう:2019/12/12(木) 08:56:52.28 .net
リンクテーブルで
「テーブルのみデータファイル:accdb、プログラファイル:accdb」
の組み合わせより
「テーブルのみデータファイル:mdb、プログラファイル:accdb」
の組み合わせのほうが処理速度が断然早いね
少量規模(数百件)のデータでもすごい体感できるくらいに早い
テーブルのみだったらmdbでも十分ですね

238 :名無しさん@そうだ選挙にいこう:2019/12/12(木) 09:25:32.22 .net
Win10Pro 64bit Access2016 32bit

リンク元のファイル形式で処理時間を比較

◆10個のテーブルをADOXでリンクする時間
・accdb: 0.644秒
・mdb: 0.031秒

◆数百件のデータをADOでテーブルに追加しレコードソース付きのフォームを開くまで
・accdb: 0.625秒
・mdb: 0.109秒

239 :名無しさん@そうだ選挙にいこう:2019/12/12(木) 14:56:42.98 .net
なんでADO?

240 :名無しさん@そうだ選挙にいこう:2019/12/12(木) 16:48:26.36 .net
Win10 Access2013
ためしにリンク後、以下のコードでやってみた
====================================
vTime = Timer
For i = 1 To 1000
Set rst = CurrentDb.OpenRecordset("SELECT * FROM テーブル)
rst.Close
Next i
Set rst = Nothing
Debug.Print Timer - vTime
====================================

mdb: 0.9843秒
accdb: 63.738秒

えらい違うな、2013でも体感できるわw

241 :名無しさん@そうだ選挙にいこう:2019/12/12(木) 19:54:08.57 .net
accdbになってからDAO推薦だろ

242 :名無しさん@そうだ選挙にいこう:2019/12/13(金) 19:07:30.49 .net
で実害はあるの?
1000回も開かないと体感できないとか

243 :名無しさん@そうだ選挙にいこう:2019/12/13(金) 19:28:08.48 .net
すみません、初歩的なことで申し訳ないです

連結しているフォームで呼び出されているデータをVBAで処理するコードってどうするんですか?
非連結ならSQL設定してレコードセットして、というのは理解してますが
そもそもそこにデータがあるのにわざわざ一から読み込む必要あるの?と悩んでます

「連結フォーム VBA」で検索しても「非連結フォーム VBA」の結果ばかりでて困ってます…

244 :名無しさん@そうだ選挙にいこう:2019/12/13(金) 19:40:48.10 .net
>>243
私の言葉でゴチャゴチャ書くより
素晴らしい解説があるので。
T's wareさんはaccessでやれることのほぼ全てを網羅してます。
https://tsware.jp/study/vol16/vbabegin_43.htm

245 :名無しさん@そうだ選挙にいこう:2019/12/14(土) 09:37:44.02 .net
>>244
ありがとうございます、閲覧してみます!
毎度助かっております

246 :名無しさん@そうだ選挙にいこう:2019/12/15(日) 13:17:10 .net
>>240
Win7 Access2010
50万件レコードに部分一致検索10回して平均値取ってみたけど変わらんかった

2013以降でaccdbの仕様って変わったの?

247 :名無しさん@そうだ選挙にいこう:2019/12/15(日) 21:07:15.21 .net
たしかにテーブルのみとのリンクのファイル形式はmdbのほうが処理速度がはるかに速い
リンクする処理だけでも差が出るが、何故だ?

248 :名無しさん@そうだ選挙にいこう:2019/12/16(月) 09:39:49.82 .net
【 システム環境  】 Windows10, Access2019

コントロールソースに=Format(Now(),"yyyy/mm/dd")のあるテキストボックスのフォームを
2019でaccde化したファイルを2013で開くと#NAMEと表示され正常に表示されません。
2013でaccde化すると問題なく表示されます。
2019は前バージョンとの互換性がないのでしょうか?

249 :名無しさん@そうだ選挙にいこう:2019/12/16(月) 10:05:17.35 .net
vba画面開いて、どっかに1文字足して、また1文字引いて元に戻して、再コンパイルすると、直る予感

250 :名無しさん@そうだ選挙にいこう:2019/12/16(月) 15:35:52 .net
<<237
再コンパイルもダメで、mdbに変換しmde化もしてみましたがダメでした

251 :名無しさん@そうだ選挙にいこう:2019/12/16(月) 19:48:47.61 .net
関係ないけど、now使うんだ?
日付だけ拾うならdate()をよく使うけど。

252 :226:2019/12/16(月) 23:48:08.63 .net
リンクテーブルのファイル形式で処理速度に差が出る件、
パスワードの有無で差が出るこが判明!

>>240
のコードをFor i = 1 To 100で実行

accdb(パス無) :0.289
accdb(パス有):9.343 *
mdb(パス無):0.258
mdb(パス有):0.234

OS、Accessの以下の組み合わせ
Win10 acc2010〜2019
Win7 acc2010〜2019
すべてでほぼ同様の結果でOS、Accessの組み合わせは関係なし。

結論:
パスワードありaccdbにあるテーブルとのリンクは極端に処理が遅くなる。

253 :名無しさん@そうだ選挙にいこう:2019/12/17(火) 10:00:49.25 .net
>>251
はい、以前Access95や97の時代にDate()で
#Nameエラーが多発したのでそれ以来Now()を使い続けています。
ちなみに今回のソースをDate()に変えてもダメでした。

254 :名無しさん@そうだ選挙にいこう:2019/12/17(火) 14:28:09.45 .net
>>253
試し方が、結構access使いなれてる感じですね。
軽くググったら
これは釈迦に説法だけど、フィールド名、ユーザー定義関数に
まんまdate nowと名付けたらエラー、
あとvb6ランタイムの
mscomctr.dll msctrctr2.dllというワードが出てきた。

255 :名無しさん@そうだ選挙にいこう:2019/12/17(火) 18:46:52.22 .net
>>252
それ、どっかに書いてあったで、hatenaなんとかかな

256 :名無しさん@そうだ選挙にいこう:2019/12/17(火) 22:24:14.74 .net
hatenaのはパスワードかけるとそのファイル内の削除クエリが遅くなるやつじゃね?
それならMicrosoft Security Essentialsが原因とか書いてたが...
>>252
はMicrosoft Security Essentials関係なく遅くなる。
どちらにせよaccdbの暗号化(パスワード化)は色々と問題ありそうだ

257 :名無しさん@そうだ選挙にいこう:2019/12/18(水) 07:49:56 .net
>>254
ありがとうございます。
それは、参照設定で参照不可が発生している問題ですね
その辺も全部チェックしましたが問題ありません。
結局2010でaccde化して配布することにしました。

258 :名無しさん@そうだ選挙にいこう:2019/12/21(土) 16:47:47.98 .net
Office2010で使ってましてQRコード使いたくてAccessだけ2016にしてたのですが
20日のアップデートでQRコード使えなくなりました
2016だけ再インスコで回避できたのですが
参照設定のBarCode Controlが14.0のままで
レポートのActiveXコントロールが16.0になってる辺りを疑ってるのですが
解決策ご存じの方おられませんでしょうか

259 :名無しさん@そうだ選挙にいこう:2019/12/22(日) 02:51:29.08 .net
>>1
https://hayabusa9.5ch.net/test/read.cgi/news/1576460939/110

260 :名無しさん@そうだ選挙にいこう:2020/01/10(金) 18:17:58.66 .net
Office2019personalがインストールされた環境にoffce365access runtimeはインストール出来ますか?

261 :名無しさん@そうだ選挙にいこう:2020/01/11(土) 16:57:13.83 .net
>>260
可能
ただしExcelの参照設定をいじる必要あるかも

262 :名無しさん@そうだ選挙にいこう:2020/01/12(日) 17:20:29.55 .net
>>260
確か、office2013が入ってるところに、access2016runtime入れるな
って注意書きがあったけど、
特に問題は起きていない。
ただ、VBAコード書いてruntimeに配布するときは、
on errorなんちゃらの処理をちゃんと書かないと、バッサリ落ちるので
ユーザーである社内の人間から白い目で見られるから、
面倒くさいんだよね。
製品版だと問題行で一時停止するんだけど。
わかってるつもりだが、いまだに忘れがち。

263 :名無しさん@そうだ選挙にいこう:2020/01/16(木) 15:50:02.36 .net
ナビゲーション ウィンドウをF11キーで表示した後、
再度F11キーで最小化されますが、
最小化ではなく非表示にする方法はないでしょうか?
VBA・マクロ以外の方法が見つかりません。

総レス数 1015
360 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
read.cgi ver.24052200