重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

VBAでoracleDBにupdate(SQL文)でのアップデートができません。なぜでしょうか?

ちなみに、insert、select文は何の問題もなく実行することができます。
Err.Numberは3073(更新できないクリエー)でした。

宜しくお願いします。

A 回答 (5件)

あ、そっちのほうでしたか(^^;


そういう仕様があるのは知っていたんですが、「Insertが出来るんだからコレには該当しないんじゃないか」などと勝手に思っておりました。
主キーが付いていなくても行挿入は出来るんですねぇ。勉強になりました。

でわ。
    • good
    • 0

DAOでOracleにつないだ経験は殆ど無いですし、自宅にOracle入れているわけでもないので、甚だ不確実な回答ではありますが、




Private Sub コマンド0_Click()
  Dim wspc As DAO.Workspace
  Dim conn As DAO.Connection
  Dim sSql As String
  
  Set wspc = DAO.CreateWorkspace("WSPC_NAME", "USER_NAME", "PASSWORD", dbUseODBC)
  
  Set conn = wspc.OpenConnection("hoge", dbDriverNoPrompt, False _
                  , "ODBC;dsn=hoge;Trusted_Connection = yes")
  sSql = ""
  sSql = sSql & "UPDATE TEST1 SET NAME = 'V' WHERE NO = 9"
  conn.Execute sSql, dbExecDirect
  conn.Close
  Set conn = Nothing
  wspc.Close
  Set wspc = Nothing
End Sub

みたいな書き方をしてもダメでしょうかねぇ。
(ちなみに、接続文字列はMSDE用のものなんで、適当に書き換えてやってください。)
ODBC Directで繋いでるんで、もしこれで成功するようであれば、原因がDAOのどっかにある可能性が高くなりますよね。


上記でもダメだったとしたら、Oracle側でしょうかねぇ。(基本的なことなんですが、主キーやその他の制約に引っかかったりしてないでしょうか? 或いはトリガが暴発してしまっていたり… 他の処理が排他ロックをしていたりといった可能性は?)

この回答への補足

ありがとうございます。
この問題は解決しました。
なんと、主キーがなければupdateまたはdelete文の実行ができないらしい。(JETワークスペース)の仕様らしい・・・

補足日時:2004/03/08 22:32
    • good
    • 0

とりあえずは、Oracle側のエラーメッセージは取得できませんでしょうか?



oo4oなら、OraSession.LastServerErrortextとかで取得できるはずですし、ADOなら Connection.Errorsだったっけ…

それが判れば、Oracleのマニュアルでエラーコードを辞書引きすれば、それとなく原因が見えてくるような気がします。(蛇足になるやも知れませぬが、OTNから電子マニュアルが入手できます。)

あとは、該当部分のソースコードや、Oracleのバージョン、使用しているミドルウェア、etcの情報があれば、回答が付き易いと思いますよ。

参考URL:http://otn.oracle.co.jp/

この回答への補足

DBアクセスには「DAO」を使っています。

該当部分のソースコードは以下のようになっています。

--------------------------------------------
Dim WkDB As Workspace
Dim Db As Database
Dim Connect As String
Dim SQL As String

Set WkDB = DBEngine.Workspaces(0)
WkDB.BeginTrans

Connect = "ODBC; " & _
"UID=" & _
ユーザ名 & _
";PWD=" & _
パスワード

Set Db = Workspaces(0).OpenDatabase( _
DataSorce名, _
False, _
False, _
Connect _
)

SQL = "アップデート文"

Db.Execute SQL <- ここでエラーとなってしまいます。

--------------------------------------------

よろしくお願いします。

補足日時:2004/03/04 09:32
    • good
    • 0

テーブルの結合はしてないのですか・・・。


どうしてなんでしょうね。UPDATE の SQL と、そのテーブルの各カラムの型を教えてもらえれば、もしかすると何かわかるかもしれません。(が、もしかすると何もわからないかもしれません。)

ところで、「更新できないクエリー」というのは、「更新できない SQL です。」という意味だと考えればいいと思います。UPDATE の SQL と INSERT の SQL は異なる SQL なので、「更新できない UPDATE でも、INSERT は大丈夫」というのは意味をなさないと思います。

この回答への補足

ありがとうございます。SQL文の問題ですかね?
SQL文は以下のような形になります。ちょっとわかりにくいかもしれません。
このSQL文はSQLPLUS上ではちゃんと処理されます。

UPDATE XXXXXX SET ~~~~=176811,~~~~=177521,~~~~=178231,~~~~=168853,~~~~=169364,~~~~=170130,~~~~=1040910,~~~~=170148,~~~~=170166,~~~~=170184,~~~~=170202,~~~~=170220,~~~~=170238,~~~~=1021158,~~~~=1191396 WHERE YYYYY=1 AND YYYYY='001' AND YYYYY='200000' AND YYYYY=1 AND YYYYY=1998

ちなみに、
UPDATE XXXXX SET ~~~~=0
という基本的な文にしてみてもダメでした・・・

補足日時:2004/03/04 09:18
    • good
    • 0

おそらく、「更新できないクエリー」だからでしょうね・・・。


二つ以上のテーブルを結合してませんか?一つだけのテーブルの UPDATE だったら正常に実行できたりしませんか?

この回答への補足

ご回答ありがとうございます。
テーブルの結合はしてません。
「更新できないクエリ」であってもインサートは問題ないのですかね?

補足日時:2004/03/03 23:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!