• ベストアンサー
  • 困ってます

VBでODBC接続して更新・削除できない

VBとSQLSerever2003を接続してプログラムしています。 ネットで検索しつつ以下のコードで接続できました。 Set SQL_DB = SQL_WSpace.OpenDatabase("", False, False, "ODBC;Driver={SQL Server};" "SERVER=" & (DATABASE_SERVER) & ";" "DATABASE=" & (DATABASE_NAME) & ";" "UID=" & (DB_ID) & ";" "PWD=" & (DB_PASS) & ";" SELECT文は問題ないのですが、DELETE文とUPDATE文だと、「指定されたテーブルから削除できませんでした」、「更新可能なクエリであることが必要です」とでます。アドバイスをお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数879
  • ありがとう数0

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

  • ベストアンサー
  • 回答No.1
  • O_cyan
  • ベストアンサー率59% (745/1260)

データベースに書き込み・削除を行うのに必要なアクセス許可がないことが原因だとか。 SqlStr="Update Table SET ・・・ SqlStr="Delete From ・・・ などのSQLは正しいかだとか。 providerのreturned messageには何となっていますか?

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • DAOでODBC経由のRDBに接続し、SQLでアクセスしたい。

    Dim ws As DAO.Workspace, db As DAO.Database Dim rs As DAO.Recordset ' デフォルトのワークスペースを定義する Set ws = DBEngine.Workspaces(0) ' ODBC接続文字列を指定してデータベースを開く Set db = ws.OpenDatabase("", False, False, _ "DSN=SQL_K;ODBC;Driver={SQK_K};" & _ "SERVER=(local);DATABASE=pubs;" & _ "UID=*****;PWD=*****;" ' SQLステートメントを指定してレコードセットを作成する Set rs = db.OpenRecordset("select * from TWSQLK1",dbOpenDynaset, dbSeeChanges)   このレコードセットは正常に行きますが   直接SQLを記述する方法が、わかりません   

  • DAOにてJET経由でのODBC接続とODBCDirect経由でのODBC接続の違いについて

    いつもお世話になっております。 VBにてDAO接続する際にJETとODBCDirectとあると思いますが、この2つの違いはどこで判断するのでしょうか。 以下に自分がODBCDirect接続だと思っているロジックを記述します。 -------------プログラムスタート------- _1 Private Sub Form_Load() _2 _3 Dim Mydb As Database _4 Dim wk_str As String _5 Dim Mydata As Recordset _6 Dim str_sql As String _7 _8 'ODBC接続文字列 _9 wk_str = "ODBC;DSN = DataSoce_Name;" 10 wk_str = wk_str & "UID = User_Name;" 11 wk_str = wk_str & "PWD = PassWord" 12 13 'データベースとの接続 14 Set Mydb = DBEngine.OpenDatabase("DataSoce_Name", False, False, wk_str) 15 'SQL文 16 str_sql = "select name from sample" 17 'SQLの実行 18 Set Mydata = Mydb.OpenRecordset(str_sql, dbOpenDynaset) 19 'SQLの結果 20 MsgBox Mydata.Fields("name").Value 21 'レコードセットのクローズ 22 Mydata.Close 23 'データベースのクローズ 24 Mydb.Close 25 End Sub -------------プログラムエンド------- ●Jet経由の場合 上記プログラム9行目のDSNと14行目のOpenDatabaseの"DataSoce_Name"にmdbのパスを設定している場合。 (OpenDatabaseにmdbのパスのみを設定している場合はローカル接続だと思う。) ●ODBCDirect経由の場合 上記プログラム9行目のDSNと14行目のOpenDatabaseの"DataSoce_Name"にODBCデータソース名を設定している場合。 2つの違いはこのような感じではと思いますが間違いであればご指摘いただけないでしょうか。 また、プログラム自体にも間違いがあればご指摘下さい。

  • JavaScriptでDB接続できなくて、困っています><

    JavaScript初心者です。 ローカルのSQLServerExpressに以下の様に接続にいくと「存在しないか、アクセスが拒否されました」となります。 ちなみに、ManagementStudioではSQL認証で接続できますのでローカルのデータベースに問題はないと思います。また他のDBサーバーのデータベースには接続できますので、Script文にも問題はないと思われます。 localhost\SQLEXPRESSの部分が怪しいような・・・ localhost部分をコンピュータ名やIPに変えてもダメでした。 \を/に変えてもダメでした。 ご存知の方いましたらご教授下さい>< var db; function DBConnect(){ db=new ActiveXObject("ADODB.Connection"); db.Open("Driver={SQL Server};" + "server=localhost\SQLEXPRESS; database=***; uid=***; pwd=***;");} しょうもない間違いだったら、すいません。。。^^;

  • ODBC接続によるパスワード回避

    現在、内部ネットワークにあるAccessアプリケーション上から、外部ネットワークSQL Server へのリンクテーブルを作成しております。 本AccessアプリケーションをどのPCや、環境にコピーしても外部ネットワークのSQLServerにアクセスできるように、リンクテーブルを設定したいと考えております。 SQL Server のプロパティは、混合モードにしています。 ODBCも、以下のようなdsnファイルを作成し、リンクしようとしているのですが、「ユーザー'(null)'のログインに失敗しました。理由:SQL Server の信頼関係接続に関連付けられていません」とエラーがでて、必ずパスワードが聞かれてしまいます。 [ODBC] DRIVER=SQL Server UID=sa PWD=XXXXXX Network=DBMSSOCN DATABASE=test_dns WSID=PCName APP=Microsoft Office 2003 SERVER=XXX.XXX.XXX.XXX Description=Test パスワードを回避する設定方法はありますでしょうか?

  • MySQL の ODBC接続文字列のホスト名の指定に関して。

    こんにちわ VB で MySQL に ODBC接続する際の接続文字列に関して質問です。 ODBC;DSN=AAA;DATABASE=BBB;UID=CCC;PWD=DDD と言った形で接続しているのですが、HOST (Server?) への指定の方法が解りません。 ※HOST=XXX では接続できません。ODBCマネージャでHOST名を設定すると接続できます。 御忙しいなた大変申し訳ありませんが、ご存知の方いらっしゃいましたらよろしくお願い致します。

  • DAOでSQLServerに接続し、LeftJoinで別DBのテーブル

    DAOでSQLServerに接続し、LeftJoinで別DBのテーブルを参照したい。 いつもお世話になっております。 標題についてなのですが、 VB6.0、SQLServer2008Expressで開発を行なっております。 接続にはDAOを利用しています。 その際に、AというDBのT1というテーブルとBというDBのT2というテーブルのデータを結合して抽出したいのですが、エラーが出てしまいます。 ソースは以下の通りです。 Dim DBR As Database Dim T_TEST As Recordset Set DBR = Workspaces(0).OpenDatabase("", False, False,         "ODBC;Driver={SQL Server};SERVER=hoge;DATABASE=A;UID=sa;PWD=admin") Set T_TEST = DBR.OpenRecordset("select * from T1 left join B.dbo.T2 on T1.AAA = T2.AAA") で実行すると、T_TESTをOPENするところで、実行エラー3024が発生します。 エラー内容は「ファイル C:\*******\B.dboが見つかりません」と、ソースが保存されているフォルダにB.dboがありませんといった内容です。 クエリは、ManagementStudioでは問題なく抽出できました。 DBRでAを開いて、Bが開けていないからだとは思うのですが、どのようにすれば複数のDBに存在するテーブルのデータを結合して取得できるでしょうか。 ご教授お願いいたします。

  • ACCESSからODBC接続での書き込みや更新

    ACCESSからODBC接続での書き込みや更新 環境 OS:WindowsXP home SQL Server Express 2008 SQL server manegement studio 2008 パソコンネーム:pc01に SQL Server Express 2008をインストールしてあり そのパソコンからマイクロソフトACCESSからODBC経由で SQLにアクセス(全て同一パソコン) SQL server manegement studioで 以下のようにデータベースを作成しました データベース名:DB01 テーブル名:tbl_01 所有者:pc01\user1 ODBC接続の設定 以下3点以外は規定値 接続するSQLサーバーの名前:pc01\SQLEXPRESS ネットワークへのログインIDでWindows NTの認証メカニズムを使う 規定のデータベースを以下のものに変更する:DB01 この状態でACCESSからODBC経由でDB01のtbl_01に接続しても 新規書き込みや更新が出来ません、 書き込みや更新をしたい場合何を設定すれば良いのでしょうか? SQL server manegement studioで ユーザー、ロール、マップなどを 色々触って見たのですがテーブルの閲覧は出来ますが 更新や新規書き込みが出来ません。 確認すべき項目など御座いましたら具体的にお教え願えれば 幸いです、よろしくお願い致します。

  • VBからのODBC接続でSQLエラー

    DBバージョン:MySQL5 ODBCバージョン:ODBC3.51 言語:VB2003 を利用し VBからSQLを発行した際、1バイト文字の場合は問題はなく SQL文内に日本語を含むとハンドルされていない旨のシステムエラーが出てしまいます SQLAdminからStatusコマンドDBのキャラクタセット情報を確認してもSJISとして設定されており またコンソールから直接SQL文を打ち込んでも正常に動作いたします My.iniファイルも文字コードはSJISに置き換えてあり 何が原因かつかめません *VBコード Dim MyConString As String Dim MyConnection As OdbcConnection Dim strSQL As String Dim myOdbcCommand As OdbcCommand Dim iRet As String MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" + _ "SERVER=localhost;" + _ "PORT=3306;" + _ "DATABASE=kanri_db;" + _ "UID=xxxx;" + _ "PASSWORD=xxxx;" + _ "OPTION=3;" + _ "CHARSETENCODING=sjis" 'Connection MyConnection = New OdbcConnection(MyConString) 'myConn.Open() MyConnection.Open() Console.WriteLine("Connection State::" & MyConnection.State.ToString) 'SQL strSQL = "select csv_subitem from tbl_readtempcsv where csv_subitem='ワークグループ';" myOdbcCommand = MyConnection.CreateCommand myOdbcCommand = New OdbcCommand myOdbcCommand.Connection = MyConnection myOdbcCommand.CommandType = CommandType.Text myOdbcCommand.CommandText = strSQL iRet = myOdbcCommand.ExecuteNonQuery どなたかご教示いただけないでしょうか 宜しくお願いいたします

    • ベストアンサー
    • MySQL
  • [ODBC]Oracle接続時のエラー

    初めて投稿させて頂きます。 客先システム(ASPサービス)の保守をすることになり社内に環境を構築したのですが、以下の「※」の行で エラーが発生してしまいます。(エラー内容を確認するため、On Error Resume Nextを一時的にコメントにしてあります) インデントが効かないようなので見辛いと思いますが... [ソース] ------------------------------------------------------------------------------- 'オブジェクトの生成 Set wkdbCnct = Server.CreateObject("ADODB.Connection") 'On Error Resume Next ※→wkdbCnct.Open "DSN=" & DBCNN_DSN & "; UID=" & DBCNN_UID & "; PWD=" & DBCNN_PWD & ";" If Err.Number <> 0 Then Set wkdbCnct = Nothing On Error Goto 0 Response.Redirect DBERROR_URL Exit Function End If -------------------------------------------------------------------------------- [エラー内容] Microsoft OLE DB Provider for ODBC Drivers エラー '80040e4d' [Microsoft][ODBC driver for Oracle][Oracle]ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。 DSN等の設定値を確認するため以下のようなデバッグコードを仕込んで、変数「vPara」を画面に表示させてみました。 [デバッグコード入りソース] ------------------------------------------------------------------------------- Set wkdbCnct = Server.CreateObject("ADODB.Connection") On Error Resume Next wkdbCnct.Open "DSN=" & DBCNN_DSN & "; UID=" & DBCNN_UID & "; PWD=" & DBCNN_PWD & ";" If Err.Number <> 0 Then '↓デバッグ用コード val1 = Err.Number val2 = Err.Description vPara = "" vPara = "DSN=" & DBCNN_DSN & "; UID=" & DBCNN_UID & "; PWD=" & DBCNN_PWD & ";" & " | " & "Err.Number = " & val1 & " | Err.Description = " & val2 Exit Function '↑デバッグ用コード Set wkdbCnct = Nothing On Error Goto 0 Response.Redirect DBERROR_URL Exit Function End If -------------------------------------------------------------------------------- [画面に表示したvParaの内容] DSN=HOGE; UID=USER123; PWD=PASS123; | Err.Number = -2147217843 | Err.Description = [Microsoft][ODBC driver for Oracle][Oracle]ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。 SQL*Plusで「USER123/PASS123@HOGE」でログインを試みたところ、問題なく接続出来ました。 どういった事が原因として考えられるでしょうか? [AP&DBサーバ] Windows Server2016 Standard IIS Version 10.0.14393.0 OracleDatabase12c(12.2.0.1) + OracleClient12c(12.2.0.1-32bit) 不足している情報等ありましたらご指摘お願いします。

  • VBでExecuteが通らない

    朝倉@東京です。 VBで、以下の手順で ODBCデータベースを開きました。 Set wrkODBC = CreateWorkspace("NewODBCWorkspace", "admin", "", dbUseODBC) Set curDB = wrkODBC.OpenDatabase("", _ dbDriverNoPrompt, _ False, _ "ODBC;" & _ "DATABASE=" & CST_DB_NAME & ";" & _ "UID=;" & _ "PWD=;" & _ "DSN=" & CST_DS_NAME) その後レコードセットを取得する際に sql_str = "select * from テーブルA" Set pb_Rec_F5 = pb_curDB.OpenRecordset(sql_str, dbOpenDynaset) を実行して、 Data_String=pb_Rec_F5("~フィールド名~") でテーブルA内の各フィールドを呼び出して各処理を行いました。 ここからなのですが、データの削除を行う必要があって、 sql_str = "delete from テーブルA where Num = 0001" curDB.Execute sql_str を実行しようとすると 「ODBC--呼び出しは失敗しました。」(Error.Number 3146) とエラー表示が出ます。 ODBCの設定なども見ましたがよくわかりませんでした。 構文に間違いがあるのでしょうか?それともODBCの設定? 初歩的な質問ですがご教授お願いします。