Microsoft Access 掲示板

views
4 フォロー
6,283 件中 2,961 から 3,000 までを表示しています。
6
のり 2021/11/29 (月) 16:04:48 f1fa6@5536d

hatenaさま ありがとうございます
勉強不足ですみませんでした 
acReport, Me.Tag をそのまま使えばよかったのですね
難しく考えすぎていました OutputTo で対応いたします
本当にありがとうございました

5

F_PreViewChildMenu のTagプロパティにレポート名が格納されている仕様になってます。
よって下記のようなコードで共通に使えます。

DoCmd.OutputTo acReport, Me.Tag, acFormatXLS, "C:\test\" & Me.Tag & ".xls"

レポートのレコードソースがテーブルかクエリなら、DoCmd.TransferSpreadsheet が使えます。
わさわざ質問のような面倒なコードを使う必要性はないです。
その場合も、レポート名は、Me.Tagで取得できます。
ただし、レポートを開く時にフィルターをかけていたり、並べ替えを設定していたりすると、それが反映されないので、それを反映させたい場合はまた、面倒なことになります。

4
のり 2021/11/29 (月) 13:49:02 f1fa6@5536d

hatenaさま お返事ありがとうございます
hatenaさまの「F_PreViewChildMenu」のフォームはありとあらゆるレポートの出力に利用させてもらっています
そのため OutputTo acReport ”レポート名” では 「F_PreViewChildMenu-1」 「F_PreViewChildMenu-2」といったように その特定のレポートごとにフォームを作らなくてはなりません、なので現在ひらいているレポートのレコードを取りたかったのです
りんごさま お返事ありがとうございます EXCELはACCESSで加工されたデータを、その時だけに必要な集計表や煩雑なレポートを作成するために利用しております
CurrentDb.QueryDefs(Me.RecordSource).SQL ありがとうございます フォーム上でのエクスポート設定を読んで勉強させていただきます
ありがとうございます

3
りんご 2021/11/26 (金) 22:46:06 c564b@0e907

 OutputToメソッドやTransferSpreadsheetメソッドでは駄目なのでしょうか?中には非推奨とするサイトもあるようですが、鵜呑みにせずに本当に駄目なのか慎重に判断でましょう。
 コーディングの是非もありますが、Excelエクスポートの是非も気になります。そもそも、AccessとExcelの業務連携の必要性、何の為にAccessを導入しているのかと。

 コマンドボタンのクリック時のコードは 別サイトで見て書いてみました

 参考にするなら、下記サイトなんかはどうでしょう?
 

Accessのノウハウ(フォーム上でのエクスポート設定)
「ファイルのインポート・エクスポートをフォーム上で実行する」のその2 エクスポート 版です。インポートの項で、フォームの作り方・フォーマットテーブルとの連携の仕方・クエリの名前付け等についてお話しましたので、エクスポートについては、まずは、モジュールサンプルを提示します。フォームとモジュールサンプルこんなフォームを作るとします。レコードソースは、インポートと同じ T_Formatです。********************
日本システムアドミニストレータ連絡会

2
りんご 2021/11/26 (金) 21:44:10 c564b@0e907

CurrentDb.QueryDefs(Me.RecordSource).SQL

1

ブログのコメント欄でも書きましたが、OutputToメソッドを使えば1行で済みますが、それではうまくいかなかったのでしょうか。

DoCmd.OutputTo acReport, "レポート名", acFormatXLS, "C:\test\test.xls"
13

Q_案件 で一対多関係の多側のレコードのみ削除されて、一側のレコードは残っているということかも、と推測。
Q_案件 のSQLを提示してもらえますか。

2
名前なし 2021/11/26 (金) 11:34:12 7f390@642cb

hatenas様

解決しました。
ご助言いただきありがとうございます。

12
りんご 2021/11/26 (金) 03:16:16 c564b@0e907

>> 9
>> 11

Q_案件にてレコード削除した際も同じ現象が起きました。
一度削除される(削除しますか?のポップアップ⇒はいで、レコードが見えなくなる)のあとに更新ボタンを押すと復活していました。

 「選択クエリを直接開いて、レコードを1行手動で選択してDELETEした瞬間、一瞬画面がチラつき直ちに、削除したはずのレコードが復活した」という事ですが、「選択クエリを直接開いて、とあるレコードのフィールドを選択して値の変更を試した」結果は、どうなったのでしょう?慎重に確認するのであれば、クエリを直接開いてレコードを編集したら、テーブルも開いて確認します。

