• 締切済み

ACCESSでリンクテーブルへINSERTするのは?

的外れな質問だったら申し訳ありません!!(涙) どなたか教えてください!!!(泣) リンクテーブルにInsertを行いたいのです! 現在こういうコードになっています。↓ ※InterBase5.0/ACCESS2000を使用しています。 ※ユーザーIDなどは別の関数で取得して文字列変数で帰ってきます。 Public G_Wksp As Workspace Public G_openDb As Database Set G_Wksp = CreateWorkspace("", sUID, sPWD, dbUseODBC) Set G_openDb = G_Wksp.OpenDatabase(sDSN, , False, _ "ODBC;DATABASE=" & sDb & ";UID=" & sUID & ";PWD=" & sPWD & ";DSN=" & sDSN) で、つないで、 G_Wksp.BeginTrans G_openDb.Execute "Insert_SQL文1" G_openDb.Execute "Insert_SQL文2" G_openDb.Execute "Insert_SQL文3" 3つとも正常終了だったら … G_Wksp.CommitTrans 'コミット どれか異常終了だったら  … G_Wksp.Rollback 'ロールバック で、Insertしています。 INSERTはちゃんとされているのですが…エラー発生時にロールバック処理がされていないのです…(汗) どこが変なのか教えていただけないでしょうか…(泣) イイ方法教えてください。よろしくお願いします!

  • mirio
  • お礼率100% (1/1)

みんなの回答

  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

INTERBASE上のトランザクション機能を使えば、、、 または、1個1個INSERT文を発行せずにINTERBASEの ストアドプロシージャで置き換えなどは出来ませんか? アイデアだけですが、、、

mirio
質問者

お礼

回答ありがとうございます!!!!(涙) ホント、勉強不足で申し訳ありませんが… INTERBASE上のトランザクション機能はどうやって使うのでしょうか? もし、お解りでしたら教えていただけますか? ほんと、申し訳ありません!!! よろしくお願いします。

