Сохранение значений свойств для ActiveX Control - VB
Формулировка задачи:
Всем доброго здоровичка! Прошу помощи!!!
Создал элемент управления для доступа и работы с БД. Для сохранения значений свойств его в режиме разработки использую PropertyBag. При однократном использовании *.ocx в проекте все работает нормально. Если же добавлять его на несколько форм одного проекта, то свойства в режиме разработки вроде как сохраняются, но в режиме выполнения используется первое активизированное значение элемента управления.
В чем дело не пойму! Помогите кто чем сможет!
Создал элемент управления для доступа и работы с БД. Для сохранения значений свойств его в режиме разработки использую PropertyBag. При однократном использовании *.ocx в проекте все работает нормально. Если же добавлять его на несколько форм одного проекта, то свойства в режиме разработки вроде как сохраняются, но в режиме выполнения используется первое активизированное значение элемента управления.
В чем дело не пойму! Помогите кто чем сможет!
Решение задачи: «Сохранение значений свойств для ActiveX Control»
textual
Листинг программы
<font color="blue">Option</font> <font color="blue">Explicit</font> <font color="blue">Dim</font> <font color="blue">WithEvents</font> mrstMain <font color="blue">As</font> ADODB.Recordset <font color="blue">Dim</font> <font color="blue">WithEvents</font> mcnnMain <font color="blue">As</font> ADODB.Connection <font color="00AA00">'Модуль класса для работы с ini-файлами</font> <font color="blue">Dim</font> clsReadINI <font color="blue">As</font> clsINIDLL.clsINI <font color="00AA00">'Переменные для хранения значений свойств</font> <font color="blue">Private</font> sUDLFileName <font color="blue">As</font> <font color="blue">String</font>, sTable <font color="blue">As</font> <font color="blue">String</font>, sSQLFileName <font color="blue">As</font> <font color="blue">String</font>, sSQLFilePath <font color="blue">As</font> <font color="blue">String</font> <font color="blue">Const</font> sSQLFileNameDefault = <font color="teal">"{Имя файла}.sql"</font>, sTableDefault = <font color="teal">"{Имя таблицы}"</font> <font color="blue">Private</font> <font color="blue">Sub</font> OpenRecordset() <font color="blue">On</font> <font color="blue">Error</font> <font color="blue">GoTo</font> opRsErr <font color="blue">If</font> mcnnMain <font color="blue">Is</font> <font color="blue">Nothing</font> <font color="blue">Then</font> <font color="blue">Set</font> mcnnMain = <font color="blue">New</font> ADODB.Connection mcnnMain.CursorLocation = adUseClient mcnnMain.ConnectionString = sUDLFileName mcnnMain.<font color="blue">Open</font> <font color="blue">End</font> <font color="blue">If</font> <font color="blue">If</font> mrstMain <font color="blue">Is</font> <font color="blue">Nothing</font> <font color="blue">Then</font> <font color="blue">Set</font> mrstMain = <font color="blue">New</font> ADODB.Recordset mrstMain.<font color="blue">Open</font> Table, mcnnMain, adOpenKeyset, _ adLockOptimistic, adCmdTable <font color="blue">If</font> <font color="blue">Not</font> (mrstMain.BOF <font color="blue">And</font> mrstMain.EOF) <font color="blue">Then</font> mrstMain.MoveFirst <font color="blue">End</font> <font color="blue">If</font> <font color="blue">Exit</font> <font color="blue">Sub</font> opRsErr: MsgBox Err.Description, vbOKOnly + vbExclamation, <font color="teal">"Îøèáêà âûïîëíåíèÿ"</font> <font color="blue">End</font> <font color="blue">Sub</font> <font color="blue">Private</font> <font color="blue">Sub</font> CloseRecordset() <font color="blue">On</font> <font color="blue">Error</font> <font color="blue">GoTo</font> clsRsErr <font color="blue">If</font> mrstMain.State <> adStateClosed <font color="blue">Then</font> mrstMain.<font color="blue">Close</font> <font color="blue">Set</font> mrstMain = <font color="blue">Nothing</font> <font color="blue">If</font> mcnnMain.State <> adStateClosed <font color="blue">Then</font> mcnnMain.<font color="blue">Close</font> <font color="blue">Set</font> mcnnMain = <font color="blue">Nothing</font> <font color="blue">Exit</font> <font color="blue">Sub</font> clsRsErr: MsgBox Err.Description, vbOKOnly + vbExclamation, <font color="teal">"Îøèáêà âûïîëíåíèÿ"</font> <font color="blue">End</font> <font color="blue">Sub</font> <font color="00AA00">'Импорт данных в Excel</font> <font color="blue">Private</font> <font color="blue">Sub</font> cmdImpExcel_Click() <font color="blue">On</font> <font color="blue">Error</font> <font color="blue">GoTo</font> err_import <font color="blue">Dim</font> ImportExcel <font color="blue">As</font> impExcelDLL.impExcelClass <font color="blue">Dim</font> cn <font color="blue">As</font> ADODB.Connection <font color="blue">Dim</font> rs <font color="blue">As</font> ADODB.Recordset <font color="blue">Dim</font> myQuery <font color="blue">As</font> <font color="blue">String</font> <font color="blue">Set</font> rs = <font color="blue">New</font> ADODB.Recordset modOpenSQLFile.openSQLFile sSQLFilePath, sSQLFileName <font color="00AA00">'чтение данных (sql-запрос) из файла</font> myQuery = sSQLFileContentFull rs.<font color="blue">Open</font> myQuery, mcnnMain <font color="00AA00">'непосредственно импорт данных в Excel</font> <font color="blue">Set</font> ImportExcel = <font color="blue">New</font> impExcelDLL.impExcelClass ImportExcel.Recordset = rs ImportExcel.ImportExcel <font color="blue">Set</font> rs = <font color="blue">Nothing</font> <font color="blue">Set</font> cn = <font color="blue">Nothing</font> <font color="blue">Exit</font> <font color="blue">Sub</font> err_import: MsgBox Err.Description, vbOKOnly + vbExclamation, <font color="teal">"Îøèáêà âûïîëíåíèÿ"</font> <font color="blue">End</font> <font color="blue">Sub</font> <font color="blue">Private</font> <font color="blue">Sub</font> UserControl_GetDataMember(DataMember <font color="blue">As</font> <font color="blue">String</font>, Data <font color="blue">As</font> <font color="blue">Object</font>) <font color="blue">If</font> DataMember = <font color="teal">"Main"</font> <font color="blue">Then</font> <font color="blue">Set</font> Data = mrstMain <font color="blue">Else</font> MsgBox <font color="teal">"DataMember"</font> & DataMember & <font color="teal">"не найден"</font> <font color="blue">End</font> <font color="blue">If</font> <font color="blue">End</font> <font color="blue">Sub</font> <font color="00AA00">''инициализация объекта</font> <font color="blue">Private</font> <font color="blue">Sub</font> UserControl_Initialize() <font color="blue">On</font> <font color="blue">Error</font> <font color="blue">GoTo</font> err_ini InitProperties OpenRecordset DataMembers.Add <font color="teal">"Main"</font> <font color="blue">Exit</font> <font color="blue">Sub</font> err_ini: <font color="blue">Exit</font> <font color="blue">Sub</font> <font color="blue">End</font> <font color="blue">Sub</font> <font color="00AA00">''его уничтожение</font> <font color="blue">Private</font> <font color="blue">Sub</font> UserControl_Terminate() DataMembers.Clear CloseRecordset <font color="blue">End</font> <font color="blue">Sub</font> <font color="00AA00">'Установка свойств объекта</font> <font color="00AA00">''чтение</font> <font color="blue">Public</font> <font color="blue">Property</font> <font color="blue">Get</font> ConnectionString() <font color="blue">As</font> <font color="blue">String</font> ConnectionString = sUDLFileName <font color="blue">End</font> <font color="blue">Property</font> <font color="00AA00">''запись</font> <font color="blue">Public</font> <font color="blue">Property</font> <font color="blue">Let</font> ConnectionString(<font color="blue">ByVal</font> s_NewFileName <font color="blue">As</font> <font color="blue">String</font>) sUDLFileName = s_NewFileName PropertyChanged ConnectionString <font color="blue">End</font> <font color="blue">Property</font> <font color="blue">Public</font> <font color="blue">Property</font> <font color="blue">Get</font> Table() <font color="blue">As</font> <font color="blue">String</font> Table = sTable <font color="blue">End</font> <font color="blue">Property</font> <font color="blue">Public</font> <font color="blue">Property</font> <font color="blue">Let</font> Table(<font color="blue">ByVal</font> s_NewTable <font color="blue">As</font> <font color="blue">String</font>) sTable = s_NewTable PropertyChanged Table <font color="blue">End</font> <font color="blue">Property</font> <font color="blue">Public</font> <font color="blue">Property</font> <font color="blue">Get</font> SQLFileName() <font color="blue">As</font> <font color="blue">String</font> SQLFileName = sSQLFileName <font color="blue">End</font> <font color="blue">Property</font> <font color="blue">Public</font> <font color="blue">Property</font> <font color="blue">Let</font> SQLFileName(<font color="blue">ByVal</font> s_NewSQLFileName <font color="blue">As</font> <font color="blue">String</font>) sSQLFileName = s_NewSQLFileName PropertyChanged SQLFileName <font color="blue">End</font> <font color="blue">Property</font> <font color="blue">Public</font> <font color="blue">Property</font> <font color="blue">Get</font> SQLFilePath() <font color="blue">As</font> <font color="blue">String</font> SQLFilePath = sSQLFilePath <font color="blue">End</font> <font color="blue">Property</font> <font color="blue">Public</font> <font color="blue">Property</font> <font color="blue">Let</font> SQLFilePath(<font color="blue">ByVal</font> s_NewSQLFilePath <font color="blue">As</font> <font color="blue">String</font>) sSQLFilePath = s_NewSQLFilePath PropertyChanged SQLFilePath <font color="blue">End</font> <font color="blue">Property</font> <font color="00AA00">'Используем объект PropertyBag для:</font> <font color="00AA00">''чтения свойств</font> <font color="blue">Private</font> <font color="blue">Sub</font> UserControl_ReadProperties(PropBag <font color="blue">As</font> PropertyBag) SQLFileName = PropBag.ReadProperty(<font color="teal">"SQLFileName"</font>, sSQLFileNameDefault) Table = PropBag.ReadProperty(<font color="teal">"Table"</font>, sTableDefault) <font color="blue">End</font> <font color="blue">Sub</font> <font color="00AA00">''записи свойств</font> <font color="blue">Private</font> <font color="blue">Sub</font> UserControl_WriteProperties(PropBag <font color="blue">As</font> PropertyBag) PropBag.WriteProperty <font color="teal">"SQLFileName"</font>, sSQLFileName, sSQLFileNameDefault PropBag.WriteProperty <font color="teal">"Table"</font>, sTable, sTableDefault <font color="blue">End</font> <font color="blue">Sub</font> <font color="00AA00">'Инициализация значений свойств</font> <font color="blue">Private</font> <font color="blue">Sub</font> InitProperties() <font color="blue">Set</font> clsReadINI = <font color="blue">New</font> clsINIDLL.clsINI clsReadINI.INIFileName = <font color="teal">"C:\InLabControl\Program\InLabControl.ini"</font> ConnectionString = clsReadINI.GetPrivateINIString(<font color="teal">"Options"</font>, <font color="teal">"ConnectionString"</font>) SQLFilePath = clsReadINI.GetPrivateINIString(<font color="teal">"Options"</font>, <font color="teal">"SQLFilePath"</font>) <font color="blue">End</font> <font color="blue">Sub</font> <font color="00AA00">'<font color="teal">"Первичная"</font> инициализация свойств</font> <font color="blue">Private</font> <font color="blue">Sub</font> UserControl_InitProperties() SQLFileName = sSQLFileNameDefault Table = sTableDefault <font color="blue">End</font> <font color="blue">Sub</font>
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д