データベースへのinfoの入力

このQ&Aのポイント
  • VBを使用してMicrosoft Accessのデータベースに情報を入力する方法
  • フォームにADODCとDataGridを使用し、テキストボックスに入力した情報を新しいレコードとしてデータベースに記録する方法
  • 既存のレコードを上書き表示せずに、新しいレコードとしてデータベースに表示する方法
回答を見る
  • ベストアンサー

データベースへのinfoの入力

 こんにちは、いつもお世話になっています。早速ですが、いま、VBの練習で、Microsoft Access のデーターベースを使ったプログラムを作っています。  ひとつのフォームにADODC と DataGrid を使って、アクセスのデーターを表示させ、下のFrameの中にVB作成のテキストボックスを作り、そこのテキストボックスに何かインフォメーションをいれ、”Add"コマンド(cmdAdd)をクリックするとそれらインフォメーションが新しいレコードとしてアクセスのデーターベースに記録されるようにしたいと思っています。 いまのところ、それらインフォメーションがアクセスのデーターベースに表示されるところまでは、できたのですが、上書き表示になってしまい、新しいレコードとしては、表示されません。もし、どなたか、解決方法を知っている方がいらっしゃいましたら、おしえてください。  一応、下に対象フォームのソースコードの一部を記入しておきます。まったく違っていたらどうか気になさらずにずばっと言ってくれたら幸いです。 Private Sub cmdAdd_Click() Dim intID As Integer, strFName As String, strLName As String, vntAddress As Variant, intID = Val(txtCustomerID.Text) strFName = txtFname.Text strLName = txtLname.Text vntAddress = txtAddress.Text adoCustomer.Recordset.Fields.Item(0).Value = intID adoCustomer.Recordset.Fields.Item(1).Value = strFName adoCustomer.Recordset.Fields.Item(2).Value = strLName adoCustomer.Recordset.Fields.Item(3).Value = vntAddress End Sub

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

  • ベストアンサー
  • oribeyaki
  • ベストアンサー率45% (18/40)
回答No.1

こんにちは。 ADODCを使用したことが無いので、違うかも知れませんが・・・ 基本的に、レコードセットにデータを新規に入力する場合は、 「AddNew」→「Update」を使います。 また、なぜ上書きになっているかと言うと、 サンプルのソースですと、現在のレコードセットの「カレントレコード」に 値を代入していますので、その「カレントレコード」の値が変更されることになります。 文面から判断いたしますと、あまりレコードセット関連のことについてはお詳しく無さそうですので、(違っていたら本当にすいません。) 「カレントレコード」・「EOF・BOFプロパティ」といった単語でヘルプを検索して調べてみるのも良いかと思います。 何かありましたら、補足しておいてください。

akumakozou
質問者

お礼

まったくそうです。文の中で、書くのを忘れたのですが、実は、今、VBを勉強中でこれは、その勉強の'final project' として学校から出された課題の中の問題です。とりあえず、言われたとおりのことをしてみます。それにしても、本当に丁寧に教えてもらいありがとうございました。また何かありましたら、このサイトに立ち寄らせていただきます。ありがとうございました。

