Access総合相談所 27 [転載禁止]©2ch.net

1名無しさん@そうだ選挙にいこう2015/02/25(水) 10:37:24.99
ACCESSに関する質問はこちらへ

▼━ 質問のしかた ━━━━━━━━━━━━━━━━━━━━
★ OS、ACCESSのバージョンを明記してください。
★ 質問内容は具体的に書いてください。
  ・何がしたいのか
  ・どんな処理を試したか
  ・動作状況など駄目な理由
  テーブル/フォームの構成、クエリ、VBAの内容など差し支えない
 範囲で詳しく書くと、早く回答が得られるかもしれません。
  図解があれば尚良し。
  聞き返さなくても詳細が把握できる質問が望ましいです。
★ 事前にヘルプ・Google等で調べられる範囲は調べてください。
  大概の疑問は検索することで解決します。
★ アドバイスを貰ったら、必ず経過・結果の報告をして下さい。
  ギブアンドテイクで情報を共有しましょう。

▼━質問テンプレ ━━━━━━━━━━━━━━━━━
【 システム環境  】 Windows**, Access**
【 VBAが使えるか 】 はい・いいえ
【 VBAでの回答  】 可・否
【 検索キーワード 】 Googleやヘルプでの検索キーワード

前スレ
Access総合相談所 26
http://toro.2ch.net/test/read.cgi/bsoft/1349049986/

764名無しさん@そうだ選挙にいこう2018/02/05(月) 21:24:31.79
>>762
なるほど。こんな方法もあるのか。
便利だな。ありがとう。

765名無しさん@そうだ選挙にいこう2018/02/06(火) 07:19:41.03
そういえば日付を選択する機能はあっても時間をうまく入力する機能は知らないな。
なんか上手い方法があるなら教えてください。

766名無しさん@そうだ選挙にいこう2018/02/06(火) 22:45:42.88
>>765 カレンダーって、そんなに使うかなぁ。まして、時刻なら
日本語入力プロパティを「オフ」に設定してやれば 0:00って打つだけだと思うけど。
よくweb系アプリであるデザイン:コンボボックス 時=c1 分=c2 値集合タイプ:値リスト(両方とも)
規定値="00" (両方とも) 実際にデータベースに紐づけるテキストボックス txt1
private Sub Form_Open(Cancel As Integer)
Dim i As Integer,rowtext As String
rowtext = ""
For i = 0 To 23 rowtext = rowtext & Format(i, "00") & "," Next i
rowtext = Left(rowtext, Len(rowtext) - 1)
Me!c1.RowSource = rowtext
rowtext = ""
RowSource = 0
For i = 0 To 55 Step 5 rowtext = rowtext & Format(i, "00") & "," Next i
rowtext = Left(rowtext, Len(rowtext) - 1)
Me!c2.RowSource = rowtext
End Sub

Private Sub c1_Change()
Dim timestr As String
timestr = Me!c1 & ":" & Me!c2
Me!txt1 = TimeValue(timestr)
End Sub
Private Sub c2_Change()
Dim timestr As String
timestr = Me!c1 & ":" & Me!c2
Me!txt1 = TimeValue(timestr)
End Sub 'c1とc2の動作は同じなので、共通プロシージャとしたほうが可視性が良い

767名無しさん@そうだ選挙にいこう2018/02/06(火) 22:52:30.26
家電のタイマー設定ふう ボタンを押している間じゅうインクリメントする
コマンドボタン: cmd2 自動繰り返し:「はい」
Private Sub cmd2_Click()
Me!txt2 = DateAdd("n", 5, Me!txt1)
Me.Repaint
If DateDiff("n", "0:00", Me!txt1) = 1440 Then
Me!txt1 = "0:00"
End If
End Sub

7687662018/02/06(火) 23:25:31.14
間違い 765のRowSource = 0 いらない
766のMe!txt2 = DateAdd("n", 5, Me!txt1)
はtxt1=間違い

769名無しさん@そうだ選挙にいこう2018/02/07(水) 05:52:05.24
>>766
>>767
おお、ありがとうございます。やってみます。

770名無しさん@そうだ選挙にいこう2018/02/07(水) 12:29:45.63
教えてください。
フォームのコンボボックスからクエリの抽出をしてますが条件で詰まってます。
以下のことを実行したいです。
@都道府県名と都市名を入れるとその二つに該当するものが抽出。
A都道府県名のみ入れて実行すると、都市名が設定されてない都道府県名のみを抽出。
クエリにどのような抽出条件を入れたらいいですか?
is null orを都市名に設定するとAはうまく行きますが、@で都道府県名と都市名、都道府県名のみのものの両方が抽出されてしまいます。

