Microsoft Access 掲示板

6,622 件中 3,681 から 3,720 までを表示しています。
5
hiroton 2021/08/17 (火) 12:01:42 0cfce@f966d

不具合解決にエラーメッセージは大事です。追記されているようなのでそれっぽい内容で検索してみました

ACCDEファイルが32Bit版と64Bit版で共有できない : Access(FeedSoftさん)

検索の仕方を変えればmicrosoftのドキュメントにも同様の内容を見つけられますね

(追記 相手側に渡しているのはaccdeファイルです。64bitでaccdeファイルを作ればよいという情報も見ましたが、そういうことなのでしょうか)

そういうことでしょう

4
hideki 2021/08/17 (火) 11:36:23 49c85@96514

回答ありがとうございました。
hatena様の見解を参考にさせていただきます。

3

経験上、8人ぐらいなら、連結でもそんなに重くならないと思います。

新規データの入力フォームなら、「データ入力用」プロパティを「はい」にしておけば全レコードを読みに行くこともないので。

非連結で入力フォームを作成したのは、作動が重くならないとNETで見つけたからです。

たまに、そのような話も見かけますが、実際、非連結でのコードはそんなに簡単ではないし、そんなにメリットはないと思います。

共有時の非連結フォームに関する私の見解は下記の質問にも回答してますので、参考にしてください。

デフォルトの楽観的排他制御 Microsoft Access 掲示板 - zawazawa

2
hideki 2021/08/17 (火) 10:42:47 49c85@96514

回答ありがとうございます。
非連結で入力フォームを作成したのは、作動が重くならないとNETで見つけたからです。
連結でも、非連結でも、作動は、関係ないのでしょうか?
環境としては、ネットワークドライブで、ACCESSを8人で共有して利用しています。

1

このようなコードで、入力フォームを作成しました。
同様のフォームが、残り7個あります。

この入力フォームが連結フォームで連結したテーブルを更新するのが目的なら、そもそもADOもDAOも必要ありません。
というかVBAコード自体必要ありません。

VBAでテーブル更新しているということは、非連結フォームで設計しているのでしょうか。
だとしたら、非連結にしている目的はなんでしょう。

検索しても見つからないのは、Accessにおいてそのようなことする必然性がほぼないからです。

4
nokonoko 2021/08/17 (火) 10:29:00 4ced3@54883

ありがとうございます。
該当ファイルはカレンダーコントロールは使っていないようですが、類似した何かを使っているのでしょうかね。

最終的には相手先と同じバージョンにして開発するのが確実な方法だと思います。

それが一番ですか。上と相談してみます。ありがとうございました。

3

フォームかレポートにカレンダーコントロールとかのActiveXコントロールを使っていませんか。

最終的には相手先と同じバージョンにして開発するのが確実な方法だと思います。

2
nokonoko 2021/08/17 (火) 10:09:11 4ced3@54883

hatena様
ご回答ありがとうございます。参照のページ、拝読いたしました。内容は理解できたと思います。

今回問題になっているファイルに、Declareを使っていないと思うのです。
Accessクラスオブジェクトと、標準モジュールのところで、検索しましたがヒットしません。
また、APIのような機能を使ってプログラムをした覚えもありません。(そもそも理解していません)

accessの理解が低くて大変申し訳ありませんが、Declare文とはもっと違うところに書かれているのでしょうか。

3
りんご 2021/08/16 (月) 23:30:42 c564b@0e907 >> 2

抽出条件に1と入力というのは、主キーで抽出するということでしょうか。
YES!
品目で抽出するとうまく抽出されません…
テーブル2の品目フィールドをクエリの行に追加するのはどうですか?
表示チェックを外して、抽出条件のところだけ、それを活用する感じで。

2
アオダイ 2021/08/16 (月) 23:01:38 d1e06@27a26

ご回答ありがとうございます。

抽出条件に1と入力というのは、主キーで抽出するということでしょうか。

主キーで「1」や「2」と抽出すると、ちゃんとそれに該当するレコードが表示されます。

品目で抽出するとうまく抽出されません…

1

通常は32bitOfficeで作成したデータベースファイルを64bitOfficeで使用可能です。

ただし、ActiveXコントロールを使っていたりすると使用できません。
ActiveXは使わないようにする必要があります。

また、VBAでWindowsAPIを使っている場合は、API宣言を質問のリンク先の方法で修正する必要があります。
API宣言の修正方法は下記の方がより詳しいです。

WindowsAPI をOffice64bit版または32bit版のVBAで使うには | hatena chips

4
hiroton 2021/08/16 (月) 11:53:52 15305@f966d

