• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAからSqlServerへのUpdate)

VBAからSqlServerへのUpdate

このQ&Aのポイント
  • EXCEL2003からSqlServer2005へのアップデート方法を教えてください。
  • アップデートの戻り値を取得する方法を教えてください。
  • 更新されなかった場合のエラー処理方法を教えてください。

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

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

このようにしたらどうでしょうか?(試してません) Dim numUpdate As Long Dim strSql as String strSql = "Update Table1 set FieldA = " & Cells(i, 2).Value & " Where FieldB = " & Cells(i, 1).Value con.Execute strSql, numUpdate, &H80 If numUpdate = 0 Then ' 該当レコード無し End If 以下の説明は、MSDNからの抜粋です。 http://msdn.microsoft.com/ja-jp/library/cc364125.aspx Execute メソッド (ADO Connection) 指定されたクエリ、SQL ステートメント、ストアド プロシージャ、またはプロバイダ固有のテキストを実行します。 行を返さないコマンド文字列の場合の構文は次のとおりです。 connection.Execute CommandText, RecordsAffected, Options 戻り値 Recordset オブジェクトへの参照を返します。 パラメータ CommandText : 実行する SQL ステートメント、テーブル名、ストアド プロシージャ、URL、またはプロバイダ固有のテキストを含む文字列型 (String) の値を指定します。 RecordsAffected : 省略可能です。長整数型 (Long) の変数を指定します。プロバイダは、この操作の影響を受けたレコード数をここに返します。 Options : 省略可能です。プロバイダが CommandText 引数を評価する方法を示す長整数型 (Long) の値を指定します。1 つまたは複数の CommandTypeEnum 値または ExecuteOptionEnum 値のビットマスクを指定できます。 注意 内部処理を最小限に抑えてパフォーマンスを向上させるには、ExecuteOptionEnum に値 adExecuteNoRecords(&H80) を使用します。

cocoa_wk
質問者

お礼

ご連絡遅くなり申し訳ありませんでした。 おかげさまで思っていたことが実現できました。 詳しいご説明ありがとうございました。 RecordsAffectedを知りませんでした。 もっと勉強していきたいと思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

RecordsAffected について調べればよいかも? http://okwave.jp/qa/q2677418.html のvenzouさん http://www.accessclub.jp/bbs5/0047/vba15608.html のmayuさん

cocoa_wk
質問者

お礼

