Microsoft Access 掲示板

views
4 フォロー
6,283 件中 2,801 から 2,840 までを表示しています。
3

そのフォームは連結フォームでですか。非連結フォームですか。
非連結フォームなら、VBAでテーブル登録することになります。

連結フォームなら、現状のテーブル構成はなるべく実態に近い形で提示してください。
そもそもテーブル設計から間違っている可能性大です。

2
hiroton 2022/02/07 (月) 16:56:45 3d519@f966d

値を入力する場合、入力先のテーブルに加えて、そのテーブルのどのフィールドなのかの情報が必要です。「あ」はテーブル名ですか?フィールド名ですか?残りの不明な情報はどこにありますか?

また、Aに対する「あ」やBに対する「い」はどのように決まっていますか?(何を見たらわかりますか?)

13
さらもか 2022/02/07 (月) 16:33:06 5f240@363ff

全く同じ環境ではないので、断言できませんが、2箇所の顧客のところでこの問題が解決したように思えるので、報告します。ただし、この幻象は突然起こるので本当に解決したかを判断するのはもっと先になると思います。ただ、なにか参考になればと思い報告します。
サーバーのデータベースはSQLサーバー2017でODBCでクライアントと接続しています。
クライアントの環境は、Windows10で、アクセスは、2019開発版のクライアントと2013実行版の方が使用しています。元のアクセスアプリは、2003で作成したMDBです。
まず、2019で新規のデータベースMDBを作成しますが、このとき、フォルダ指定とファイル名指定のボタンを押して、ファイル種類を2000-2003のMDBを選択します。このとき重要なのが、ファイル名はすべてアルファベットにすることです。漢字が入ってると、作成しても同じ不具合が残ってしまいます。
この空のMDBに、元のMDBのテーブルからフォーム等すべてのオブジェクトをインポートします。タブ表示かウィンドウ表示かはオプションであとで選んで下さい。
それと、実行版ですが、2016の実行版ではやはり同じ不具合が残ります。2013の実行版ですとうまく行きました。
この方法で、まだ1週間しか経っていないので、本当にこれで治ったか確信できませんが、今の所2箇所の顧客で正常に動作しています。
この情報がお役に立てば喜ばしいです。

4
ふで 2022/02/07 (月) 15:53:02 a6302@375f9

ご連絡ありがとうございます。
内容を書き込んだところ、こちらがイメージした通りのものが表示されました。
有難うございました。助かりました。

1
りんご 2022/02/07 (月) 15:44:33 c564b@0e907

 Aの値は「あ」に、Bの値は「い」にとそれぞれに適応したテーブルに入力したいです。

 追加クエリを準備しておき、プルダウン操作で値Aが確定したら、追加クエリ1を実行、値Bが確定したら、追加クエリ2を実行。(追加クエリ1: テーブル「あ」に値Aを追加。追加クエリ2: テーブル「い」に値Bを追加。)
 試していませんが、こんな感じの方向性でコードを考えるのはどうでしょう?

3

SQLビューに下記のように記述してください。

SELECT
 T.商品名, SUM(T.A数量) AS A数量, SUM(T.B数量) AS B数量, (A数量 - B数量) AS 差異
FROM
(SELECT 商品名, 数量 AS A数量, 0 AS B数量
 FROM Aテーブル
 UNION ALL
 SELECT 商品名, 0 AS A数量,数量 AS B数量
 FROM Bテーブル) AS T
GROUP BY 商品名;
2
ふで 2022/02/07 (月) 14:24:46 a6302@375f9

hatena様ご連絡ありがとうございます。
ご質問についてですが、
・各テーブル内での商品名の重複について → ありません
・Aテーブルのみ、あるいはBテーブルのみに存在する商品名 → 存在します
以上宜しくお願いします。

1

各テーブル内で商品名は重複している場合があるということでしょうか。
重複している場合は合計値を表示するということでしょうか。
Aテーブルのみ、あるいはBテーブルのみに存在する商品名はありますか。

2
nanana 2022/02/07 (月) 08:50:35 e48ae@6eb0c

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

6
りんご 2022/02/06 (日) 00:14:54 c564b@0e907

エラーメッセージで”91

 ググっただけですが、取り敢えず、これはあれこれ確認出来そうです。
 Setを使わずに変数にオブジェクトを設定していませんか?
 変数にNothingを設定したあとに、使おうとしていませんか?

