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

ACCESSでORACLEのサーバからデータを取得

ACCESSでORACLEのサーバからデータを取得しようと試みましたがうまくいきません。どこを改善したらよろしいでしょうか?どなたかご教示ください。 クライアント:WINDOWS7 ACCESS2010 サーバ:WIN-SV2003 ORACLE10G 以下のエラーがVBAで取得しようとするとでてきてしまいます。 「[Microsoft][ODBC driver for Oracle][Oracle]ORA-00923:FROMキーワードが指定の位置にありません。」 SQL部分の空白は見直しました。 Private Sub コマンド610_Click() Dim adoCON As Object Dim rs As Object Dim oraclebox() As Variant Dim rdsu As Long On Error GoTo Err_Han 'データベースに接続する' Set adoCON = CreateObject("ADODB.Connection") adoCON.Open "Driver={Microsoft ODBC for Oracle};" & _ "CONNECTSTRING=*****; UID=abcd; PWD=1234;" sqlstr = "SELECT J.KTN_COD,J.SBN,J.GYOSYA_COD,G.GYOSYA_MEI" _ & "FROM JITU_SHARYOU J ,GYOSYA G" _ & "WHERE J.GYOSYA_COD = G.GYOSYA_COD" Set rs = adoCON.Execute(sqlstr) rs.MoveFirst 'レコード数カウント' Do Until rs.EOF rdsu = rdsu + 1 rs.MoveNext Loop '配列を再定義' ReDim oraclebox(rdsu, 4) i = 1 rs.MoveFirst Do Until rs.EOF oraclebox(i, 1) = rs!KTN_COD oraclebox(i, 2) = rs!SBN oraclebox(i, 3) = rs!GYOSYA_COD oraclebox(i, 4) = rs!GYOSYA_MEI i = i + 1 rs.MoveNext Loop rs.Close Set rs = Nothing '警告ダイアログをオフ' DoCmd.SetWarnings False DoCmd.RunSQL "DELETE FROM SAMPLE_T" 'Oracleデータを書き込み' For i = 1 To rdsu DoCmd.RunSQL "INSERT INTO SAMPLE_T(KTN_COD,SBN,GYOSYA_COD,GYOSYA_MEI)" _ & "VALUES('" & oraclebox(i, 1) & "','" & oraclebox(i, 2) & "','" & oraclebox(i, 3) & "'," & oraclebox(i, 4) & ")" Next i '警告ダイアログをオン' DoCmd.SetWarnings True Exit Sub Err_Han: ' エラー処理' MsgBox (Err.Description) End Sub *単一のテーブルであればDoCmd.TransferDatabase acImpor等を使うのですが、場合によっては今後データ量が多かったりより複数のテーブルを扱うことになるので。

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

  • 回答数2
  • 閲覧数683
  • ありがとう数3

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

  • ベストアンサー
  • 回答No.2

#1です > While(Not rs.EOF) >   rsTo.AddNew >   rsTo!SBN = rs!SBN >   ・・・ >   rsTo.Update >   rs.MoveNext > Wend ここのところの rsTo は、AddNew / Update しかしていないので DAO / ADO 区別ありません。 Dim rsTo As DAO.Recordset と記述して、メニューの「デバッグ」→「コンパイル」してみて エラーにならなければ、DAO が使えます。(以下雰囲気) Set rs = adoCON.Execute(sqlstr) CurrentDb.Execute "DELETE FROM SAMPLE_T;" Set rsTo = CurrentDb.OpenRecordset("SAMPLE_T") While (Not rs.EOF)   rsTo.AddNew   rsTo!SBN = rs!SBN   ・・・   rsTo.Update   rs.MoveNext Wend rs.Close rsTo.Close また、 Dim rsTo As New ADODB.Recordset でコンパイルエラーでなければ ADO が使えます(以下雰囲気) Set rs = adoCON.Execute(sqlstr) CurrentProject.Connection.Execute "DELETE FROM SAMPLE_T;" rsTo.Open "SAMPLE_T", CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic While (Not rs.EOF)   rsTo.AddNew   rsTo!SBN = rs!SBN   ・・・   rsTo.Update   rs.MoveNext Wend rs.Close rsTo.Close ※ コンパイルエラーでも、使いたいのであれば、参照設定で追加すれば良いと思います ※ 参照設定しなくても、質問者さんの様に(チョッと修正) Dim cn As Object Dim rsTO As Object Set cn = CurrentProject.Connection Set rsTO = CreateObject("ADODB.Recordset") rsTO.Open "SAMPLE_T", cn, adOpenForwardOnly, adLockOptimistic ' ★ Object 宣言しておいて、CreateObject("ADODB.Recordset") することでも同じなのですが adOpenForwardOnly とか adLockOptimistic の様な定数部分の記述で苦労すると思います。 Dim rsTO As ADODB.Recordset としておけば、 Set rsTO = CreateObject("ADODB.Recordset") ↓部分は、 Set rsTO = New ADODB.Recordset で良いですし、 Dim rsTO As New ADODB.Recordset としておけば、Set rsTO = ・・・ 自体不要です

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