わざわざメインーサブにフォームを分けなければいいんじゃない?
フォームの挿入前処理イベントでMe.日付ID = 1とでもすれば登録だけならできるよ

3
ワッフル 2021/08/15 (日) 18:24:37 be3da@318ee

返信の機能がよく分からず、
見えづらい投稿となってすみません。

以後もっとわかりやすく投稿したいと思います。

2
ワッフル 2021/08/15 (日) 18:23:30 be3da@318ee

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

>メインフォームとサブフォームのレコードソースのそれぞれのテーブルの関係は、一対多の関係でしょうか。

>だとしたら、原理的に無理です。一側のレコードがないと多側のレコードは入力できません。
>リレーショナルデータベースの制限です。

無理でしたか。残念です。

>現状のメインフォームとサブフォームのレコードソースのそれぞれのテーブルのフィールド構成はどうなってますか。

>テーブル設計、あるいはメイン/サブフォーム形式が適切でない可能性があります。

詳しく記載していただき、誠にありがとうございます。

例えば、サブフォームにしていたものを、
ボタンでフォームを開くといった形にしようかな?と思います。

またご質問することがあるかと存じますが、
その時もよろしくお願い致します。

1

フォームに、日付と日付IDと備考欄があります。
サブフォームとは、日付IDで連動しています。

フォーム(メインフォーム)上にサブフォームコントロールを配置して、
それの「リンク親フィールド」「リンク子フィールド」プロパティを 日付ID に設定しているという状況でしょうか。

フォーム(メインフォーム)の日付ID はオートナンバー型のフィールドでしょうか。

サブフォームにデーターを入力すると同時に、
フォームの日付IDを自動で決定して、サブフォームとフォームを
日付IDで連動できませんか?

フォーム(メインフォーム)は未入力、つまり新規レコードの状態で、
サブフォームの方でデータを入力したいということでしょうか。

メインフォームとサブフォームのレコードソースのそれぞれのテーブルの関係は、一対多の関係でしょうか。

だとしたら、原理的に無理です。一側のレコードがないと多側のレコードは入力できません。リレーショナルデータベースの制限です。

現状のメインフォームとサブフォームのレコードソースのそれぞれのテーブルのフィールド構成はどうなってますか。

テーブル設計、あるいはメイン/サブフォーム形式が適切でない可能性があります。

1
りんご 2021/08/15 (日) 01:33:55 c564b@0e907

ググッただけですが、連結値と表示値を理解するとあります。抽出条件に1と入力するとどうなりますか?

ルックアップ フィールドを作成または削除する - Microsoft サポート
この記事では、ルックアップ フィールド (列) を作成し、ルックアップ フィールド プロパティを変更し、ルックアップ フィールドを削除する方法について学習します。
Microsoft

2
MASA2021 2021/08/10 (火) 22:36:36 d4978@eaf17

解決いたしました。
ありがとうございました。

1

引数で対象コントロールを渡せはいいでしょう。

標準モジュール

Public Sub initButton(btn as Control)
    Const Chrsize = 10
    With btn
        .FontSize = Chrsize
        .BackColor = RGB(191, 191, 191)
    End With
End Sub

フォームモジュール

Private Sub Form_Load()
    Call Module1.initButton(Me.button1)
    Me.button1.Caption = "01_Japanese"
End Sub
1

「宛名ラベルを押した瞬間」の宛名ラベルとは具体的になんのことでしょうか。

2

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

アドバイスをいただきまして、私の説明が足りなかったと感じた部分もあり、また、今後の対応の方向性が少し見えたこともありましたので、コメントさせていただきます。

1点目ですが、少し補足させていただくと、デザインビューでレコレードソースにはクエリを物理的に設定はしています。

データ取得後、なんでレコレードソースを
再設定してるかというと、メインフォームのヘッダにザブフォームのレコードを抽出するためのテキストボックス、コンボボックス等が十数個あり、それぞれの更新後処理から、レコードソースのwhere条件を生成してレコレードソースを設定するfunctionプロシージャを呼び出しています。

このヘッダの抽出条件を設定するコントロールのいくつかにはデフォルト値が設定しているため、データ読み込み後、この条件でデータを更新したいため、前述のfunctionプロシージャを呼び出してもいて、この時のエラーになっています。

データ取得後なら更新と、ユーザーが抽出条件を与えての更新で処理を分けてみるとかも検討してみたいです。

そして、このクエリ自体も少し重いものなので、2点目でアドバイスいただきましたように、待機処理をいれてみようと思います。

奇しくも、この投稿をしてから十数回この処理を繰り返し行っていますが、エラーは1回も出ていません。

1

メインフォーム上のコマンドボタンクリック時に、
外部データをテーブルに取得し、