rst.closeは見た限りできていました

 次に思い付くとすればこんな事でした。既に確認済みだと思いますが。
  Set rst = Nothingは出来ていますか?
  dbs.CloseとSet dbs = Nothingは出来ていますか?

 最後に、かもしれない回答であれですが、アップデート不具合でしょうか。
 正直、力になれませんでした。どなたかのヘルプを待って下さい。

 余談ですが、レコードセットを上限まで開く実験では、カウント数には数え方があるみたいなものもヒットしました。真偽はわかりません。

どうしても分からないので教えてください。MicrosoftAccess2016を使用しています。仕事用のデータベースを作成しました。... - Yahoo!知恵袋
どうしても分からないので教えてください。MicrosoftAccess2016を使用しています。仕事用のデータベースを作成しました。 テーブルは50個、クエリが100個、フォームが130個程度の量です。通常はフォームを20個ほど同時に開いて作業しても問題なく使えていました。このデータベースを社内で共有するためにリンクテーブルに分割したところ、フォームをいくつか開くと「これ以上データベースを開くことはできません...
Yahoo!知恵袋

フォーム:2or4。(サブフォームあり:+2or4×個数。リストボックスやコンボボックス:+0or2×個数)。

5
カルナ 2022/02/05 (土) 09:21:44 03236@cb203

