アクセス2000で社員の入社日等を管理したいのですが、入社日をキーにデータを
呼び出すフォームと、その呼び出しに対応して、抽出されたデータを表示する
一覧表フォームを作成しました。
何回かテストをしたところ、平成13年2月1日以降のデータが呼び出せない
ことがわかりました。どうしたら解決できるでしょうか?
ちなみに、データは過去5年間分で、7000件ほどあります。
全件のデータ数が多すぎるとか、1回に呼び出すことのできるデータ件数に
限りがあるとかの制約があるのでしょうか?

A 回答 (2件)

 検索条件の設定を補足下さい。



 もし、日付型で"YY/MM/DD"で検索しているのだとしたら、これを"YYYY/MM/DD"に変更してみて下さい。
    • good
    • 0

アクセス2000には、MDBファイルサイズ2Gの壁があります。

これに近くなってくると、動作が怪しくなってきます。また、メインキーが設定されていないテーブルから抽出すると、ソートされなかったり選ばれるべきデータが取り出せないことがあります。
もし、上記の件に心当たりがありましたら、MDBサイズの確認をして、もし大きめであればまず最適化を行います。次に対象となるテーブルにメインキーが設定されていなければ、メインキーを付加するか、別テーブルを作り(Copy後構造のみをPaste)、シリアル番号のフィールドを付加するか、ユニークフィールドをメインキーに設定後、追加クエリで全データをコピーして、以後抽出元テーブルを変更します。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QACCESS フォームからサブフォームのデータを更新・入力したい

ACCESS フォームからサブフォームのデータを更新・入力したい

tbl_プロジェクトというテーブルにIDとプロジェクトコード、プロジェクトの基本情報を持たせ、f_プロジェクトフォームからプロジェクトコード、件名、契約日等のデータ及び、f_テーマサブフォームにテーマを入力できるようなフォームを作成しています。フォームで入力したものをそれぞれのテーブルに保存したいのですがうまくいかない部分があります。

フォームから入力すると、tbl_プロジェクトに所属する情報は更新されます。そのtbl_プロジェクトに所属するプロジェクトコードをサブフォームのtbl_テーマのプロジェクトコードにも反映したいのですがどのようにしたらよいでしょうか?
そういったことは可能でしょうか?分かりにくい説明で申し訳ないですが教えていただけると助かります。よろしくお願いします!



DBの構成
【テーブル】
tbl_プロジェクト (1件1件のIDとプロジェクトコードを持つ)
(フィールド:P_ID、プロジェクトコード、件名、契約日など)
tbl_テーマ(プロジェクト毎に関連のあるキーワードを持つ)
(フィールド:P_ID、プロジェクトコード、テーマ)←これのプロジェクトコードにtbl_プロジェクトのデータが入るようにしたい。
tbl_顧客(プロジェクトを依頼した顧客情報を持つ)
【クエリ】
q_テーマ(プロジェクト、テーマ、顧客を抽出するクエリ)
【フォーム】
f_プロジェクト (プロジェクトを1件ずつ表示・参照・新規作成するフォーム)
f_テーマサブフォーム (f_プロジェクトフォームのプロジェクトコードにづきテーマを
        表示・入力するサブフォーム)

リレーションはP_IDをキーに一対多で作成しています。

ACCESS フォームからサブフォームのデータを更新・入力したい

tbl_プロジェクトというテーブルにIDとプロジェクトコード、プロジェクトの基本情報を持たせ、f_プロジェクトフォームからプロジェクトコード、件名、契約日等のデータ及び、f_テーマサブフォームにテーマを入力できるようなフォームを作成しています。フォームで入力したものをそれぞれのテーブルに保存したいのですがうまくいかない部分があります。

フォームから入力すると、tbl_プロジェクトに所属する情報は更新されます。そのtbl_プロジェク...続きを読む

Aベストアンサー

No.4です。

前回の回答は、「レコードの新規登録」のみを想定していました(汗)
大変失礼致しました。


【「メインフォーム」-「サブフォームの新規レコード」間の不一致について】
(=No.4の補足での、2個目の「◆」の件)

メインフォーム側の「レコード移動時」イベントで、『プロジェクトコード』の
更新後イベントと同様の処理を行えば、解消すると思います。
(先頭1行が「Private Sub Form_Current()」となる他は、前回のVBAと全く
 同じなので、今回は省略します)


【既存レコードでの『プロジェクトコード』の空白について】
(=No.4の補足での、1個目の「◆」の件)

対処法としては、
 a)更新クエリを使用して、tbl_テーマの『プロジェクトコード』を一括更新
  (→tbl_テーマに入力済みの『P_ID』の再確認が不要な場合)
 b)「メインフォーム上のプロジェクトコードを、サブフォームの全レコードに
  一括代入」するためのコマンドボタンを、メインフォームに追加
  (→tbl_テーマの『P_ID』が正しいかを目視確認してから代入する場合)
の、2つの考え方があります。

