Уроки Iczelion'а




Урок 5. ODBC пример - часть 5


АНАЛИЗ start: invoke GetModuleHandle, NULL mov hInstance,eax call GetProgramPath

  Когда программа стартует, она получает описатель экземпляра, затем обнаруживает свой собственный путь. Это делается с расчётом на то, что база данных, test.mdb, находится в той же папке, что и программа. GetProgramPath proc invoke GetModuleFileName, NULL,addr ProgPath,sizeof ProgPath std mov edi,offset ProgPath add edi,sizeof ProgPath-1 mov al,"\" mov ecx,sizeof ProgPath repne scasb cld mov byte ptr [edi+2],0 ret GetProgramPath endp

  Функция GetProgramPath вызывает GetModuleFileName, чтобы получить полный путь и имя программы. После этого мы ищем последний символ "\" в этом пути, чтобы отделить имя файла от пути заменяя имя файла нулём. Таким образом мы получили путь к программе в ProgPath.

  Программа затем отображает основное диалоговое окно, используя DialogBoxParam. Сначала, как только основное диалоговое окно загружается, мы получаем дескрипторы меню и контрола listview. Затем создаём три столбца в элементе управления listview (поскольку мы знаем заблаговременно, что множество результатов состоит из трех столбцов. Далее мы переходим к заполнению таблицы созданной на первом шаге.)

  После этого мы ждем действия пользователя. Если пользователь выбирает "connect" из меню, он вызывает функцию ODBCConnect ODBCConnect proc hDlg:DWORD invoke SQLAllocHandle, SQL_HANDLE_ENV, SQL_NULL_HANDLE, addr hEnv .if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO

  Первое, что мы делаем это выделяем память для идентификатора окружения, используя SQLAllocHandle: invoke SQLSetEnvAttr, hEnv,SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3,0 .if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO

  После того как мы получили ид. окружения, мы устанавливаем его параметры сообщая о том, что мы будем использовать синтаксис ODBC 3.x вызывая SQLSetEnvAttr: invoke SQLAllocHandle, SQL_HANDLE_DBC, hEnv, addr hConn .if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO

  Если все идет хорошо, то мы можем начать соединение выделив память для идентификатора соединения, используя SQLAllocHandle: invoke lstrcpy,addr ConnectString,addr strConnect invoke lstrcat,addr ConnectString, addr ProgPath invoke lstrcat, addr ConnectString,addr DBName




Содержание  Назад  Вперед