ありがとうございます。
hatena様
調べてみましたが、rst.closeは見た限りできていました。
仰るように、248個もレコードセットはしていないのですが、
お手上げ状態になっております。
りんご様
簡単に言うとデーター入力し(この時テーブルは8個開いている状態の時に、1から2件程打ち込んだ後に出てくるような状態です。あやふやな表現ですが、出てくる場面もまちまちなので申し訳ありません。
その後請求書発行の為に集計をかけるとエラー”3037これ以上データーベースはクエリを開くことができません”
となり、終了すると、閉じることはできるのですが、メッセージで、プログラム名xxxx.accdbは既に使用されているので
使用できません”出てくるのです。そのプログラムが入っているフォルダーには、xxx.laccdbが残っている状態です。
取り留めない状態です。

1

[ファイル]-[オプション]-[現在のデータベース]-[ドキュメントウィンドウオプション]で
「ドキュメントタブの表示」のチェックを外すか、「ウィンドウを重ねて表示する」を選択する、かのどちらかにしたらどうでしょう。

フォームの上部(標題のところ)を右クリックすると、

ようするに、フォームの上部(標題のところ)=「ドキュメントタブ」を表示しないようにする。

5

一例です。

請求書テーブル
 請求書番号 主キー
 請求日
 請求年月
 顧客コード

売上テーブル
 売上ID 主キー
 売上日
 商品コード
 単価
 数量
 請求書番号 ※売上入力時は入力しない

普段は月末にまとめて抽出

請求書テーブルをレコードソースとするメインフォームで、
請求書番号を発行、請求年月、顧客などを入力、
それをもとに売上テーブルから該当売上データをクエリで抽出する、この更新クエリで発行した請求書番号を売上テーブルに入力。
サブフォームのソースは売上テーブルでリンクフィールドは請求書番号。

請求書テーブルと売上テーブルを請求書番号で結合したクエリをレポートのレコードソースにして、請求書番号で抽出してレポート出力。

たまに、今発生した売上をすぐに請求書にする

請求書メインフォームで、請求書番号発行、請求日、顧客などの必要事項を入力、
サブフォームで、今発生した売上を入力、
リンクフィールドは請求書番号なので、売上テーブルに請求書番号は自動で入力される。

レポートを請求書番号で抽出して出力。

自分がするなら上記のような設計になりそうです。

4

リンク先の実験ではレコードセットを248開くとエラーになっているようです。

通常、そんなにレコードセットを開く必要はないはずです。
VBAでレコードセットを開いて、使用後に閉じていないものがないか確認してみてはどうでしょう。

4
りんご 2022/02/04 (金) 21:18:28 c564b@0e907

 セオリーはわかりませんが、どうでしょう。

普段は月末にまとめて抽出

毎日、売上テーブルに売上データを登録。月末などになったら請求テーブルに請求データを登録。売上テーブルを絞り込んで請求テーブルに紐付けて更新。

たまに、今発生した売上をすぐに請求書にする

 請求テーブルに請求データを登録。売上テーブルに売上データ登録&請求テーブルに紐付けする。

 わざわざとか、複数になるのでとか、気にしたほうがいいのでしょうか。悩むならデータモデルを悩みたいですよね。

3
りんご 2022/02/04 (金) 18:13:25 c564b@0e907

 迂回出来るか、作り直すしかないのか、という事ですけれど、テーブル構造やVBAで何をやろうとしていたかなど追加情報が出てきたほうが、誰か回答するかも。

3

説明が下手ですみません

普段は売上テーブルにフォームで入力して月末にまとめて抽出して請求書にしています
たまに、今発生した売上をすぐに請求書にする、ということがあり、
そのときは一度上記の売上テーブルに入力して、抽出条件を設定して請求書を発行しています
すぐに請求書を発行する場合に、わざわざ抽出をしなくていいように
いま入力したものだけを請求書にして、その売上データも売上テーブルにいれる仕組みにしたいです

一般的にはそのようなわざわざそのような仕組みにせず(複雑になるので)ワンクッションおいてやるものでしょうか?

2
カルナ 2022/02/04 (金) 12:06:04 03236@afa8b

ありがとうございます。
多分このブログに当てはまるようです。
ということは、作り直すしかないということになるのでしょうか?
他に解決策はないでしょうか?

2

下記の動画などが参考になりませんか。

明細欄のある請求書を簡単に作成したい(Access 2019動画解説)
請求書のようなレポートはレポートウィザードを使用して原型となるレポートを作成し、それを基にレイアウトを調整していくと効率よく作成できます。ここでは2つのクエリを基にレポートを自動作成する方法を説明します。
できるネット

1
りんご 2022/02/03 (木) 18:49:47 c564b@0e907

 上手く汲み取れたかわからないけれど、手順の自動化、サブフォームの作り方、レポートの作り方を聞きたいのでしょうか?

8
すー 2022/02/02 (水) 10:06:42 cd14b@b9210

皆様 返信ありがとうございます。
hirotonさまに提示していただいた

Private Sub Form_Timer()
    Me!点滅用納期.Visble = Not Me!点滅用納期.Visble
End Sub

の方法がうまくいきそうです。
ありがとうございました。

4
塾長 2022/02/01 (火) 08:34:42 c04e3@ba492

みなさんいろいろアドバイスありがとうございます。がんばってみます。

2
カルナ 2022/02/01 (火) 08:11:53 03236@cb203

ありがとうございます。
大変勉強になります。
ご指導いただいた内容に沿って頑張って見ます。

1

通常はそのような線は出ないので、何か特別なことをしているはずです。
アドインを入れてるとかないですか。

思い当たることがない、ということなら、Officeをアンインストールしてから、再度インストールしてみてください。

1
hiroton 2022/01/31 (月) 14:13:20 53823@f966d

この掲示板でコードを表記する場合はコードブロックの記述を使うとわかりやすくなります

strWhere = "([請求締日]='" & Me![締日] & "')" & _
" AND ([請求先カナ] BETWEEN '" & Me![開始請求先] & "' AND '" & Me![終了請求先] & "')" & _
" AND ([施工者コード] BETWEEN '" & Me![開始施工者] & "' AND '" & Me![終了施工者] & "')" & _
" AND ([工事コード] BETWEEN '" & Me![開始工事] & "' AND '" & Me![終了工事] & "')" & _
" AND ([試験工場コード] BETWEEN '" & Me![開始試験] & "' AND '" & Me![終了試験] & "')"

If in_kbn = "w" Then

If PrinterGRP.Value = 1 Then
DoCmd.OpenReport "R_請求書10", , , strWhere

'//R_請求書10を印刷したときならここ

ElseIf PrinterGRP.Value = 2 Then

'//R_請求書控を印刷したときならここ

DoCmd.OpenReport "R_請求書控", , , strWhere

  End If

'//どちらでもいいので印刷したときならここ

Else

If PrinterGRP.Value = 1 Then
DoCmd.OpenReport "R_請求書10", acPreview, , strWhere 'プレビュー
ElseIf PrinterGRP.Value = 2 Then
DoCmd.OpenReport "R_請求書控", acPreview, , strWhere

End If

End If

また、コードの書き方を工夫すると理解しやすくなります

strwhere = "(省略)"

'//印刷・プレビューに使うレポートを決める
Dim reportName As String
Select Case PrinterGRP.Value
Case 1
    reportName = "R_請求書10"
Case 2
    reportName = "R_請求書控"
End Select

'//印刷またはプレビューを行う
If in_kbn = "w" Then
    DoCmd.OpenReport reportName, , , strwhere
    '//印刷したときだけCSV出力をするならここにコードを追加する
Else
    DoCmd.OpenReport reportName, acPreview, , strwhere 'プレビュー
End If

CSV出力の方法はいくつかあります。メリット・デメリット(使える・使えない)があるので組み込みながら調整が必要ですが、一番簡単と思われるのはTransferTextを使った方法でしょう

strwhere = "(省略)"

'//出力設定
Dim reportName As String
Dim queryName As String
Select Case PrinterGRP.Value
Case 1
    reportName = "R_請求書10"
    queryName = "(R_請求書10に対応したクエリ)"
Case 2
    reportName = "R_請求書控"
    queryName = "(R_請求書控に対応したクエリ)"
End Select

'//CSV出力先設定
Dim filePath As String
filePath = "C:\foo.csv"

'//処理実行
If in_kbn = "w" Then
    '//印刷
    DoCmd.OpenReport reportName, , , strwhere
    '//CSV出力
    DoCmd.TransferText acExportDelim, , queryName, filePath
Else
    '//プレビュー
    DoCmd.OpenReport reportName, acPreview, , strwhere
End If

DoCmd.TransferText メソッド (Access)

事前に出力用のクエリを作成しておく必要があります。(上記コードでは(R_請求書10に対応したクエリ)と(R_請求書控に対応したクエリ)。実際にはシステムに合わせたわかりやすい名前にします)

7

hatenaさま 返信ありがとうございます。
背景色は条件付き書式で設定しています。
帳票フォームの最背面にテキストボックス(非連結)を作り
ルールの内容を式にして
[工程]="A工程" のとき 背景色を青 のようにして7工程設定してあります。 

6
hiroton 2022/01/31 (月) 09:12:18 53823@f966d >> 4

改めて考えてみたら条件付き書式を弄るのは大変ですが、条件を弄るのは簡単でした

チェックボックスを配置する(名前:点滅用)

Private Sub Form_Timer()
    Me!点滅用 = Not Me!点滅用
End Sub

条件付き書式の条件を調整する
ex)

