• ベストアンサー

3つのテキストボックスの値を1つのフィールドに保存

ご指南ください フォーム上の3つのテキストボックスの値Q ・S・ DをAというテーブルのBというフィールドに保存したいのです   Bフィールド値 QSD としたいのです よろしくお願いいたします ( アクセス2003 OS XP )

質問者が選んだベストアンサー

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

No2の変更漏れがありました。Bのフィールドの型はテキスト型に する必要があります。 この修正を行なった後に、もし以下のことであれば補足してください。 そこで、No2の補足について、 (1) tx1に表示されているデータは、日付で、たとえば、 2012/10/29 のような表示ですか。それならば、 i = CStr(Format(Nz(Me!tx1), "yymm")) & CStr(Nz(Me!tx2)) & CStr(Nz(Me!tx3)) または、 i = CStr(Format(Me!tx1), "yymm")) & CStr((Me!tx2)) & CStr((Me!tx3)) というなかで、 CStr(Format(Nz(Me!tx1), "yymm")) または、 CStr(Format(Me!tx1), "yymm")) というのは、Format関数で2012/10/29 を 1210 のように変換して、 その上、CStr関数で文字列に変換する、というコードです。 したがって、tx1のフィールドの型が日付型であっても構わないのですが。 そこで、 >先に変更して実行したのですが とはどの時点でどのような変更を実行したのですか?、

tom2011
質問者

お礼

ありがとうございます 自己解決しました ほんとうに 助かりました ありがとうございます

tom2011
質問者

補足

ありがとうございます >先に変更して実行したのですが 変数宣言を変更して実行していましたがFormat関数の使い方がごちゃごちゃでMID関数を使ったりしていて上手くいきませんでした  i = CStr(Format(Nz(Me!tx1), "yymm")) & CStr(Format(Nz(Me!tx2), "000")) & CStr(Nz(Me!tx3))としまして1210001と格納できましたが  最後のtx3のSが格納できません なぜでしょう 格納先フィールドはテキスト型です。 ご指南お願いできませんでしょうか

その他の回答 (2)

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

>tx1には YYMM  tx2には 3桁の数字 tx3には アルファベット >1文字が入っています >tx1が問題で1210と表示していますが データはDATE()なので >Bに1210001Sと格納したいのです ということなので、少しコードを修正します。 (1) 変数宣言で、 Dim i As Long を Dim i As String に変更してください。 (2) i = Clng(CStr(Nz(Me!tx1)) & CStr(Nz(Me!tx2)) & CStr(Nz(Me!tx3))) を i = CStr(Nz(Me!tx1)) & CStr(Nz(Me!tx2)) & CStr(Nz(Me!tx3)) に変更してください。なお、テキストボックスの未入力のチェックを しているので、Nzはいらないと思いますので、 i = CStr(Me!tx1) & CStr(Me!tx2) & CStr(Me!tx3) でもいいと思います。 これらについて二つのクリックイベントについて 修正してみてください。実際にテーブルには追加なのか、 1レコードのみ格納してそれを修正を繰り返すのか わからないのでクリックイベントを二つ用意しています。 どちらか合うほうを使ってください。 また、メッセージボックスの最初の行に結合したデータが表示され 確認できるようになています。 何かあれば補足してください。

tom2011
質問者

補足

ありがとうございます 説明不足ですいません 先に変更して実行したのですが 結果が2012/10/291Sとなります 1210001Sとしたいのですが ご指南をお願いいたします

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