771名無しさん@そうだ選挙にいこう2018/02/07(水) 13:15:41.50
>>770
フォームがどういう作りか知らんけど、都道府県と市区町村のコントロール持ってるんでしょ。
都道府県のrowsourceがselect 都道府県,市区町村 from 住所録 where 市区町村 like iif(me!市区町村=null,”*”,me!市区町村)
連結列 1
市区町村のrowsouceが
select 都道府県,市区町村 from 住所録 where 都道府県 like iif(me!都道府県=null,”*”,me!都道府県)
連結列2
いま、手元にaccessないので検証してください。iifのあたりがそのまま渡せるか、一回、文字列作り直すのか忘れた。
クエリー単体ならパラメータクエリーか、forms.なんちゃらかんちゃらの参照を掛ける。

772名無しさん@そうだ選挙にいこう2018/02/07(水) 13:39:43.98
都道府県と都市名を連結して抽出

773名無しさん@そうだ選挙にいこう2018/02/07(水) 21:05:27.63
>>771
いけたー!ありがとう。

もう一つ問題があって、
クエリの抽出で、出席者名が未入力の場合は欠席と入れたい。
Nz([出席者名],"欠席")で出来ない?
これで実行したら出席者が空白のデータが表示されなくなるんだが。

774名無しさん@そうだ選挙にいこう2018/02/07(水) 21:34:32.93
すまん、クエリでやろうとしたのが間違いだった。
レポートでコンボボックスの式に入力したら出来ました。

7757712018/02/08(木) 13:45:43.65
>>772
なるほどこっちのほうがスマートだな。
select 都道府県,市区町村,都道府県+市区町村 AS 検索 from 住所録 where 検索 like nz(me!都道府県,”*”) & nz(me!市区町村,”*”)
みたいな感じでいけるか。
where 以降で別名を認識できるか、接続が+だったか&だったか、テストしないとわからないが。

776名無しさん@そうだ選挙にいこう2018/02/09(金) 15:13:10.00
入力簡素化の為にテーブルのフィールドを削除して、新たなテーブルから引っ張って来るようにリレーションシップも変更したら、クエリ、フォームが開かなくなった。
設定してたフィールドが消えたんだから動作しないのは分かってたが、やっぱこれは全部作り直しなの?クエリもフォームも大量に種類があるんだが、、、

ちなみにやろうとしてたことは、これまで売上台帳に分類コードや担当者コードみたいなのをフォームから入力してたんだが
そもそも別のデータの受注台帳に分類コードも担当者コードもあるから売上台帳にそれらを関連付けて受注コードを入力し、手間を省こうとしてたみたいな感じなんだが。

777名無しさん@そうだ選挙にいこう2018/02/09(金) 19:56:14.92
>>776
自分が行ったことなのに、まるで他人がやったような言い回しですね。

778名無しさん@そうだ選挙にいこう2018/02/09(金) 23:09:39.66
>>777
文章下手くそですまん。

779名無しさん@そうだ選挙にいこう2018/02/09(金) 23:59:42.69
>>776
他の人が作ったものを構造研究もしないで疑似サーバ的に改造するのは
どうなんですかね。
(もっともACCESSの自炊アプリの問題点は、ほとんどの場合、開発ドキュメンテーションや
コメントがないことなんだけど)
基本的に、テーブルの名前が全く同じ、構造も全く同じであればローカルだろうがリンクだろうが
適切に処理されます。
開かないクエリーのデザインビューを開いてください。それを見て、何がどうなってるのか(何が原因なのか)理解できなければ
改造には「2か月」早い、ということです。
ACCESS入門書でも買って、習作を作って勉強してから出直してください。
ちなみに魔改造したものは、バックアップとってあるなら速やかに戻しておくように。

780名無しさん@そうだ選挙にいこう2018/02/10(土) 00:27:52.81
>>779
これはひどい。

781名無しさん@そうだ選挙にいこう2018/02/10(土) 10:34:42.83
新たなテーブルが加わってリレーションも変わるんやったら作り直しというかそれぞれある程度の編集は必要やろ。

てか会社で業務改善しようとするんは基本やろ。
それを魔改造とか言っちゃうのは仕事出来ない奴だわ。