書式設定:式
   式:[納期]<Date() And [点滅用]

これでタイマーごとに条件付き書式が反映される/されないを繰り返すので点滅してるように見えると思います

コントロールがチェックボックス一つで済む(位置・表示不問)なのでこっちのほうが楽そうです。点滅させたいコントロールが多いなら断然ですね


hirotonが条件付き書式を好きでないのはスクロールバーを掴んでいると反映されないからという理由があったりします

5
りんご 2022/01/30 (日) 15:22:41 c564b@0e907

 メインフォームの検索条件を増やせば済むようにも見えますが。話題作りとしては、導出フィールドを作って何か出来ないか、なんてどうでしょう。
 工程別に色を変え失敗したものを強調したら、次はどうしますか。例えば、期限間近のものに音を鳴らしたり、数量が大きいものを立体的にしたり、手間と時間を見た目に費やすのでしょうか?
 そういえば、期限を過ぎたものって、データベースでどういう扱いになるのでしょうか。それから、工程フィールドは別に切り出さないの?

4
hiroton 2022/01/29 (土) 19:28:06 9b9bd@68800

タイマーイベントは単純に時間ごとにイベントを実行するだけ。その挙動(すべてのレコードのコントロールが同時に変更される)は帳票フォームの仕様ですね


基本事項の確認ですが、コントロールの「見た目」はいくつかの要素からなっています
・背景色
・前景色
・枠線(スタイル/色)

hatenaさん指摘の通り、背景色前景色であれば条件付き書式を切り替えれば実現できるでしょう。枠線もやりたいとなると案がないこともないですが、そこまでする?って感じです


さて、条件付き書式を変更すれば点滅できそうだ、となりましたが、hirotonは条件付き書式が好きではありませんし、VBAでいじるのは大変です。条件付き書式を使わずにレコードごとに書式を設定する方法を使うと楽ができそうです

カレント行の背景色の変更 その3(hatena chipsさん)

hatenaさんのブログですね。記事では背景色ですが、前景色も同じ考え方で実装できます
背景色に適用したい場合
メインのコントロール>背景色:透明コントロールの配置:前面
書式設定用コントロール>背景色:本来の背景色、コントロールの配置:背面

前景色に適用したい場合
メインのコントロール>背景色:本来の背景色、コントロールの配置:背面
書式設定用コントロール>背景色:透明コントロールの配置:前面

納期コントロールにぴったり重なる点滅用納期テキストボックスを配置します
コントロールソース:=IIf([納期]<Date,[納期])
背景色:透明
前景色:本来の背景色(※1)

このコントロールを表示したり消したりすれば特定のレコードのコントロールだけ点滅しているように見えます

Private Sub Form_Timer()
    Me!点滅用納期.Visble = Not Me!点滅用納期.Visble
End Sub

注意事項として、前面のコントロールなので普通に触れます。フォーカスがあるときにコントロールを消そうとするとエラーになります。触れないコントロールにするか、即座に納期.Setfocusするような仕掛けが必要でしょう

