- ベストアンサー
3つのテキストボックスの値を1つのフィールドに保存
ご指南ください フォーム上の3つのテキストボックスの値Q ・S・ DをAというテーブルのBというフィールドに保存したいのです Bフィールド値 QSD としたいのです よろしくお願いいたします ( アクセス2003 OS XP )
- みんなの回答 (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のフィールドの型が日付型であっても構わないのですが。 そこで、 >先に変更して実行したのですが とはどの時点でどのような変更を実行したのですか?、
その他の回答 (2)
- piroin654
- ベストアンサー率75% (692/917)
>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レコードのみ格納してそれを修正を繰り返すのか わからないのでクリックイベントを二つ用意しています。 どちらか合うほうを使ってください。 また、メッセージボックスの最初の行に結合したデータが表示され 確認できるようになています。 何かあれば補足してください。
補足
ありがとうございます 説明不足ですいません 先に変更して実行したのですが 結果が2012/10/291Sとなります 1210001Sとしたいのですが ご指南をお願いいたします
- piroin654
- ベストアンサー率75% (692/917)
一応、以下のように設定します。 (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)の中で条件や設定に違いが ある場合などやわからないところがあれば補足してください。
補足
早々のご指南ありがとうございます 大きな勘違いでした tx1には YYMM tx2には 3桁の数字 tx3には アルファベット1文字が入っています tx1が問題で1210と表示していますが データはDATE()なので Bに1210001Sと格納したいのです すいません ご指南いただけますでしょうか
お礼
ありがとうございます 自己解決しました ほんとうに 助かりました ありがとうございます
補足
ありがとうございます >先に変更して実行したのですが 変数宣言を変更して実行していましたがFormat関数の使い方がごちゃごちゃでMID関数を使ったりしていて上手くいきませんでした i = CStr(Format(Nz(Me!tx1), "yymm")) & CStr(Format(Nz(Me!tx2), "000")) & CStr(Nz(Me!tx3))としまして1210001と格納できましたが 最後のtx3のSが格納できません なぜでしょう 格納先フィールドはテキスト型です。 ご指南お願いできませんでしょうか