Сохранение значений свойств для ActiveX Control - VB

Узнай цену своей работы

Формулировка задачи:

Всем доброго здоровичка! Прошу помощи!!!
Создал элемент управления для доступа и работы с БД. Для сохранения значений свойств его в режиме разработки использую 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>

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.929 из 5
Похожие ответы