質問者からのお礼

ありがとうございます、助かりました。おかげさまで実現できました。御礼申し上げます。

関連するQ&A

  • OracleからAccessへのインポート

    OracleのサーバからAccessのクライアントへ(1)のSQL文を使って Accessのテーブルヘインポートしたいのですが、どのように(2) に付け足せば良いのでしょうか?どなたかご教示願います。 (1) SELECT S.KTN_COD ,K.KTN_MEI FROM T_SYUKA S ,M_KTN K WHERE S.KTN_COD=K.KTN_COD (2) Private Sub abc_Click() Dim adoCnn As Object 'ADODB.Connection Dim adoRec As Object 'ADODB.Recordset Dim tblName As String DoCmd.SetWarnings False Set adoCnn = CreateObject("ADODB.Connection") adoCnn.Open "Driver={Microsoft ODBC for Oracle};" & _ "CONNECTSTRING=dns; UID=hoge; PWD=hoge;" strSQL = "SELECT S.KTN_COD ,K.KTN_MEIFROM T_SYUKA S ,M_KTN K" _ &"WHERE S.KTN_COD=K.KTN_COD" adoCnn.Execute (strSQL) adoCnn.Close Set adoCnn = Nothing Set adoRec = Nothing End Sub

  • Access2002のコンパイルエラーについて

    Access2002を使っていて、印刷ボタンを押したら、下記のような見たことのない画面になり、 「コンパイルエラー end function が必要です。」というメッセージが出てきました。 どなたか詳しい方、修復の方法を教えて下さい。 Private Function PfDataMake() As Boolean 'On Error GoTo Err_PfDataMake Dim St_Sql As String Dim Ln_Cnt As Long Dim Rs_Cnt As Recordset Dim Rs_Cnt2 As Recordset Dim In_Cnt As Long Dim End_Flg As Boolean Dim Code1 As Long Dim Gokei As Long Dim Gohan As Long Dim Okayu As Long Dim Josyoku As Long Dim Kizami As Long Dim ChoKizami As Long Dim GenEn As Long Dim Kome As String Dim Okazu As String Dim Enbun As String Dim Hiduke As Date Dim Youbi As String 'W_発注食数合計の初期化 St_Sql = "Delete From W_発注食数合計 ;" DoCmd.RunSQL (St_Sql) 'W_発注食数明細の初期化 St_Sql = "Delete From W_発注食数明細 ;" DoCmd.RunSQL (St_Sql) '///// 対象データを抽出 ///// St_Sql = "SELECT * " St_Sql = St_Sql & "FROM W_配食入力 " '/// 20060423追加 出力対象「前日キャンセル」追加 start /// 'St_Sql = St_Sql & "WHERE W_配食入力.キャンセル = 0" 'St_Sql = St_Sql & "WHERE (W_配食入力.キャンセル = 0) or (W_配食入力.キャンセル = 2)" St_Sql = St_Sql & "WHERE (W_配食入力.配達 <> 3) and (W_配食入力.配達 <> 4)" '/// 20060423追加 end /// St_Sql = St_Sql & " ORDER BY W_配食入力.利用者コード ;" '件数を取得 Set Rs_Cnt = CurrentDb.OpenRecordset(St_Sql) Ln_Cnt = Rs_Cnt.RecordCount End_Flg = False 'レコード無し判定 If Rs_Cnt.EOF = True Or Rs_Cnt.BOF = True Then End_Flg = True End If Gokei = 0 Gohan = 0 Okayu = 0 Josyoku = 0 Kizami = 0 ChoKizami = 0 GenEn = 0 'ループ処理 Rs_Cnt.MoveFirst Hiduke = Rs_Cnt("日付") Youbi = Rs_Cnt("曜日") Do Until Rs_Cnt.EOF = True Gokei = Gokei + 1 Select Case Rs_Cnt("米") Case 1 Gohan = Gohan + 1 Kome = " " Case Else Okayu = Okayu + 1 Kome = "おかゆ" End Select Select Case Rs_Cnt("おかず") Case 1 Josyoku = Josyoku + 1 Okazu = " " Case 2 Kizami = Kizami + 1 Okazu = "刻み" Case Else ChoKizami = ChoKizami + 1 Okazu = "超刻み" End Select Select Case Rs_Cnt("減塩") Case 1 Enbun = " " Case 2 GenEn = GenEn + 1 Enbun = "減塩" End Select Code1 = Rs_Cnt("利用者コード") St_Sql = "SELECT D_利用者.シメイ " St_Sql = St_Sql & "FROM D_利用者 " St_Sql = St_Sql & "WHERE D_利用者.利用者コード = " & Code1 St_Sql = St_Sql & " ORDER BY D_利用者.利用者コード ;" '件数を取得 Set Rs_Cnt2 = CurrentDb.OpenRecordset(St_Sql) Ln_Cnt = Rs_Cnt2.RecordCount St_Sql = "INSERT INTO W_発注食数明細 VALUES (" & Code1 & "," St_Sql = St_Sql & "'" & Rs_Cnt("利用者氏名") & "','" & Rs_Cnt2("シメイ") & "'," St_Sql = St_Sql & "'" & Rs_Cnt("主食") & "','" & Rs_Cnt("副食") & "'," St_Sql = St_Sql & "'" & Kome & "','" & Okazu & "','" & Enbun & "'" St_Sql = St_Sql & ") ;" DoCmd.RunSQL (St_Sql) Rs_Cnt.MoveNext Loop St_Sql = "INSERT INTO W_発注食数合計 VALUES ('" & Hiduke & "'," St_Sql = St_Sql & "'" & Youbi & "'," & Gokei & "," & Gohan & "," & Okayu & "," St_Sql = St_Sql & Josyoku & "," & Kizami & "," & ChoKizami & "," & GenEn St_Sql = St_Sql & ") ;" DoCmd.RunSQL (St_Sql) 'レコードセットの終了 Rs_Cnt.Close Rs_Cnt2.Close Exit Function Err_PfDataMake: Resume Next

  • Access2002のコンパイルエラーについて

    Access2002を使っていて、印刷ボタンを押したら、下記のような見たことのない画面になり、 「コンパイルエラー end function が必要です。」というメッセージが出てきました。 どなたか詳しい方、修復の方法を教えて下さい。よろしくお願いします。 Private Function PfDataMake() As Boolean 'On Error GoTo Err_PfDataMake Dim St_Sql As String Dim Ln_Cnt As Long Dim Rs_Cnt As Recordset Dim Rs_Cnt2 As Recordset Dim In_Cnt As Long Dim End_Flg As Boolean Dim Code1 As Long Dim Gokei As Long Dim Gohan As Long Dim Okayu As Long Dim Josyoku As Long Dim Kizami As Long Dim ChoKizami As Long Dim GenEn As Long Dim Kome As String Dim Okazu As String Dim Enbun As String Dim Hiduke As Date Dim Youbi As String 'W_発注食数合計の初期化 St_Sql = "Delete From W_発注食数合計 ;" DoCmd.RunSQL (St_Sql) 'W_発注食数明細の初期化 St_Sql = "Delete From W_発注食数明細 ;" DoCmd.RunSQL (St_Sql) '///// 対象データを抽出 ///// St_Sql = "SELECT * " St_Sql = St_Sql & "FROM W_配食入力 " '/// 20060423追加 出力対象「前日キャンセル」追加 start /// 'St_Sql = St_Sql & "WHERE W_配食入力.キャンセル = 0" 'St_Sql = St_Sql & "WHERE (W_配食入力.キャンセル = 0) or (W_配食入力.キャンセル = 2)" St_Sql = St_Sql & "WHERE (W_配食入力.配達 <> 3) and (W_配食入力.配達 <> 4)" '/// 20060423追加 end /// St_Sql = St_Sql & " ORDER BY W_配食入力.利用者コード ;" '件数を取得 Set Rs_Cnt = CurrentDb.OpenRecordset(St_Sql) Ln_Cnt = Rs_Cnt.RecordCount End_Flg = False 'レコード無し判定 If Rs_Cnt.EOF = True Or Rs_Cnt.BOF = True Then End_Flg = True End If Gokei = 0 Gohan = 0 Okayu = 0 Josyoku = 0 Kizami = 0 ChoKizami = 0 GenEn = 0 'ループ処理 Rs_Cnt.MoveFirst Hiduke = Rs_Cnt("日付") Youbi = Rs_Cnt("曜日") Do Until Rs_Cnt.EOF = True Gokei = Gokei + 1 Select Case Rs_Cnt("米") Case 1 Gohan = Gohan + 1 Kome = " " Case Else Okayu = Okayu + 1 Kome = "おかゆ" End Select Select Case Rs_Cnt("おかず") Case 1 Josyoku = Josyoku + 1 Okazu = " " Case 2 Kizami = Kizami + 1 Okazu = "刻み" Case Else ChoKizami = ChoKizami + 1 Okazu = "超刻み" End Select Select Case Rs_Cnt("減塩") Case 1 Enbun = " " Case 2 GenEn = GenEn + 1 Enbun = "減塩" End Select Code1 = Rs_Cnt("利用者コード") St_Sql = "SELECT D_利用者.シメイ " St_Sql = St_Sql & "FROM D_利用者 " St_Sql = St_Sql & "WHERE D_利用者.利用者コード = " & Code1 St_Sql = St_Sql & " ORDER BY D_利用者.利用者コード ;" '件数を取得 Set Rs_Cnt2 = CurrentDb.OpenRecordset(St_Sql) Ln_Cnt = Rs_Cnt2.RecordCount St_Sql = "INSERT INTO W_発注食数明細 VALUES (" & Code1 & "," St_Sql = St_Sql & "'" & Rs_Cnt("利用者氏名") & "','" & Rs_Cnt2("シメイ") & "'," St_Sql = St_Sql & "'" & Rs_Cnt("主食") & "','" & Rs_Cnt("副食") & "'," St_Sql = St_Sql & "'" & Kome & "','" & Okazu & "','" & Enbun & "'" St_Sql = St_Sql & ") ;" DoCmd.RunSQL (St_Sql) Rs_Cnt.MoveNext Loop St_Sql = "INSERT INTO W_発注食数合計 VALUES ('" & Hiduke & "'," St_Sql = St_Sql & "'" & Youbi & "'," & Gokei & "," & Gohan & "," & Okayu & "," St_Sql = St_Sql & Josyoku & "," & Kizami & "," & ChoKizami & "," & GenEn St_Sql = St_Sql & ") ;" DoCmd.RunSQL (St_Sql) 'レコードセットの終了 Rs_Cnt.Close Rs_Cnt2.Close Exit Function Err_PfDataMake: Resume Next