一応、以下のように設定します。 (1) フォーム上の三つのテキストボックスの名前を、   tx1  tx2  tx3 とします。 AというテーブルのBというフィールドの型を数値型 としておきます。 (2) フォーム上の三つのテキストボックスには必ずすべて 数値を入力するものとします。 (3) フォームにボタンを一つ設定し、そのクリック時のイベント を以下のように設定します。 なお、Aというテーブルにはデータを追加していくのか、 あるいはデータはレコードは一つだけでそれを更新して いくのか分からないので一応、両方をあげておきます。 設定が終わったら、コード表の「ツール」から「参照設定」 を選択し、Microsoft DAO xxx Object Library にチェックを いれ、保存してください。なお、xxxは3.6のような数字です。 '追加する場合 Private Sub コマンド1_Click()   Dim db As DAO.Database   Dim rs As DAO.Recordset   Dim i As Long   'データの記入漏れのチェック   If IsNull(Me!tx1) Or IsNull(Me!tx2) Or IsNull(tx3) Then     MsgBox "データの記入漏れがあります"     Exit Sub   End If    i = CLng(CStr(Nz(Me!tx1)) & CStr(Nz(Me!tx2)) & CStr(Nz(Me!tx3)))   If MsgBox(i & Chr(13) & "テーブルに追加しますか", vbYesNo) = vbNo Then     Exit Sub   Else     Set db = CurrentDb     Set rs = db.OpenRecordset("A", dbOpenDynaset)     rs.AddNew       rs!B = i     rs.Update     rs.Close: Set rs = Nothing     db.Close: Set db = Nothing   End If End Sub '更新する場合 Private Sub コマンド2_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Dim strUPSQL As String Dim strTableName As String Dim i As Long   If IsNull(Me!tx1) Or IsNull(Me!tx2) Or IsNull(tx3) Then     MsgBox "データの記入漏れがあります"     Exit Sub   End If   i = CLng(CStr(Nz(Me!tx1)) & CStr(Nz(Me!tx2)) & CStr(Nz(Me!tx3)))   If MsgBox(i & Chr(13) & "テーブルを更新しますか", vbYesNo) = vbNo Then     Exit Sub   Else     Set db = CurrentDb     Set rs = db.OpenRecordset("A", dbOpenDynaset)     If rs.RecordCount > 0 Then       rs.Edit         rs!B = i       rs.Update     Else     rs.AddNew       rs!B = i     rs.Update     End If     rs.Close: Set rs = Nothing     db.Close: Set db = Nothing   End If End Sub 以上ですが、設定の(1)、(2)、(3)の中で条件や設定に違いが ある場合などやわからないところがあれば補足してください。

tom2011
質問者

補足

早々のご指南ありがとうございます 大きな勘違いでした tx1には YYMM  tx2には 3桁の数字 tx3には アルファベット1文字が入っています tx1が問題で1210と表示していますが データはDATE()なので Bに1210001Sと格納したいのです すいません ご指南いただけますでしょうか