一時的にONして確認しましたが、エラーは出てきませんでした。

 もうひとつ当て推量です。フォーム上に案件NO、売区、得意先IDなどのフィールドがあると思いますが、どれかに何かのイベントを設定していませんか?もし該当するものがあれば、フィールドに設定したイベントを全部offにしてみて下さい。
 その上で、削除から一瞬で復活するか結果を教えて下さい。復活しなくなった場合、offにしたイベントのコードを保守義務に差し支えない範囲で、全部コピペして教えて下さい。

1
りんご 2021/11/26 (金) 02:32:20 c564b@0e907

 ググっていたら、こんなのがありました。下の方にスクロールすると、とある回答者がコード化したようです。内容の正しさまでは私にはわかりませんでした。他の人の意見も聞いて下さい。

How to set a password for PDF file export?
I need to add a password for extracting PDF. Dim FileName As String Dim FilePath As String FileName = Me.Full_Name & "_" & Me.ID FilePath = "C:\Users\Desktop\" & Fil...
Stack Overflow

11
どんぐりず 2021/11/25 (木) 23:06:24 440a7@6f3e7 >> 6

一時的にONして確認しましたが、エラーは出てきませんでした。

1

もう少し詳しい情報が欲しいですね。

まず、データベースファイルはデータとそれ以外で分割していましたか。

データが丸ごと消えたとは、テーブルのデータ件数が0件になった、テーブルごと消えた、データベースファイルごと消えた、、、、どれでしょうか。

1

qd のパラメータを設定したのですから、qdをOpenRecordsetしてください。

Set db = CurrentDb
Set qd = db.QueryDefs("Q_経費精算振込明細用")
qd.Parameters("[forms]![F_経費精算]![振込月]") = Forms![F_経費精算]![振込月]

Set rs = qd.OpenRecordset
10
hiroton 2021/11/25 (木) 09:54:34 5b367@f966d

参考になるか分かりませんがACCESS+SharePointの環境で
テーブルのレコードを選んで削除→消える
選択クエリ(結合なしで抽出条件だけ)のレコードを選んで削除→クエリ上では消える、テーブルでは消えず、クエリを開きなおすとデータが消えていない
というのは経験したことがあります

深く検証する状況になかったのでこれ以上のことはわかりませんが、基本に立ち戻って最小構成のテスト用DBからどの状況でその現象が発生するのか確認したらいいと思いますよ

9
どんぐりず 2021/11/25 (木) 09:37:25 440a7@6f3e7 >> 8

ご回答ありがとうございます。
Q_案件にてレコード削除した際も同じ現象が起きました。
一度削除される(削除しますか?のポップアップ⇒はいで、レコードが見えなくなる)のあとに更新ボタンを押すと復活していました。

8

F_案件の元データがQ_案件で

フォームのレコードソースに、Q_案件 というクエリが設定されいるということですか。

このQ_案件を直接開いてレコード削除したときは、削除できますか。
また、データの更新はできますか。

キーとなる「案件NO」からQ_案件で
「T_案件リンク」と「Q_サブ保守」に結合しています。
その他キー以外の
「売区」から「T_売区」
「得意先ID」から「Q_得意先」に結合しています。
色んな所と繋がっているので、削除しても復活してしまうのかと考えています。

結合することで、削除したものが復活するということはありえません。
結合や主キーの設定が間違っていると更新できない(当然削除もできない)クエリになることはあります。

7
りんご 2021/11/24 (水) 22:21:31 c564b@0e907

例えば、セルを編集してセにしたい。

列名1列名2
セルセル
セル

セルのルを消したのに、うっかりESCキー押してしまい復活しちゃった。

列名1列名2
セルセル
セルセル

これに近い事が起きていませんか?当て推量ですが、何某かのイベントが発動して、編集が確定されずにキャンセルされているとか。

6
りんご 2021/11/24 (水) 22:02:39 c564b@0e907

 エラーメッセージの表示設定を一時的にONにして、リレーションシップの連鎖削除が原因と出てくるか試してみましたか?(フォームで削除出来ないものが、テーブルで直接削除出来るとは考えにくいんですが、念のため確認して下さい。)

5
どんぐりず 2021/11/24 (水) 21:17:10 a6ff4@1c915 >> 4

名前が変わってました…どんぐりず=風(質問者)です。
この修正について社内で後回しにしており、改めての質問になり申し訳ありません。
リレーションシップで、T_案件が「一対多」の「多」側になっていることがあります。そこで連鎖削除等の3つのチェックボックス全てにチェックを入れているのが問題でしょうか…?勝手な推測で失礼いたします。

4
どんぐりず 2021/11/24 (水) 19:22:47 a6ff4@1c915 >> 2

