• 締切済み

Access2007を使用して、試料の基礎データと実験経過を記録してい

Access2007を使用して、試料の基礎データと実験経過を記録しています。試料基礎資料フォームと実験経過記録フォームがあります。両方のフォームには試料番号のフィールドがあります。いま、試料基礎資料フォームにボタンをつくり、実験経過記録フォームの新規レコードが開くようになっています。このとき、はじめの試料基礎資料フォーム上で参照されているレコードの試料番号フィールドの試料番号を、ボタンを押して実験経過記録フォームを開いたときに、事件経過記録フォームの新規レコードの試料番号のフィールドに自動的に入力するようにしたのですが・・・ どのようにすれば、よいのでしょうか?よろしくお願いします。

みんなの回答

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

遅くなり申し訳ありません。 >試してみましたが、動きませんでした。ちなみにこれだと >実験結果記録フォームが開いたとき、1番目のレコードが >開いてしまうからかなと思いました。新しいレコードを開き、 >そこの空欄の試料番号の欄に、試料基礎資料フォームの >試料番号をコピーするとうまくいくなあと素人考えで >思いました。すみません基本的なことで、新しいレコードを >開く部分をどう書けばいいですか。 という補足をいただきましたが、最初に回答する時点で 内容を読み間違えていたかもしれないな、と思っていました。 試料基礎資料フォームを開いてときに、試料番号をコピーし、 新しいレコードを開く、ということはコピーした試料番号を 新しいレコードの主キーの番号にするといことなのでしょうか。 新しいレコードとは新規レコードと解釈してよろしいのでしょうか。 実験記録結果フォームのレコードソース、 たとえばテーブルならばテーブルのフィールドの主キー の名称、データ型、そのほかいくつかのフィールドについて、 また、試料基礎資料フォームについても同様に補足していただければ と思います。 いただいた補足から何となく判るのですが、具体的な 補足があればと、思います。

  • shinkami
  • ベストアンサー率43% (179/411)
回答No.2

失礼ですがアクセスは初心者ですね、 アクセスはリレーショナルデーターベースの一つです。 アクセスの設計はテーブル作成から始めます。 通常のテーブルには、重複を許さない主キーを設けます。 ※主キーは通常オートナンバー設定にします。  たまに商品コード等を主キーに設定されたものも見かけますが、商品コードの変更ができなくなるためこれは別に設定してください。 2つ以上のテーブルに共通の項目を1つ用意して、この項目によりテーブル同士を関連付け(リレーションシップと呼ぶ)ます。 リレーションシップが設定されたテーブル間には1:Nで関連付けられます。 本題に入ります。 試料基礎資料と実験経過記録テーブルは出来上がっていますね それぞれのテーブルには主キーがオートナンバーで設定されていますね、 この項目名を[試料基礎資料ID]と[実験経過記録ID]とします。 実験経過記録テーブルに[試料基礎資料ID]を追加します。 テーブル間を[試料基礎資料ID]でリレーションシップを設定して初期の目的は達成されます。 実験経過記録テーブルを開いて試料基礎資料データを [試料基礎資料ID]をとばして登録してください 左端の+マークをクリックしてください。 実験経過記録テーブルの窓が開きます。 ヒューマンインターフェースが悪いですね ウィザードを使ってフォームを作ってください。 このとき、[試料基礎資料ID]、[実験経過記録ID]はウィザードの対象外 プログラムコーディングは一つもいりません

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

それぞれのフォームの形式がわからないので 試料基礎資料フォームと実験経過記録フォームは それぞれ単票形式とします。フォームの形式が 帳票形式、あるいはサブフォームを持っている場合は コードそのものを変更する必要がある場合も あります。以下手順です。 (1) 試料基礎資料フォームと実験経過記録フォームに 試料番号が表示されるテキストボックスを ともにtx試料番号とします。名前は適当に変更 してください。 (2) 以下のコードを標準モジュールに貼り付け 保存してください。 Function IsLoaded(strFrmName As String) As Boolean ' フォームがロードされているかをチェック Const conFormDesign = 0 Dim X As Integer IsLoaded = False For X = 0 To Forms.Count - 1 If Forms(X).FormName = strFrmName Then If Forms(X).CurrentView <> conFormDesign Then IsLoaded = True Exit Function End If End If Next End Function (3) 以下はフォームのボタンをクリックスして 実験経過記録フォームを開くときのイベント で試料基礎資料フォームの試料番号を 実験経過記録フォームに貼り付ける コードです。適当に変更してください。 Private Sub コマンド1_Click() 'tx試料番号にデータがあるか確認 If IsNull(Me!tx試料番号) Then MsgBox ("試料番号が入力されていません。") Exit Sub End If '実験経過記録フォームを開く DoCmd.OpenForm ("実験経過記録フォーム"), acNormal '実験経過記録フォームが開かれたか確認とデータの貼り付け If IsLoaded("実験経過記録フォーム") = False Then MsgBox ("実験経過記録フォームがひらかれていません") Exit Sub Else 'データの貼り付け Forms!実験経過記録フォーム!tx試料番号 = Forms!試料基礎資料フォーム!tx試料番号 End If End Sub フォームの構造がわからないので今のところ このような感じです。はずしているかも しれませんが。

yukitanguero
質問者

補足

ご回答ありがとうございました。試してみましたが、動きませんでした。ちなみにこれだと実験結果記録フォームが開いたとき、1番目のレコードが開いてしまうからかなと思いました。新しいレコードを開き、そこの空欄の試料番号の欄に、試料基礎資料フォームの試料番号をコピーするとうまくいくなあと素人考えで思いました。すみません基本的なことで、新しいレコードを開く部分をどう書けばいいですか。

関連するQ&A