• ベストアンサー

実行したSQLの結果を返す方法

VBでSQLを発行、及び実行をし、 MDBを更新する処理を作成しています。 各SQLの実行(SELECT、INSERT、DELETE等)が 成功or失敗したかどうかを判定するには どのようにすれば良いのでしょうか? ソースのイメージとしては↓のような感じです。 Dim db As DAO.Database 'DB設定 Set db = OpenDatabase(DB名) 'SQL実行 db.Execute (DB内で作成したSQL) 【実行したSQLの正常終了の判定】 【実行メッセージ(成功or失敗)出力】

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

  • ベストアンサー
  • takap
  • ベストアンサー率100% (1/1)
回答No.1

On Error GoToを使用すれば、正常・異常の判断出来ます。 例 正常終了した場合、戻り値(True)でリターンされます。 異常終了した場合、ErrEndラベルにジャンプしエラー内容を イミディエイトウインドウに表示し戻り値(False)でリターンされます。 Public Function DBSEL_PROC(SQL As String) As Boolean On Error GoTo ErrEnd 'エラー処理を設定します。 DBSEL_PROC = False '関数の戻り値として異常終了を設定します。 '実行したいSQL文を書く DBSEL_PROC = True '関数の戻り値として正常終了を設定します。 On Error GoTo 0 'エラー処理を無効にします。 Exit Function ErrEnd: '異常終了した場合のエラー内容を表示します。 Debug.Print Err.Description Exit Function End Function

その他の回答 (2)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.3

何か質問が見えない部分があるのですが・・・ >成功or失敗したかどうかを判定するには とあるけど、もしかして先にお二人が述べているような、エラー処理(On Error)をすでに組み込んでいるのでしょうか? 処理件数=0が失敗ということではないですよね?

usi-iti
質問者

お礼

>回答者の方へ ありがとうございました。 解決出来ました!

  • sienna
  • ベストアンサー率35% (51/145)
回答No.2

DAOのエラートラップならこちらにのっています。参考まで。 http://homepage2.nifty.com/inform/vbdb/dao_error.htm