この処理の影響もありそうですが、

まずは、VBAでレコードソースを変更するのは避けて、フォームのデザインビューでレコードソースプロパティにクエリ名を設定しておいて、VBAでは再クエリするだけにした方が安定しそうです。

Me.subForm.Form.Requery

あと、外部データをテーブルに取得した後に少し、待機してから再クエリするといいかもしれません。

'外部データをテーブルに取得するコード

    DoEvents
    Sleep 500 '0.5秒待機
    DoEvents
    Me.subForm.Form.Requery

VBAで指定した秒数だけ処理を止める方法【Sleep関数(API)】|CATIAマクロの作成方法 | LiCLOG

2

ありがとうございます。()などがエラーの原因の可能性があると言う事ですね。
全部修正できるか見直してみます。

1
hiroton 2021/08/05 (木) 13:18:42 be0a4@f966d

フィールド名やコントロール名、その他名前に記号や特殊文字を使わない

コンピューターが文字をどのように扱うか、さらにACCESSならどうか、VBAならどうか、という深い問題があります。それでもどうしても記号や特殊文字を使わなければいけないのならこれらの仕組みを勉強してください

例外的に安全であろう記号はVBA自身も使っている「_」1文字くらいです

2
hideki 2021/07/29 (木) 11:23:50 a106b@96514

ありがとうございました。
Fcuntionを勉強していますが、イマイチ理解できていません。
このように条件判定するんですね。
参考になりました。
ありがとうございました。

4

ご助力感謝いたします。
本日、いただきましたコードを入れる前に下記のことを確認し一応の問題解決になりました。。
メインフォームには二つのサブフォームがあり、レコードソースにはクエリの内容は違うものの、
同じテーブルを元にしているクエリがセットされています。
そして、片方だけrequeryしておりましたが、両方することで、
更新が行われるようになりました。
また、クリック等では更新されるとありましたが、そのマクロの実行は両方のサブフォームをrequeryしておりました。
上記の通り、二つのサブフォームについて伝えていなかったこと、
そして、クリック等での更新については結果的に勘違いであったことお詫び申し上げます。

ただ、腑に落ちないのは、サブフォームが複数ある場合は両方しなければならない仕様なのでしょうか。
当然その場合は、処理に時間がかかるのでいかがなものかなと思います。

ご尽力いただきました、りんご様、本当にありがとうございました。

1
hiroton 2021/07/29 (木) 10:45:11 85289@f966d

Function プロシージャは戻り値が取れるのでその結果で条件分岐すればいいでしょう

Public Function 入力漏れ() As Boolean
 Dim myCtrl As Control

 For Each myCtrl In Screen.ActiveForm.Controls
        If myCtrl.Name Like "txt*" Then
         If IsNull(myCtrl.Value) Then
            MsgBox "入力必須項目に入力漏れがあります"
'            Cancel = True
            入力漏れ = True
            Exit Function
         End If
        End If
    Next
  入力漏れ = False

End Function

プロシージャはExitステートメントで中断することができます

  If Module1.入力漏れ Then Exit Sub
3
りんご 2021/07/29 (木) 01:07:29 c564b@0e907

>> 2
 色々試してみましたが、力不足でした、
 当面、タイマー時イベントから期待通りに動くイベントを呼び出すのは、どうでしょうか?

Private Sub Form_Click()
    Me.サブフォーム.Form.Requery
End Sub

Private Sub Form_Timer()
    Form_Click
End Sub

 どなたかフォローをお願いします。

2

早速のご返信ありがとうございます。
ご指摘の内容を行いました。
メッセージボックス表示されました。

1
りんご 2021/07/28 (水) 18:49:45 c564b@0e907

ただ、タイマー時イベントでなく、クリック時等、ユーザがアクションを起こして同じコードを実行すると、データの更新が行われます。
例えば、これは正しく動作しますか?動作しなければ、イベントが発生していない、、、?

Private Sub Form_Timer()
  Msgbox “あああ“  
End Sub
1
久々のアクセスです 2021/07/28 (水) 10:37:38 0029a@1c915

申し訳ありません。久々のアクセスでウッカリしておりましたが、少しずつ思い出してきました。
NOとNOsの方が違ったようです。自己解決しました。失礼いたしました。

37
りんご 2021/07/21 (水) 18:15:45 c564b@0e907

おぉ、おめでとうございます。皆様お疲れ様でした。ビール飲もうっ、とっとっと、自宅でだょノ

36
お茶 2021/07/21 (水) 18:12:26 4af80@2988e

出来ました!

