Microsoft Access 掲示板

6,622 件中 6,041 から 6,080 までを表示しています。
3
初心者 2019/12/03 (火) 13:21:03 8dddf@3f05e >> 1

すみません。説明不足で。
hatenaさんのやり方でカレンダーを作成したのですが、個人でスケジュール管理するために氏名別で表示されるようにしたいです。

2

サブフォームならリンク親フィールド、リンク子フィールドの設定で簡単にリンクできます。
サブフォームのレコードソースは、テーブルか抽出条件を設定してないクエリにします。

複数のフィールドでリンクさせるときは、
例えば、日付 と 氏名コード なら、
日付;氏名コード
というように;で区切って設定します。

1

初心者さん、不明点を知りたいのですが、
カレンダーもサブフォームもフォームに設置したのですか?
予定の入力はできるけれども氏名別にならないという意味ですか?
氏名一覧テーブルと予定テーブルによるクエリーがうまくいかないのですか。どうなればクエリーがうまくいく事になるのですか?

2
hatena 2019/11/27 (水) 17:17:35 修正 >> 1

解決できてよかったですね。

もし、ディスプレイの設定を125%のままで使いたい場合は、下記のリンク先で紹介している関数を使うと簡単にフォームの拡大縮小ができます。これを使って0.8 (1/1.25)で縮小するといいでしょう。

フォーム上のコントロールのサイズを拡大/縮小する関数
モニターの解像度によってフォームと、その全てのコントロールのサイズを指定した倍率で拡大/縮小したい このような質問をたまに見かけます。 単純に全てのコントロールの 左位置, 上位置, 幅, 高さ に指定倍率をかければよさそうに思えます。 当ブログでも同じロジックでレポートを拡大/縮小する関数を下記で紹介しました。 レポートのサイズを拡大縮小する関数 - hatena chips フォームでも同じように出来るので...
fc2

1
SUSUMU 2019/11/27 (水) 16:30:49 b3fdd@8e48d

大変失礼致しました。
マシンのディスプレイの設定でAccessの表示が125%になっていました。
今回はこれにて解決いたしました。
また相談させて頂きます。
失礼しました。

5

ありがとうございました。
再インストールしてみます。

4

新たに作成したファイルもダメです...
試しに、他の関数もしてみたのですが他の関数もダメみたいです。
今思えば、Accessのインストール時に少しエラーが出たのを思い出しました。

だとすると、Officeをアンインストールして、再インストールしてみてください。

64bitか32bitかは関係ないと思います。

3

返信ありがとうございます。

新たに作成したファイルもダメです...
試しに、他の関数もしてみたのですが他の関数もダメみたいです。
今思えば、Accessのインストール時に少しエラーが出たのを思い出しました。
64bit版のほうがいいのでしょうか?

1

そのエラーが出るのは、そのファイルだけですか。それとも他のファイルでもでますか。
また、新規にAccessファイルを作成して、簡単なテーブルを作成してデータを入力して、クエリでDSumを使った場合はどうなりますか。

2
oshiruko2.5kg 2019/11/21 (木) 09:25:59 7ece8@9f543

ありがとうございます。
期待通りの結果になりました。
難しく考えすぎており、行き詰まってしまいました。
もう少し頭を柔らかくして望みたいと思います。

1

レポートの詳細セクションにテキストボックスを配置して、名前を「連番」とします。
下記にように1行追加すればどうでしょうか。

Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer)
    
    Me.連番 = i & "/" & Me!発注数
    
    If i < Me!発注数 Then
        Me.NextRecord = False
        i = i + 1
    Else
        i = 1
    End If

End Sub
2

ありがとうございました。
情報提供ありがとうございました。

1

更新プログラムの不具合らしいです。下記のリンクを参照してください。