関連するQ&A

  • OleDbで、1レコード分のデータを読み出したい。

    これまで、VB6とADOを使って、MS-Accessのmdbファイルに接続していました。 ようやく、.netに移行しようと思い、VB2010のExpress版で勉強を始めました。 以下の方法で、test.mdb内のtable1テーブルのfields1の値を、ListViewコントロールに表示させることはできました。 Imports System.Data.OleDb Public Class Form1 Private oleConn As New OleDbConnection Private oleCmd As New OleDbCommand Private oleReader As OleDbDataReader   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load     Dim strConnect As String     strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =test.mdb"     oleConn.ConnectionString = strConnect     oleConn.Open()     oleCmd = oleConn.CreateCommand     oleCmd.CommandText = "SELECT * FROM table1"     oleReader = oleCmd.ExecuteReader()     While(oleReader.Read())       ListView1.Items.Add(oleReader.Item("fields1"))     End While   End Sub End Class 質問は2点です。 1.ADOのRecordSetのMove系メッソッド(.movenext、.moveprevious等)で、レコードを移動するように、OleDbでレコードを移動する方法。 2.ADOのRecordSetのFieldsコントロールのように、カレントレコードのデータを、OleDbで読み出す方法。 Googleで検索しても、ループで全データを読み出す方法はいろいろ見つかるのですが、カレントレコードのデータだけを読み出す方法が分かりません。 oleReader = oleCmd.ExecuteReader() の直後に Me.Text = oleReader.Item("fields1") を記述しても、エラーとなってしまいます。 VBは趣味でやっており、基本的質問ですが、よろしくお願いします。

  • SQLでの処理

    開発環境:WindowsXP、VB6、Access2000 ADO接続前提 ファイル全体のデータ(全レコード)に対して連続して処理するにはSQLで対応するのがいいのだと思いますが やりかたがわかりません。 たとえば、つぎのようなAccessのファイルがあったとします。 ファイル名:kojin.mdb テーブル名:name_tbl 名前 年齢 性別   太郎 20 M    花子 40 F 三郎 30 M 洋子 50 F 質問1 年齢順にレコードを並べかえる。 質問2 性別のFをWに一括変換する。 なお、SQLの文法を質問しているのではありません。 下のプログラム1でレコード表示を行ってます。 また、省略しますが、次のレコードや前のレコードを表示したり、レコードの更新・追加・削除などを行うこともできています。 これからどうすればSQL文を使って質問1や2の処理が可能になるのでしょうか? ご教授お願いしたします。 <プログラム1> Private mCn As ADODB.Connection Private mRs As ADODB.Recordset Private DBfile As String 'DBファイル名 Private DBtable As String 'テーブル名 Private Sub Form_Load()  DBfile = "kojin.mdb"  DBtable = "name_tbl"  Call ConnectType  Call SetFields End Sub Private Sub ConnectType() 'DB接続準備処理   Set mCn = New ADODB.Connection   mCn.ConnectionString = DEF_CONNECT & App.Path & "\" & DBfile   mCn.Open   Set mRs = New ADODB.Recordset   mRs.Source = DBtable   mRs.ActiveConnection = mCn   mRs.CursorType = adOpenDynamic   mRs.LockType = adLockOptimistic   mRs.Open End Sub Private Sub SetFields()  Text1.Text = mRs.Fields("名前")  Text2.Text = mRs.Fields("年齢i")  Text3.Text = mRs.Fields("性別") End Sub

  • 実行時エラー 3020の対策

    アクセス2003で次のエラーが発生します。 実行時エラー 3020 Update または CancelUpdateメソッドには、対応するAddNewまたはEditメソッドが必要です。 以下のソースは、「テスト」フォームにtestフィールドがある簡単なデータベースですが、全レコードを最初から最後までtestフィールドの先頭に"abc "を付加するというものです。 Public Sub Test() Dim form_name as String Dim frmObj As Form Dim rstObj As Recordset Dim fld_dat As String form_name = "テスト" DoCmd.OpenForm form_name Set frmObj = Application.Forms(form_name) Set rstObj = frmObj.Recordset '先頭のレコードに移動する DoCmd.GoToRecord acDataForm, form_name, acFirst Do fld_dat = rstObj.Fields("test").Value fld_dat = "abc " & fld_dat rstObj.Fields("test").Value = fld_dat '<--- *** ここでエラー *** '次のレコード DoCmd.GoToRecord acDataForm, form_name, acNext DoEvents Loop While frmObj.NewRecord = False End Sub

  • DAOでフィールドの値を変更する

    MDBファイルにDAOでアクセスし、フィールド(今回の場合Fields(4))の値をTextBox内の値に変更する方法がわかりません。 Dim WS As DAO.Workspace Dim DB As DAO.Database Dim RS As DAO.Recordset 'レコードを特定する処理 RS.Fields(4).Value = TextBox.Text RS.Update どのように直せばいいのでしょうか??

  • VBの配列について

    VB6.0について質問です。 データベースにある1レコードの情報を一括して取得し 変数に配列化して格納したいのですが可能ですか? データベースはAccessです。 DAOで接続を考えております。 以下のソースを試したのですが駄目でした><; dim ITEM_A() For tmp1 = 0 To ds.Fields.Count - 1 Step 1 ITEM_A = Replace(ds.Fields(tmp1).Value, vbCrLf, "") Next ITEM_A(0)=data1 ITEM_A(1)=data2 ITEM_A(3)=data3 ITEM_A(4)=data4 以上のように格納したいのでお願いします><

  • データベースを切り替えて使う方法

    初心者です。 環境:WindowsXP,VB6,Access2000 Access2000のデータベースを切り替えて使いたいのですが、うまく動作しません。 ADO使用しています。 普通に考えて、いったんつないでいたDBを mRs.Close mCn.Close Set mRs = Nothing Set mCn = Nothing で接続をいったん切断して、 Call ConnectType で再度DBに接続しましたが、接続されているのは前のDBです。 1 原因がわかりません。 2 DBを切り替えて使う方法がわかりません。 もちろん切り替えの処理以外は現在正常に動作しています。 ご教授よろしくお願いいたします。 <プログラム> Private mCn As ADODB.Connection Private mRs As ADODB.Recordset Private DBfile As String Private Const DEF_CONNECT As String     = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\word.mdb" Private Const DEF_SQL As String = "Select * From tango_tbl" Private Sub ConnectType() Set mCn = New ADODB.Connection mCn.ConnectionString = DEF_CONNECT mCn.Open Set mRs = New ADODB.Recordset mRs.Source = DBfile mRs.ActiveConnection = mCn mRs.CursorType = adOpenDynamic mRs.LockType = adLockOptimistic mRs.Open End Sub

  • データーベースへの入力

    こんにちは! 又、質問させて下さい。 ADOを使用してAccessデータベースに入力を行うプログラムについて ですが、 データベースをADODO.Connectionで開き、 レコードセットをコンボボックス参照用、 データ入力用 と二つ使用しているのですが、データ入力用に データを入れて更新しようとするとこのデータベースは読み取り 専用ですと表示されうまく行きません。 (レコードセットのロック処理は問題無いです。) 参照用と入力用はAccessデータベースでは違うテーブルです。 データベース接続一つにレコードセット二つ使用しているから ダメなのでしょうか? こういったプログラムを組んだ経験のある方、教えて下さい。

  • SELECTボックスに初期値を・・

    WEBからACCESSのデータを更新するページを作っています。 例えば、先生ごとに担当の科目が管理されていて、条件画面で「A先生」を選ぶと更新画面にはA先生が担当している科目がTEXTボックスに表示され、手入力で変更ということは出来たのですが、(下記) 科目をSELECTボックスで選択したいのです。ちなみにSELECTボックスの値は、「T_科目」というテーブルから持ってきます。SELECTボックスにすると条件入力画面で選択した条件で抽出されず、T_科目の1レコード目が表示されてしまします。どなたか良いアドバイスをお願いします。 ちなみにACCESS97,JAVASCRIPTです。 《更新画面》  ・  ・ <% var Recordset1__MMColParam = "1"; if(String(Request.Form("sensei")) != "undefined") { Recordset1__MMColParam = String(Request.Form("sensei")); } %> <% var Recordset1 = Server.CreateObject("ADODB.Recordset"); Recordset1.ActiveConnection = MM_○○_STRING; Recordset1.Source = "SELECT * FROM T_□□ WHERE 先生 = "+ Recordset1__MMColParam.replace(/'/g, "''") + ""; Recordset1.CursorType = 0; Recordset1.CursorLocation = 2; Recordset1.LockType = 3; Recordset1.Open(); var Recordset1_numRows = 0; %> <html> <head> </head> <body> <form method="POST" action="<%=MM_editAction%>" name="form1"> <input type="text" name="担当科目" value="<%=(Recordset1.Fields.Item("科目").Value)%>"> <input type="hidden" name="MM_recordId" value="<%= Recordset1.Fields.Item("先生").Value %>"> <input type="hidden" name="MM_update" value="true"> </form> </body> </html> <% Recordset.Close(); %>

  • Recordsetオブジェクトに取り込んだレコードの件数の数え方

    ExcelVBAでAccessのデータベース操作を行っています。 Recordsetオブジェクトに取り込んだレコードの件数を数えたいのですが、 VBAでどのように書いたらよいのでしょうか。 フィールド数の場合は(myRecSet:Recordsetオブジェクトの変数)、 myRecSet.Fields.Count ' のように書けばことはわかるのですが。 よろしくお願いします。

  • VB.NETで出来てC#で出来ない???

    VB.NETでは出来るのにC#で同じようにするやり方がわからなくて困っています。 VSのバージョンは2008です。 やりたいことは 『param.Item("AAA") = "111"』 このように書けるクラスを作りたいのですが、 VBで出来てC#では出来ないのでしょうか? イメージとしてはプロパティにメソッドをくっつけたようなクラス? C#ではこのように書くとエラーになります。 どのようにしたらいいでしょうか? public string Item(string Key) {  set { _param[Key] = value; } } VB Dim param As New Param() param.Item("AAA") = "111" ----Paramクラス---- Imports System.Text Public Class Param Private _Hash As New Hashtable Default Public Property Item(ByVal Key As String) As String Get Return _Hash(Key) End Get Set(ByVal value As String) _Hash(Key) = value End Set End Property End Class ---------

専門家に質問してみよう