• ベストアンサー

ExcelでDBにInsertするには?

ExcelからAccessデータを追加する際にInsertを使うと思うのですが自力で調べ他のですがうまく登録できません? SQLは全くの素人なので間違いだらけでしょうが、ご指南よろしくお願いします あとテーブル名は全角でも大丈夫でしょうか?(書籍・ネット上ではどれもアルファベットのみでしたので) Sub Macro3() Dim objDB As New ADODB.Connection Dim rcsTB As New ADODB.Recordset Dim StrSQL As String Dim hizuke As Date, id As Integer objDB.Open _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\aaa.mdb;" rcsTB.ActiveConnection = objDB hizuke = Date id = 1280 StrSQL = "Insert Into bbb (日付,職員ID) values(hizuke,id)" objDB.Close Set objDB = Nothing End Sub

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

  • ベストアンサー
回答No.2

InsertだけならRecordsetは不要です。Connectionの「Execute」メソッドでSQLを実行します。こちらが参考になります。 http://634.ayumu-baby.com/pukiwiki/index.php?VBA%2FADO%2F%A5%EC%A5%B3%A1%BC%A5%C9%A4%CE%B9%B9%BF%B7%A1%CAinsert%2C%20update%2C%20delete%CA%B8%A4%CE%BC%C2%B9%D4%A1%CB なお、SQL文に誤りがあります。 >StrSQL = "Insert Into bbb (日付,職員ID) values(hizuke,id)" では、期待するデータは追加されません。「hizuke」と「id」は変数ですから、「&」で文字列結合しなければいけません。 さらに、日付は「#」または「’」で引用しないといけないはずです。 http://www.happy2-island.com/access/gogo04/capter01304.shtml

Alshark
質問者

お礼

ありがとうございます、動作しました。 私が参考にしてた資料ではここまで実際に近いコードが載っていませんでした。他のものはみんな抽象的な書き方で私みたいなVBA素人では中々理解し辛かったです(苦笑) しかしながらこのようなプログラムを作る楽しさもあるのは事実なのでもっと努力していきます。行き詰った際にはまたご指南をよろしくお願いします

その他の回答 (1)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

StrSQLを実行していない感じなのですが とりあえず以下のページにやり取りがありますので参考にしてみてください。 ExcelVBAでInsert文を実行するには? http://park7.wakwak.com/cgi-bin/sbox/~efc21/exqalounge.cgi?print+200802/08020073.txt

Alshark
質問者

お礼

ありがとうございます。実際のコードのやり取りをされているサイトで分かりやすかったです