これで削除はできませんでした。(一旦できるのですが、更新すると復活する)
色々と入り組んでいてどこまで説明すれば良いのかわからないのですが
F_案件の元データがQ_案件で
キーとなる「案件NO」からQ_案件で
「T_案件リンク」と「Q_サブ保守」に結合しています。
その他キー以外の
「売区」から「T_売区」
「得意先ID」から「Q_得意先」に結合しています。
色んな所と繋がっているので、削除しても復活してしまうのかと考えています。

全体的にボリュームのあるデータなので全て説明するのが難しく
適当な情報をピックアップしてしまい申し訳ありません。
リレーションシップは昔組んでいたらうまく行かない所があって
中途半端に組んでしまっています。
全部のテーブルを入れて、きちんと組むべきでしょうか。

3
どんぐりず 2021/11/24 (水) 17:28:34 a6ff4@1c915 >> 1

ご回答ありがとうございます。該当のチェックボックスにチェックは入っていません。
入れた方が良いということでしょうか?(別の場所で色々不要なメッセージが出て驚かせてしまうので外した記憶があります)

4
hatena 2021/11/23 (火) 23:53:32 修正 >> 3

MSの公式ドキュメントだと、下記にそれらしき記述がありますね。

データ型とフィールド プロパティの概要 - 集計
用途    計算の結果を格納するために使用します。
中略
サポートされるフィールド プロパティ

この計算の結果は集計列に格納されます。 この列が保存されている場合、保存されている列のみをこの式で利用できます。

あと、Now() とか結果が固定されていない関数などは使えないことからも更新時に結果を保存していて、呼び出し時に再計算はしていないと推測できます。

最後のリンク先は知らなかったので非常に参考になりました。
ただ、リンク先でも言及されてますが、インデックスを設定できないので、メリットは大きく減少していると思います。
パフォーマンスアップに関してもリンク先では200万行で実験していますが、私自身はこのような大きなデータを扱うことはないので、たぶん使用することはないだろうと思います。

3
名前なし 2021/11/23 (火) 18:03:49 91f1b@2cc99

おお hatena 様、いらしてくれてありがとうございます。

どうもはっきりしないのですが、

https://hamachan.info/win7/access/data.html
>Access2010では、テーブルのデータ型に[集計]が追加され、テーブルに集計フィールドを作成できるようになりました。
>計算の結果は集計列に格納されます。

https://358dokari.com/access-datetype-kaisetu1#⑭_集計
>14 集計
>他の列の値を参照して式を作成し、その計算結果をテーブルに保存することができます。

それとこの英語サイトが table と query の場合でベンチマークをやって、
「結果の値を保存している」と判断しているようです。

https://codekabinett.com/rdumps.php?Lang=2&targetDoc=access-table-calculated-field-compute-quarter-date

hatena 様はどうお考えでしょうか。

2

「保存する」説のページのリンクをいくつか提示してもらえるとありがたいです。

1
l202111 2021/11/23 (火) 04:09:13 f7b05@4e5da

すみません、自己レスです。
MS公式その他を読んでも分からなかったので質問させていただきましたが、
検索を続けると「保存する」が多数説で判明しました。
お騒がせしました。

6

横一列にフィールドを配置して、すべてのフィールドを、例えば5mm間隔で配置する

表形式のレイアウトが適用されているか否かによるのではないかと。

レイアウトが適用されているのであれば、レイアウト内で横並びになっている
複数のテキストボックスを選択し、それらの[左スペース]プロパティの値と
[右スペース]プロパティの値の和が 0.5 cm になるよう、プロパティシートから
それぞれのプロパティの設定値を入力すればよいはず。

3
kazuki 2021/11/22 (月) 13:11:57 修正 d73a2@c8d31

りんご様

前提をお話していませんでしたが、表示するだけではなく、60万件ほどの初期レコードに対し、
UI上に演算等をするコマンドボタンが10数個あり、レコードを追加、削除、演算をし、結果として、
集計結果(100万件)をクロス集計クエリを表示する仕様です。

hatena様

インデックスは早速試しました、体感レベルですが少なからずパフォーマンス改善したように思います。
SourceObjectを空にしておいて、タブの移動で計算させるというのは、パフォーマンス改善にかなり有効でした。

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

5
わにさん 2021/11/22 (月) 13:07:59 842b8@6703c

お二人ともありがとうございます。
フィルタの方で成功しました。クエリの方もいくつかのパタンは試したのですが、ご教示いただいた内容も試してみたいと思います。
またよろしくお願いいたします。

4
りんご 2021/11/21 (日) 23:08:54 c564b@0e907 >> 1

 特に問題ないと思いますが、気になるなら、仮のテーブルとクエリを作って試してみるのはどうでしょう?

