Option Compare Database
Option Explicit
Private originX As Long
Private originY As Long
Private Sub Form_Load()
originX = Me.InsideWidth
originY = Me.InsideHeight
End Sub
Private Sub img_Resize_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button And acLeftButton Then
ReleaseCapture
Call SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, HTBOTTOMRIGHT, 0&)
End If
End Sub
Private Sub img_Resize_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If originX >= Me.InsideWidth Then Me.InsideWidth = originX
If originY >= Me.InsideHeight Then Me.InsideHeight = originY
End Sub
Option Compare Database
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Sub ReleaseCapture Lib "user32.dll" ()
Private Const WM_NCLBUTTONDOWN = &HA1
Private Const HTCAPTION = 2
Private Const HTBOTTOMRIGHT = 17
Private Sub lblResize_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button And acLeftButton Then
ReleaseCapture
Call SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, HTBOTTOMRIGHT, 0&)
End If
End Sub
Private Sub 詳細_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button And acLeftButton Then
ReleaseCapture
Call SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
End If
End Sub
できました!
あとで、よく勉強します。
下記でどうでしょうか。
絶対無理だと思って質問してしまいましたが、探り探り作成して、なんとかうまくいきました!更新クエリを作って、そこにマクロでフォームから該当の案件番号を追加実行できるようにしました。クエリは更新クエリと、作成用のクエリ2つにすればよかったようです。また問題が起こってきたら質問させていただくと思います。失礼いたしました。
'フォーム 開くとき
Private Sub Form_Open(Cancel As Integer)
Dim i As Integer
For i = 1 To 42
Me("T" & i).OnClick = "=SetDate(" & i & ")"
Next
Me.cmdPrev.OnClick = "=MoveMonth(-1)"
Me.cmdNext.OnClick = "=MoveMonth(1)"
' SetCalendar DLookup("日付", "T_予定") '開く時の日付表示
SetCalendar Format(Now(), "yyyy/mm/dd")
End Sub
私はこれで動きました。
質問を修正しました。コメント1,2は編集できなかったため、古いものが残っています。すみません。
これだけの情報では回答は難しいです。
そのアクセスのシステムを作成した人に問い合わせるのが早道です。
作成した人に連絡がとれないなら、Accessに関してそれなりのスキルを持っている人が実際のファイルをみて解析しないと無理でしょう。
テーブル設計の見直しについて、自分なりにずっと考えています。正しく変更できるかはわかりませんが、とりあえず変更はする予定です。それでもフォームに書き込めなかったらまた、質問させていただきます。ご迷惑をおかけしました。
すみません
https://tsware.jp/tips/tips_642.htm
で解決しそうでした^^;;
この質問の【T_お店】は【T_案件】の間違いです。別で全体的な構成の相談をさせていただいていたので、お伝えさせていただきました。この質問記事を編集しようと思いましたが、できませんでした。すみません。
できるだけ具体的に書いたつもりですが、つたない文章でわかりづらく申し訳ありません。(お客様=お店という点を残しましたが、実際は企業相手です。そこだけフィクションです)
実は、ネットへの書き込みは半永久的で、あまり本当の名前で全部書くと関係者に見られたとき恥ずかしいなと思い、テーブル名を別のものに置き換えていました。そのことが要らぬご負担をおかけする原因となってしまいました…本当に申し訳ありません…
しかも、置き換えると自分でも確認するとき混乱する原因となっておりました…
本当に愚かです…
後ほど、イメージしていただけるよう、本当の内容で改めて具体的に書かせていただきます。
申し訳ありません。
こちらについて記載にミスがありました。別で質問している件にも関わるので、一旦保留させてください。スミマセン…
テーブル設計はデータ内容と矛盾しないように設計する必要があるので、各テーブルのデータ内容の分析が重要です。
【T_お店枝番】ですが、一つのお店が複数の支店とか店舗を持っていて、その店舗ごとのデータを格納するということでしょうか(テーブル名やフィールド名からはこのような印象になります)。
しかし、「担当者ごとに枝番が分かれている情報」とのことだとすると上記の内容とは違うようですね。
この担当者というのは、店に複数の担当者がいて、担当者によって扱う商品が異なるということでしょうか。
【T_案件】とは具体的にどのようなものなのでしょうか。お店枝番 と 商品番号 があるということは、担当者と商品に関係のあるデータが格納されということになりますが、実際はそうなのでしょうか。
上記の点についての詳細な情報が分からないと、具体的にアドバイスは難しいですね。
一般的な商店とかに関するデータならだいたい推測できるのですか、どうも一般的なものとは異なる業務形態のようなので、推測もしづらいです。
現状のリレーションシップを図示すると下記のようになりますが、通常はこのようにループになるような結合はNGです。
下記のような結合になるような設計にすべきです。
あるいは、一から設計を見直す必要があるかもしれません。
where 条件文 = [年月] Is Null
となってますので、その場合は、フォームに新規レコードの表示になっているとおもいますが、
そうなってますか。(データ追加が可能な状態なら)
もし、そうなら、フォームを開くアクションのあとに、下記のIf文を追加すればいいでしょう。
If [Forms]![F個人情報].[newrecord]=True Then
メッセージボックス
メッセージ 新規レコードです。
Else
メッセージボックス
メッセージ 年月欄を埋めてください
ご回答ありがとうございます!年月欄が空白のものが存在しないときがあり、そういうときと区別させたいとおもったのですがややこしくなりそうでしょうか…
問題が解決しました。Q_案件で担当者と案件を外部結合できていませんでした。また、外部結合がエラーでできなかったのですが、担当番号にデフォルトで0が入ってしまっていたことが原因でした。色々お騒がせしました。
やってみたのですが、うまくいきませんでした。txt担当者を作るためにQ_案件で担当者と案件をつなぐと、F_案件に担当者が入ったものしか表示されなくなってしまうのですが、担当者が全部に入っていません。訳の分からないことを言っていたらすみません。パニック気味です…
↑で書き込んだ「ラベルやイメージのコントロールが背面に隠れてしまい」の部分ですがアンカーを使用した場合は、初期表示の画面サイズ以下でドラッグを開放すると画面が見切れてしまい操作不能という表現が正しかったです。
初期画面以下に縮小できないように規制するコードも思っていたよりも簡単に出来たので参考までに載せておきます。
以上、ありがとうございました。
なるほど! SendMessageにこんな使い道があったとは! コードがすごくシンプルに実装できますね。
あと実装して分かったことですが、サブフォームやListBoxの範囲内でドラッグを開放した場合ラベルやイメージのコントロールが背面に隠れてしまい再度ドラッグすることが不可能になってしまいました。
対策としては、初期の画面サイズ(InsideWidth or InsideHeight)を記憶してそれ以下に縮小しないように規制するコードを試行錯誤してみようと思います。
なにはともあれ、短時間でこのようなアイデアを教授頂き大変有り難うございます。
ダウンロードできました!作っていただいたアクセスファイルを直接確認できるなんて、感動してます。仕事中のためあとでゆっくり見ます。ありがとうございました!
年月欄が空白のレコードのみ抽出しるように設定されているのですよね。
ならば、If文は必要ないですね。
フォームを開くアクションのあとに、「メッセージボックス」を追加するだけです。
あっ、ごめなさい。アップロードするフォルダーを間違えてました。今、移動させましたので、ダウンロードできるはずです。ご確認ください。
最初、拡張ズームボックス関数 - hatena chipsを参考に、API の SetWindowLong で何とかしようと苦戦しましたが、うまくいきませんでした。
ふと、下記を思い出して、
タイトルバー以外をドラッグしてフォームを移動させる - hatena chips
これを参考にSendMessageで右下枠をクリックしたことにすればうまくいきました。
フォームの右下にラベルを配置して、下記のように設定します。
名前 lblResize
水平アンカー 右
垂直アンカー 下
フォームのモジュールを下記のように記述します。
以上です。ラベルを使用しましたが、四角形コントロールやイメージコントロールでもOKです。
右下以外でもサイズ変更したい場合は、下記を参考にConst宣言してください。
HTLEFT 10 可変枠の左辺境界線
HTRIGHT 11 可変枠の右辺境界線
HTTOP 12 可変枠の上辺境界線
HTTOPLEFT 13 可変枠の左上隅
HTTOPRIGHT 14 可変枠の右上隅
HTBOTTOM 15 可変枠の下辺境界線
HTBOTTOMLEFT 16 可変枠の左下隅
HTBOTTOMRIGHT 17 可変枠の右下隅
ちなみに、下記を追加すると詳細セクションのドラッグでフォームを移動できます。
ありがとうございます!!早速ダウンロードを試みましたが、「404 File Not Found」となりました。
もう削除されてしまったでしょうか…遅くなり申し訳ありません。
漠然とした質問についてご回答頂きありがとうございます、試して確認する事ができました。
ただ、1レコード毎に処理しているのでしょうか、処理時間がかかりました。
Between を使いながら選択クエリで同様の事を実現できたので、追加クエリと組み合わせて処理しようと思います。
もやっとした説明ですが、下記のようなことでしょうか。
TBL1
TBL1
サブフォームのヘッダーかフッターにテキストボックスを配置してコントロールソースを下記のように設定します。
=Sum([数量]*[仕切値])
これでサブフォームに表示されているレコードの集計値(=整理番号毎の集計値)が表示されます。
このテキストボックスの名前を「金額計」とします。
メインフォームにテキストボックスを配置してコントロールソースを下記のように設定します。
=[サブフォームコントロール名].Form![金額計]
サブフォームコントロール名については下記を参照してください。
サブフォームとサブフォームコントロールの違いとは? - hatena chips
こちらからはそちらのファイルは見れないので、まずは、関連する現状のテーブル名、フィールド名、主キーフィールドの設定を提示してもらえませんか。
あるいは、右カラムの下のほうの「ファイル送信フォーム」から現状のファイルを送信してください。
主キーテーブルにな納税通知書番号しか入れていないのですが、それが理由でしょうか?
hatenaさんがおっしゃった通り,通知書番号、氏名、郵便番号、住所を格納したテーブルを作成し、それぞれ各フィールドにデータを指定し、リレーションシップで繋げたのですが、参照適合性が一致しないとの事でした。
通知書番号、住所、名前、郵便番号 を格納したテーブルが必要になります。
あるいは、住所、名前、郵便番号 を格納したテーブルと、通知書番号を格納したテーブルと、それらを関連付けるテーブルが必要です。
現状、どのようなテーブルがありますか。
ありがとうございました。
編集言語、作成言語(言語パックインストール)を英語にしてから開発することで、海外でも使えるようになったようです。
同じような時期に同様の事象にとても苦労しましたので参考にしてください。
結果を先に書くと Window10のUPDATEの影響で共有方法が変わってしまったようでした。
利用環境は、access2010で作成したaccdbを access2016で使用しています。
データ部だけをサーバに置き10人程度で参照、追加、更新等を同時に実施しています。
データ部へのアクセスにレコードロックはかけていません(まれにDirtyとなることもあります)
ある日、ACCESSの設定変更していないのに突然サーバにあるDBに接続できなくなりました。
まったく原因がわからず、ネットで数日間調べていました。
その間もDB障害が発生し、その都度最適化をしていました。
やっと1件だけ同じ現象を解消したとの記事があり、適応してみました。
内容は 「暗号化方法の設定」を変更しました。
ACCESS→ ファイル→ オプション→ クライアントの設定→ 規定の暗号化方法使用する(高度なセキュリティ)
規定の暗号化方法使用する(高度なセキュリティ) → 以前の暗号方法を使用する にしました。
これにより以前と同様使用できるようになりました。
適宜、オプションの中身を確認するようにしています。
最近も「クライアント設定」を確認したところ「レコードレベルでロックして開く」
にチェックが入っていました。こんなチェックは付けた覚えがありません。
これも全端末の設定を外しています。
これかな?
Office で編集言語または作成言語を追加する、または言語設定を行う
あと、自分の環境では英語はインストール済みでしたが
Office の言語アクセサリ パック
※試していません
ありがとうございます。
ご指摘通り、消し忘れでした。
CSVファイルなどのテキストファイルをインポートするときはインポート定義を設定できますが、エクセルファイルをインポートにはインポート定義はないです。
「保存済みのインポート操作」のことを言っているのなら、その画面で、ファイル名のところをクリックすれば編集できます。
Access2019で確認しましたが、下記のリンク先によると2007でもできるようです。
ACCESS 2007 で、保存済みのインポート操作を編集したいのですが、どうす... - Yahoo!知恵袋
問題なと思います。
ただ、下記の変数宣言は、使ってないので不要でしょう。
Dim strSQL As String
一応こんなのでできましたが、問題はないでしょうか。
Dim strSQL As String
Dim rst As DAO.Recordset
Set rst = Me.subForm.Form.RecordsetClone
rst.MoveFirst
Do Until rst.EOF
rst.Edit
rst.Fields(checkItem) = True
rst.Update
rst.MoveNext
Loop
Me.subForm.Form.Requery
hatanaさん
ご回答ありがとうございます。
なるほど、気づきませんでした。
連続した番号のフィールドを作って、こちらを使わせていただきます。
下記のSQLで可能です。
ただし、オートナンバー型の場合、削除したものは再利用されないので、番号が連続している保証はないので注意が必要です。連続した連番が必要なら、オートナンバー型とは別に連番用のフィールドを用意したほうかいいでしょう。