関連するQ&A

  • ExcelからAccessデータの抽出

    部署内の機器管理にExcelを使用しています、今回レコード数がExcelでは対応できなくなりデータのみAccessに置いといてデータ処理はExcelマクロで行おうと思っています。 そのAccessファイルからある日付(または期間○日~△日まで等)岳のレコードを抽出したいと思っています。 ネットや書籍でいろいろ調べたのですがうまく抽出できません(SQL文がおかしいと思います)。ご教授お願いします(Access・SQLは全くの素人です) テーブル名は『4』です Sub Macro3() Dim objDB As New ADODB.Connection Dim RS As New ADODB.Recordset objDB.Open _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & "C:\aaa.mdb" With RS .ActiveConnection = objDB .Source = "SELECT * from 4 WHERE 日付<2009/04/15" .Open End With Range("A3").CopyFromRecordset RS objDB.Close Set objDB = Nothing End Sub

  • レコードの削除

    VB6.0 ACCESSで開発しています。 t_nyukoテーブルのデータを全て削除するのは下記のように 出来たのですが dataGridに表示されているものを1つ選択し 選択されたものだけ削除したいのですがどうすればいいのでしょうか? よろしくお願いします。 Private Sub Command1_Click() Dim cn As New ADODB.Connection Dim cmd As ADODB.Command Dim cat As New ADODB.Command Dim strSQL As String   Set cn = New ADODB.Connection cn.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\temp\db2.mdb" cn.Open cat.ActiveConnection = cn strSQL = "DELETE FROM t_nyuko " Set cmd = New ADODB.Command cmd.ActiveConnection = cn cmd.CommandText = strSQL cmd.Execute cn.Close Set cmd = Nothing Set cn = Nothing Set cat = Nothing End Sub

  • Visual Basic SQL INSERT ADO

    VisualBasic6.0 を使用しています。 SQLのINSERT文についての質問なのですが、 フォームのテキストに記入された内容を新規のレコードとしてデータベースに登録する場合、どのようなプログラムを組めばよいのでしょうか? 下記のように組んでみたのですが、エラー(実行時エラー'-2147217904(80040e10)':一つ以上の必要なパラメータの値が設定されていません)がでてしまいます。 以下のプログラムでは、 Form4の.Text1~7にユーザーが記入した情報をデータベースのM_USERというテーブルの新レコードとして追加しようとしています。 Private Sub Command1_Click() Dim objcon As ADODB.Connection Dim objrec As ADODB.Recordset Dim strConnectString As String Dim strMDBFilePath As String Dim strSQL As String strMDBFilePath = "C:\Documents and Settings\Watanabe Ryota\デスクトップ\新ダイエット\diet.mdb" strConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strMDBFilePath & ";" Set objcon = New ADODB.Connection objcon.Open strConnectString strSQL = "INSERT INTO M_USER(U_ID,U_NAME,U_PASS,U_SIZES1,U_SIZES2,U_CAL,U_IKIGOMI) VALUES(Form4.Text1,Form4.Text2,Form4.Text3,Form4.Text4,Form4.Text5,Form4.Text6,Form4.Text7)" Set objrec = objcon.Execute(strSQL) End Sub おねがいします。

  • ExcelVBA Accessにデータ書き込み

    VBAでコマンドボタンを押した際に特定のセルの値をAccessDBに入力するプログラムを作りたいのですが、上手くいきません...。 実行した際に「実行時エラー '21472179000 (80040e 14)': オートメーションエラーです。」と表示されます。 また、ステップインで実行してみるとEnd Withのところでエラーが発生します。 恐らくインサート文が間違っていると思うのですが、試行錯誤しても解決できませんでしたので教えて頂きたいです。 以下プログラムです。 Private Sub CommandButton1_Click() Dim cn As ADODB.Connection Dim cmd As ADODB.Command Dim rs As ADODB.Recordset Dim constr As String Dim strSQL1 As String Dim a As String a = Range("A1").Value Dim b As String b = Range("A2").Value Dim c As String c = Range("A3").Value constr = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=~.accdb strSQL1 = "insert into " & _ "TableName (1,2,3) " & _ "values ('" + Range("A1").Value + "','" + Range("A2").Value + "','" + Range("A3").Value + "')" Set cn = New ADODB.Connection cn.ConnectionString = constr cn.Open Set cmd = New ADODB.Command With cmd .ActiveConnection = cn .CommandText = strSQL1 .Execute End With Set cmd = Nothing Set rs = Nothing cn.Close Set cn = Nothing End Sub 以上、宜しくお願い致します。

  • EXCEL VBAでダイアログを表示、テーブル選択

    win7/EXCEL、ACCESSともに2010を使用しています。 EXCEL/VBAで、ACCESSのテーブル名を指定しワークシートにコピーする下記のコードなんですが コピーしたいテーブルをユーザがダイアログボックスから選択するように修正できればと思って おります。Application.Filedialog(msofileDialogPicker)を合わせればいいのでしょうか? 色々試してみていますが、うまくいってくれません。どのようコードを組み合わせればよいのか教えていただきたく投稿させていただきました、何卒、よろしくお願いいたします。 'データをワークシートにコピー Sub テーブルデータコピー() 'テーブルのデータをワークシートにコピーする 'Microsoft ActiveX Data Object xx Libraryを選択 Dim objDB As New ADODB.Connection Dim myTBL As New ADODB.Recordset 'Accessデータベースに接続する 'Access2007/2010は「ACE.OLEDB.12.0」 'Access2000/2002/2003は「Jet.OLEDB.4.0」 objDB.Open _ "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=C:\Users\junior\Desktop\ACTESTフォルダ\ACTEST.accdb" 'データベースのテーブルを開く myTBL.Open "T_TESTTABLE", objDB 'テーブルをワークシートにコピーする Range("A3").CopyFromRecordset Data:=myTBL 'データベースを切断する objDB.Close 'オブジェクトを解放する Set objDB = Nothing End Sub

  • ADO1とADO2は意味は同じですか?

    Private Sub ADO1() Dim cn As New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub Private Sub ADO2() Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub は、 Dim cn As ADODB.Connection Set cn = New ADODB.Connection を簡素化したものが Dim cn As New ADODB.Connection になるのでしょうか?

  • エクセル側からアクセスへデータ転送

    エクセル側からアクセスにデータ転送する時に Sub Data_Add() Dim db As New ADODB.Connection Dim Rs As New ADODB.Recordset db.Open _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\Users\Owner\Desktop\1.mdb;" アクセス2003にデータを転送する場合はこれでうまくいきましたが、 アクセス2007にデータを転送しようと、 \1.accdb;"とすると、データベースの形式を認識できません。となってしまいます。 どうしたらいいでしょうか? だれか教えて頂けませんか?

  • Access ADOについて質問です。

    Access ADOについて質問です。 以下コードでレコードセットを返す関数を使用しています。 動作的には問題ないのですが、標準モジュール内のレコードセットをClose及びNothingしていないのが気になります。 Private Sub Form_Open(Cancel As Integer) Dim rs2 As ADODB.Recordset Set rs2 = New ADODB.Recordset Set rs2 = CreateRecordSet("SELECT * FROM T_Standard;") Set Me.Recordset = rs2 rs2.Close: Set rs2 = Nothing end sub '標準モジュール Public Function CreateRecordSet(strSQL As String) As ADODB.Recordset Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=O:\標準DB\StandardBackEnd.mdb" cn.Open Set rs = New ADODB.Recordset rs.Open strSQL, cn, adOpenStatic, adLockReadOnly Set CreateRecordSet = rs ' rs.Close: Set rs = Nothing   ←この部分 ' cn.Close: Set cn = Nothing   ←この部分 End Function 標準モジュール内ではCloseやNothingしなくてもメモリの開放は行われているのでしょうか? アドバイスよろしくお願いいたします。

  • ADOでRecordsetオブジェクトをレコードソースに設定したい

    Access2000を使っています。リンクテーブルを使わずに、ODBCで繋いだDBのテーブルをフォームのレコードソースにセットしたいのですが、可能でしょうか。 宜しくお願いします。 Private Sub FormNoKansu() Dim cn as New ADODB.Connection Dim rs as New ADODB.Recordset Dim strSql as String 'ODBCでサーバーに接続 cn.ConnectionString = "ODBCでMySQLに..." ... strSql = "SELECT * FROM ..." rs.Open strSql, cn 'ここに[rs]を入れられたらと思っています Me.Recordset = "" End Sub

  • Excel VBA ADODB

    「Excel VBA ADODB」の本を手元にして、Excelのデータ処理を勉強しております。 以下の2つの例では、旨くいきますが、次の3番目では、エラーとなります。delete は、使えないのでしょうか? Const DATA_SOURCE = "Data Source=人事データ.xls;" Const DATA_SOURCE販売管理データ = "Data Source=販売管理データ.xls;" Const DATA_SOURCE商品マスタ = "Data Source=商品マスタ.xls;" Const ExProperties = "Extended Properties=Excel 8.0;" Sub SELECT文によるテーブル結合() ' 570 Dim myConn As New ADODB.Connection Dim myRS As New ADODB.Recordset Dim myField As Field, i As Long myConn.Open ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0; " & _ DATA_SOURCE販売管理データ & ExProperties ThisWorkbook.Activate Worksheets("570").Activate myRS.Open Source:="SELECT 売上No, 売上.商品コード, 商品名, 単価, 数量 FROM 売上 INNER JOIN 商品マスタ ON 売上.商品コード=商品マスタ.商品コード;", _ ActiveConnection:=myConn i = 1 For Each myField In myRS.Fields Cells(1, i).Value = myField.Name i = i + 1 Next myField Range(Cells(1, 1), Cells(1, i - 1)).Interior.ColorIndex = 35 Range("A2").CopyFromRecordset Data:=myRS myRS.Close: Set myRS = Nothing myConn.Close: Set myConn = Nothing End Sub Sub INSERT文によるレコード追加() ' 571 Dim myConn As New ADODB.Connection Dim myCmd As New ADODB.Command Dim myField As Field, i As Long myConn.Open ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0; " & _ DATA_SOURCE & ExProperties ThisWorkbook.Activate With myCmd .ActiveConnection = myConn .CommandText = "INSERT INTO 社員マスタ VALUES(11, '石川俊介', '大阪', 25);" .Execute ''' 追加は、範囲の下にデータがあってはいけない。 ''' 追加後、範囲名は広がらない。 ' .CommandText = "UPDATE 社員マスタ SET 所属支店='東京' WHERE 社員No=5;" End With Set myCmd = Nothing myConn.Close: Set myConn = Nothing End Sub Sub DELETE文によるレコード削除() ' 573 Dim myConn As New ADODB.Connection Dim myCmd As New ADODB.Command myConn.Open ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0; " & _ DATA_SOURCE & ExProperties ThisWorkbook.Activate With myCmd .ActiveConnection = myConn .CommandText = "DELETE FROM 社員マスタ WHERE 社員No=6;" .Execute End With Set myCmd = Nothing myConn.Close: Set myConn = Nothing End Sub

専門家に質問してみよう