関連するQ&A

  • テキストボックスの値をテーブルに追加

    お世話になります。 Access2000 あるテーブルの一覧をフォームのリストボックス(lst_1)に表示し、 そのリストボックスから選択された行を フィールド上の各テキストボックス(非連結)に表示しております。 そこで、表示されているテキストボックスの値を変更した時に テーブルに変更された値を反映させる方法をご教授よろしくお願いします。

  • フィールド1だけのテキストボックスの幅を変える事は

    フィールド1だけのテキストボックスの幅を変える事は出来ないのでしょうか? アクセス2007です。 テーブル1に ・ID オートナンバー型 ・フィールド1 テキスト型 ・フィールド2 テキスト型 を作り、 作成→その他フォーム→フォームウィザードで、フォームを作りました。 そして、デザインビューでテキストボックスのコントロールの幅を変えようと思うのですが フィールド1だけの幅を長くしたいのに ・ID ・フィールド1 ・フィールド2 の全てのテキストボックスが同じ長さになってしまいます。 「グループ化がされてるのかな?」と思い見てみましたが、されていません。 フィールド1を選択してF4を押して、プロパティシートを表示し、 幅を10にしたら、 ・ID ・フィールド1 ・フィールド2 全ての幅が10になってしまいました。 どうすれば、フィールド1だけのテキストボックスの幅を変える事が出来るのでしょうか? ご回答よろしくお願いします。

  • ACCESSのテキストボックス内の任意の文字

    お世話になります。 宜しくお願い致します。 ACCESS2010についてになります。 [フォームA]の[テキストボックスa]に、ある文字が含まれていたら、[テーブルB]の[フィールドb]を検索して、[フィールド'c]の値を[フォームA]の[テキストボックス'a]に表示させたいと思います。 (例) 『信長』が入っていたら、検索結果を表示させる。 [フォームA] [テキストボックスa] 『徳川家康』 ⇒  検索しない。 『織田信成』 ⇒  検索しない。 『織田信長』 ⇒  [テーブルB][フィールドb]を検索する。 [テーブルB] [フィールドb] [フィールド'c] 明智光秀 あけちみつひで 織田信長 おだのぶなが ⇒ 結果を表示する。 [フォームA] [テキストボックス'a] おだのぶなが おわかり頂けますでしょうか。 上手く表現できずにすみません。 お手数ですが、ご教示頂ければと思います。 宜しく、お願い致します。

  • テキストボックスにクエリ結果を表示させたい

    フォームにテキストボックスAがあり、そこに入力した文字(下記テーブルのフィールド1の文字)をクエリーの「抽出条件」にし、同じフォーム上のテキストボックスBに表示しようと思っています。 クエリを開くとパラメータの入力を求めてきて、入力するとうまく抽出されます。 テーブルは フィールド1|フィールド2   A   |  10   B   |  20   C   |  30   D   |  40 のような簡単なものです。 テキストボックスBのコントロールソースに 「=[○×クエリ]![フィールド2]とやっても「#Name?」と表示されてしまいます。 どのようにやればよいのでしょうか?

  • アクセスVBA テキストボックス入力値からの参照

    マイクロソフトアクセス初心者です。 現在、アクセスでデータベースを作成しています。 2つのフォーム(フォーム(1)、フォーム(2))、2つのテーブル(入力情報、マスタ)、2つのテーブルをもとにした1つのレポートを作成しています。 『フォーム(1)』のテキストボックスAに入力された値を、Dlookup関数で『フォーム(2)』のテキストボックスBに数値を参照しています。 『フォーム(2)』のテキストボックスに表示された値を、『フォーム(2)』に設置されたコマンドボタンをクリックすると、VBAで『テーブル入力情報』のフィールドAに入力されるようにしています。フィールドAについてのマスタとなるテーブルが『テーブルマスタ』です。 リレーションシップを設定せず、ただ単に値を入力することは出来るのですが、レポートを作成するにあたって、『テーブル入力情報』と『テーブルマスタ』のフィールドAに1(テーブルマスタ)対多(テーブル入力情報)のリレーションシップを設定したいと思っています。 リレーションシップを設定し、テキストボックスBに表示された数値を『テーブル入力情報』に入力する際、『テーブルマスタ』から該当するデータを選択して『テーブル入力情報』に入力されるようにしたいと思うのですが、現状では、リレーションシップを設定すると、入力値が真っ白になってしまい、レポートにも入力したデータが反映されません。 ちなみに、入力する際はフィールドA=Me.テキストボックスBのようにしています。 何か良い解決策がありましたら、是非教えていただけませんでしょうか? 分かり難い文章かと思いますが、どうぞ宜しくお願い申し上げます。

  • サブフォームにあるテキストボックスの値を参照したい

    ACCESS2010です。 サブフォーム(帳票フォーム)のフッターにある、コントロールソースが =nz(sum([金額]),0) と設定してあるテキストボックスがあります。([合計金額s]) この[合計金額s]の値を、メインフォームのコントロールソースがテーブルの項目に設定されているテキストボックス([金額])で参照したいのですが、金額入力直後の値が参照できません。 現在はメインフォームに中継用のテキストボックス([金額wk])を作成し、コントロールソースを[合計金額s]に設定、acNewRecする前に[金額wk]の値を[金額]へ渡しています。 何とか直接参照する方法はありませんでしょうか。

  • 前レコードのテキストボックスと同じ値を表示させる

    環境:XP,ACCESS2003 帳票形式のフォームがあります。 次のレコードの入力に移った時、前のレコードのあるテキストボックスは、同じ内容を表示させる方法がわかりません。なお、同じ内容を表示させたいテキストボックスは連結でテーブルのフィールドをコントロールソースにしています。

  • Accessで、親フィールドに子フィールドの値を入れたいのですが

    親フィールドの[テキストボックスA]に [テキストボックスB]-子フィールドのフッターにある[テキストボックスC] という式の値を表示させたいのですが。 Aのコントロールソースに = [B]-[子フィールド名].フォーム![C] と入力すると「#Name?」となり、「フォーム」を「Form」とすると空欄になるのですが、どこを直せばいいのでしょうか。 [B]は数値です。 [C]はsum関数が入っていて、普通に表示されてます。 宜しくおねがいします。

  • フォームのテキストボックスの値が空白の時

    現在 フォームのテキストボックスに入れた値をレポートのテキストボックスに表現していますが 例えば フォームのテキストボックスの値 を1とした時 レポートの値 1月分 と表示しています フォームのテキストボックス値が空白の時にレポートの値も 空白にしたいのです 現在のままですと 月分 の文字だけが残ってしまいます 何方かご指南ください 使用環境は Windows10 Office2019です よろしくお願い致します

  • フォーム上のテキストボックスの値を変更させない方法って?

    アクセス2000を使っています。 フォーム上にテキストボックスを作成して、テーブル の値を表示しています。 VBAでこのテキストボックスの値が1の時は, me!txt.enabled=true(テキストボックスが開く) 0の時は、me!txt.enabled=false(テキストボックスがグレーアウト)というようにさせたいのです。さらにこのテキストボックスの値を変更できないようにしたいのですが方法はありますか? 要は、表示だけさせたいのです。 プロパティで値ロックするとenableが利かなくなります。 よろしくお願いいたします