• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExecuteとRunSQLの違いって・・・?)

ExecuteとRunSQLの違いって?

sghの回答

  • sgh
  • ベストアンサー率61% (75/121)
回答No.1

通常RunSQLを実行する場合、DoCmd.SetWarnings Falseをかけてから実行しますよね? 実際に試したわけでは無いのですが、エラーになった値は、警告無く続行されてしまうと思います。 結果は、エラーになった値をNull値とするか、レコードが無いかのどちらかだと思います。 今回のケースの場合、挿入される側のテーブルが、長正数型のフィールドに それ以上の値を入れているのが原因だと思われます。 エラーの根本を対策するには、挿入される側のテーブルレイアウトを直すのが良いと思います。 この内容が原因だとすると、RunSQL,EXECUTEどちらのふるまいが正常かの判断は難しいですが、 私は、Executeの動きをしてもらった方が、集計のトラブルを未然に防げるという意味でいいと思います。

SRO
質問者

補足

ご回答ありがとうございます。 ご指摘頂いた挿入される側のフィールドのデータ型ですが 倍精度浮動小数点型にしています。 また、挿入する側のフィールドはOracleのテーブルをリンクしたもので Number(12)ですのでデータ型は大丈夫と思うのですが… 他に考えられることがありましたらよろしくお願いします