その他の回答 (1)

  • 回答No.1

ORACLE との連携部分はわかりませんが > sqlstr = "SELECT J.KTN_COD,J.SBN,J.GYOSYA_COD,G.GYOSYA_MEI" _ > & "FROM JITU_SHARYOU J ,GYOSYA G" _ > & "WHERE J.GYOSYA_COD = G.GYOSYA_COD" FROM と WHERE 前にスペースが無いため・・・ ではないでしょうか。 余計なお世話で rs (Recordset)のメソッドに、GetRows があります。 GetRows を使えば、簡単に配列データが作れます。 Dim v As Variant ・・・ v = rs.GetRows v は、v(列,行) の二次元配列に なお、レコード数がかなり多いのであれば、配列に展開するのではなく SAMPLE_T 用の Recordset rsTo を開いておいて While(Not rs.EOF)   rsTo.AddNew   rsTo!SBN = rs!SBN   ・・・   rsTo.Update   rs.MoveNext Wend とかすれば・・・

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

質問者からのお礼

できました、ありがとうございます。普段SQLエディタで抽出していたので気づきませんでした。 ちなみに「SAMPLE_T 用の Recordset rsTo を開いておいて・・・」というやりかたをもう少し 詳しく教えて頂いてもよろしいでしょうか? while文の前に Dim rsTO As Object Set cn = CreateObject("ADODB.Connection") Set rsTO = CreateObject("ADODB.Recordset") rsTO.Open "SAMPLE_T", cn.... としたのですが、「この操作を実行するために接続を使用できません。 このコンテキストで閉じているかあるいは無効です。」と出てきて うまくいきませんでした。access2010を使用していますが、DAOの 参照設定が必要になるのでしょうか?