「a」については添付画像をご覧いただくとして、ここでは「b」について説明
します。

メインフォームに『コード転記』コマンドボタンを作成したら、そのクリック時
イベントに以下のコードを記載して下さい:

Private Sub コード転記_Click()

  If MsgBox("サブフォームにプロジェクトコードを追記します", vbOKCancel, "確認") = vbCancel Then Exit Sub

  'サブフォームの全レコードを上書き更新
  With Me![サブフォームのコントロール名].Form.RecordsetClone
    Do Until .EOF
      .Edit
      !プロジェクトコード = Me!プロジェクトコード
      .Update
    Loop
  End With

  '更新を反映
  Me![サブフォームのコントロール名].Form.Refresh

  MsgBox "追記しました", , "確認"

End Sub


なお、「a/b」のどちらを採った場合でも、サブフォームの『P_ID』の上書き
編集に合わせて『プロジェクトコード』も連動して更新させるには、別途、
以下のような『P_ID』の更新後イベントでの対応が必要です:

Private Sub P_ID_AfterUpdate()
'メインではなくサブフォームの『P_ID』テキストボックスの更新後イベント

  If IsNull(Me!P_ID) Then
    Me!プロジェクトコード = Null
  Else
    Me!プロジェクトコード = DLookup("[プロジェクトコード]", "tbl_プロジェクト", "[P_ID]=" & Me!P_ID)
    '『P_ID』がテキスト型の場合は上記ではなく以下のコード
    'Me!プロジェクトコード = DLookup("[プロジェクトコード]", "tbl_プロジェクト", "[P_ID]='" & Me!P_ID & "'")
  End If

End Sub

また、この対応を組み込んで戴けば、

> テーマを修正するとフォーム上では10001が入力される。
> tbl_テーマには反映されない。

の件も解消すると思います。
(但し、別のレコードに移動したり、メニューから「レコード(R)→レコードの
 保存(O)」を選択する等して、レコードが保存してからでないと、テーブル
 には反映されないので、確認の際はご注意下さい)


・・・以上です。

No.4です。

前回の回答は、「レコードの新規登録」のみを想定していました(汗)
大変失礼致しました。


【「メインフォーム」-「サブフォームの新規レコード」間の不一致について】
(=No.4の補足での、2個目の「◆」の件)

メインフォーム側の「レコード移動時」イベントで、『プロジェクトコード』の
更新後イベントと同様の処理を行えば、解消すると思います。
(先頭1行が「Private Sub Form_Current()」となる他は、前回のVBAと全く
 同じなので、今回は省略します)


【既存レコードでの『プロジェクトコー...続きを読む

QAccessで、フォームAからダイアログモードで立ち上げたフォームBを開き、フォームBを閉じた時にフォームA側でマクロを実行したい

タイトルのままなのですが、

フォームA(メインとなる画面)と
フォームB(コードの検索画面)があり、
フォームAからフォームBをダイアログモードで開いている状態から、
フォームBを閉じたときに、フォームA側でマクロを実行したいと思っています。

具体的には、フォームAにコード入力用のテキストボックスがあり、コード検索のためにフォームBを立ち上げ、コードを選択した後フォームAのテキストボックスにそのコードを入れて、そのコードの値を元にフォームAにあるコンボボックスの再クエリを行いたいのです。

コンボボックスの再クエリの方法等は理解しているのですが、
上記のような場合に、どのイベントがキックされるのかが分かりません。
どのようにすれば(どのイベントを選んでマクロを指定すれば)適切に実行できるでしょうか。

Aベストアンサー

フォームBの処理
「値の代入」
「オブジェクトの選択」
  オブジェクトの種類:フォーム
  オブジェクト名:フォームA
「再クエリ」
  コントロール名:コンボボックス名
でいかがでしょうか?

Qアクセス2003サブフォームで選択したデータをメインフォームで表示したいのです。

得意先のデータベースを作っています。
メインで詳細データを入力し、
会社名の一部で検索できるようにしてあります。
その検索の結果をサブフォームに
データの一部を表示し、
複数ある場合はサブフォームで選択したデータを
メインフォームに反映させたいと思っています。

アクセス初心者の私でもできる方法はないでしょうか?

Aベストアンサー

> 選択したデータをメインフォームに反映させたい

そういうことでしたら、検索結果の表示には、サブフォームではなくリストボックスを
使われてはいかがでしょうか。

*複数フィールドのデータ表示はリストボックスでも可能です。
 但し、データシート型のサブフォームと違い、Accessの標準機能ではマウス
 ドラッグによるフィールドの表示幅の変更はできないため、データの詳細確認は
 メインフォームで行うことになります。


テーブルやフォームの構成がわからないので、とりあえずポイントだけ説明すると・・・
(既に、検索結果をサブフォームに表示させる方法をご存知の状況下ですので、
 冗長すぎる説明になってしますかもしれませんが(汗))