関連するQ&A

  • Perlでexecuteをまとめて実行したい

    以前似たような質問をしたモノですが、 Perl(cgi)ファイルからテーブル内の一定の項目をDELETEしようとしています 具体的にいうと、多数あるチェックボックスにチェックされた項目のみを削除するプログラムで、チェックされた値はハッシュに格納し読み込み、削除をしています。 foreach $key (keys %hash) {   # 取り出した値を$noに代入   $no = $hash{$key};   # SQL発行   $sql = $db->prepare("DELETE FROM テーブル名 WHERE レコード指定名='$no'");   # SQL実行   $sql->execute; } もしくは # ハッシュに入れた値をカウント $n = keys( %hash ); # プレースホルダを使用し削除の実行 $sql = $db->prepare("DELETE FROM テーブル名 WHERE レコード指定名=?"); for($i=0; $i<$n; $i++) {    # SQL実行    $sql->execute(@hash{$i}); } 上記の方法でどちらも問題なく実行できているのですが、ご覧のようにハッシュに格納されている数だけ$sql->execute;を実行しているため効率が悪い、と担当者から指摘をうけました。 少しでもマシンの負担を軽くし、スムーズにするためにexecuteをまとめて実行することを求められています。 selectcol_arrayref などを使う方法などを検索できたのですが、具体的なサンプルがないとまだ分からない初心者で、上記のプログラムに当てはめる方法が分からないでいます。 ご教授のほどよろしくお願いします。

    • ベストアンサー
    • MySQL
  • php execute関数

    おしえてください。 Functionの戻りで以下のreturn文があります。 $sqlの変数には実行するSQL文が格納されます。 $sqlParamは配列変数です。 どのような結果を返すのか分かりません。 return $conn -> Execute ($sql, $sqlParam); 多分Execute関数というものがあると思うのですが、 第2引数の配列変数を使ってどのような結果を返すのかが分からないです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • AccessのSQLについて教えてください。

    Excel+VBA から、ADOを使って、Accessを操作しようとしています。 なんとか、sqlを実行できるようになったのですが、 一点、分からないところが出てきましたので、教えてください。 insert文で、レコードを追加したとき、追加されたレコードのIDを取得したいのですが、 どのようにすれば良いかわかりません。 コードは次のようにしています。 cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & データベース名 & ";" sql = "INSERT INTO テーブル名(フィールド) VALUES(値)" cnn.Execute sql 以上、すみませんが、よろしくお願いいたします。

  • execute()

    execute()は、複数の結果を返す可能性のある SQL 文を実行するメソッドですが、実際に複数の結果を返すSQL文というのは、例えばどういうものなのでしょうか?

    • ベストアンサー
    • Java
  • 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の設定? 初歩的な質問ですがご教授お願いします。

  • 変数のinsertに関しまして

    MySQLのインサートに関して質問です。 2つの値を登録したい場合、 下記のように対応すれば、 データの挿入は通常どおり完了しますが、 insert into テーブル名 (フィールド1, フィールド2) values (値1, 値2);  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 私の場合は、 「ken_name」と「machi_name」という変数を、 上記でいうところの、 「値1」と「値2」に入力したいと思っています。 変数の指す部分は、 それぞれ30文字程度の英数字です。 プログラム内で、 以下のように、 インサートのクエリー処理を行ってみたら、 DB接続も正常に出来ているし、 エラーとかも一切出ていないのですが、 DB内のテーブルに何も登録されていませんでした。 insert into テーブル名 (フィールド1, フィールド2) values (ken_name, machi_name);  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ やり方としては、合っていますでしょうか? 何かアドバイスいただけると嬉しいです。 宜しくお願い致します。

  • php上でSQL文を実行した結果と、phpMyAdminで実行した結果が違う

    ☆実行環境 php5.3 MySQL4.0 $sql="SELECT * FROM テーブル名 WHERE フィールド名 like '".$変数."%'" php上で上記のようなSQL文を実行させようとしています。 テーブルには該当する行がいくつかあるのですが、ページ上では1行も表示してくれません。 mysql_num_rowsの返り値を見ると0になっています。 SQL文の組み立てがおかしいのかと思い、phpMyAdmin上でSQL文を実行すると、 きちんと欲しい内容が表示されます。 とするとphpでのSQL文の書き方がおかしいのだと思います。 どこかおかしいのかご教授ください。

    • ベストアンサー
    • PHP
  • ASP更新・変更ができない

    毎々お世話になってます。 ASP(VBScript)で更新・変更ができないのです。 db.Execute(StrSQL) 部分でエラーになり、 //db.Execute(StrSQL) を使用しない状態にするとエラーは出ませんが、更新・変更ができません。 <% //DB接続 Set ObjConn = Server.CreateObject("ADODB.Connection") ObjConn.Open "Driver={Microsoft Access Driver (*.mdb)};" & _ "DBQ=" & Server.Mappath("dbname.mdb") // 1. SELECT文:SELECT * FROM テーブル名 // 2. INSERT文:INSERT INTO テーブル名 (フィールド名) VALUES (値) // 3. UPDATE文:UPDATE テーブル名 SET フィールド名=値 // 4. DELETE文:DELETE * FROM テーブル名 //データ変更 //--- 追加する文字列を変数にセット --- uID = Request.Form("uID") uTYPE = Request.Form("uTYPE") uNAME= Request.Form("uNAME") uMNAME = Request.Form("uMNAME") //--- データ変更SQL --- SQLstr = "UPDATE " & tablename & " SET " SQLstr = SQLstr & "[uID]=#" & uID & "#," SQLstr = SQLstr & "[uTYPE]=" & uTYPE & "," SQLstr = SQLstr & "[uNAME]=" & uNAME & "," SQLstr = SQLstr & "WHERE ID=" & uID //--- データ追加実行 --- db.Execute(StrSQL) //DB接続解除 ObjConn.Close Set ObjConn = Nothing %>

  • VB6より長文INSERT文でORA1756単一引用符が閉じられていないが発生する

    初めまして。 VB6、ORACLE8iでダイナセットを使用しテーブルに対してINSERT文を 発行していますが、INSERT文が長文になると”単一引用符が閉じられていません” とエラーが返ってきます。このSQL文と同一のものをPLUSにて実行させても 同一のエラーが発生するのですが、メモ帳等で改行して一行を短くすると 正常にINSERTされます。 それならと思い、SQL文作成コード内に改行コードを挿入したのですが VB上からは同じようにエラーが返ってきます。改行コード入りのSQL文を イミディエイトより取り込みPLUSにて実行させると正常に動作します。 どうすればVB上から正常実行できるのでしょうか? 初心者ゆえどうすればよいかさっぱりわからなくなりました。 VB上からは何か制約があるのでしょうか? どなたかご存知の方ご教授願います。 長文失礼しました。

  • 変数に入った値を変数として扱うことはできますか?

    VBスクリプトで自動で作成した値を変数に変化したいのですが、可能なのでしょうか? 例えば hensu = "5" ~DBのテーブルからフィールド名"hensu"を抜き出し、変数"field_set"に入れる。~ OpenField = OpenField & field_set& "=""&"& field_set&"&""" sql = "update test_table set" sql = sql &" "& OpenField sql = sql & "where scode = '" & scode & "'" という感じにしたいのですが、当然"field_set"には"5"ではなく"hensu"というフィールド名の文字列が入ります そもそも変数に入れた値を変数に変換する事って可能なのでしょうか? 宜しくお願い致します。