ご連絡遅くなり申し訳ありませんでした。 RecordsAffectedを知りませんでした。 教えて頂いたURLも参考にしながらもっと勉強していきたいと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel VBA EOFに関して

    テキストボックスにDateを入力し、SQLServerに接続しSelectの結果をシートに書き込むだけのものなのですが、「BOFとEOFのいずれかがTrueになっているか、または現在のレコードが削除されています」というエラーでさっぱりわかりません。どなたかアドバイスをお願い致します。 -前後省略- stdate = UserForm1.stdate.Value endate = UserForm1.endate.Value strsql = "select ***" strsql = strsql & "from ***" strsql = strsql & "where *** and ***.start_date between '" & stdate & "' and '" & endate & "' " con.Open connectionString Set rs = con.Execute(strsql) Sheets("Data1").Select rs.MoveFirst i = 2 Do Until rs.EOF Cells(i, 1) = rs.Fields(0).Value Cells(i, 2) = rs.Fields(1).Value Cells(i, 3) = rs.Fields(2).Value Cells(i, 4) = rs.Fields(3).Value i = i + 1 rs.MoveNext Loop con.Close Set con = Nothing Exit Sub Err_DBConnectOpen: MsgBox Err.Description If con.State <> ADODB.adStateClosed Then con.Close End If Set con = Nothing End Sub

  • Excel VBA Accessへデータ書き込み

    お世話になります。 Excel VBAを使用し、ExcelのデータをAccessのテーブル書き込みたいと思っています。 そこで、Access側のテーブルのインデックス重複なしの設定により、書き込むExcelデータが重複となるレコードの場合は、警告を非表示にして書き込みを飛ばしたいと思い、書籍等を参考にして下記のようなコードを記述したのですが、DoCmd.SetWarnings Falseに対してDoCmdの変数が定義されていませんと警告が出されます。 DoCmd.SetWarnings Falseを記述しないと実行時エラーが出されます。 対応方法をご教授頂けないでしょうか。 よろしくお願い致します。 Option Explicit Sub ExcelカレントExcelデータをAccessへ_重複除外_今村() Dim con As New ADODB.Connection Dim rs As New ADODB.Recordset Dim conStr As String Dim sqlList As Collection Set sqlList = New Collection 'コレクションを作成 Dim titleRow As Long Dim endRow As Long Dim tgtRow As Long '繰り返し用変数の宣言 Dim sql As Variant 'SQL文用変数の宣言 Dim i As Long 'For iステートメント用 Dim wbws As Object Dim Accessteble As String 'ExcelのWorkbook名+Sheet名を指定 Set wbws = Workbooks("テーブル取り込み1.xlsm").Sheets("Sheet2") 'Accessのテーブル名を指定 Accessteble = "T_Excelデータ追加" 'Excelタイトル行初期化★ titleRow = 9 'Excelデータ最終行取得 endRow = wbws.Cells(Rows.Count, 2).End(xlUp).Row 'SQL文リストの作成 'Excelデータ取得 For i = titleRow + 1 To endRow '指定行を繰り返す With wbws sql = _ "INSERT INTO " & Accessteble & "(" & _ .Cells(titleRow, 2).Value & ", " & _ .Cells(titleRow, 3).Value & ", " & _ .Cells(titleRow, 4).Value & ") " & _ "VALUES(" & _ "'" & .Cells(i, 2).Value & "', " & _ "'" & .Cells(i, 3).Value & "', " & _ .Cells(i, 4).Value & ");" End With 'コレクションへ追加 sqlList.Add sql Next i 'iを次の値にしてForへ戻る 'Access絶対パス指定 conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data " & _ "Source=C:\Users\○○\Desktop\注文管理.accdb" 'DB接続 con.Open ConnectionString:=conStr DoCmd.SetWarnings False '実行文 For Each sql In sqlList 'SQL文リストをループ con.Execute sql '1行ずつ取り出し実行 Next sql con.DoCmd.SetWarnings True con.Close: Set con = Nothing End Sub

  • SQLSERVER上でUPDATE文を実行するときに?

    SQLSERVERでUPDATE文を実行しようとしています。 UPDATE A SET CharName = (LEFT(B.UserName, 20)) FROM A, B WHERE A.USER_CD = B.UserID これを実行しようとしているのですが、STRING、バイナリーは切り詰められました。というエラーがでます・・・。 こういう使い方はできないのでしょうか?

  • エクセル2019 VBAについて

    エクセル2019でVBAを使いコピーペーストの勉強中です、次の箇所(Dim i As integr)で、ユーザー定義型は定義されていませんと指摘されて止まってしまします、Sheet("データ")には3行のデータは入っています、VBA初心者のため、この後が、なかなか前に進めません、どうかよろしくおねがいします。 ********************************** Sub 練習() Dim s1 As Worksheet: Set s1 = Worksheets("請求書") Dim s2 As Worksheet: Set s2 = Worksheets("データ") Dim r1 As Integer: r1 = 18 Dim r2 As Integer: r2 = 2 { Dim i As integr } For i = 0 To 2 s1.Range(s1.Cells(r1 + i, 1), s1.Cells(r1 + i, 3)).Value = s2.Range(s2.Cells(r2 + i, 2), s2.Cells(r2 + i, 4)).Value s1.Cells(r1 + i, 4).Value = s1.sells(r1 + i, 2).Value * s1.Cells(r1 + i, 3).Value Next End Sub ***************************************

  • vbaのエラーを修正するコード(初心者です)??

    シートの c1セルに =a1+5 という式があります。 a10からa14にそれぞれ1,2,3,4,5と数字が入っています。 Sub 計算() If Cells(1, 3).Value < 10 Then Cells(1, 4).Value = 100 Else Cells(3, 1).Value End If End Sub Sub エラー() Dim i As Integer For i = 1 To 5 Cells(1, 1).Value = Cells(10 + i, 1).Value Application.Run "計算" Next i End Sub 以上のコードを書きます。 「Sub 計算」の4行目が不完全なのはあえてそうしています。 で、実行すると、当然ながらエラーが出ます。 そこで、実行時エラーを終了してa14に4.9と数字を手入力し、 再度「Sub エラー」を実行すると無事に終了です。 このエラー後の「終了→入力→実行」を「Sub エラー」の中に 書きたいんですが… 数式に関しては、例示なので触れないでください。 あくまで手順を教えていただきたいのです。 何卒ご教授ください。

  • VBA グループ化について

    VBAで、取り込んだ本のリストをグループ化して見やすくしようと思ったのですが、@のついているところでエラーが出ます。 (あるところからとってきたVBAを自分で付け加えたものです。) A列に著者、B列に本のタイトルが書かれているリストで、完成図としては著者の毎にグループがされ、著者のグループを開くと、本のタイトルのグループが出てくるかたちを目指しています。 エラー内容は以下の通りです。 実行時エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。 どなたか教えて下さい。 Sub TEST() Dim wri1 As Long Dim wri2 As Long Dim wri As Long Dim com1 As Long Dim com2 As Long Dim com As Long Dim strFORMULA As String ActiveCell.Activate com = 1 Do While Cells(com, 2).Value <> "END" com1 = com com = com + 1 Do While Cells(com, 2).Value = Cells(com1, 2).Value com = com + 1 Loop com2 = com - 1 Rows(com).Insert Cells(com, 2).Value = Cells(com1, 2).Value Cells(com, 1).Value = Cells(com1, 1).Value Rows(com1 & ":" & com2).Group com = com + 1 Loop wri = 1 Do While Cells(wri, 1).Value <> "END" wri = wri wri = wri + 1 @@@ Do While Cells(wri, 1).Value = Cells(wri1, 1).Value wri = wri + 1 Loop wri2 = wri - 1 Rows(wri).Insert Cells(wri, 1).Value = Cells(wri1, 1).Value Rows(wri1 & ":" & wri2).Group wri = wri + 1 Loop End Sub 

  • VBAで実行時エラー'13': がでます

    初歩の初歩ですいません。 VBAで Dim A As Integer Dim B As Integer Dim C As Integer Dim gokei As Integer For i = 8 To 70 A = Cells(i, 4).Value B = Cells(i, 5).Value C = Cells(i, 6).Value goukei = A + B + C Cells(i, 7) = goukei Next i としていますが A = Cells(i, 4).Value のところで今使っているシートだと止まってしまいます。 新規でワークシートを使って仮に数字を代入すると普通に動きます。 今使っているシートもセル内には =100 と入力して 100 と表示され セルの書式設定も数値になってるんですがどうしてでしょうか?

  • Excel VBA TREND関数について

    VBAにて6次近似の計算をするためのプログラムを組んでいるのですが【コンパイルエラー:不正な文字です】 と言われてしまいます。 6次近似の計算式の記載方法を教えて下さい。 よろしくお願い致します。 尚、現状は以下の通りです。 ============================== Dim i As Long Dim deg As Double Cells(i, 10).Value =Application.WorksheetFunction.Trend(Range(Cells(i, 1),Cells(i + 5, 1)), Range(Cells(i, 8), Cells(i + 5, 8)))^{1,2,3,4,5,6}, deg^{1,2,3,4,5,6}, 1) ===============================

  • Excel VBA リストボックスについて

    現在エクセルのVBAを勉強中の 超初心者なのですが、 リストボックスを使うコードでエラーが出て どう直したらいいかわかりません。 下記コードをどのようになおしたらいいでしょうか? 回答、よろしくお願いいたします。 エラー内容は、実行時エラー381 Listプロパティを設定できません。プロパティの配列のインデックスが無効です。 Private Sub UserForm_Initialize() 'リストボックスの設定 With ListBox1 .Font.Size = 10 .ColumnCount = 7 .ColumnWidths = "50;100;80;80;100;30;70" .TextAlign = fmTextAlignLeft .Font.Name = "MSゴシック" End With Dim i As Integer Dim LastRow As Integer LastRow = Range("A" & Rows.Count).End(xlUp).Row For i = 2 To LastRow With ListBox1 .AddItem Cells(i, 1).Value .List(ListCount - 1, 1) = Cells(i, 2).Value .List(ListCount - 1, 2) = Cells(i, 3).Value ←ここでエラー .List(ListCount - 1, 3) = Cells(i, 4).Value .List(ListCount - 1, 4) = Cells(i, 5).Value .List(ListCount - 1, 5) = Cells(i, 6).Value .List(ListCount - 1, 6) = Cells(i, 7).Value End With Next End Sub

  • Excel VBA 実行しても結果が反映されない

    次のコードは,zkというワークシートから値をコピーして, ワークシートtoday1のある位置にペーストしていくという作業をさせたいのですが, 実行エラーも特に表示されず,実行はされているはずなのですが,セルが空白のままになってしまいます。 どこがおかしいのかさっぱりわからないので, どなたかおかしい箇所がわかる方,是非教えてください。よろしくお願いします。ExcelはExcel2000です。 Sub Z_PUT() Dim i As Integer Dim S1, S2 As Worksheet Set S1 = Worksheets("zk") Set S2 = Worksheets("today1") For i = 1 To 50 S2.Cells(53 + i * 7, 1).Value = "z=" S2.Cells(53 + i * 7, 2).Value = S1.Cells(i + 1, 1).Value Next i End Sub