関連するQ&A

  • ADO接続のトランザクション処理

    SQL2005のDBに対して ADOのconnectionオブジェクトで接続しているのですが、 下記のようにトランザクションを開始し、SQLを実行し、 エラーが発生してロールバックを行っていない場合、 2個目のSQLがいつまでたってもロック状態でタイムアウトになりません。 このような場合、ADOconnectionのコマンドタイムアウトのデフォルト値30秒で タイムアウトとなり、ロールバックされないのでしょうか? 以下adoコネクションオブジェクトをConnobjと表記します Connobj.BeginTrans Connobj.Execute "Insert into AAA・・・・" ← このInsert文で失敗 Connobj.Execute "Update BBB SET ・・・・" ← このUpdateは成功 ※ロールバックもコミットも行わない  (プログラムの不具合でロールバックができなかった場合や、  アプリで異常が発生してロールバックが行えない等) お手数をおかけしますが、何かご存知の方、ご教授願います。

  • INSERT INTOステートメント構文エラーについての質問です

    INSERT INTOステートメント構文エラーについての質問です VB6.0+Access2003で開発を行っていますがInsert文の発行で上記のエラーメッセージが表示されます。 エラーとなっている部分は Set rst = Ado_connect.Execute(strINS) です。 rstはDim rst As ADODB.Recordsetと宣言しています。 Debug.Print strINSでinsert文を取得し、クエリでSQLを実行したところ、正常に追加されました。 様々なサイト等を調べて単純にSQLがおかしいだけだと思って修正をしていたのですがクエリでSQLが正常に実行できたということはSQLに問題がないということでしょうか? 正直手詰まりといった感じでSQL以外に何を修正すれば良いかわからないというのが現状でこちらに質問させていただきました。 皆様の知恵を貸してください。どうかよろしくお願い致します。

  • Access にて DISTINCROW を使用した INSERT SELECT

    お世話様です。 Access2003 VBAにて、DoCmd.RunSQLを使用してSQL文を流す際、 普通のINSERT-SELECT文はOKですが、 そのSELECT文にDISTINCROW句を使用していると、 数百件程度のSELECT結果しかINSERTできません。 本当は数千件のSELECT結果をINSERTしたいのですが、 これを実行した場合、エラーにもならず、1レコードもINSERTされません。 ためしに、DINSTINCTROWではなく、SQL文を変更してDISTINCTにしてみたところ、 2000件以上でもINSERTできました。 DISTINCROW句を使用して数千件でもINSERTできる方法はあるでしょうか? ちなみにSELECT単体ですと、DISTINCTROWを使用していながら、 数千件でも結果を表示できます。 SQL例: str_SQL = " INSERT INTO 結果テーブル(フィールド1, フィールド2, フィールド3)  SELECT DISTINCTROW A.項目1, A.項目2, B.項目1  FROM テーブル1 A, テーブル2 B  (WHERE句はあってもなくても現象変わらず)  ORDER BY A.項目4 ASC, A.項目5 ASC " DoCmd.RunSQL (str_SQL) よろしくお願いいたします。

  • Insert時に一意制約エラーがでる。

    よろしくお願いします。 VB6.0 DB:ORACLE8.1.6 クライアントWIN2000 サーバーWIN2000SERVER VBでデータをINSERTするプログラムを作ったのですが、どうしても一意制約エラーが出てしまいます。 これはデータの都合上仕方が無いのか? (データの主キーに「.」が入っているのでエラーになるのでしょうか?) プログラムが悪いのか? よろしくお願いします。 エラーは2回目の実行部分です。 データ(すべて文字型) 000   001   002 ベルリン12345 ベルリン 12345 ベルリン123.45 ベルリン 123.45 ベルリン123 45 ベルリン 123 45 プログラム strSql = "Insert Into KUNIBETU(k000,k001,k002) Values ('ベルリン12345','ベルリン,'12345')" '処理のチェック If Execute_sql(strSql) = False Then Err.Raise -1, , "失敗しました!" cn.RollbackTrans rs.Close Set rs = Nothing cn.Close Set cn = Nothing Exit Sub End If strSql = "Insert Into KUNIBETU(k000,k001,k002) Values ('ベルリン1234.5','ベルリン','123.45')" '処理のチェック If Execute_sql(strSql) = False Then Public Function Execute_sql(strSql As String) As Boolean Dim cmd As New ADODB.Command Execute_sql = False ' Commandオブジェクトを作成 Set cmd = New ADODB.Command cmd.ActiveConnection = cn cmd.CommandText = strSql ' アクション クエリーを実行 cmd.Execute      ←←←←←←エラー部分 Set cmd = Nothing Execute_sql = True Exit Function

  • 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の文法が正しくて、テーブルの定義に反している時のエラーが拾いたいのです。 よろしくお願いします。

  • AccessでのSQL文

    AccessでSQL文を使おうと思うのですが、 Dim mydb as Database とすると、ユーザ定義型は定義されていません とエラーになります。 また、mydb as と打つと変数の方の一覧が出ますがその中にもDataBaseがありません。 サンプルの家計簿を開いてみるとSQL文を使っているのにエラーは出ません。 ヘルプを見てみるとDAOが関係しているようなのですが良くわかりません。 AccessでDatabase型を使うにはどうすればいいのでしょう。 教えてください。 Access2000です。

  • 既存の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

  • トランザクションとlast_insert_id

    トランザクション中にinsertする予定のテーブル(未コミット)のauto_increment値を取得することはできるのでしょうか。 以下のような処理を期待しているのですが、hoge1テーブルのauto_increment値が取得できずに困っております。last_insert_id に関わらず、hoge1テーブルのauto_increment値が取得できる方法があれば教えてください。 (1) トランザクション開始 (2) $sql=" INSERT INTO hoge1(name) value('あああ'); "; (3) ( ロールバック ) (4) $key=mysql_insert_id(); (5) $sql2=" INSERT INTO hoge2(hoge1_primary,age) value($key,'20歳'); "; (6) ( ロールバック ) (7) コミット (8) トランザクション終了 よろしくお願いします。 環境: php5,mysql5 (InnoDB)

    • ベストアンサー
    • MySQL
  • 他のMDBのテーブルに追加したい

    Access2010のADOについてご質問します。 以下のようにして、データを追加しています。 Dim SQL As String Dim cn As ADODB.Connection Set cn = CurrentProject.Connection ' SQL = "INSERT INTO テーブルA ( 勤務時間 ) " SQL = SQL & "SELECT [テーブルA ].[勤務時間] " SQL = SQL & "FROM テーブルA ; " cn.Execute SQL ご質問したいのは、 当MDB(PC)から社内サーバーにあるMDBのテーブルに追加したいのです。 違うテーブル名でしたら、リンクをすれば済む話とは思いますが 同じテーブル名の「テーブルA」なので どのようにすればいいのか困っています。 ご指導の程をよろしくお願いします。

  • VBAでoo4oを使用してINSERTする際にエラーが発生

    Excelのマクロでoo4oを使用してINSERTをしようとしています。 Dim OraSession As OraSession Dim OraDatabase As OraDatabase Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = OraSession.OpenDatabase(TNS, USER/PASS, 0&) OraSession.BeginTrans OraDatabase.ExecuteSQL("Insert Into tablename ( colum1, colum2) VALUES( '12345', '1234');") OraSession.BeginTrans OraDatabase.ExecuteSQLでINSERTしようとした場合に、「ORA-00911: 文字が無効です。」とエラーになってしまいます。 同じSQL文をSQL PLUS+で実行させた場合、正常にINSERTができます。 何か特別な処理をしないといけないのでしょうか。 よろしくお願いします。

専門家に質問してみよう