782名無しさん@そうだ選挙にいこう2018/02/10(土) 12:14:25.17
>>779
いや、データは自分で作ったんだよ。
分かりにくくて申し訳ないが、構造研究とかじゃなくて、リレーションシップに新しいテーブルを追加してリレーション変更した時にクエリフォームも全部変えなきゃならんのかということを教えて欲しい。
不勉強なのは弁明の余地がない。
ごめん。

783名無しさん@そうだ選挙にいこう2018/02/10(土) 15:12:54.32
基本的には作り直さなきゃならないけど、新たなテーブルから引っ張ってきた二つのテーブルの選択クエリを作り、これをごまかして使う方法がある
こんな説明じゃ分かんないかな?言葉じゃ説明できないわ

7847712018/02/10(土) 15:57:33.59
>>781
何やったのか、いまいち見えて来ねーわ。
オリジナル版のテーブル
項目 1 2 3 4 5 (4と5が一体のもので正規化の見込みあり)
改良版Aテーブル
項目 1 2 3 4
改良版Bテーブル
4 5
2テーブル参照クエリー
1 2 3 4 5

こういうことかね。
主キーの設定が曖昧だと、クエリーデザイナーでクエリー作った時に、どっちが親になるのか揺らいで、更新ができない表を作ってしまうことはあるけど。
sqlビューにして 親 inner join 子になってるか、一度確かめた方がいいかも。
的外れな書き込みならすまん。忘れてくれ。

7857842018/02/10(土) 16:05:49.03
782あてのレスです

786名無しさん@そうだ選挙にいこう2018/02/10(土) 22:48:06.43
>>784
やった事はそういう事です。
開こうとしたらパラメータが出てくる。
中身観たら45がオリジナルテーブル名のままだからそこを改良版Bの名前に変えなきゃならんよね?

787名無しさん@そうだ選挙にいこう2018/02/10(土) 23:24:06.46
>>786
テーブルの正規化ということね。
列名1,2,3,4,5
その不具合が出てるクエリー
SELECT 1,2,3,4,5 FROM A その他諸々
1,2,3,4と4,5でテーブルを分けたんなら
SELECT A.1,A.2,A.3,A.4,B.5 FROM A INNER JOIN B ON A.4=B.4
だわ。
しんどいかもしれんけど、SQLビューにしてSQL構文をかじったほうが
知識も深まるよ。
ちなみに「売上台帳」と書いてあったけど、この手のやつは
商品マスターの商品コードと名称をテーブル正規化対象とみなして
売上伝票で(売上伝票番号,商品コード,数量)だけを残して
クエリーで(商品コードから商品名、単価*数量=金額)のように
ひも付けする設計はダメ。
台帳はクエリーで結合できる要素が実はほとんどない。
あくまで、「商品名」「入力者名」などの項目も台帳に持っておいて
コンボボックスに連動してrowsourceの複数列参照、
埋め込み、という作り方をします。

788名無しさん@そうだ選挙にいこう2018/02/10(土) 23:35:58.65
リレーションシップを設定したら
自動で処理してくれるとでも思ったん?
そんなこと無理なんで手動で設定し直して下さい

789名無しさん@そうだ選挙にいこう2018/02/11(日) 01:39:30.11
フォームに受注台帳のID入力するようにしてDLOOKUPで自動表示させたらええだけの話では??

790名無しさん@そうだ選挙にいこう2018/02/11(日) 17:49:11.71
>>787
マジか。ひも付け駄目なのか。
テーブルの項目は重複したらダメだろうと思ってひたすら正規化しようとしてた・・・。
rowsourceって値集合ソースの事??
複数列参照、埋め込み、どちらも聞いたことなくて、難しそうだ。
>>789
DLOOKUPね。やってみる。

791名無しさん@そうだ選挙にいこう2018/02/11(日) 17:57:25.10
別dbのテーブルとリンクさせてフォームに表示させたのですが、
フォームの項目を書き換えただけでテーブルの内容も書き換わってしまいました
書き換えない方法や、書き換える/書き換えないの設定はなんというのでしょうか?

792名無しさん@そうだ選挙にいこう2018/02/12(月) 02:31:54.33
>>790 申し訳ないけど、まだ業務ソフト作るには早いと思うよ。
パッケージソフト、やっすいやつだと数万円で売ってるし。
なぜ売り上げの記録はマスター結合じゃダメか。商品番号1番が去年は「まんじゅう 100円」だったのが
なんとなく、あなたや他従業員の気まぐれで1年後に「自動車 100万円」で上書きしたら、記録にならないでしょ。
一般的なパッケージソフトでは、コンボボックスもしくは検索用ウィンドウ(フォーム)で選択したマスター情報をコピーする
仕様になっています。

