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
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
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
すみません。説明不足で。
hatenaさんのやり方でカレンダーを作成したのですが、個人でスケジュール管理するために氏名別で表示されるようにしたいです。
サブフォームならリンク親フィールド、リンク子フィールドの設定で簡単にリンクできます。
サブフォームのレコードソースは、テーブルか抽出条件を設定してないクエリにします。
複数のフィールドでリンクさせるときは、
例えば、日付 と 氏名コード なら、
日付;氏名コード
というように;で区切って設定します。
初心者さん、不明点を知りたいのですが、
カレンダーもサブフォームもフォームに設置したのですか?
予定の入力はできるけれども氏名別にならないという意味ですか?
氏名一覧テーブルと予定テーブルによるクエリーがうまくいかないのですか。どうなればクエリーがうまくいく事になるのですか?
解決できてよかったですね。
もし、ディスプレイの設定を125%のままで使いたい場合は、下記のリンク先で紹介している関数を使うと簡単にフォームの拡大縮小ができます。これを使って0.8 (1/1.25)で縮小するといいでしょう。
大変失礼致しました。
マシンのディスプレイの設定でAccessの表示が125%になっていました。
今回はこれにて解決いたしました。
また相談させて頂きます。
失礼しました。
ありがとうございました。
再インストールしてみます。
だとすると、Officeをアンインストールして、再インストールしてみてください。
64bitか32bitかは関係ないと思います。
返信ありがとうございます。
新たに作成したファイルもダメです...
試しに、他の関数もしてみたのですが他の関数もダメみたいです。
今思えば、Accessのインストール時に少しエラーが出たのを思い出しました。
64bit版のほうがいいのでしょうか?
そのエラーが出るのは、そのファイルだけですか。それとも他のファイルでもでますか。
また、新規にAccessファイルを作成して、簡単なテーブルを作成してデータを入力して、クエリでDSumを使った場合はどうなりますか。
ありがとうございます。
期待通りの結果になりました。
難しく考えすぎており、行き詰まってしまいました。
もう少し頭を柔らかくして望みたいと思います。
レポートの詳細セクションにテキストボックスを配置して、名前を「連番」とします。
下記にように1行追加すればどうでしょうか。
ありがとうございました。
情報提供ありがとうございました。
更新プログラムの不具合らしいです。下記のリンクを参照してください。
2019年11月アップデート(KB4484113、KB4484119、KB4484127ʌ - マイクロソフト コミュニティ
更新プログラムをアンインストールするか、MSの修正バージョンがでるのを待つことになるそうです。
詳細は上記のスレッドを読んでください。
hatena 様
ありがとうございます。
3通りとも確認し思っていた通りに動作しました。
追加クエリを使用することに致しました。
お手数をお掛け致しました。
勉強になりました。
どのように複雑なのでしょうか。
フォーム2のデータをフォーム1にそのまま追加するだけではないのですか。
データを追加するだけなら、追加クエリが一番簡単です。追加クエリをコードで実行して再クエリです。
コード例
追加クエリを作成したくないなら、コードにSQLを直接記述することも可能です。
一応、追加クエリ(SQL)を使わない別案も出しておきます。
追加クエリの方がシンプルですし、処理も高速です。
hatena 様
ありがとうございます。
追加クエリを使わない方法はないでしょうか?
サンプルは簡素化しておりまして実際は複雑になっており
作り直しができない状態です。
コードではできないのでしょうか?
申し訳ありません。
ファイルを見ました。
フォーム1のレコードソースは「クエリ1」です。
フォーム2のレコードソースは「テーブル2」です。
「フォーム2」のデータを一括で「フォーム2」に追加したいということは、
言い換えれば、「テーブル2」のデータを「クエリ1」(テーブル1と同じもの)に追加するということです。
追加クエリという機能がありますので、それを使えば簡単に一括追加できます。
「テーブル2」から「テーブル1」にデータを追加する追加クエリを作成してください。
一括ボタンのクリック時にその追加クエリを実行するコードを記述すればいいでしょう。
追加クエリを実行後に、フォーム1を再クエリするれば、追加データが表示されます。
Accessのオプション
↓
オブジェクトデザイナー
↓
sqlサーバー互換構文
の中のデータベースのチェックを外したら直りました。
フォームフィルタの画面で「*」を入力してライク検索する際に
今までは、likeとなっていたのに勝手にAlikeとなっていたので気がつきました。
「sqlサーバー互換構文」チェックはした記憶はないのですが不思議です。
ちょっと前にWindowsのアップデートが原因でしょうか?
結構壊れる時がありますから…
ご相談させて頂きましてありがとうございました。
テーブルのあるデータベースでの実行結果と、別のデータベースからリンクテーブルに対しての実行結果が異なるという現象でしょうか。
そのような現象を経験したこともないし、聞いたこともないですね。
症状を再現できる詳細な情報(テーブルのフィールド構成、データ例)を提示できますか。
あるいは、症状の再現できる最小限のデータベースファイルを送信してもらえますか。
送信は右カラムの一番下のファイル送信フォームからできます。
リンクを張り直したり、最適化修復は試みましたが不具合のままでした
SELECT Min([受注ID]) AS minID
FROM 受注伝票;
すいません、環境はwin10、Access2013です。
早速見て頂きありがとうございます。
直してみたらできました。
最初はシンプルなものだったのですが、あれもこれもと機能を足していったら複雑化してました。今回、ファイルを送る時に整理をしてみたら明らかに必要のないファイルも紛れており、見直すいい機会になりました。
本当に助かりました。ありがとうございました。
hatenaさま
度々のご回答ありがとうございます。
教わったことをベースに一度作ってみたいと思います。
ありがとうございました。
送信ファイルを確認しました。
質問のコードでは、
となってますが、ファイルのコードは、
となっており、クエリ名が異なってます。"月間日報履歴"クエリには"請求書NO"フィールドはないので当然エラーになります。
"月間日報履歴"を"月間請求書履歴"に変更したらエラーなく実行されました。
このような出力はレポートを使うと簡単に見やすく作ることができます。
履歴テーブルを選択しておいて、レポートウィザードでレポートを作成します。
「グループレベルを設定してください」のところで「取引相手」を選択します。
次の並べ替えを指定するところで、「取引日付」の昇順に設定します。
次でレイアウトを「表形式」を選択します。
あとレポート名を設定して完了をクリックで雛形が完成します。
デザインビューで開いて、詳細セクションにテキストボックスを配置して、その設定を下記のようにします。
コントロールソース 取引金額
集計実行 グループ全体
これで相手先ごとにグループ化されて、各行ごとに残高が表示されます。
hatenaさま
早速のご回答ありがとうございます。大変丁寧な説明で分かり易いので助かります。
テーブルとデータ例は理解できました。多分テーブルに備考などを付け加えれば
イメージしている処理ができそうです。
集計クエリについてですが、残高だけを表示せずにA氏履歴とB氏履歴に分けて
残高が0になるまでを行をわけて表示することは可能でしょうか?(0になったら非表示)
可能です。
どのように設計するかですが、Accessはデータベースソフトですので、データをため込んで、必要に応じて、必要なデータを、必要な形に加工して出力する、ということをするものです。
まず、最初に考える必要があることは、どのようなデータをどのうような形でため込むか、です。ため込む場所はテーブルです。ですので、テーブルの設計から始めます。
データを加工して出力するのはクエリだったり、フォームだったり、レポートということになります。しかし元のデータがしっかりしたものでないと自由に加工できません。
呈示の情報から必要なデータは、最低限下記の3つになります。
金額に関しては、預かり金額、支払い金額 と2つのフィールドに分ける方法と、
一つのフィールドで預り金はプラス、支払いはマイナスとする方法が考えられます。
このお金の出し入れの履歴を逐一ため込んでいく形になります。
この履歴テーブルの他に、
お金を借りる相手の情報が氏名だけでなく、連絡先など別に必要なら、
相手先情報のマスターテーブルも必要になります。
テーブルの設計には「正規化」という原則があり、それに沿った設計にしないとデータベースとしては使いものにならないものになります。ただ、かなり奥が深く理解するには敷居が高いものなので、これはおいおい勉強していくといいでしょう。
前置きが長くなりましたが、まずは質問内容を一番シンプルな形でテーブルにすると、下記のようなものになります。
テーブル名 取引履歴
呈示されている情報だけから原因を特定するのはむずかしそうです。
さしつかえなければ、右のファイル送信フォームから現状のファイルを送信してもらえますか。
エラーの再現できる最低限のテーブルデータとコードのみのファイルをZIPファイルにして、それを添付して送信してください。
ご迷惑をおかけします。
月間請求書履歴クエリのSQLです
SELECT 請求書メイン.請求書NO, 請求書メイン.請求日, 宛先マスタ.会社名, 宛先マスタ.部署, 宛先マスタ.氏名, 現場.現場名, 請求書メイン.工事名, 請求書メイン.請求状況CD, 請求書メイン.請求金額
FROM 宛先マスタ INNER JOIN (現場 INNER JOIN 請求書メイン ON 現場.現場ID = 請求書メイン.現場ID) ON 宛先マスタ.宛先ID = 請求書メイン.宛先ID
WHERE (((請求書メイン.請求日)>=#11/1/2019# And (請求書メイン.請求日)<=#11/15/2019#));
ということは、
rs.Open "月間請求書履歴", cnn, adOpenKeyset, adLockOptimistic
の部分はエラーなく通過したということですね。
一歩前進です。
エラーメッセージから"月間請求書履歴"クエリまたは"データ"テーブルに「請求書NO」フィールドがないということしか考えられません。両方に「請求書NO」フィールドが存在するか、もう一度確認してみてください。「請求書NO」とNOが全角になっていてもだめですよ。
どちらにも「請求書NO」が存在するということなら、「月間請求書履歴」クエリのSQL文をコピーしてここに貼り付けてください。
はいそうです。
上記のコードを試してみたところ
rs1!請求書NO = rs!請求書NO
で、要求された名前、または序数に対応する項目がコレクションでみつかりませんとでました。
請求書NOがないはずはないのですが・・・
エラーメッセージから判断するに "月間請求書履歴" クエリでエラーが発生しているので、このクエリの設計に問題があるか確認するために、まずは、このクエリを開いて正しくデータが表示できるかどうか確かめるのは、最初にすべき確認事項です。
このクエリがパラメータクエリということはないですよね。
回答ありがとうございます。申し訳ありませんが月間請求書履歴をダブルクリックしてデータというのは”データ”テーブル云々の話ではなく、請求書のデータということで合ってますか?ダブルクリックしたら見れます。
上記のコードを試してみます。
"月間請求書履歴"クエリをダブルクリックして開いてデータを見ることはできますか。
これについて回答ください。
あと、
s.Open "月間請求書履歴", cnn, adOpenKeyset, adLockOptimistic
でエラーになって進めないということなんですが、
それ以外の部分で間違っている部分がありますので、
コードを下記に修正してください。
おはようございます

”データ”テーブルはあります。ただ月間請求書履歴のクエリの中には”データ”テーブルの情報はありません。
フィールド名は統一してありますがあくまでも”月間請求書履歴”の情報を”データ”に蓄積がメインだったもので。
”データ”はリレーションシップも設定しておらず本当に単独テーブルです
"月間請求書履歴"クエリはあるのですね。
ならば、そのクエリは開いてデータをみることができますか。
また"データ"テーブルは存在していますか。
返信ありがとうございます。
クエリにはあるのですがテーブルに月間請求書履歴というものはありません。
テーブルには請求書と請求書明細があり、クエリで月間請求書履歴になっています。
’データ’テーブルは単独でどこにも属していません
ちょっとやってみようと思います。
上記のフォルダというのはテーブルのタイプミスですか。
”月間請求書履歴”と"データ"というテーブルがあるということですか。
"月間請求書履歴"というテーブルがないとエラーになりますが、存在しますか。