プロが教えるわが家の防犯対策術!

VBAで Me.A=Form_B.CurrentRecord の文があります。
Aには 数値が入っています。
データは 番号 名前 種類
     1   A   AA
     2   B   BB
     3   C   CCC
と入っています。 この時、番号を取得しているのですが
名前や種類をAに 入れたいのです。 どのようにすればいいのでしょうか?
情報が 足りない場合 補足します。
取得しているのは番号ではないのでしょうか?

A 回答 (2件)

2つのテーブルの構造とフォームの構造がわからないので、こちらで勝手に仕様を上げさせてもらい、その範囲で回答します。


もしcdmaさんの環境と違う場合は適当に修正してください。

tbl01Hoge(親テーブル)
フィールド:
m01ID : 長整数型(tbl02HogeHogeとのリレーションに使用。もちろん主キー)

tbl02HogeHoge(子テーブル)
フィールド:
m02ID : 長整数型(tbl01Hogeとのリレーションに使うだけなので主キーじゃない)
m02番号 : 数値型(質問にあったフィールド)
m02名前 : テキスト型(質問にあったフィールド)
m02種類 : テキスト型(質問にあったフィールド)

m01IDとm02IDを一対多でリレーションしています。

frm01(親フォーム)
コントロール:
txtID : テキストボックス(m01IDをコントロールソースにしている)
cmdGet : コマンドボタン(クリックイベントを利用)
埋め込み : tbl02HogeHogeをソースオブジェクトに指定。[リンク子フィールド]をm02ID、[リンク親フィールド]をm01IDに設定。

コード概要:
親フォームのtxtIDの値(主キー)を拾う。
tbl02HogeHogeの中からこの値をm02IDに持つレコードセット(rstSub)を取得。
rstSubのレコード件数を取得。
rstSubの1件目から最終レコードまでループしながら[m02名前]と[m02種類]の値を変数に格納。

-------------------------------------
Private Sub cmdGet_Click()
Dim cnn As ADODB.Connection
Dim rstSub As ADODB.Recordset
Dim lngMyID As Long
Dim strSQL As String
Dim lngRecCount As Long
Dim varData() As Variant
Dim i As Long

' コネクションとレコードセットをインスタンス化
Set cnn = CurrentProject.Connection
Set rstSub = New ADODB.Recordset

' 主キーの値を取得
lngMyID = Me.txtID.Value
' SQL文字列を作成
strSQL = "SELECT tbl02HogeHoge.m02名前, tbl02HogeHoge.m02種類 " & _
"FROM tbl01Hoge INNER JOIN tbl02HogeHoge ON tbl01Hoge.m01ID = tbl02HogeHoge.m02ID " & _
"WHERE ((tbl02HogeHoge.m02ID)=" & lngMyID & ");"
' 上記SQLで読取専用のレコードセットを取得
rstSub.Open strSQL, cnn, adOpenStatic

' サブレコードがゼロなら以後の処理をしない
If (rstSub.BOF = True) And (rstSub.EOF = True) Then

Else
' レコード数を取得
rstSub.MoveLast
lngRecCount = rstSub.RecordCount
rstSub.MoveFirst

' バッファを確保
' (レコード数, フィールド数)
ReDim varData(lngRecCount - 1, 1)

' ループしてサブの全レコードから[名前]と[種類]を取得
For i = 0 To lngRecCount - 1
varData(i, 0) = rstSub.Fields("m02名前").Value
varData(i, 1) = rstSub.Fields("m02種類").Value
rstSub.MoveNext
Next i
End If

rstSub.Close
Set rstSub = Nothing
cnn.Close
Set cnn = Nothing
End Sub
-------------------------------------

何番目の情報がほしいのかわかりませんが、上記[varData]の1次元目の添え字はサブフォームに表示されているレコードの順番が入っており、ゼロから始まっています。
2次元目の添え字はゼロが[名前]で1が[種類]です。
例えば3レコード目の名前は[varData(2,0)]で、種類は[varData(2,1)]です。

以上。
    • good
    • 0
この回答へのお礼

ご回答 ありがとうございました。
申し訳ないのですが、別手段で解決しそうです。
しかしながら temtecomai様の方法でも
やってみたいと思います。

不明な点があれば 再度 教えてください。

お礼日時:2002/08/26 18:51

まず、何のアプリケーションなのかぐらいは書きましょう。

恐らくAccessだとは思いますが。

ここはVisual Basicの質問場所ですので、Officeに関する質問は「TOP > コンピュータ&インターネット > ソフトウェア > Microsoftアプリケーション」でお願いします。

取得しているのは[番号]フィールドの値ではありません。
フォームがもっているレコードセットの中の「何番目のレコード」という情報です。
CurrentRecordでヘルプを調べれば出ていると思います。


Me.AのAというのはテキストボックスだと解釈し、[B]フォームの[txtName]テキストボックスに[名前]フィールドの値が入っているとして話を進めますね。

Me.A.Value = Form_B.txtName.Value

これでどうでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
 ・アプリケーションはACCESSです。 質問場所 以後気をつけます。
 すいません、説明不足でもう少しお願いしたい事があります。
 Aはテキストボックスなのですが Bはフォームのテキストボックスでは
 ないのです。 あるフォームの中にサブフォームとして入っています。
 データベース形式(一覧形式)に入っています。データを直接みています。
  というのは、件数自体が固定されていません。3件のデータ(番号が1~3)
5件のデータ(番号1~5)もあります。それぞれに同じ件数の情報がついていま す。 例えば データベース形式では 何番目の情報を取得する ような
 形で取得できないでしょうか? 宜しくお願い致します。
 

お礼日時:2002/08/23 07:51

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A