Q従業員抽出 のクエリに[従業員コード]を追加してみたところ、
「あ」のボタンを押した後、コンボボックスにあ行の従業員が表示され、
その中の従業員を選択すると、フォームに出てくるようになりました。

hirotonさん りんごさん
何度もじっくりとお付き合いいただき、またご指導下さり、本当にありがとうございましたm(__)m

35
りんご 2021/07/21 (水) 14:57:33 c564b@0e907 >> 33

引数
-1, , 先頭のレコード, ="[従業員コード] = "& Str(Nz([Screen].[ActiveControl], 0))

              数値型     ≠     文字型
 とりあえず、コンボボックスの表示問題は解決出来たという事でよろしいですか?この質問スレを解決済みにして新しい質問を立てましょう。下記の準備をやっておいて下さい。
 やりたい事の為には、従業員コードが出てくる「従業員テーブル、従業員抽出クエリ、ほにゃららフォームのコンボボックス(値集合ソース:従業員抽出クエリ)」が必要だと思います。
 Q従業員抽出が従業員抽出クエリに相当するならば、従業員コードのフィールドを追加、本番前のお試しクエリに相当するならば、新しいコンボボックス(値集合ソース:従業員抽出クエリ)を作って下さい。コンボボックスの連結列が従業員コードの列になるようにしておきましょう。

34

「あ」のボタンを押した後、従業員コンボボックスには、従業員の苗字が1回ずつ(同一名が繰り返されることなく)表示されました。
そして、名字を選択すると「型が一致しません」となります。

マクロ名
基本情報1 : 従業員コンボボックス : AfterUpdate : 埋め込みマクロ
アクション名
オブジェクトからレコードの検索
引数
-1, , 先頭のレコード, ="[従業員コード] = "& Str(Nz([Screen].[ActiveControl], 0))
エラー番号
2950

となっています。

1
りんご 2021/07/20 (火) 22:23:40 c564b@0e907

このような場合は正規化してテーブルをわける必要はありませんか?

内容テーブルのフィールド次第だと思います。情報不足です。

日付が重複して…内容テーブルにもIDを格納して…紐付けるので

日付IDが出てくるのでしょうか?各テーブルの主キーはどうしているのでしょうか?

6
ハドル 2021/07/20 (火) 18:58:08 58219@b7d2a

サブレポートを使ったことがないので勉強してやってみます
またわからなかったら新規で質問させてもらうかもしれません
よろしくおねがいします

33
りんご 2021/07/20 (火) 17:23:46 c564b@0e907

 コンボボックスの列数を2、列幅を例えば、1cm;1cm、連結列を1にしてどうなったか報告して下さい。

32
hiroton 2021/07/20 (火) 17:13:04 a38a5@f966d >> 4

コンボボックスが空白だということなので改めて設定を確認していきます

コンボボックスには値集合ソースに「Q従業員抽出」が指定してあります。なのでコンボボックスにはクエリに内容が表示されているはずです

Q従業員抽出の抽出条件を削除して保存した後フォームを開きなおすとコンボボックスにはクエリと同じ内容が表示されますか?

これが確認出来たらQ従業員抽出の抽出条件をLike "[ア-オ]*"にして保存しなおした後、フォームを開きなおします。コンボボックスにはクエリと同じ内容が表示されますか?

このような方法でクエリの内容をコンボボックスに表示することができることが確認できますが正しく動いていますか?

31

反応が遅く申し訳ありません。
クエリを削除して再度作り直すとこうなりました。

SELECT 基本情報.苗字
FROM 基本情報
WHERE (((基本情報.苗字カナ) Like [Forms]![基本情報1]![抽出用カナ]));

最初と違うのはわかりますが、それがどのように違うのかはわかりません。

クエリを実行してみて、パラメータ試しに[アーオ]*と入れてみたところ、結果はあ行の方の名字がきちんと1回ずつ表示されました!

ただ、現時点では「あ」のボタンを押した後のコンボボックスは空白です。

13
りんご 2021/07/20 (火) 13:37:12 c564b@0e907

>> 11
 試行錯誤するのであれば、主キーを消さずに出来る範囲で頑張る方がいいと思いますよ。絵に描いた餅になりそうで心配です。
 テーブル同士に線を引く時は、データベースツールタブのリレーションシップがオススメです。参照整合性を設定できるので、リンク切れ、怪しいリンクを未然に防いでくれるでしょう。

業務内容は、数年単位のリース契約が主です。

 もしかしたら、変動支払条件みたいなものがあるのかなぁ。

データを蓄積するテーブルという意味で「本テーブル」と書きました。
例えば、編集する場合の流れだと

 やった事がないので、ワークテーブル、フラグテーブルがセオリーなのかわかりません。何かあればどなたか回答をお願いします。