コンボボックスの値をAccess側に持ちたくなかったのでOracleDBにADO接続しRecordSetをコンボボックスの値とする方法。
参照設定:Microsoft ActiveX Data Objects 6.1 Library
OracleのSQL文はテーブルtEiajEdiSqlとしてコンボボックスの抽出KBNとしてはSII
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
Public Sub procCombSirSet() Set accCon = CurrentPrject.Connection Set oraCon = New ADODB.Connection Set oraRs = New ADODB.Recordset Set mForm = Forms(fmMain) 'ローカルのテーブルからOracleに渡すSQL文を取得 strSql = "" strSql = "SELECT SQLMOJI FROM tEiajEdiSql WHERE KBN = 'SII'" Set accRs = accCon.Execute(strSql) strOraSql = "" strOraSql = accRs.Fields("SQLMOJI").Value 'Oracleに接続 strDsn = "DSN=" & gstrDsn & ";UID=" & gstrUserID & ";PWD=" & gstrPassword oraCon.ConnectionString = strDsn oraCon.Open oraRs.Open strOraSql, oraCon 'コンボ値をRecordsetより行う mForm.cmbSircd.RowSource = oraRs.GetString(adClipString, , ";", ";") 'プロシージャ終了処理 accRs.Close: accCon.Close Set accRs = Nothing: Set accCon = Nothing oraRs.Close: oraCon.Close Set oraRs = Nothing: Set oraCon = Nothing Set mForm = Nothing End Sub |
値集合タイプ=値リストに設定しないと当然ながらエラー(ここではまりました)
赤枠内がテーブル/クエリになっており上記コードのみではエラー(>o<)
プロパティシートで値リストに指定するも有りだしコードに書いてしまうのも有り
Me.cmbSircd.RowSourceType = "Value List"
コメント