793名無しさん@そうだ選挙にいこう2018/02/12(月) 02:37:46.96
>>791
フォームのデザインビューで、プロパティのデータタブ
「追加の許可 いいえ」「削除の許可 いいえ」「更新の許可 いいえ」

(ただし、ユーザーが製品版ACCESSを使っててテーブルを閲覧できる状態であれば
その保全性までは保証できない。ナビゲーション見せないVBAコマンドもあるにはあるが。)

794名無しさん@そうだ選挙にいこう2018/02/13(火) 07:59:45.03
>>790
深く考えずにテキストボックスの更新後処理マクロで値の代入を使えばいいんだよ。
正規化じゃなく入力の補助という感じだな、うん。
そこにNoを入れたら受注テーブルからそれに対応する値が飛んでくるようすればいい。
クエリの編集なんかほとんどイラネ。

795名無しさん@そうだ選挙にいこう2018/02/13(火) 10:26:59.32
【 システム環境  】 Windows8.1, Access2010
【 VBAが使えるか 】 はい
【 VBAでの回答  】 可
【 検索キーワード 】 ALTER SYSTEM KILL SESSION
CSEを使用してSYSTEMユーザにログインをしてALTER SYSTEM KILL SESSIONで切断されたがロックされたままのセッションを切断しているのですが、
Accessにて同じような処理を行うにはどうすればよいのでしょうか。
DoCmd.RunSQLでは"ALTER TABLE ステートメントの構文エラー"が発生をしてしまいます。

796名無しさん@そうだ選挙にいこう2018/02/13(火) 14:24:54.87
>>795
たぶんだけど、docmd.runsqlはあくまで
Accessで持ってるデータベーステーブル、もしくはリンクテーブルに対して、AccessのSQL実行エンジンで閲覧、更新するものなのでサーバー系に比べて単純、セッションの概念もあいまいだと思います。
adoを使えばサーバーが持つ制御コマンドも通るけど、ado自体がcon(adodb.connectionの変数例).close で接続切るメソッド持ってるし。
DBサーバーに対するフロントエンドとしてのMS Access利用ということで宜しいでしょうか?

797名無しさん@そうだ選挙にいこう2018/02/14(水) 21:48:41.72
UNIONでSELECTの結果をまとめることができますが、
フィールドの数が違う時に無理やり合わせることはできますか?

テーブル1が
名前、住所
テーブル2が
名前、住所、生年月日
の時、
テーブル1にダミーフィールドを差し込んで全結果を出すということをしたいのですが、
どうすれば良いでしょう

798名無しさん@そうだ選挙にいこう2018/02/14(水) 22:04:12.59
>>797
null as x とか、0 as xのように挟む

799名無しさん@そうだ選挙にいこう2018/02/14(水) 22:17:06.93
>>798
おー!ありがとうございます
すごいなぁ
なんでもできるなぁ

800名無しさん@そうだ選挙にいこう2018/02/14(水) 22:25:52.59
クエリを読み取り専用にすることはできますか?
データ触ったら元データも編集されてしまうのですね

801名無しさん@そうだ選挙にいこう2018/02/14(水) 22:43:51.81
データベースの名前をクエリの結果に含めることはできますか?

802名無しさん@そうだ選挙にいこう2018/02/14(水) 22:48:54.19
テーブルそのものでは無く仮想の同じフィールドに揃えたクエリーを使う

803名無しさん@そうだ選挙にいこう2018/02/14(水) 23:08:52.64
SELECT 1 as x,氏名
おー、できました、こんな感じですか、ありがとうございます
データベース楽しいですね

804名無しさん@そうだ選挙にいこう2018/02/15(木) 00:07:42.65
>>800
クエリーデザイナーのテーブルが表示されていないグレーの部分で
右クリック、プロパティを選択、
レコードセットを「ダイナセット」から「スナップショット」に変更

805名無しさん@そうだ選挙にいこう2018/02/15(木) 07:37:57.67
>>804
できました、ありがとうございます
SQLビューとデザインビューのプロパティって違うんですね・・

806名無しさん@そうだ選挙にいこう2018/02/15(木) 23:55:48.20
>>801 単純に今開いているファイル名的なもので良いなら
[application].[currentproject].[name]を試したら、通った。

