- ベストアンサー
ACCESSを活用して商品変動を捉えたい(5再再)
http://okwave.jp/qa/q8782706.html 上記について標準モジュールも作成して、先のクエリーを実行しましたが、 その際に !コンパイル エラー: ユーザー定義型は定義されていません。 と出ます。 5行目の rst As ADODB.Recordset 箇所が反転されています。 一回でできるのは魅力なのですが、本当に実装できるのでしょうか。 (クエリーはたしかに保存できました) Public Function DBLookup(ByVal strQuerySQL As String, _ Optional ByVal ReturnValue = Null) As Variant On Error GoTo Err_DBLookup Dim DataValue Dim rst As ADODB.Recordset Set rst = New ADODB.Recordset With rst .Open strQuerySQL, _ CurrentProject.Connection, _ adOpenStatic, _ adLockReadOnly If Not .BOF Then .MoveFirst DataValue = .Fields(0) End If End With Exit_DBLookup: On Error Resume Next rst.Close Set rst = Nothing DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue) Exit Function Err_DBLookup: MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _ "・Err.Description=" & Err.Description & Chr$(13) & _ "・SQL Text=" & strQuerySQL, _ vbExclamation, " 関数エラーメッセージ" Resume Exit_DBLookup End Function Public Function DBLookup(ByVal strQuerySQL As String, _ Optional ByVal ReturnValue = Null) As Variant On Error GoTo Err_DBLookup Dim DataValue Dim rst As ADODB.Recordset Set rst = New ADODB.Recordset With rst .Open strQuerySQL, _ CurrentProject.Connection, _ adOpenStatic, _ adLockReadOnly If Not .BOF Then .MoveFirst DataValue = .Fields(0) End If End With Exit_DBLookup: On Error Resume Next rst.Close Set rst = Nothing DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue) Exit Function Err_DBLookup: MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _ "・Err.Description=" & Err.Description & Chr$(13) & _ "・SQL Text=" & strQuerySQL, _ vbExclamation, " 関数エラーメッセージ" Resume Exit_DBLookup End Function
- mcdone
- お礼率31% (55/177)
- オフィス系ソフト
- 回答数2
- ありがとう数10
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> この場合は、参照設定を最初に疑って下さい。 これは、リスクというよりも心構えの問題。で、本当のリスクはADOがサポートされなくなること。し、しかし、それはありえない話と思いますよ。そんなことをしたら、世の中大混乱。心配は無用と言えます。ADO機能を活用するのは、Accessソフトの開発者としては当たり前のことですから・・・。
その他の回答 (1)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
http://www.accessclub.jp/actips/tips_32.htm http://accessvba.pc-users.net/ado/ ADO機能を利用する場合は、参照設定を!
関連するQ&A
- Excel:SQL実行関数のエラー原因を知るには?
年甲斐もなく昨日からSQLでExcelデータを参照、更新、削除する二つの関数の作成に挑戦しています。が、 >[Microsoft][ODBC Excel Driver] パラメーターが少なすぎます。 >1を指定してください。 とのエラーで立ち往生中。 作成しているのは、SELECT文を実行するDBLookup()とUPDATE文、INSERT文、DELETE文を実行するCnnExecute()の二つ。どちらも、添付図のようにTESTに成功。で、一旦、Excel を閉じて、もう再テスト。すると、前述のエラーに遭遇。一度だけDBLookup()が正常に動いたのでCnnExecute()も再テスト。すると、前述のエラーが発生。同時に、DBLookup()も動かなくなりました。で、その後、5時間の試行錯誤中。だが、手詰まり感強く質問することに。このようなバグ取りで他者に質問と言う形で助けを求めるのは実に情けないことです。そこは、大目に見て下さい。 【質問】どういうアプローチをすべきと思いますか? 【DBLookup()のコード】 Public Function DBLookup(ByVal strQuerySQL As String, _ Optional xlFileName As String = "", _ Optional returnValue As String = "") As Variant On Error GoTo Err_DBLookup ' ' 【要参照設定】 ' ' Micrsoft ActiveX Data Objects 2.8 Library ' Dim DataValue Dim cnn As ADODB.Connection Dim rst As ADODB.Recordset Set cnn = New ADODB.Connection Set rst = New ADODB.Recordset ' ' ThisWorkbook.FullName の指定 ' If Not Len(xlFileName) Then xlFileName = ThisWorkbook.FullName End If ' ' 接続設定 ' With cnn .Provider = "MSDASQL" ' ' 32bit ' 'cnn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _ ' "DBQ=" & xlFileName & ";" & _ ' "ReadOnly=False;" ' ' 64bit ' .ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _ "DBQ=" & xlFileName & "; ReadOnly=False;" .Open ' ' 列の読み込み ' With rst .Open strQuerySQL, cnn, adOpenStatic If Not .BOF Then .MoveFirst DataValue = .Fields(0) & "" End If End With End With Exit_DBLookup: On Error Resume Next rst.Close cnn.Close Set rst = Nothing Set cnn = Nothing DBLookup = IIf(Len(DataValue), DataValue, returnValue) Exit Function Err_DBLookup: MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _ "・Err.Description=" & Err.Description & Chr$(13) & _ "・SQL Text=" & strQuerySQL, _ vbExclamation, " 関数エラーメッセージ" Resume Exit_DBLookup End Function 【CnnExecute()のコード】 Public Function CnnExecute(ByVal strSQL As String, _ Optional xlFileName As String = "") As Boolean On Error GoTo Err_CnnExecute ' ' 【要参照設定】 ' ' Micrsoft ActiveX Data Objects 2.8 Library ' Dim isOK As Boolean Dim DataValue Dim cnn As ADODB.Connection isOK = True Set cnn = New ADODB.Connection ' ' ThisWorkbook.FullName の指定 ' If Not Len(xlFileName) Then xlFileName = ThisWorkbook.FullName End If ' ' 接続設定 ' With cnn .Provider = "MSDASQL" ' ' 32bit ' 'cnn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _ ' "DBQ=" & xlFileName & ";" & _ ' "ReadOnly=False;" ' ' 64bit ' cnn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _ "DBQ=" & xlFileName & ";" & _ "ReadOnly=False;" .Open .Execute strSQL End With Exit_CnnExecute: On Error Resume Next cnn.Close Set cnn = Nothing CnnExecute = isOK Exit Function Err_CnnExecute: isOK = False MsgBox "SQL 文の実行時にエラーが発生しました。(CnnExecute)" & Chr$(13) & Chr$(13) & _ "・Err.Description=" & Err.Description & Chr$(13) & _ "・SQL Text=" & strSQL, _ vbExclamation, " 関数エラーメッセージ" Resume Exit_CnnExecute End Function 「あっ、これは、多分、こういうことだな!」という思われた方は、気軽にご回答ください。
- ベストアンサー
- Excel(エクセル)
- Access2003でスタック領域不足エラー
帳票形式フォームの参照整合性設定された表形式サブフォームから全レコードを削除する為、下記のモジュールを作成しました。しかし、実行すると「28:スタック領域が不足しています。」のエラー表示でフリーズ状態となってしまいます。エラーとなるのは毎回ではありません。原因と回避方法をご教示下さい。 連鎖削除設定して主レコードを削除する方法しかないのでしょうか? On Error GoTo Err_削除_Click Dim MyAnswer As Variant, MyRs As DAO.Recordset Set MyRs = Me.SubForm.Form.Recordset MyRs.MoveFirst Do Until MyRs.EOF MyRs.Delete MyRs.MoveNext 'ここでエラーとなります。 Loop Recovery_削除_Click: Set MyRs = Nothing Exit_削除_Click: Exit Sub Err_削除_Click: If Err.Number = 3021 Then Resume Recovery_削除_Click Else MsgBox Err.Number & ":" & Err.Description Resume Exit_削除_Click End If
- ベストアンサー
- その他(データベース)
- accessについて<BOFとEOFのいずれかがTUREになっているか・・・現在のレコードが必要です>
Private Sub kensaku_Click() On Error GoTo Err_kensaku_Click Screen.PreviousControl.SetFocus Dim ss As String Dim rs As String Dim strSQL As String Dim rstType As ADODB.Recordset Set rstType = New ADODB.Recordset ss = text.text strSQL = "Select 見積日 From 見積 where 提出見積No ='" & ss & "'" rstType.Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic, adCmdText If ss = "" Then MsgBox ("提出見積Noを入力してください") ElseIf rstType.EOF = False Then While rstType.EOF = False rs = rstType.GetString MsgBox (rs) rstType.MoveNext Wend kikaiNo.Value = "222" Else MsgBox ("提出見積Noが存在しません") End If Exit_kensaku_Click: Exit Sub Err_kensaku_Click: MsgBox Err.Description Resume Exit_kensaku_Click End Sub 以上は書いた検索のコードですが、<BOFとEOFのいずれかがTUREになっているか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です>というエラーが出てきます。問題がどうかよくわかりませんので、教えていただけませんか。
- 締切済み
- その他(データベース)
- ExcelからAccess2013DBを更新する時
Excel2013 vba-> Access2013 mdbファイル 問題点:以下のソースを実行すると、エラーが発生します。このエラーをなくしてアクセスデータベースのテーブルの情報の更新、新規追加、削除を行いたいです。 エラー内容:実行時エラー'3251' 現在のRecordsetは更新をサポートしていません。プロバイダーか、選択されたロックタイプの限界の可能性があります。 ソース: Sub 登録処理() Dim Rst As adodb.Recordset Dim SQL As String Dim Rg As Range Dim RgData As Range Dim lngLastRow As Long Dim RgDel As Range On Error GoTo errH Set RgData = mySh.Range("B2") lngLastRow = RgData.End(xlDown).Row Set RgData = mySh.Range(RgData, mySh.Range("AB" & lngLastRow)) SQL = "Select * from [会社管理テーブル]" Call DBconection2 Set Rst = New adodb.Recordset With Rst .ActiveConnection = Cn 'SQL文でテーブル名と抽出条件を指定する .Source = SQL .CursorLocation = 3 ' クライアントサイドカーソルに変更 .Open End With Dim y As Long Sheets("会社管理").Select If Rst.EOF = False And Rst.BOF = False Then For i = 1 To RgData.Rows.Count If Cells(i + 1, 1).Value = "変更" Then Rst.MoveFirst Rst.Find "[施工会社ID]=" & RgData(i, 1).Value If Rst.EOF Then Else Rst.Fields("会社ID").Value = RgData(i, 2).Value Rst.Fields("会社名").Value = RgData(i, 3).Value Rst.Fields("フリガナ").Value = RgData(i, 4).Value Rst.Update End If Cells(i + 1, 1).Value = "" ElseIf Range(i, 1).Value = "削除" Then Rst.MoveFirst Rst.Find "[会社ID]=" & RgData.Cells(i, 1).Value If Rst.EOF Then Else Rst.Delete End If Set RgDel = Rows(i + 1 & ":" & i + 1) RgDel.Select RgDel.Delete ElseIf Range(i, 1).Value = "新規" Then Rst.AddNew Rst.Fields("会社ID").Value = RgData(i, 2).Value Rst.Fields("会社名").Value = RgData(i, 3).Value Rst.Fields("フリガナ").Value = RgData(i, 4).Value Rst.Update Cells(i + 1, 1).Value = "" End If Next i End If exitH: Rst.Close: Set Rst = Nothing Call DBclose2 Exit Sub errH: MsgBox Err.Number & "(" & Err.Description & ")" GoTo exitH End Sub Sub DBconection2() Set Cn = New adodb.Connection Cn.Provider = "Microsoft.Jet.OLEDB.4.0" Cn.Open modPublic.DBPATH End Sub Function MakeDBconection() As adodb.Connection Set Cn = New adodb.Connection Cn.Provider = "Microsoft.Jet.OLEDB.4.0" Cn.Open modPublic.DBPATH Set MakeDBconection = Cn End Function Sub DBclose2() Cn.Close Set Cn = Nothing End Sub Sub EraseContents(s_Rg As Range) s_Rg.ClearContents End Sub 誰か、解決方法がおわかりの方がいましたら、アドバイスをよろしくお願いします。
- 締切済み
- その他(データベース)
- エクセルVBA アクセスにインポート
エクセルのデータ(列数、行タイトルは都度かわる)をアクセスにインポートしテーブルを作成したいと思っています。 VBAでこの処理をおこないたく、下記のコードで実行したのですがデバッグがはしってしまいます。 (DとEでデバッグ) 原因がお分かりになる方がおりましたら、教えていただけますでしょうか? 何卒、よろしくお願い申し上げます。 Function ExcelDataImport() 'On Error GoTo エラー Dim varac As Variant Dim varxls As Variant Dim strrange As String Dim strmsg As String varac = "T_TESTTABLE" ' --- A varxls = "C:\Users\AC\Desktop\ACTEST\RAWDATA.xlsx" ' ---B strrange = "TEST_RAWDATA" ' --- C strmsg = "Excelファイル" & varxls & " を、Accessテーブル " & varac & _ "へ、データ入力を行います。" & Chr(13) & _ "Excelファイルの入力レンジは、 " & strrange & " です。" DoCmd.DeleteObject acTable, varac ' --- D If MsgBox(strmsg, vbOKCancel) = vbOK Then DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ varac, varxls, True, strrange ' -- E MsgBox "データ入力は、正常に完了しました。" End If Exit Function エラー: MsgBox "予期せぬエラーが発生しました。" & Chr(13) & _ "エラー番号:" & Err.Number & Chr(13) & _ "エラー内容:" & Err.Description, vbCritical Exit Function End Function
- ベストアンサー
- オフィス系ソフト
- Access2010で入力した住所地をGoogle Mapsで表示させ
Access2010で入力した住所地をGoogle Mapsで表示させる方法 下記の回答を参考にさせて頂いています。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1124264086 うまくいくのですが、もしPCがネットに接続されていない時のエラー処理を教えてください On Error GoTo エラー ~ ~上記回答のコード ~ Exit Function エラー: MsgBox "ネット接続を確認して下さい。" & Chr(13) & _ "エラーナンバー:" & Err.Number & Chr(13) & _ "エラー内容:" & Err.Description, vbOKOnly End としたのですが、エラー処理から戻ってくると、グローバルな変数がクリアされてしまいます。
- ベストアンサー
- その他(データベース)
- レポート印刷時のエラー
いつもお世話になっております。 下記のコードで、レポート印刷時にプリンタダイアログを表示させて、保存するファイル名を「仕分け作業登録リスト_AWB」にしたいと思いますが、下記のエラーがでてしまいます。 ※AWBはR-Sorting NoteのAWBの値を持ってきたいです。 エラー内容 予期せぬエラーが発生しました。 エラーナンバー:3265 エラー内容:要求された名前、または序数に対応する項目がコレクションで見つかりません。 エラー3265についてネットで調べてみましたが、自分ではわからないので、 対処方法を教えていただければと思います。 ※コードも独学なのできれいでなくてすみません。 Private Sub Cmd_Report_Click() On Error GoTo Err_Cmd_Report_Click Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset '指定したレポートを印刷プレビューで開く Dim strReportName1 As String strReportName1 = "R_Sorting Note" pdfName = "仕分け作業登録リスト_" & rs!AWB DoCmd.OpenReport strReportName1, acViewPreview DoCmd.OutputTo acOutputReport, strReportName1, acFromatPDF, pdfName, True DoCmd.RunCommand acCmdPrint 'ダイアログの表示 'プレビューを閉じる DoCmd.Close acReport, strReportName1 Exit_Cmd_Report_Click: 'プレビューを閉じる DoCmd.Close acReport, strReportName1 Exit Sub Err_Cmd_Report_Click: If Err.Number = 2501 Then 'エラーを無視する Resume Exit_Cmd_Report_Click Else MsgBox "予期せぬエラーが発生しました" & Chr(13) & _ "エラーナンバー:" & Err.Number & Chr(13) & _ "エラー内容:" & Err.Description, vbOKOnly End If Resume Exit_Cmd_Report_Click End Sub
- 締切済み
- Access(アクセス)
- ダイアログボックスを表示したい。
下記処理コードを実行したときに、 ファイル選択のダイアログ表示をさせるのにファイル名を決まった形にしないと駄目みたいです。 (例)strLookupFileName = "abcms_E000_H*.csv;" ファイル名に関係なくダイアログを表示させるにはどうしたら良いのでしょうか? 今現在、ファイル名を適当なものに変えると「キャンセルされました。」のメッセージボックスが表示されます。 例:strLookupFileName = "abc明細.xls"←エラー(これでも可に) (処理コード) 'ファイル選択 strFileName = FileNameGet(Me.Hwnd, strHomeDirectory, strLookupFileName, "CSV ファイル", "ファイル選択") If strFileName = "" Then MsgBox "キャンセルされました。", vbInformation + vbOKOnly, " " Exit Sub End If ↓ Public Function FileNameGet(Owner As Variant, DefaultDirectory As String, DefaultFilter As String, DefaultFilterName As String, Title As String) As Variant On Error GoTo Err Dim dlg As OPENFILENAME Dim rslt As Long dlg.hwndOwner = Owner dlg.hInstance = 0 'dlg.nFilterIndex = 0 dlg.lpstrTitle = Title & Chr(0) & Chr(0) dlg.lpstrFileTitle = Space(256) & Chr(0) & Chr(0) dlg.lpstrInitialDir = DefaultDirectory & Chr(0) & Chr(0) dlg.lpstrFile = DefaultFilter & Space(256) & Chr(0) & Chr(0) dlg.lpstrFilter = DefaultFilter & Chr(0) & Chr(0) dlg.nMaxFile = Len(dlg.lpstrFile) dlg.nMaxFileTitle = Len(dlg.lpstrFileTitle) dlg.lStructSize = Len(dlg) rslt = GetOpenFileName(dlg) If rslt = 0 Then FileNameGet = "" Exit Function End If 'ファイル名チェック If IsNull(dlg.lpstrFile) Or dlg.lpstrFile = "" Then MsgBox "ファイル名が取得できませんでした。", vbInformation + vbOKOnly, " " FileNameGet = Null Exit Function End If 'FileNameGet = StrConv(MidB(StrConv(dlg.lpstrFile, vbFromUnicode), 1, (dlg.nFileExtension + 3)), vbUnicode) FileNameGet = Left$(dlg.lpstrFile, InStr(dlg.lpstrFile, vbNullChar) - 1 On Error GoTo 0 Exit Function Err: MsgBox Err.Description End Function
- ベストアンサー
- Visual Basic
- access2000で作成のプログラムソースが2003で書き換わってしまう
初めて質問させていただくバイク好きのおじさんです。 環境はOS:Windows7(Ultimate) ソフトウエア:Office2003(pro) ソフトウエア:Office2007(Ultimate) access2000で作成されたプログラムをaccess2003で今まで問題なく利用していたのですが、パソコンを変えてWindows7で利用するようになってから どのコマンドボタンをクリックしても 「イベント プロパティに指定した式 クリック時でエラーが発生しました:名前が適切ではありません:コマン_Click」というエラーで動かなくなってしまいました。 ビューモードでコマンド割り当てのソースをみてみると access2007(エラーが出ない方)抜粋では Private Sub コマンド5_Click() On Error GoTo Err_コマンド5_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "F_選手練習(メイン)" DoCmd.OpenForm stDocName, , , stLinkCriteria Exit_コマンド5_Click: Exit Sub Err_コマンド5_Click: MsgBox Err.Description Resume Exit_コマンド5_Click End Sub access2003 (エラーの起きる)抜粋では Private Sub コマン_Click() On Error GoTo Err_コマン_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "F_会員管理(参照用)" DoCmd.OpenForm stDocName, , , stLinkCriteria Exit_コマン_Click: Exit Sub Err_コマン_Click: MsgBox Err.Description Resume Exit_コマン_Click End Sub のようにソースのコマンドの割り当ての「 ド5 」が抜けてしまい、正しい方からコピーペースとしても内容が正しく書き換わりません。(全てのコマンドボタンの ド○ ) 対処法がさっぱりわからず困っております。 どなたか解決方法を知って見える方、アドバイスをいただけたらうれしいです。よろしくお願いいたします。
- ベストアンサー
- その他(プログラミング・開発)
- vbaで、postgresqlアクセス問題
vbaで、postgresqlアクセス問題: データベースに、データは ***0000, でも、vbaで、取得したのは ****.四つの0が自動に、削除されました。 例: postgresqlに、 40000 ⇒ vbaで、取得した: 4 vbaソース: Option Explicit Sub subPgGetData() Dim adoCn As New ADODB.Connection On Error GoTo ErrLogin: With adoCn .Provider = "PostgreSQL OLE DB Provider" .Properties("Data Source") = Range("B1").Value .Properties("Location") = Range("B2").Value .Properties("User ID") = Range("B3").Value .Properties("Password") = Range("B4").Value .Open End With On Error GoTo 0 Dim adoRs As New ADODB.Recordset On Error GoTo ErrSql: adoRs.Open Range("B6").Value, adoCn, adOpenForwardOnly, adLockReadOnly On Error GoTo 0 Workbooks.Add Cells.CopyFromRecordset adoRs Cells.Columns.AutoFit adoRs.Close: Set adoRs = Nothing adoCn.Close: Set adoCn = Nothing Exit Sub ErrLogin: MsgBox "" & vbCrLf & Err.Number & vbCrLf & Err.Description Set adoCn = Nothing Exit Sub ErrSql: MsgBox "" & vbCrLf & Err.Number & vbCrLf & Err.Description Set adoRs = Nothing adoCn.Close: Set adoCn = Nothing Exit Sub End Sub わかる方はご指示ください。 よろしくお願いします。
- 締切済み
- PostgreSQL
お礼
おおおーーすごい。できました! 参考までにW7以上、ACCESS2007以降であれば、以下リスクは問題ないのでしょうか。 (それとも随時いずれかが変わった際には、検証必要でしょうか) > 同じAccess、OSのバージョンであれば問題は発生しませんが、これらバージョンが異なればAccessが動作しないという現象が現れます。 この場合は、参照設定を最初に疑って下さい。