5
りんご 2021/11/21 (日) 23:04:30 c564b@0e907 >> 1

 全部のフィールドを選択して、プロパティシートの書式、右スペースを0.5にするとどうなります?

3

工夫すればいろいろ方法はあると思います。

例えば、
まずは、横1列のテキストボックスの間隔0になるようします。
現状、各テキストボックスが重なるように配置されているなら、すべてのテキストボックスを選択して、
[サイズ/間隔]-[左右の間隔を均等にする]をクリック。
間隔が空いているなら[サイズ/間隔]-[左右の間隔を狭くする]を間隔0になるまでクリック。

間隔0になったら、右端のテキストボックスを選択して、[左位置]の値を間隔×(テキストボックス数-1)分だけ増やします。
例えば、間隔5mmでテキストボックス数10なら 0.5×9=4.5cm増やします。
その後、すべてのテキストボックスを選択して、[サイズ/間隔]-[左右の間隔を均等にする]をクリックすると、5mmの間隔になります。

テキストボックスがどれだけ多くても左位置の設定は1回ですみますのでかなり楽できます。

2

5cmと3cmのフィールドなどバラバラのサイズで各5mm開ける、とかだと、フィールドの長さを考慮して地道に打ち込んでいくということですか?
フィールドの左端位置は数値でわかりますが、右端(終わりの場所)の情報がないようなので
やはり手動で計算していかないといけませんよね

3
かもめ 2021/11/21 (日) 19:35:16 58219@732d2 >> 1

配置しているフィールドもすべて手動で書き換える必要がありますか?
同じテーブルのデータを表示させるだけなのでフィールドはそのままでよいのでしょうか?

2

レコード数100万件、カラム数30くらいあるテーブルのデータを複数のビューで
クロス集計クエリをしています。単にクエリを表示するのにかなりの時間がかかります。

テーブルに適切なインデックスは設定されているでしょうか。
列見出しに設定するフィールド、抽出条件を設定するフィールド、並べ替えを設定するフィールドにインデックスを設定してみてください。
複数のテーブルを結合しているなら結合フィールドにもインデックスを設定してみてください。

クロス集計クエリではなく通常の選択クエリであれば、VBAでレコードソースを設定する際、
データが抽出されない条件を初期設定などして、必要なタイミングでコマンドボタンクリック時
のイベントプロシージャで表示させることなどできますが、クロス集計クエリではうまくいきません。

フォームに関しては、デザインビューでは、タブの最初に表示されいるページのみにソースオブジェクトを設定しておいて、ページを変更したときにそのページのソースオブジェクトを設定するという方法が考えられます。

コード例

Private Sub タブ1_Change()
    Select Case Me.タブ1.Value 'Value=表示されいるページ番号(0から始まる)
    Case 1 '2ページ目
        With Me.サブフォームコントロール1
           If  .SourceObject = "" Then .SourceObject = "サブフォーム1"
        End With
    Case 2 '3ページ目
        With Me.サブフォームコントロール2
           If  .SourceObject = "" Then .SourceObject = "サブフォーム2"
        End With
    Case 3
 
        '略

    End Select
End Sub
1
りんご 2021/11/21 (日) 17:18:17 c564b@0e907

パフォーマンスが悪いです。クロス集計クエリではうまくいきません。

 それはそうでしょう。詳しくないですが、Excel風に印刷したい時など、その場限りで使うものではないでしょうか。クロス集計結果をメイン画面に表示して普段使うならば、Excelでデータベースを組むでしょう。

通常の選択クエリであれば、…

 時間と労力を費やしてその場凌ぎではどうにもならないと思います。個人の意見なので、解決策が他にあるかもしれませんが。

5
りんご 2021/11/21 (日) 15:10:23 c564b@0e907 >> 2

 現在のフォームを作成した後、元のテーブルを編集し直したが、そのせいか?取り敢えず、もう1つテーブルもしくはクエリからフォームを作ってマクロを試してみると、どうなるでしょうか。

4

あと、マクロのWHERE条件式ですが、
[開くフォーム上のフィールド名]=[Forms]![フォーム名]![テキストボックス名]
というフォーマットになりますが、[F_詳細]のレコードソースに[ID]フィールドは存在してますか。
これはテキストボックス名ではないので注意してください。

3

バラメータのテキストボックスの標題は何が表示されてますか?
そこに表示されているフィールドまたはオブジェクトが見つからないということですので、それに間違いがないか、開いているか確認して下さい。
それ以外の原因はないです。

画像1

2

>りんごさん
ありがとうございます。再度確認しましたが、テキストボックスの名前は間違いありませんでした。
以前にテーブルでIDフィールドを作成し直していますが、その影響はありますでしょうか。両フォームでのテキストボックスのコントロールソースに間違はないです。