vbaを書くときに使う関数、プロパティの類は使えるっぽい。
もっと詳細な情報が欲しいなら、vbaでユーザー関数を作成するとか、
隠し扱いになってるシステムテーブルにリンク情報が収められている部分があるので
そこから拾うなどの方法がありそう。

807名無しさん@そうだ選挙にいこう2018/02/16(金) 23:22:20.84
給料の計算システムを作ろうとしています
保険料率が変わることを前提にしたシステムは、どのように構築すればよいでしょうか?

とりあえず
給料台帳、保険料率テーブル、保険料率の適用期間テーブル
のような形を考えてみましたが、
・保険料率の適用期間テーブル
はどういう形にすると運用しやすいでしょうか?

また、そもそもこれでは全然駄目だったりするのでしょうか
ずっと考え続けてよくわからなくなってきました・・・

何か良い方法があれば教えてください

808名無しさん@そうだ選挙にいこう2018/02/17(土) 00:02:34.19
一円でも間違ってたら社員全員から目の敵にされる覚悟が無ければやめとけ
時給が混ざるような形態だったら一分まで間違えられない
市販ので充分 そんなに高額でも無いし
もっと言うなら、保険ったって社会保険に厚生年金、基金、料率だの扶養の細分も毎月把握し続けなきゃならない
そういうのが大好物なら止めないが  ずっと考え続けて分らなくなるレベルなら荷が重過ぎる
まず実務で何年もあらゆる形態の給与に習熟してないと、必ず躓く
会計事務所とか社会保険労務士事務所とかで鍛えられた者ならシステム作りも基礎からみっちりできるだろうが
アプリ作れます レベルで給与計算は過酷

給与は企業の根幹のひとつだからな 今回ちょっとバグっちゃいました てへっ! じゃ済まされない
振り込みなら金融機関にまで迷惑が及ぶ 迷惑程度ならいいが、関係各位に被害を与えかねない事態にまで発展することだってある

なに?従業員五人だと? まあ、だとしても給与には彼らの生活が掛かってるからな 安易に請け負うのは勧め兼ねる  というひとつの独断意見

自分で読み返して補足するが、躓きはどんなシステムにもあるだろうが、給与は待った無しで迫り来るからな
そのプレッシャーを跳ね除けてやり通すには一分一秒をいのち削ってやり切らなきゃならん 並みの神経では保たない  というひとつの忠告

809名無しさん@そうだ選挙にいこう2018/02/17(土) 00:57:16.78
>>807
808さんの言葉は厳しいですが同意です。
例えば、弥生給与、ベーシックプラン付きで78300円
有料アップデートが2年以内に1回以上あることでやや評判悪いですが
税制変更、保険料率変更が配信されます。年末調整も計算してくれます。
有名な別パッケージの弥生会計にもデータを反映できます。

自分でビルドする場合、少なくないマスターテーブルを設計し、絶対に間違いがない台帳を作成し、
変更をウォッチして遅延なく保守し、と考えたら気が重くないですか。
一人で作るとして制作に半月〜1か月、5人の零細と考えたらちょうど制作にあてた月日で
貴方の月給を割った場合、上記の価格と同等かそれ以上になるかもしれません。


もしくは給与計算は全部アウトソーシングするという手もあります。

810名無しさん@そうだ選挙にいこう2018/02/17(土) 20:29:12.78
>>808-809
db構築が楽しく、勇み足になるところでした、助かりました。
自作はやめて、市販のソフトを探してみます
ありがとうございました

811名無しさん@そうだ選挙にいこう2018/02/19(月) 22:30:14.44
>>807みたいに過去の係数が変わる場合、どういう風に作るの?

812名無しさん@そうだ選挙にいこう2018/02/19(月) 23:49:33.90
簡単なのは消費税率のように税率と施行日をテーブルにでも入れとく
複雑なのは表ごとテーブルにして条件分岐で拾ってくるとか
複雑だけど件数が少なければ If とか Select Case とかで済ませる場合も

813名無しさん@そうだ選挙にいこう2018/02/21(水) 07:54:49.36
消費税率なんて大したことない
カラムが変動しだすと手がつけられなくなる

814名無しさん@そうだ選挙にいこう2018/02/22(木) 01:11:32.05
>>811
さすがに法令ガチガチのものはaccessでは作らないけど
開始日と終了日を入れて、「マスター参照」な場面では
テーブルを直で使わず、(開始日)<=date()
isnull(終了日)or (終了日)>=date() みたいなクエリーを作って
参照させることはありますね。

新着レスの表示
レスを投稿する