<リストボックスの設定>
◎プロパティシートの『書式』タブ内:
 ・列数:
   リストボックスに表示させるフィールド数を入力
   (但し、主キーフィールドを非表示にする場合は表示フィールド数+1)
 ・列幅:
   必要に応じて設定
   (特に設定しない場合は「リストボックスの幅=1フィールドの幅」になり、
    各フィールドのデータ確認には、リストボックス内の横スクロールバーを
    使用することになります)
 ※上記の設定により、複数フィールドが表示されるようになります。
   (下記の「値集合ソース」の設定は必須)
◎プロパティシートの『データ』タブ内:
 ・コントロールソース:
   今回はレコードの指定に使用するので、設定は無用
 ・値集合ソース:
   既定で入力されている「テーブル/クエリ」のままでOK
 ・値集合ソース:
   サブフォームで現在使用しているクエリ(又はSQL文)を使用
   (但し、メインフォームで表示することになるレコード1件を特定するための
    フィールド(主キーなど)が含まれていない場合は、追加する必要あり)
 ・連結列:
   上記の「メインフォームで表示するレコード1件を特定するためのフィールド」
   が、クエリの何番目のフィールドに当たるかを記録します。
   (これにより、リストボックスに実際に入力される値が決定されます)
◎プロパティシートの『イベント』タブ内:
 ・更新後処理:
   リストボックスの値の変更に合わせて、メインメニューの表示を更新する
   コードを記述します。
   1)プロパティシートの上記行にカーソルを移動
   2)右端に表示される「...」(ビルダ)ボタンをクリック
   3)『ビルダの選択』ダイアログで「コード ビルダ」を選択して『OK』をクリック
   4)VBE画面が表示されます。
    「Private Sub ○○_Click()」「End Sub」(「○○」はリストボックス名)の
    2行が追記されているはずなので、その間の行に以下のコードを追記:
    Me.Requery
   5)VBE画面を閉じる
    プロパティシートに「[イベント プロシージャ]」と表示されていることを確認
   6)フォームを保存して閉じる

<メインフォームの設定>
◎プロパティシートの『データ』タブ内:
 ・レコードソース:
   上記リストボックスを検索条件(Where条件句)とするクエリを新規作成し、
   それを指定


・・・以上です。

なお、検索条件の更新をサブフォームに反映するVBA(又はマクロ)を既に組まれて
いると思いますが、そこはリストボックスの更新(再クエリ(Requery)でよいはず)に
変更してください。

> 選択したデータをメインフォームに反映させたい

そういうことでしたら、検索結果の表示には、サブフォームではなくリストボックスを
使われてはいかがでしょうか。

*複数フィールドのデータ表示はリストボックスでも可能です。
 但し、データシート型のサブフォームと違い、Accessの標準機能ではマウス
 ドラッグによるフィールドの表示幅の変更はできないため、データの詳細確認は
 メインフォームで行うことになります。


テーブルやフォームの構成がわからないので、とりあえずポイントだけ...続きを読む

QACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入力画面
       ↓
レコード番号を入れると、そのレコードのデーターが画面に表示され、
その画面で修正可能
       ↓
 保存 ボタンで保存

という流れです。

レコードナンバーはIDを使おうと思っています。

データの量が莫大な為、コンポボックスなどは使えません。

できるだけ、VBAなどは使わずに作りたいです。

よろしくお願い致します。

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入...続きを読む

Aベストアンサー

まずそのテーブルを基にしてフォームを作成します。
そのフォームのヘッダー部分にテキストボックスを配置後、一旦
上書き保存。
フォームのレコードソースを
SELECT *
FROM テーブル名 WHERE ID=[Forms]![フォーム名]![テキストボックス名]
とします。
次にテキストボックスの更新後処理に
Me.Requery
とすれば完成です。
フォームを開いてテキストボックスにID入力後エンターしてください。

保存に関しては、コマンドボタン作成後クリック時イベントに
DoCmd.RunCommand acCmdSaveRecord
とすれば良いでしょう。

この手のモノは検索すれば相当数ヒットするので、そちらを参考にされるのもよろしいかと。

Qレコード件数が0件なら印刷をしない。

おはようございます。
アクセス2000でVBAを書いています。
あるテーブル(テーブルA)を元にレポート(レポートB)を作成しました。テーブルAのレコード件数が0件の時、印刷をさせたくないのですが、うまく書けません。IF文で分岐したいのでよろしくお願いします。
ちなみにテーブルAには顧客ID、カナ氏名、漢字氏名等が入っています。

誰か、助けて~!

Aベストアンサー

一例として・・・

If DCount("顧客ID", "テーブルA") > 0 Then
'レコードがあるときの処理
Else
'レコードがないときの処理
End If

あるいは・・・

If DCount("顧客ID", "テーブルA") = 0 Then
'レコードがないときの処理
End If
'あとはそのまま続行

詳しくはヘルプで「DCount」を調べてください。


このカテゴリの人気Q&Aランキング

おすすめ情報