関連するQ&A

  • Yes/Noフラグの値をコピーできない

    すいません。ACCESS2003 VBAで下記の問題で困っています。 新たに作成したmdbファイル(テーブルの中身は空)に既存のmdbファイルのテーブル内容をコピーしたいのですが、Yes/Noフラグ型だけ移行できません。一応サンプルのソースです↓ Dim db As DAO.Database Dim RS As DAO.Recordset Dim strsql As String コピー元のmdbファイルをオープン Set db = OpenDatabase("コピー元mdb") 'SQLの生成 strsql = "" strsql = strsql & " SELECT * FROM テーブル名" 'レコードセット生成 Set RS = db.OpenRecordset(strsql, dbOpenSnapshot, dbReadOnly) 'コピー元テーブルにデータがあるか判定 If RS.RecordCount = 0 Then msgbox "データがありません" Else RS.MoveFirst 'コピー先のデータベースを設定 Set db = OpenDatabase("コピー先mdb") 'レコードの初期化 db.Execute (DELETE FROM コピー先テーブル名) Do While RS.EOF = False strsql = "" strsql = strsql & " INSERT INTO コピー先テーブル名(" strsql = strsql & " ,コピー先のYes/Noフラグ値" ' strsql = strsql & ")VALUES(" strsql = strsql & " ,'"コピー元のYes/Noフラグ値 "' " strsql = strsql & ")" db.Execute (strsql) RS.MoveNext Loop End If RS.Close db.Close

  • 連続で実行するには?

    下のように、PostgreSQL に接続して insert を実行するプログラムを書いたのですが、 これらの3つのinsert 文を一気に実行してしまいたい場合、どうすればよいのでしょうか? // insert $sql = "insert into area values (1,'中央区')"; $sql = "insert into area values (2,'東区'); $sql = "insert into area values (3,'西区'); //ここより本文です。 <?php // connect $db_con = pg_connect("","","fuk_gourmet"); if($db_con == false) {print "cannot connect"; exit;} // insert (これだと一つしか実行できない) $sql = "insert into area values (1,'中央区')"; // execute $rs = pg_exec($db_con, $sql); if($rs == false) {print "execute error"; exit;} pg_freeresult($rs); pg_close($db_con); ?>

    • ベストアンサー
    • PHP
  • 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を記述する方法が、わかりません   

  • SELECT文を発行して、ACCESSより取得する方法

    既存のプログラムを元に、 以下のようなソースを作成したのですが、 取得出来ませんでした。 参照設定やパスの設定、SQL文は正しいです。 どこがマズイのでしょうか? アドバイスをお願い致します。 Dim db  As DAO.Database Dim rs  As DAO.Recordset Dim SQL As String 'データベース接続 Set db = OpenDatabase("DBのパス") 'データ検索SQL SQL = "" SQL = " SELECT文 " 'ACCESSより取得 Set rs = db.OpenRecordset(SQL) db.Close rs.Close

  • 既存のAccessのテーブルに空の領域を作成する

    既存のAccess2000のテーブルに空の領域を作成する プログラムを作っているのですが(下記参照)、 「データベースの形式 <ファイル名> を認識できません。(Error 3343)」の エラーが出ます。 【状況説明】 ・パスの内容、パス名、DB名はあっています。 ・編集前のDB前に戻して(テーブル内に空白データが無い状態)、  再実行してもダメでした。 ・参照設定「DAO 3.51 Object Libraly」はチェックしています。  「DAO 3.6 Object Libraly」にチェックすると、  「この名前は既にあるモジュール、プロジェクト、オブジェクト  ライブラリで使われています。」のメッセージが出て、チェック出来ません。 解決方法がありましたら、記入をお願い致します。 【作成プログラム】 'DB関連設定  Dim DBName As String(iniファイルから取得したDB名)  Dim SQL As String (SQL文領域)  Dim DB名  As DAO.Database 'データベース接続 Set DB = OpenDatabase(iniファイルから取得したパス & "\" &               DBName) '領域作成 Do While 数値 > 0 SQL名 = "" SQL名 = SQL名 & "INSERT INTO テーブル (A, B, C) " SQL名 = SQL名 & "VALUES ("", "", ""); " db.Execute (SQL) 数値 = 数値 - 1 Loop db.Close

  • SQL文が実行できません

    単純なSQLの実行命令なのですが、 下記のエラーメッセージが出て実行できません。 解消方法をご存知の方がいらっしゃいましたら、 教えてください。よろしくお願いします。 エラーメッセージ: Microsoft OLE DB Provider for ODBC Drivers (0x80040E10) [Microsoft][ODBC Microsoft Access Driver] パラメータが少なすぎます。1 を指定してください。 /x_db/1.asp, line 12 (Set RS = db.Execute(SQL)のラインがエラーです) ソースです。 <% Set db = Server.CreateObject"ADODB.Connection") db.Open "x_db" SQL = "select * from x_db where w_xpc ='" & Request.Form("F01") &"'" Set RS = db.Execute(SQL) Response.Write(RS.Fields("氏名")) RS.close set RS = nothing db.close set db = nothing %> 環境:WIN200server IIS5.0 access97

  • sqlplusで実行したSQLの結果をシェルで判定する方法

    sqlplusから実行したSQLの結果をシェルで判定するにはどうすれば良いですか? SQLコードかなんらかのステータスコードを拾いたいのですが。。 #!/bin/sh # sample1.sh top sqlplus user/pass@db @sqlfile.sql # ここにステータス判定を入れたい # sample1.sh bottom ----- sqlfile.sql ----- create table tb1 (it1 varchar(1) ); quit; ----- sqlfile.sql -----

  • SQL Server上のDBにWin7でアクセス

    SQL Server上のDBに、Win7のクライアントPCからSELECTのみ実行できるツールを探しています。(INSERT、DELETE、UPDATEは実行できないものがいいです。また、DBを直接編集もできては困ります) フリーソフトがベストです。どなたか、ご教授頂けますでしょうか。

  • Access2000でDAOを使用したときエラーにならない

    Access2000のVBAでプログラムを組んでいて、一見うまく処理されているように見えるのに、実際データが登録されていないということがあり、どうすればエラーを起こせるのか悩んでいます。 Dim db As DAO.Database Set db = CurrentDb db.Execute "insert into TEST values ('10','AAAAAAAAAA')" db.Execute "insert into TEST values ('10','AAAAAAAAAA')" 1つ目のフィールドが主キーになっており、2回目のInsert文はエラーになるはずですが、何も起こりません。 On Error Goto等は全く記述していません。 テーブルには最初の1行のデータだけが登録されています。 これ以外にも、2桁のフィールドに3桁のデータをInsertしても無視されるだけでエラーになりません。 潜在バクになる可能姓があるので、エラーを発生させたいのですが何か設定があるのでしょうか? 因みに、SQL文をいじって文法エラーにすると、ちゃんと実行時エラーは発生します。 SQLの文法が正しくて、テーブルの定義に反している時のエラーが拾いたいのです。 よろしくお願いします。

  • 1回しか実行していないはずが、2回SQLが実行?

    リンクをクリックするとPHPで以下のようなINSERT文が中で実行されるプログラムを記述しました。 実行したところ、当然画面には「*」が一つだけ表示されるのですが、 なぜがSQL自身が2回実行されてしまう状況に陥りました。 echo "*"; $sql0 = 'INSERT INTO wakuwaku (customer_id,comment ,up_date,type,var_id) VALUES ( ?,?, ?, ?,?)'; $message = "わくわくが追加"; $type0 = array('integer','text', 'timestamp', 'text','integer'); $data0 = array($target_custid,$message,$upp_date,"iine_click",$target_id); $sth0 = $mdb2->prepare($sql0, $type0, MDB2_PREPARE_MANIP); $res0 = $sth0->execute($data0); 別の部分で同様な実行をしている可能性を考えて、上記の$messageをAAA等の他の文字列に 変えたところ、変えた文字列で2重実行されたので、はやり上記のSQLがなぜか2回実行されているようです。 まわりにfor文などはなく、*が一回しか表示されていないことからも、 プログラム自体の実行は1巡だけだとおもうのですが、なぜSQL部分だけ2重に実行されるのでしょうか。 ちなみに、エラーの表示はありません。 さらに、自端末のXAMPP環境下では、上記の問題は発生せず、 なぜか、ロリポップ上で動かすと、再現するようです。 いろいろ切り分けを行ったのですが、正直お手上げです。 切り分け方法を含めて、アドバイスいただけると幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL

専門家に質問してみよう