関連するQ&A

  • オラクルのデータをAccessに追加 無限ループ

    前回、オラクルからデータを取り出し、Accessのテーブルに書き込みを教えて頂き、データ追加は出来たのですが、データ追加時に無限ループが発生しました。 【環境】 Oracle:10g Access:2010 Dim CON As New ADODB.Connection 'Oracle側コネクション Dim RS As ADODB.Recordset 'Oracle側レコードセット Dim SQL As String 'Oracle側SQL文 Dim i As Integer '処理用インクリメント Dim DT As Date '抽出日付変数(日付型) Dim sDT As String '抽出日付変数(テキスト型) Dim RS2 As ADODB.Recordset 'Access側レコードセット ◎現在の状況 Dim CON As New ADODB.Connection Dim RS As ADODB.Recordset Dim SQL As String Dim i As Integer 'DB接続定義 CON.Open "DSN=DNS名;UID=ユーザー名;PWD=パスワード;" 'SQL文 SQL = "SELECT " SQL = SQL & "カラム1," SQL = SQL & "カラム2," SQL = SQL & "カラム3" SQL = SQL & "FROM オラクルテーブル名 " SQL = SQL & "WHERE 抽出条件 " SQL = SQL & "AND 抽出条件" SQL = SQL & "GROUP BY カラム" SET RS = CON.EXCUTE(SQL) ’取得したレコード数表示 MsgBox "オラクル側のレコード数は: " & RS.RecordCount (1)↑↑↑オラクルから、抽出したレコード数表示 rs2.Open "新しいテーブル名", CurrentProject.Connection, adOpenKeyset, adLockOptimistic rs.MoveFirst Do Until rs.EOF rs2.AddNew rs2!カラム1 = rs!カラム1 rs2!カラム2 = rs!カラム2 rs2!カラム3 = rs!カラム3 rs2.Update rs2.Close: Set rs2 = Nothing rs.close: SET RS = Nothing con.close:SET CON=Nothing end sub 上記を実行したところ、いくら待っても処理がおわらず、強制終了をかけた所、新テーブルには、約150万件追加されてました。 (1)でオラクルから抽出した、レコード数を表示させてみた所、&#65293;1でした。 ◎疑問点、 &#65293;1ってありえない数値だと思うのですが。 ちなみに、オラクル側で同様のSQLを実行させた所、取得件数は48件でした。 上記について、ご存じの方がいらっしゃいましたら、アドバイスお願いいたします。

  • Access VBA(データを横並べで追加)について

    いつもお世話なっております。なかなか解決できなくて、ヘルプ求めにきました。  OS- XP SP2 ACCESS2003 T1(テープル) ID    店名 連番 ----------------------- 1 A 1 2 A 2 3 A 3 4 B 4 5 B 5 6 B 6 7 C 7 8 C 8 9 C 9 ---------------------------- T2(空) ID(オート)店名1  店名2 ----------------------------- T1の店名をT2へ横並べて追加したいので、↓のようににソースを書きました。 希望結果↓ ID(オート)店名1 店名2 ----------------------- 1 A A 2 A B 3 B B 4 C C 5 C Private Sub コマンド0_Click() Dim db As DAO.Database Dim RS1 As Recordset Dim RS2 As Recordset Dim fld As Field Dim A As Integer Set db = CurrentDb() Set RS1 = db.OpenRecordset("T1", dbOpenTable) Set RS2 = db.OpenRecordset("T2", dbOpenTable) RS1.MoveFirst For A = 1 To RS1.RecordCount If RS1![連番] Mod 2 <> 0 Then RS2.AddNew RS2![店名1] = RS1![店名] ElseIf RS1![連番] Mod 2 = 0 Then RS2![店名2] = RS1![店名] RS2.Update End If RS1.MoveNext Next MsgBox "終わり", vbExclamation RS1.Close RS2.Close End Sub 質問1-自分のこの書き方でデータ店名のCが一つ消えてしまいます。原因を教えてください。 質問2-後、店名が変わる時、店1からスタートさせたいですが、どうすれば、いいんでしょうか。 希望結果↓ T2 ID    店名1   店名2 ----------------------------- 1 A A 2 A 3 B B 4 B 5 C C 6 C

  • AccessからOracleへのODBC接続

    現在、Oracleで作成したデータベースに接続して 検索するソフトを、Accessで作成してあります。 Oracleに接続をするのに、 ODBCを使用しているのですが、 最初依頼があったときは「Oracle8」のときだったので、 「Oracle8」のみ接続可能なプログラムが組んであり、 「Oracle10g」の入っているPCでは接続できないという問題が発生しました。 そこで、「Oracle8」と「Oracle10g」とも接続出来るように プログラムを書き換えたのですが、 現在は「Oracle11g」が最新になっていると思うので、 ゆくゆくはそれに対応しなければならないなあ、と思っています。 そうすると、Oracleがバージョンアップするたびに、 ソフトのプログラムを書き換えなくてはならなくなり、 効率的ではないな…と思いまして… Oracleのバージョンが違っていても、 自分のPCのOracleのバージョンを自動認識して、 AccessからOracleへ接続する方法はあるのでしょうか? ちなみに現在は、TableDefsコレクションを使用して、 まず、Oracle8で繋ぎにいき、それでエラーが起これば Oracle10gで繋ぎにいく、という処理を行っています。 【参考コード】 dim db as object dim tdf as object set db = CurrentDb set tdf = TableDefs("テーブル名") tdf.Connect = "(※テーブルのプロパティの説明のところに入る文)" tbf.RefreshLink (※ここが8と10gで違ってくる) よろしくお願いします。

  • Accessへのエクセルデータインポート

    Accessへのエクセルデータインポート 環境:Access2000/WinXP アクセス2000の特定テーブルへ、エクセルデータをインポートするよう組んだのですが、新しくデータを追加すると、これより前に入っていたデータがレコードを残して消えてしまいました。 新規データを追加した際にただの追加としたいのですがどこがおかしいのでしょうか。 Private Sub データ登録_Click() Dim objExcel As Object Dim varFilePath As Variant Dim bln As Boolean Dim varac As Variant Dim varxls As Variant Dim strrange As String Dim strmsg As String varac = "受講者情報一覧" Set objExcel = CreateObject("Excel.Application") varFilePath = objExcel.GetOpenFilename("Microsfot Exel (*.xls), *.xls", , "xls選択") If varFilePath <> False Then varxls = varFilePath Else Exit Sub End If Set objExcel = Nothing varxls = varFilePath strrange = "" strmsg = "Excelファイル" & varxls & " を、Accessテーブル " & varac & "へ、インポートします。" DoCmd.DeleteObject acTable, varac If MsgBox(strmsg, vbOKCancel) = vbOK Then DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, varac, varxls, True MsgBox "正常にインポート完了しました。" End If Exit Sub エラー: MsgBox "予期せぬエラーが発生しました。" & Chr(13) & "エラー番号:" & Err.Number & Chr(13) & _ "エラー内容:" & Err.Description, vbCritical Exit Sub End Sub

  • EXCELファイルからACCESSへインポート

    質問させていただきます。 ACCESSのフォームから、EXCELファイルを選択してEXCELの内容を、 テーブルにインポートさせたいのですが。以下の方法で行って いるのですが、テーブルに反映されません。 Private Sub cmd_Import_Click() Dim InitialFileName As String Dim varTitle As Variant Dim FileName As String InitialFileName = "hoge.xls" varTitle = "ファイルを開く" FileName = GETHOGEOPEN(varTitle, InitialFileName) DoCmd.SetWarnings False DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "T_HOGE", FileName, True DoCmd.SetWarnings True MsgBox "完了しました" End Sub ACCESS → ACCESS2003 SP3 EXCEL →EXCEL2003 SP3 よく見ると、すでにEXCELのバージョン指定が違う(汗) これが原因かも・・・・(汗) わかる方がいらっしゃったら教えてください。

  • ループで呼び出しながら、追加クエリでテーブルに追加

    IDをループで呼び出しながら、追加クエリでテーブルに追加したいのですが、 値が入りません。 エラーなく動くのですが、テーブルに値が入っていないのです。 何がたりないのでしょうか? ――――――――――――― Public Sub CYUSYUTU_SEIKYUID2() Dim CYUSYUTU_SEIKYUID As String Dim recCount As Long recCount = DCount("*", "作業用請求先ID") Dim ID As String Dim DB As DAO.Database Dim RS As DAO.Recordset Dim i As Integer Dim strSQL As String Set DB = CurrentDb Set RS = DB.OpenRecordset("作業用請求先ID") RS.MoveFirst Do Until RS.EOF RS.Edit For i = 1 To recCount CYUSYUTU_SEIKYUID = RS.Fields("請求先ID(13)").Value DoCmd.RunSQL _ "INSERT INTO [作業用_▲入金DB] SELECT * FROM ▲入金 WHERE ▲入金.請求先ID='& CYUSYUTU_SEIKYUID &';" Next i RS.Update RS.MoveNext Loop RS.Close: Set RS = Nothing DB.Close: Set DB = Nothing End Sub

  • excelとoracleの連携

    お世話になります。 インターフェースにexcelを使用し、 oracleをデータベースとして活用した 仕組みを開発したいと考えております。 ネットで下記コードを参照しましたが、 excelのvbaを起動するpcから下記コードで 別のサーバー内のoracleに接続する際、 パスの記述はどの様にしたら宜しいのでしょうか。 また、CONNECTSTRINGに代入する文字列は oracleの何処を調べれば分かりますでしょうか。 なんとも初心者すぎる質問内容で大変恐縮 致しますが、何卒ご教示頂けます様、 宜しくお願い申し上げます。    記 Sub prcAdoOracleDB() Dim adoCON As New ADODB.Connection '(1)ADOを使いORACLEのDBを開きます adoCON.Open "Driver={Microsoft ODBC for Oracle};" & _ "CONNECTSTRING=ADRSORA; UID=HAPPY2; PWD=ISLAND;" '(2)データベースのクローズ adoCON.Close End Sub

  • accessのADOの記述について。

    表題についてなのですが、初心者のため宜しくお願いいたします。 T_顧客というテーブルをつくり、そこに名字のフィールド、氏名のフィールドがあり、その中からある人物だけ名字の後ろに"さん"という文字をつけようとしています。 そこで下記のように記述しました。 Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset Dim ipt As String rs.Open "T_顧客", cn, adOpenKeyset, adLockOptimistic rs.MoveFirst ipt = InputBox("どの人を変更する?") rs.Find "[名字]='" & ipt & "'" If rs.EOF Then MsgBox "そんな人いないよ!" Else rs![名字] = rs![名字] & "さん" End If rs.Close cn.Close End Sub ・・・・と記述したのですが、実行すると、rs.Close の ところで「実行時エラー'3219' このコンテキストで操作は許可されていません。」とでます。これはいったい どういうことなのでしょうか。宜しくアドバイスお願い致します。

  • Access VBAで分類別に連番を振る応用

    Sub DAO_num()   '分類別連番付加 Dim db As DAO.Database Dim rs As DAO.Recordset Dim fld As DAO.Field Dim fldid As String Dim stSQL As String Dim i As Long '入力開始番号の値を格納 Dim i2 As String '前ゼロ表記の設定値を格納 Dim i3 As String '入力された変数をセーブ Dim recut As Long '連番付加処理カウンタ stSQL = "SELECT * FROM [Vba] ORDER BY [code] , [zip] , [ID]" Set db = CurrentDb() Set rs = db.OpenRecordset(stSQL, dbOpenDynaset) Set fld = rs.Fields("ren") '[ren]フィールドに連番を付加 rs.MoveFirst i = 0 i2 = "" fldid = rs!code i = InputBox("開始番号を入力して下さい。") i3 = i i2 = InputBox("前ゼロ表記の必要桁数を入力して下さい。") Do Until rs.EOF rs.Edit recut = recut + 1 If fldid <> rs!code Then '[code]が変わったら連番を振り直す i = i3 fldid = rs!code Else End If fld = Format(i, i2) rs.Update i = i + 1 rs.MoveNext Loop rs.Close db.Close MsgBox ("【処理終了】" & vbCrLf & "処理件数= " & recut & " 件") End Sub ---------------------------------------------------------------- 質問です。 i = InputBox("開始番号を入力して下さい。") ↑ここで値を入力した後、確認の為のInputBoxを出して値を入力し、最初入力した値と確認用に入力した値が同じなら処理を行う。不正の場合、メッセージを出して強制終了。 という風にカスタマイズしたいのですが、うまくいきません。 どなたかアドバイス宜しくお願い致します。

  • Access VBA Split利用方法

    お世話になります。 VBAを勉強している最中です。 Accessを利用して、txtファイルをインポート後、テーブルの項目を配列利用して カンマ区切りにしたいのと、Splitを利用して、配列を条件分岐に利用して、テーブルに 書き込みをしたいとおもってます。 おそらく基本的なことで自分で勉強するべきと思うのですが 漠然なイメージしかない状態で、ヒントやこういう方法があるなど 教えていただけますでしょうか 基本的な使い方ですと Private Sub XXX_Click() str = Split("あああ いいい ううう")   MsgBox str(1) End Sub 上記の用な利用方法と思いますが、このような使い方ではなく test(0)のような使い方をして、条件分岐で利用したいと おもってます。 イメージとしては、下記のようなことをイメージしてます。 Public Sub Test()   Dim test() As String Dim row As String   Dim iNum1 As Long,   Dim iNum2 As Long      DoCmd.SetWarnings False   DoCmd.RunSQL "DELETE * FROM data"  DoCmd.TransferText acImportFixed, "インポート定義", "data", "d:\data.txt"   DoCmd.SetWarnings True   iNum1 = 0   iNum2 = 0   Do While xxx      If test(0) = 0 Then          iNum1 = iNum1 + 1 iNum2 = 1      Else         xxxx      End If   Loop End Sub ここでSplitを利用してどのように指定するのが望ましいのか考えてしまってます。 test = row.Split(" ") を利用する場合、どのように連結(row)させるのかが不明です。 知識不足もあり、説明がわかりづらいと思うのですが、よろしくお願いします。