Page 97 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼AddNewを使用してレコードを追加したいのですが。 まさ 02/11/8(金) 17:05 ┣上記の追記です まさ 02/11/8(金) 17:09 ┗Re:AddNewを使用してレコードを追加したいのですが。 イケガミ 02/11/8(金) 17:19 ┗Re:AddNewを使用してレコードを追加したいのですが。 まさ 02/11/8(金) 18:28 ┗Re:AddNewを使用してレコードを追加したいのですが。 yu- 02/11/8(金) 18:39 ┗Re:AddNewを使用してレコードを追加したいのですが。 まさ 02/11/8(金) 19:37 ┗Re:AddNewを使用してレコードを追加したいのですが。 yu- 02/11/9(土) 0:23 ┗Re:AddNewを使用してレコードを追加したいのですが。 まさ 02/11/11(月) 9:49 ┗Re:AddNewを使用してレコードを追加したいのですが。 イケガミ 02/11/11(月) 11:24 ┗Re:AddNewを使用してレコードを追加したいのですが。 まさ 02/11/11(月) 18:53 ┗Re:AddNewを使用してレコードを追加したいのですが。 イケガミ 02/11/11(月) 23:03 ┗Re:AddNewを使用してレコードを追加したいのですが。 まさ 02/11/12(火) 18:14 ┗Re:AddNewを使用してレコードを追加したいのですが。 イケガミ 02/11/12(火) 18:19 ┗Re:AddNewを使用してレコードを追加したいのですが。 まさ 02/11/12(火) 19:08 ┗Re:AddNewを使用してレコードを追加したいのですが。 イケガミ 02/11/12(火) 19:58 ┗ありがとうございました。 まさ 02/11/13(水) 9:12 ─────────────────────────────────────── ■題名 : AddNewを使用してレコードを追加したいのですが。 ■名前 : まさ <m-amemiya@globalstaff.co.jp> ■日付 : 02/11/8(金) 17:05 -------------------------------------------------------------------------
みなさまこんにちは。 以前何度かExcelVBAでお世話になりました。 久しぶりにきてみたらリニューアルされていたのでびっくりです。 本題に入りますが、 初歩的な質問で申し訳ないのですが、表題の通りAddNewを使って レコードを追加したいのですが、どうもうまくいきません。 入力用のフォームを作り、テキストボックスは非連結にしてあります。 登録ボタンを配置しクリックしたら登録されるようにしたいです。 見よう見まねで本を見ながら作ってみたのですが、 全くうまくいきません。 過去ログを検索して、見ているのですが私の力ではいまいち理解できません。 http://www21.tok2.com/home/vbalab/bbs/c-board.cgi?cmd=one;no=1725;id=Access テーブルの項目 日付 名前 電話番号 等があります。入力フォームもそれに併せてテキストボックス名は同じ名前にしました。 初歩的な質問ですがどなたかご教授頂けないでしょうか。 よろしくお願い致します。 ちなみに別件なのですが、質問をさせて頂いてもよろしいでしょうか? ルール違反でしたら申し訳ありません。 コンボボックスについてですが、 コードの列と商品名の列を2つ表示させています。 連結列は2列目に指定してあります。 選択したときに表示される列も2列目にしたいのですが どのようにすればよろしいのでしょうか。 合わせましてよろしくお願い致します。 |
環境はWinNT Access2000です。 よろしくお願い致します。 |
>レコードを追加したいのですが、どうもうまくいきません。 >全くうまくいきません。 では、回答のしようがありませんが。。 エラーがでるのか、単に結果が変わらないのかも判断できません。 ブレイクポイントを設定して、どこがおかしいのかデバッグしてください。 >選択したときに表示される列も2列目にしたいのですが 隣にテキストボックスを作成して、コンボボックスの更新後イベントで Me!テキストボックス名 = Me!コンボボックス名.Column(1) としてはいかがでしょうか? |
>>レコードを追加したいのですが、どうもうまくいきません。 > >>全くうまくいきません。 >では、回答のしようがありませんが。。 >エラーがでるのか、単に結果が変わらないのかも判断できません。 > >ブレイクポイントを設定して、どこがおかしいのかデバッグしてください。 申し訳ありません。 説明不足でした。 一応、本をみて作ってみたものです。 というより、項目名を変えただけです。 Dim mydata(0 To 2) As Variant Private Sub 登録btn_Click() Dim db As Database Dim rst As Recordset Set db = CurrentDb Set rst = db.openrecordset("T_main") rst.AddNew rst.Fields("入力日").Value = mydata(0) rst.Fields("仮登録日").Value = mydata(1) rst.Fields("整理番号").Value = mydata(2) rst.Update rst.Close msg "登録しました" DoCmd.Close.acForm , "F_nyuryoku", acSaveNo End Sub Private Sub 入力日_BeforeUpdate(Cancel As Integer) mydata(0) = 入力日.Text End Sub 以下省略 実行すると Dim db As Database ここのところで 「コンパイルエラー ユーザー定義域は定義されていません」 とエラーがでます。 As Database という意味がよく分からないのですが、とりあえず本のとおりに打ちました。 本当に初歩的なことだと思うのですが。 よろしくお願い致します。 |
▼まさ さん: >Private Sub 登録btn_Click() >Dim db As Database >Dim rst As Recordset > > Set db = CurrentDb > Set rst = db.openrecordset("T_main") > > rst.AddNew > rst.Fields("入力日").Value = mydata(0) > rst.Fields("仮登録日").Value = mydata(1) > rst.Fields("整理番号").Value = mydata(2) > rst.Update Dim rst As DAO.Recordset Set rst = CurrentDb.OpenRecordset("T_main", dbOpenDynaset) '"T_main"にはSelect分を指定してもかまいせん ' dbOpenDynasetで更新用でレコードを開いています With rst .Fields("入力日").Value = mydata(0) .Fields("仮登録日").Value = mydata(1) .Fields("整理番号").Value = mydata(2) .Update End Eith ってな感じで更新できませんか? |
> >Dim rst As DAO.Recordset > >Set rst = CurrentDb.OpenRecordset("T_main", dbOpenDynaset) >'"T_main"にはSelect分を指定してもかまいせん >' dbOpenDynasetで更新用でレコードを開いています > >With rst > .Fields("入力日").Value = mydata(0) > .Fields("仮登録日").Value = mydata(1) > .Fields("整理番号").Value = mydata(2) > .Update >End Eith > >ってな感じで更新できませんか? yu-さま ありがとうございます。 早速試してみましたところ Dim mydata(0 To 3) As Variant Private Sub 登録btn_Click() Dim rst As DAO.Recordset Set rst = CurrentDb.OpenRecordset("T_main", dbOpenDynaset) '"T_main"にはSelect分を指定してもかまいせん ' dbOpenDynasetで更新用でレコードを開いています With rst .Fields("入力日").Value = mydata(0) .Fields("仮登録日").Value = mydata(1) .Fields("整理番号").Value = mydata(2) .Update End With rst.Close msg "登録しました" DoCmd.Close.acForm , "F_nyuryoku", acSaveNo End Sub Dim rst As DAO.Recordset ここのところで引っかかってしまいました。 「コンパイルエラー ユーザ定義型は定義されていません」 とでてしまいます。 どのように解決したらいいのか分かりません。 お暇な時でかまいませんのでよろしくお願い致します。 (今日はもう失礼させて頂きます。また月曜日にきます。 週末勉強してみます。) |
▼まさ さん: >Dim rst As DAO.Recordset >ここのところで引っかかってしまいました。 >「コンパイルエラー ユーザ定義型は定義されていません」 >とでてしまいます。 ツール→参照設定で"Microsoft DAO3.6 Object Library" をクリックしてもう一回コードを試してみてください |
>ツール→参照設定で"Microsoft DAO3.6 Object Library" >をクリックしてもう一回コードを試してみてください 何度も申し訳ございません。 もう少し質問させてください。 ツール→参照設定で "microdoft DAO3.5 Object Library" しかありませんでした。 "DAO3.6"ではないのですがよろしいのでしょうか。 一応 "DAO3.5"にチェックをして試してみたのですが、 Dim mydata(0 To 3) As Variant Private Sub 登録btn_Click() Dim rst As DAO.Recordset Set rst = CurrentDb.OpenRecordset("T_main", dbOpenDynaset) With rst .Fields("入力日").Value = mydata(0) .Fields("仮登録日").Value = mydata(1) .Fields("整理番号").Value = mydata(2) .Update End With rst.Close MsgBox "登録しました" DoCmd.Close.acForm , "F_nyuryoku", acSaveNo End Sub こんどは、 DoCmd.Close.acForm , "F_nyuryoku", acSaveNo この文の ".Close"ここのところで引っかかりました。 試しに、 MsgBox "登録しました" DoCmd.Close.acForm , "F_nyuryoku", acSaveNo ここを全部消して試したのですが、 .Fields("入力日").Value = mydata(0) この文の ".Fields"ここで引っかかってしまいました。 誠に恐縮ですが何卒よろしくお願い致します。 |
>ツール→参照設定で >"microdoft DAO3.5 Object Library" >しかありませんでした。 Access2000なら、DAO3.6があると思いますけど。。 新規mdbファイルで試しても、ありませんか? > .Fields("入力日").Value = mydata(0) フィールド名はあっていますか? あっているのなら、mydata(0)の内容は? > DoCmd.Close.acForm , "F_nyuryoku", acSaveNo DoCmd.Close acForm〜 ですね。(acForm の前の"."が不要です。) |
イケガミ様返信ありがとうございます。 >>ツール→参照設定で >>"microdoft DAO3.5 Object Library" >>しかありませんでした。 >Access2000なら、DAO3.6があると思いますけど。。 >新規mdbファイルで試しても、ありませんか? > すみません。ありました。見落としていたようです。 >> .Fields("入力日").Value = mydata(0) >フィールド名はあっていますか? >あっているのなら、mydata(0)の内容は? > すみません。ここの所が分かりません。 フィールド名というのはテーブルのフィールド名でよろしいのでしょうか。 mydata(0)の内容は、どこを確認すればよいのでしょうか。 >> DoCmd.Close.acForm , "F_nyuryoku", acSaveNo >DoCmd.Close acForm〜 >ですね。(acForm の前の"."が不要です。) なおしました。 度々の質問(しかも初歩的な)本当に申し訳ございません。 お手があいたときで構いませんのでよろしくお願いいたします。 |
>すみません。ここの所が分かりません。 >フィールド名というのはテーブルのフィールド名でよろしいのでしょうか。 >mydata(0)の内容は、どこを確認すればよいのでしょうか。 フィールド名はテーブルのフィールド名のことでいいです。 レコードセットで開いているテーブルに、該当するフィールドはありますか? mydata(0) の内容は、 Debug.Print mydata(0) を入れるか、ブレイクポイントを設定して実行するなどすれば、確認できます。 数値型のフィールドに、文字列を入れればエラーになりますので、 そういったことがないか?の確認をしてください。 |
イケガミさま >フィールド名はテーブルのフィールド名のことでいいです。 >レコードセットで開いているテーブルに、該当するフィールドはありますか? > >mydata(0) の内容は、 > >Debug.Print mydata(0) >を入れるか、ブレイクポイントを設定して実行するなどすれば、確認できます。 >数値型のフィールドに、文字列を入れればエラーになりますので、 >そういったことがないか?の確認をしてください。 ご回答ありがとうございます。 確認をしてみてはいるのですが、どうにも分かりません。 どこかおかしいところがあると思うのですが。 Dim mydata(1) As Variant Private Sub 登録btn_Click() Dim rst As DAO.Recordset Set rst = CurrentDb.OpenRecordset("T_main", dbOpenDynaset) With rst .Fields("入力日").Value = mydata(1) .Update End With rst.Close MsgBox "登録しました" DoCmd.Close acForm, "F_nyuryoku", acSaveNo End Sub テーブル名 "T_main" フィールド名 "入力日"(テキスト型) 入力用フォーム名 "F_nyuryoku" テキストボックス名 "入力日"(書式等未設定) コマンドボタン名 "登録btn" です。 実行すると、 "Update または CancelUpdate メソッドには、対応する AddNew または Edit メソッドが必要です" と出てきて .Fields("入力日").Value = mydata(1) が黄色くなります。 もし原因が不明なようでしたらあきらめます(T-T) |
> With rst .AddNew > .Fields("入力日").Value = mydata(1) > .Update > End With が、抜けていますね。(レコード追加でいいのですよね?) あと、この処理が流れるときには、mydata(1) には、ちゃんと データが入っていますよね? |
イケガミさま 早速のお返事ありがとうございます。 うまくいきました。といいたいところなのですが、 レコードは追加されているのですが、 空のレコードになってしまいます。 >あと、この処理が流れるときには、mydata(1) には、ちゃんと >データが入っていますよね? 多分ここでおっしゃっている部分だと思うのですが、 With rst .AddNew .Fields("入力日").Value = mydata(1) .Update End With たしかにこのままだと"mydata(1)"はフォームのどの値なのか 解らないですよね。 mydata(1)の値を定義してあげなくてはならないということでしょうか。 試しに今回これを作るときに参考にした本には Private Sub 入力日_BeforeUpdate(Cancel As Integer) mydata(1) = 入力日.Text End Sub この文が最後に入っていたので足してみたのですがだめでした。 (意味も分からず本の通り足してみました) あと、 Private Sub 登録btn_Click() Dim rst As DAO.Recordset ここの下に mydata(1) = 入力日.Text を足してみたのですがだめでした。 お時間のある時にでもご教授頂ければと思います。 よろしくお願いします。 |
>たしかにこのままだと"mydata(1)"はフォームのどの値なのか >解らないですよね。 >mydata(1)の値を定義してあげなくてはならないということでしょうか。 > >試しに今回これを作るときに参考にした本には > >Private Sub 入力日_BeforeUpdate(Cancel As Integer) > mydata(1) = 入力日.Text mydata(1) = 入力日.Value に変更してみてください。 |
イケガミ さま >mydata(1) = 入力日.Value > >に変更してみてください。 できました! 長々と申し訳ございませんでした。 丁寧にご指導頂きましてありがとうございました。 |