※1
本来の背景色と同じ色のテキストを前面に配置する≒背景と同化して見えなくなる。です。「文字を消す」ことが目的なら背景色のテクニックで完全にかぶせてしまってもいいですね。前景色でやると、調整によって薄めの文字との点滅とかができたりします

6
やまさん 2022/01/29 (土) 17:08:34 58219@0f11a

価格などはみなさんのアイデアでやるのがいいのかもしれませんね

・商品名の変更
・取引先の社名などの変更
・婚姻などで従業員の名字の変更
などはどのようにやるものでしょうか?
考えていたらありとあらゆるものが変更の可能性があるな、と

5
りんご 2022/01/29 (土) 08:04:07 c564b@0e907 >> 2

有効期限をつけて同じ内容で一部を変更したレコードを追加するということでしょうか?
同じIDは登録できませんよね?

同じIDは登録出来ないので、確かにこれは無理ですよね。

商品ID(主キー)商品名開始年月ほにゃらら
1りんご2022/1ほにゃらら
1 りんご2022/2ほにゃらら

どのようにやるということですか?

 最初にざっくり思い浮かべたのはこんな感じのでした。

商品ID商品名
1りんご
商品ID開始年月ほにゃらら
12022/1ほにゃらら
12022/2ほにゃらら〜
12022/3ほにゃらら〜〜

 商品名や社名も何とかならないか考えたんですけど、力不足でまとまらなかったです。見た目の履歴は残すとして、中身が変わらないのに見た目を参照する必要ってあるのかな、従来通り中身を参照出来ないかしら?
 プロに任せれば、マスタ全部に開始年月を組み込んで、複雑なデータベースを作ることが出来るのかもしれません。

リレーションするときの主キーはIDにすることが多いですが

 ググったり本を読んだりするとだいたいそんな感じなので自然にそうなっちゃいますよね。主キーはIDの泥沼から抜け出すなら早い方が良いですよ。頭を柔らかくしないと無理なので大変苦労します。

4

頻繁に変更があるものなら、トランザクションテーブルの方にデータを持たせるというのもありだと思います。

例えば、生鮮食品の価格とかは、売上履歴テーブルに価格も格納してしまえばいいと思います。
マスターには常に最新の価格を入力して、売上テーブルに入力するときに、VBAでマスターの価格を売上テーブルの価格に代入します。

あるいは、マスターとは別に価格変更履歴テーブルを作成するという方法もあります。

17
hatena 2022/01/28 (金) 23:31:05 修正 >> 15

届いています。ちょっと忙しかったので今、SQLを確認しました。

かなり複雑なSQLなので、それだけで原因を特定するのは難しいです。

症状の発生するファイルを送ってもらえたら、原因を特定できるかもしれません。(できないかもしれませんが)

3
hatena 2022/01/28 (金) 23:14:01 修正

各工程ごとに背景色が変えてあります。

これはどのように実現していますか?
帳票フォームでレコード毎に背景色を変更するのは、条件付き書式しかないですが。

点滅させるなら、その条件式を変更することになります。

現状の条件付き書式の設定を提示してもらえますか。

2
すー 2022/01/28 (金) 17:18:25 cd14b@b9210

hirotonさま 返信ありがとうございます。
サブフォームのモジュールに

Private Sub Form_Open(Cancel As Integer)
    Me.TimerInterval = 1000

End Sub

Private Sub Form_Timer()
    
    If Me!納期 < Date Then

            If Me!納期.ForeColor = RED Then
                Me!納期.ForeColor = DARKYELLOW
            Else
                Me!納期.ForeColor = RED
            End If
    End If

End Sub

と記述しましたが、サブフォームの1件目の納期を参照しているようで
全ての納期のコントロールが同じ動きをしてしまいます。
どのように記述すればよいのでしょうか?

1
hiroton 2022/01/28 (金) 16:55:10 17ac2@f966d

サブフォームもフォームです。適切にプロパティを設定すればその通り動作します


親フォームのタイマーイベントでサブフォームのコントロールを弄るということもできますが、今回の例ではそうすることもないでしょう

2
やまさん 2022/01/28 (金) 15:00:24 58219@c3b67

どのようにやるということですか?
有効期限をつけて同じ内容で一部を変更したレコードを追加するということでしょうか?
リレーションするときの主キーはIDにすることが多いですが同じIDは登録できませんよね?

16
どんぐりず 2022/01/28 (金) 13:01:46 440a7@6f3e7 >> 15

先日こちらのフォームからお送りしておりました。届いておりましたでしょうか。
ご回答はメールでいただけそうでしょうか。特に急ぎという訳ではありません、
届いたか不安だったため…ご連絡お待ちしておりますね!