2019年11月アップデート(KB4484113、KB4484119、KB4484127ʌ - マイクロソフト コミュニティ

更新プログラムをアンインストールするか、MSの修正バージョンがでるのを待つことになるそうです。
詳細は上記のスレッドを読んでください。

5

hatena 様

ありがとうございます。
3通りとも確認し思っていた通りに動作しました。
追加クエリを使用することに致しました。
お手数をお掛け致しました。
勉強になりました。

4
hatena 2019/11/13 (水) 20:57:06 修正

どのように複雑なのでしょうか。
フォーム2のデータをフォーム1にそのまま追加するだけではないのですか。

データを追加するだけなら、追加クエリが一番簡単です。追加クエリをコードで実行して再クエリです。
コード例

Private Sub コマンド8_Click()
    CurrentDb.Execute "追加クエリ"
    Forms![フォーム1].SetFocus
    Forms![フォーム1].Requery
End Sub

追加クエリを作成したくないなら、コードにSQLを直接記述することも可能です。

Private Sub コマンド8_Click()
    CurrentDb.Execute "INSERT INTO テーブル1 SELECT [テーブル2].* FROM テーブル2;"
    Forms![フォーム1].SetFocus
    Forms![フォーム1].Requery
End Sub

一応、追加クエリ(SQL)を使わない別案も出しておきます。

Private Sub コマンド8_Click()
    Dim MeRs As DAO.Recordset
    Set MeRs = Me.Recordset
    If MeRs.RecordCount = 0 Then
        MsgBox "データがありません。"
        Exit Sub
    End If
        
    Forms![フォーム1].SetFocus
    Dim TargetRs As DAO.Recordset
    Set TargetRs = Forms![フォーム1].Recordset

    MeRs.MoveFirst
    Do Until MeRs.EOF
        TargetRs.AddNew
        TargetRs!項目 = MeRs!項目
        TargetRs!金額 = MeRs!金額
        TargetRs.Update
        MeRs.MoveNext
    Loop

End Sub

追加クエリの方がシンプルですし、処理も高速です。

3

hatena 様

ありがとうございます。
追加クエリを使わない方法はないでしょうか?
サンプルは簡素化しておりまして実際は複雑になっており
作り直しができない状態です。
コードではできないのでしょうか?

申し訳ありません。

2

ファイルを見ました。
フォーム1のレコードソースは「クエリ1」です。
フォーム2のレコードソースは「テーブル2」です。

「フォーム2」のデータを一括で「フォーム2」に追加したいということは、
言い換えれば、「テーブル2」のデータを「クエリ1」(テーブル1と同じもの)に追加するということです。
追加クエリという機能がありますので、それを使えば簡単に一括追加できます。

「テーブル2」から「テーブル1」にデータを追加する追加クエリを作成してください。
一括ボタンのクリック時にその追加クエリを実行するコードを記述すればいいでしょう。
追加クエリを実行後に、フォーム1を再クエリするれば、追加データが表示されます。

5
チョコ 2019/11/12 (火) 21:15:33 f6d67@dab18

Accessのオプション

オブジェクトデザイナー

sqlサーバー互換構文
の中のデータベースのチェックを外したら直りました。

フォームフィルタの画面で「*」を入力してライク検索する際に
今までは、likeとなっていたのに勝手にAlikeとなっていたので気がつきました。
「sqlサーバー互換構文」チェックはした記憶はないのですが不思議です。

ちょっと前にWindowsのアップデートが原因でしょうか?
結構壊れる時がありますから…

ご相談させて頂きましてありがとうございました。

4

テーブルのあるデータベースでの実行結果と、別のデータベースからリンクテーブルに対しての実行結果が異なるという現象でしょうか。
そのような現象を経験したこともないし、聞いたこともないですね。

症状を再現できる詳細な情報(テーブルのフィールド構成、データ例)を提示できますか。

あるいは、症状の再現できる最小限のデータベースファイルを送信してもらえますか。
送信は右カラムの一番下のファイル送信フォームからできます。

3
チョコ 2019/11/12 (火) 00:57:07 f6d67@dab18

リンクを張り直したり、最適化修復は試みましたが不具合のままでした

2
チョコ 2019/11/11 (月) 21:53:52 f6d67@dab18

SELECT Min([受注ID]) AS minID
FROM 受注伝票;

1
チョコ 2019/11/11 (月) 21:53:22 f6d67@dab18

すいません、環境はwin10、Access2013です。

14
mikami 2019/11/06 (水) 15:43:31 df96b@a036a

早速見て頂きありがとうございます。
直してみたらできました。
 最初はシンプルなものだったのですが、あれもこれもと機能を足していったら複雑化してました。今回、ファイルを送る時に整理をしてみたら明らかに必要のないファイルも紛れており、見直すいい機会になりました。
本当に助かりました。ありがとうございました。

4
名前なし 2019/11/05 (火) 19:35:29 a8f7f@79499

hatenaさま
度々のご回答ありがとうございます。
教わったことをベースに一度作ってみたいと思います。
ありがとうございました。

13

送信ファイルを確認しました。
質問のコードでは、

    rs.Open "月間請求書履歴", cnn, adOpenKeyset, adLockOptimistic  'テーブルを開く

となってますが、ファイルのコードは、

    rs.Open "月間日報履歴", cnn, adOpenKeyset, adLockOptimistic

となっており、クエリ名が異なってます。"月間日報履歴"クエリには"請求書NO"フィールドはないので当然エラーになります。

"月間日報履歴"を"月間請求書履歴"に変更したらエラーなく実行されました。

3

集計クエリについてですが、残高だけを表示せずにA氏履歴とB氏履歴に分けて
残高が0になるまでを行をわけて表示することは可能でしょうか?(0になったら非表示)

このような出力はレポートを使うと簡単に見やすく作ることができます。

履歴テーブルを選択しておいて、レポートウィザードでレポートを作成します。
「グループレベルを設定してください」のところで「取引相手」を選択します。
次の並べ替えを指定するところで、「取引日付」の昇順に設定します。
次でレイアウトを「表形式」を選択します。
あとレポート名を設定して完了をクリックで雛形が完成します。

デザインビューで開いて、詳細セクションにテキストボックスを配置して、その設定を下記のようにします。

コントロールソース 取引金額
集計実行 グループ全体

これで相手先ごとにグループ化されて、各行ごとに残高が表示されます。

2
初心者 2019/11/05 (火) 15:59:17 50a82@06c9f

hatenaさま
早速のご回答ありがとうございます。大変丁寧な説明で分かり易いので助かります。
テーブルとデータ例は理解できました。多分テーブルに備考などを付け加えれば
イメージしている処理ができそうです。

集計クエリについてですが、残高だけを表示せずにA氏履歴とB氏履歴に分けて
残高が0になるまでを行をわけて表示することは可能でしょうか?(0になったら非表示)

1

可能です。

どのように設計するかですが、Accessはデータベースソフトですので、データをため込んで、必要に応じて、必要なデータを、必要な形に加工して出力する、ということをするものです。

まず、最初に考える必要があることは、どのようなデータをどのうような形でため込むか、です。ため込む場所はテーブルです。ですので、テーブルの設計から始めます。

データを加工して出力するのはクエリだったり、フォームだったり、レポートということになります。しかし元のデータがしっかりしたものでないと自由に加工できません。

呈示の情報から必要なデータは、最低限下記の3つになります。

  • お金を借りる相手の情報(氏名)
  • 取引日付
  • 取引金額

金額に関しては、預かり金額、支払い金額 と2つのフィールドに分ける方法と、
一つのフィールドで預り金はプラス、支払いはマイナスとする方法が考えられます。

このお金の出し入れの履歴を逐一ため込んでいく形になります。

この履歴テーブルの他に、
お金を借りる相手の情報が氏名だけでなく、連絡先など別に必要なら、
相手先情報のマスターテーブルも必要になります。

テーブルの設計には「正規化」という原則があり、それに沿った設計にしないとデータベースとしては使いものにならないものになります。ただ、かなり奥が深く理解するには敷居が高いものなので、これはおいおい勉強していくといいでしょう。

前置きが長くなりましたが、まずは質問内容を一番シンプルな形でテーブルにすると、下記のようなものになります。
 
テーブル名 取引履歴

フィールドデータ型主キー
取引IDオートナンバー型
取引日付日付/時刻型
取引相手短いテキスト
取引金額通貨型
 
データ例
取引ID取引日付取引相手取引金額
111/01A氏10000
211/02A氏-5000
311/02B氏50000
411/03B氏-10000
511/04A氏-3000
 
上記のようにテーブルに入力して、現時点での預り金残額は、集計クエリで、
取引相手でグループ化して、取引金額を合計にすれば、下記のような出力が得られます。
取引相手預り金残高
A氏2000
B氏40000
12

呈示されている情報だけから原因を特定するのはむずかしそうです。
さしつかえなければ、右のファイル送信フォームから現状のファイルを送信してもらえますか。
エラーの再現できる最低限のテーブルデータとコードのみのファイルをZIPファイルにして、それを添付して送信してください。

10
mikami 2019/11/01 (金) 10:40:05 df96b@a036a

ご迷惑をおかけします。
月間請求書履歴クエリのSQLです

SELECT 請求書メイン.請求書NO, 請求書メイン.請求日, 宛先マスタ.会社名, 宛先マスタ.部署, 宛先マスタ.氏名, 現場.現場名, 請求書メイン.工事名, 請求書メイン.請求状況CD, 請求書メイン.請求金額
FROM 宛先マスタ INNER JOIN (現場 INNER JOIN 請求書メイン ON 現場.現場ID = 請求書メイン.現場ID) ON 宛先マスタ.宛先ID = 請求書メイン.宛先ID
WHERE (((請求書メイン.請求日)>=#11/1/2019# And (請求書メイン.請求日)<=#11/15/2019#));

9

rs1!請求書NO = rs!請求書NO 
で、要求された名前、または序数に対応する項目がコレクションでみつかりませんとでました。

ということは、
rs.Open "月間請求書履歴", cnn, adOpenKeyset, adLockOptimistic
の部分はエラーなく通過したということですね。
一歩前進です。

エラーメッセージから"月間請求書履歴"クエリまたは"データ"テーブルに「請求書NO」フィールドがないということしか考えられません。両方に「請求書NO」フィールドが存在するか、もう一度確認してみてください。「請求書NO」とNOが全角になっていてもだめですよ。

どちらにも「請求書NO」が存在するということなら、「月間請求書履歴」クエリのSQL文をコピーしてここに貼り付けてください。

8
mikami 2019/10/31 (木) 16:20:17 df96b@a036a

はいそうです。

上記のコードを試してみたところ
 rs1!請求書NO = rs!請求書NO 
で、要求された名前、または序数に対応する項目がコレクションでみつかりませんとでました。
請求書NOがないはずはないのですが・・・

7

エラーメッセージから判断するに "月間請求書履歴" クエリでエラーが発生しているので、このクエリの設計に問題があるか確認するために、まずは、このクエリを開いて正しくデータが表示できるかどうか確かめるのは、最初にすべき確認事項です。
このクエリがパラメータクエリということはないですよね。

6
mikami 2019/10/31 (木) 15:56:59 df96b@a036a

回答ありがとうございます。申し訳ありませんが月間請求書履歴をダブルクリックしてデータというのは”データ”テーブル云々の話ではなく、請求書のデータということで合ってますか?ダブルクリックしたら見れます。
上記のコードを試してみます。

5
hatena 2019/10/31 (木) 09:29:44 修正

"月間請求書履歴"クエリをダブルクリックして開いてデータを見ることはできますか。
これについて回答ください。

あと、
s.Open "月間請求書履歴", cnn, adOpenKeyset, adLockOptimistic
でエラーになって進めないということなんですが、
それ以外の部分で間違っている部分がありますので、
コードを下記に修正してください。

Private Sub コマンド25_Click()
          
    Dim cnn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim rs1 As ADODB.Recordset
    
    'Connectionは一つで共有する
    Set cnn = Application.CurrentProject.Connection
    Set rs = New ADODB.Recordset
    Set rs1 = New ADODB.Recordset
    
    rs.Open "月間請求書履歴", cnn, adOpenKeyset, adLockOptimistic  'テーブルを開く
    rs1.Open "データ", cnn, adOpenKeyset, adLockOptimistic
    
    rs.MoveFirst '"月間請求書履歴"(rs)の先頭レコードへ移動
    Do Until rs.EOF
        '"月間請求書履歴"(rs)のデータを"データ"(rs1)に新規追加
        rs1.AddNew
        rs1!請求書NO = rs!請求書NO
        rs1!請求日 = rs!請求日
        rs1!会社名 = rs!会社名
        rs1!氏名 = rs!氏名
        rs1!現場名 = rs!現場名
        rs1!工事名 = rs!工事名
        rs1!請求金額 = rs!請求金額
        rs1.Update
        '"月間請求書履歴"(rs)を次レコードへ移動
        rs.MoveNext
    Loop
    
    rs.Close
    Set rs = Nothing
    rs1.Close
    Set rs1 = Nothing
    
    cnn.Close
    Set cnn = Nothing
    
    DoCmd.OpenForm "請求書履歴"
 End Sub
4
mikami 2019/10/31 (木) 08:16:29 修正 df96b@a036a

おはようございます
”データ”テーブルはあります。ただ月間請求書履歴のクエリの中には”データ”テーブルの情報はありません。
フィールド名は統一してありますがあくまでも”月間請求書履歴”の情報を”データ”に蓄積がメインだったもので。
”データ”はリレーションシップも設定しておらず本当に単独テーブルです
画像1

3

"月間請求書履歴"クエリはあるのですね。
ならば、そのクエリは開いてデータをみることができますか。

また"データ"テーブルは存在していますか。

2
mikami 2019/10/30 (水) 15:48:48 修正 df96b@a036a

返信ありがとうございます。
クエリにはあるのですがテーブルに月間請求書履歴というものはありません。

テーブルには請求書と請求書明細があり、クエリで月間請求書履歴になっています。
’データ’テーブルは単独でどこにも属していません

ちょっとやってみようと思います。

1

 ”月間請求書履歴”というフォルダから”データ”という請求書を蓄積しているフォルダに保存させるべきVBAを書いた

上記のフォルダというのはテーブルのタイプミスですか。
”月間請求書履歴”と"データ"というテーブルがあるということですか。

 rs.Open "月間請求書履歴", cnn, adOpenKeyset, adLockOptimistic
エラーになってしまい進めません。

"月間請求書履歴"というテーブルがないとエラーになりますが、存在しますか。