RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Глава 6. Примеры Connector/ODBC

Как только вы сформировали DSN, чтобы обеспечить доступ к базе данных, как вы получаете доступ и используете эту связь, зависит от приложения или языка программирования. Поскольку ODBC стандартизированный интерфейс, любое приложение или язык, который поддерживает ODBC, могут использовать DSN и соединиться с базой данных.

6.1. Основные шаги приложения Connector/ODBC

Взаимодействие с сервером MySQL из приложения, используя Connector/ODBC, как правило, включает следующие операции:

  • Настройка Connector/ODBC DSN.

  • Соединение с MySQL server.

    Это могло бы включать: установку обработчика окружения, выяснение версии ODBC, размещение обработчика соединения, связь с сервером и определение атрибутов соединения.

  • Запросы инициализации.

    Это могло бы включать: размещение обработчика запросов и установку их атрибутов.

  • Выполнение SQL-операторов.

    Это могло бы включать: подготовку и выполнение SQL-оператора или выполнение его непосредственно без подготовки.

  • Получение результата, в зависимости от типа запроса.

    Для SELECT / SHOW / Catalog API результаты могли бы включать: число столбцов, информацию о столбцах, получение строк и получение данных в буфера. Для Delete / Update / Insert результаты могли бы включать число задействованных строк.

  • Выполнение транзакций, передача или отмена.

  • Отсоединение от сервера.

    Это могло бы включать: разъединение связи и освобождение обработчиков.

Большинство запросов использует некоторое изменение этих шагов. Основные прикладные шаги также показывают в следующей диаграмме:

Рис. 6.1. Блок-схема программирования Connector/ODBC

Content is described in the surrounding text.

6.2. Пошаговое руководство к соединению с базой данных MySQL через Connector/ODBC

Типичная ситуация, где вы установили бы Connector/ODBC, должна получить доступ к базе данных на хосте Linux или Unix с машины Windows.

Как пример процесса, требуемого, чтобы настраивать доступ между двумя машинами, рассмотрим основные шаги. Эти инструкции предполагают, что вы соединяете с системой ALPHA от системы BETA с именем пользователя и паролем myuser и mypassword.

На системе ALPHA (сервер MySQL) выполняют эти шаги:

  1. Запустите сервер MySQL.

  2. Используйте GRANT, чтобы настроить учетку с именем пользователя myuser, который может соединиться от системы BETA, используя пароль myuser к базе данных test:

    GRANT ALL ON test.* to 'myuser'@'BETA' IDENTIFIED BY 'mypassword';
    

    Для получения дополнительной информации о привилегиях MySQL, обратитесь к Access Control and Account Management.

На системе BETA (клиент Connector/ODBC), выполните эти шаги:

  1. Настройте Connector/ODBC DSN с использованием параметров, которые соответствуют серверу, базе данных и информации аутентификации, что вы только что формировали на системе ALPHA.

    Параметр Значение Комментарий
    DSNremote_test Имя, чтобы определить связь.
    SERVERALPHA Адрес удаленного сервера.
    DATABASEtest Название базы данных по умолчанию.
    USERmyuser Имя пользователя для доступа к этой базе данных.
    PASSWORDmypassword Пароль для логина myuser.
  2. Используя ODBC-приложение, такое как Microsoft Office, соединяются с сервером MySQL, используя DSN, который вы только что создали. Если связь прерывается, используйте трассировку, чтобы исследовать процесс связи. Посмотрите раздел 5.8.

6.3. Connector/ODBC и сторонние утилиты ODBC

Как только вы сформировали свой Connector/ODBC DSN, можно получить доступ к базе данных MySQL через любое приложение, которое поддерживает интерфейс ODBC, включая языки программирования. Этот раздел содержит помощь при использовании Connector/ODBC с различными ODBC-совместимыми инструментами, включая Microsoft Word, Microsoft Excel и Adobe/Macromedia ColdFusion.

Connector/ODBC был проверен со следующими приложениями:

Разработчик Приложение Замечания
AdobeColdFusion Раньше Macromedia ColdFusion
BorlandC++ Builder
Builder 4
Delphi
Business ObjectsCrystal Reports
ClarisFilemaker Pro
CorelParadox
Computer AssociatesVisual Objects Также известно как CAVO
AllFusion ERwin Data Modeler
GuptaTeam Developer Ранее известный как Centura Team Developer, Gupta SQL/Windows
GensymG2-ODBC Bridge
InlineiHTML
LotusNotesВерсии 4.5 и 4.6
MicrosoftAccess
Excel
Visio Enterprise
Visual C++
Visual Basic
ODBC.NET Для C#, Visual Basic, C++
FoxPro
Visual Interdev
OpenOffice.orgOpenOffice.org
PerlDBD::ODBC
Pervasive SoftwareDataJunction
Sambar TechnologiesSambar Server
SPSSSPSS
SoftVelocityClarion
SQLExpressSQLExpress for Xbase++
SunStarOffice
SunSystemsVision
SybasePowerBuilder
PowerDesigner
theKompany.comData Architect

6.4. Connector/ODBC и Microsoft Access

Можно использовать базу данных MySQL с Microsoft Access, используя Connector/ODBC. База данных MySQL может использоваться в качестве источника импорта, экспортного источника или в качестве связанной таблицы для прямого использования в Access, таким образом, можно использовать Access как интерфейс к базе данных MySQL.

6.4.1. Экспорт из Access в MySQL

Удостоверьтесь, что информация, которую вы экспортируете в MySQL действительна для соответствующих типов данных MySQL. Значения, которые действительны в Access, но за пределами поддержанных типов данных MySQL, могут вызвать ошибку overflow.

Чтобы экспортировать таблицу из Access в MySQL, следуйте этим инструкциям:

  1. С открытой базой данных Access в правой части экрана показаны, среди прочего, все таблицы в базе данных, которые доступны для экспорта (если это не так, поправьте параметры настройки показа навигатора). Щелкните правой кнопкой мыши по таблице, которую вы хотите экспортировать, и в меню, которое появляется, выберите Export, ODBC Database.

    Рис. 6.2. Access: меню Export ODBC Database

    Content is described in the surrounding text.
  2. Откроется окно Export. Введите желаемое имя для таблицы после импорта в сервер MySQL и нажмите OK.

    Рис. 6.3. Ввод имени для экспортируемой таблицы

    Example Export dialog shows a table named "Cats" entered and ready to be
exported.
  3. Появится диалоговое окно Select Data Source, это перечисляет указанные источники данных для любых драйверов ODBC, установленных на вашем компьютере. Щелкните File Data Source или Machine Data Source и затем дважды щелкните по Connector/ODBC DSN, в который вы хотите экспортировать таблицу. Чтобы определить новый DSN для Connector/ODBC вместо этого, нажмите New и следуйте инструкциям в разделе 5.3 , дважды щелкните по новому DSN после того, как он будет создан.

    Рис. 6.4. Выбор базы данных ODBC

    Shows the Select Data Source dialog with the "Machine Data Source" tab
active and an example Data Source Name "MySQL 5.7" selected.

    Если источник данных ODBC, который вы выбрали, требует, чтобы вы авторизовались, ввежите login ID и пароль, затем нажмите OK.

  4. Появляется диалоговое окно с сообщением успеха, если экспорт успешен. В диалоговом окне вы можете сохранить экспортные шаги для легких повторений в будущем.

    Рис. 6.5. Сообщение об успехе

    Content is described in the surrounding text.

    Если вы видите следующее сообщение об ошибке вместо этого, когда вы пытаетесь экспортировать в Connector/ODBC DSN, это означает, что вы не выбрали Database, чтобы соединиться с ней, когда вы определили или авторизовались в DSN. Повторно сформируйте DSN и определите Database (см. раздел 5.3) или выберите Database, когда вы авторизовались в DSN.

    Рис. 6.6. Ошибка: Database Not Selected

    Shows the error described in the surrounding text of this figure for the
error containing the text "ODBC -- call failed" and "No database selected".

6.4.2. Импорт из MySQL в Access

Следуйте этим инструкциям:

  1. Откройте базу данных Access, в которую хотите импортировать данные MySQL.

  2. Во вкладке External Data выберите ODBC Database.

    Рис. 6.7. External Data: ODBC Database

    Content is described in the surrounding text.
  3. В диалоге Get External Data выберите Import the source data into a new table in the current database и нажмите OK.

    Рис. 6.8. Get External Data: ODBC Database

    Shows the "Get External Data" dialog with two options: Import the source
data into a new table in the current database (selected), and Link to the
data source by creating a linked table.


  4. Откроется диалог Select Data Source. Это перечисляет указанные источники данных для любых драйверов ODBC, установленных на вашем компьютере. Щелкните File Data Source или Machine Data Source и затем дважды щелкните по Connector/ODBC DSN, из которого вы хотите импортировать свои данные. Чтобы определить новый DSN для Connector/ODBC вместо этого, нажмите New и следуйте инструкциям в разделе 5.3 , дважды щелкните по новому DSN после того, как он будет создан.

    Рис. 6.9. Диалог Select Data Source

    Shows the "Select Data Source" dialog with two tabs: File Data Source
and Machine Data Source. The Machine Data Source tab is selected and displays
three columns: Data Source Name, Type, Description. The selected row has
"MySQL 5.7" defined as the Data Source Name, and "System" as the Type.

    Если источник данных ODBC, который вы выбрали, требует, чтобы вы авторизовались, введите данные и нажмите OK.

  5. Microsoft Access соединяется с сервером MySQL и показывает список таблиц (объекты), которые можно импортировать. Выберите таблицы , которые вы хотите импортировать из этого диалога объектов импорта (или нажмите Select All), затем нажмите OK.

    Рис. 6.10. Диалог Import Objects

    Content is described in the surrounding text.
    • Если никакие таблицы не показаны, это могло бы быть потому, что вы не выбрали Database, когда вы определили или авторизовались в DSN. Повторно сформируйте DSN и определите Database (см. раздел 5.3) или выберите Database, когда вы авторизовались в DSN.

    • Если у вашей базы данных Access уже есть таблица с тем же самым именем как та, что вы импортируете, Access добавит число к названию импортированной таблицы.

  6. Диалоговое окно появляется с сообщением успеха, если импорт успешен. В диалоговом окне вы можете сохранить шаги импорта для легких повторений в будущем.

    Рис. 6.11. Получены внешние данные

    The Save Import Steps dialog shows a checkbox option titled
"Save import steps."

6.4.3. Microsoft Access как интерфейс MySQL

Можно использовать Microsoft Access в качестве интерфейса к MySQL, связывая таблицы в базе данных Microsoft Access с таблицами, которые существуют в базе данных MySQL. Когда запрос требует таблицу в Access, ODBC используется, чтобы выполнить запрос на базе данных MySQL.

Создать связанную таблицу:

  1. Откройте базу данных Access, которую вы хотите связать с MySQL.

  2. На вкладке External Data выберите ODBC Database.

    Рис. 6.12. Внешние данные: базы данных ODBC

    Content is described in the surrounding text.
  3. В диалоге Get External Data выберите Link to the data source by creating a linked table и нажмите OK.

    Рис. 6.13. Связь с базой данных ODBC

    Shows the "Get External Data" dialog with two options:
Import the source data into a new table in the current database, and Link to
the data source by creating a linked table (selected).


  4. В диалоге Select Data Source перечисляются указанные источники данных для любых драйверов ODBC, установленных на вашем компьютере. Щелкните File Data Source или Machine Data Source и затем дважды щелкните по Connector/ODBC DSN, с которым вы хотите связать свою таблицу. Чтобы определить новый DSN для Connector/ODBC вместо этого, нажмите New и следуйте инструкциям в разделе 5.3 , дважды щелкните по новому DSN после того, как он будет создан.

    Рис. 6.14. Выбор базы данных

    Shows the Select Data Source dialog with two tabs: "File Data Source"
and "Machine Data Source." The Machine Data Source tab is selected and
displays three columns: Data Source Name, Type, Description.
The selected row has "MySQL 5.7" defined as the Data Source Name, and
"System" as the Type.

    Если источник данных ODBC, который вы выбрали, требует, чтобы вы авторизовались, введите данные и нажмите OK.

  5. Microsoft Access соединяется с сервером MySQL и показывает список таблиц, с которыми можно связаться. Выберите таблицы (или нажмите Select All) и нажмите OK.

    Рис. 6.15. Диалог Link Tables

    Content is described in the surrounding text.
    • Если нет таблиц для выбора, это могло бы быть потому, что вы не выбрали Database, чтобы соединиться, когда определили или авторизовались в DSN. Повторно сформируйте DSN и определите Database (см. раздел 5.3) или выберите Database, когда вы авторизовались в DSN.

    • Если у вашей базы данных в Access уже есть таблица с тем же самым именем, Access добавит число к названию новой связанной таблицы.

  6. Если Microsoft Access будет неспособен определить уникальный идентификатор записи для таблицы автоматически, это попросит, чтобы вы выбрали столбец (или комбинацию столбцов), чтобы использовать, чтобы однозначно определить каждую строку от исходной таблицы. Выберите столбец и нажмите OK.

    Рис. 6.16. Выбор уникального идентификатора записи

    Shows the "Select Unique Record Identifier" dialog with a list of fields
in the selected table. In this example, the table name is cats2 and the
unique fields are CatID, CatName, OwnerID, and Birthday.
The available buttons are "OK" and "Cancel".

Как только процесс был закончен, можно построить интерфейсы и запросы к связанным таблицам, как для любой базы данных Access.

Используйте следующую процедуру, чтобы рассмотреть связи или освежить их, когда структуры связанных таблиц изменятся.

  1. Откройте базу данных, которая содержит связи с MySQL.

  2. На вкладке External Data выберите Linked Table Manager.

    Рис. 6.17. Linked Table Manager

    Shows "Linked Table Manager" under the "External Data" tab in Microsoft
Access. Underneath are two panes: The All Access Objects pane shows the
available tables, and the second pane shows data from the table.
The "cats2" table is selected.
  3. Выберите опцию для таблиц, связи которых вы хотите освежить. Нажмите OK, чтобы освежить связи.

    Рис. 6.18. Дилаог Linked Table Manager

    Shows the "Linked Table Manager" dialog with the cats2 table selected
with its associated checkbox selected.

Microsoft Access подтверждает успешное обновление или возвращает сообщение об ошибке, в этом случае необходимо обновить связи по шагам ниже.

Чтобы изменить путь для связанных таблиц :

  1. Откройте базу данных, которая содержит связанные таблицы.

  2. На вкладке External Data выберите Linked Table Manager.

  3. В Linked Table Manager выберите опцию Always Prompt For A New Location.

  4. Выберите опцию для таблиц, связи которых вы хотите изменить, затем нажмите OK.

  5. В диалоге Select Data Source выберите новый DSN и базу данных с ним.

6.5. Connector/ODBC и Microsoft Word или Excel

Можно использовать Microsoft Word и Microsoft Excel, чтобы получить доступ к информации от базы данных MySQL, используя Connector/ODBC. В Microsoft Word это средство является самым полезным, импортируя данные для автоматического составления стандартных писем, или для таблиц и данных, которые будут включены в отчеты. В Microsoft Excel можно выполнить запросы на сервере MySQL и импортировать данные непосредственно в рабочий лист Excel, представив данные как серию строк и столбцов.

С обоими приложениями к данным получают доступ и импортируют через Microsoft Query, который позволяет вам выполнить запрос через источник ODBC. Вы используете Microsoft Query, чтобы построить SQL-оператор, который будет выполнен, выбирая таблицы, поля, критерии выбора и порядок сортировки. Например, чтобы вставить информацию из таблицы в базу данных World в электронную таблицу Excel, используя образцы DSN, показанные в главе 5:

  1. Создайте новый рабочий лист.

  2. Из меню Data выберите Import External Data и New Database Query.

  3. Запустится Microsoft Query . Необходимо выбрать источник данных, выбрав существующее имя источника данных.

    Рис. 6.19. Microsoft Query Wizard

    Shows the initial "Choose Data Source" dialog in the Microsoft
Query wizard. The three available tabbed sections are "Databases",
"Queries", and "OLAP Cubes". The "Databases"
tab is selected that shows the following fields: "New Data Source",
"dBASE Files", "Excel Files", "MS Access
Database" and "Test World" where "Test World" is
selected. The "Use the Query Wizard to create/edit queries"
option's checkbox is selected.
  4. В Query Wizard выберите столбцы, чтобы импортировать. Список таблиц, доступных пользователю, через DSN, показывают слева, столбцы, которые будут добавлены к вашему запросу, показывают справа. Столбцы, которые вы выбираете, эквивалентны тем в первом разделе запроса SELECT. Нажмите Next.

    Рис. 6.20. Выбор столбцов

    Content is described in the surrounding text.
  5. Можно отфильтровать строки в запросе (эквивалент WHERE), используя диалог Filter Data.

    Рис. 6.21. Microsoft Query Wizard: Filter Data

    The left pane titled "Column to filter" lists available
columns, and the right pane titled "Only include rows where" with
six select boxes each with "And" and "Or" options for
defining the filter's WHERE clause behavior.
  6. Выберите (дополнительный) порядок сортировки для данных. Это эквивалентно использованию ORDER BY в вашем SQL-запросе. Можно выбрать до трех областей для сортировки информации, возвращенной запросом.

    Рис. 6.22. Microsoft Query Wizard: порядок сортировки

    Shows sorting options "Sort by" and "Then by", each with "Ascending" and
"Descending" options.
  7. Выберите место назначения для своего запроса. Можно выбрать возвратить данные Microsoft Excel, где можно выбрать рабочий лист и ячейку, где данные будут вставлены, можно продолжить рассматривать запрос и результаты в Microsoft Query, где можно отредактировать SQL-запрос и дальнейший фильтр и отсортировать возвращенную информацию, или можно создать OLAP Cube из запроса, который может тогда использоваться непосредственно в Microsoft Excel. Нажмите Finish.

    Рис. 6.23. Microsoft Query Wizard: выбор назначения

    Content is described in the surrounding text.

Тот же самый процесс может использоваться, чтобы импортировать данные в документ Word, где данные будут вставлены как таблица. Это может использоваться в целях слияния (где полевые данные прочитаны из таблицы Word), или где вы хотите включать данные в рамках отчета или другого документа.

6.6. Connector/ODBC и Crystal Reports

Crystal Reports может использовать ODBC DSN, чтобы соединиться с базой данных, чтобы извлечь данные и информацию для сообщения о целях.

Есть известная проблема с определенными версиями Crystal Reports, где приложение не способно открыть и просмотреть таблицы и поля посредством связи ODBC. Перед использованием Crystal Reports с MySQL, пожалуйста, гарантируйте, чтобы у вас было обновление последней версии, включая любые пакеты обновления и текущие исправления. Для получения дополнительной информации об этой проблеме посмотрите Business) Objects Knowledgebase.

Например, чтобы создать простой отчет с перекрестными ссылками в рамках Crystal Reports XI:

  1. Создайте DSN с использованием Data Sources (ODBC). Можно определить полную базу данных, включая имя пользователя и пароль или можно построить основной DSN и использовать Crystal Reports, чтобы установить имя пользователя и пароль.

    В целях этого примера был создан DSN, который обеспечивает связь с базой данных MySQL Sakila.

  2. Откройте Crystal Reports и создайте новый проект или откройте существующий, в который вы хотите вставить данные из своего источника данных MySQL.

  3. Запустите Cross-Tab Report Wizard, щелкнув по выбору на Start Page. Разверните папку Create New Connection, затем ODBC (RDO), чтобы получить список источников данных ODBC.

    Вас попросят выбрать источник данных.

    Рис. 6.24. Cross-Tab Report Creation Wizard

    Content is described in the surrounding text.
  4. Когда откроете папку ODBC (RDO), увидите экран Data Source Selection. Отсюда можно выбрать предварительно сконфигурированный DSN, открыть основанный на файле DSN или ввести строку подключения. Для этого примера будет использоваться предварительно сконфигурированный Sakila DSN.

    Если DSN содержит имя пользователя/пароль, или вы хотите использовать иной способ авторизации, нажмите Next, чтобы войти с именем пользователя и паролем, которые вы хотите использовать. Иначе нажмите Finish, чтобы продолжить выбор.

    Рис. 6.25. ODBC (RDO) Data Source Selection Wizard

    Three options include "Select Data Source" that displays a list of
selectable pre-configured Data Source Names, "Find File DSN" with a select
box to choose a file, and "Enter Connection String" to manually enter a
connection string.
  5. Вы будете возвращены в Cross-Tab Report Creation Wizard. Теперь необходимо выбрать базу данных и таблицы, которые вы хотите включить в ваш отчет. Для нашего примера мы расширим отобранную базу данных Sakila. Щелкните таблицу city и используйте кнопку >, чтобы добавить таблицу к отчету. Повторите действие с таблицей country. Альтернативно можно выбрать много таблиц и добавить их к отчету.

    Наконец, можно выбрать родительский ресурс Sakila и добавить табьлицы к отчету.

    Как только вы выбрали таблицы, нажмите Next.

    Рис. 6.26. Cross-Tab Report Creation Wizard с примером ODBC (RDO)

    Content is described in the surrounding text.
  6. Crystal Reports теперь прочитает определения таблицы и автоматически определит связи между таблицами. Идентификация связей между ними позволяет Crystal Reports автоматически искать и суммировать информацию на основе всех таблиц в базе данных, согласно вашему запросу. Если Crystal Reports неспособен выполнить соединение, можно вручную создать связи между полями в таблицах, которые вы выбрали.

    Нажмите на Next.

    Рис. 6.27. Cross-Tab Report Creation Wizard

    Example shows two linked tables named "city" and "country".
The left pane shows the two table objects as boxes with column names with a
line linking tables city to country. The right pane includes options to
"Auto-Arrange", "Auto-Link" by name or key, "Order Links", "Clear Links",
"Delete Link", "Link Options", and "Index Legend".
  7. Можно теперь выбрать столбцы и строки, чтобы включить в рамки отчета с перекрестными ссылками. Перетащите или примените кнопки >, чтобы добавить поля к каждой области отчета. В показанном примере мы сообщим относительно городов, организованных страной, включая количество городов в каждой стране. Если вы хотите просмотреть данные, выберите область и нажмите Browse Data....

    Нажмите Next, чтобы создать граф результатов. Так как мы не создаем граф из этих данных, нажмите Finish, чтобы произвести отчет.

    Рис. 6.28. Cross-Tab Report Creation Wizard: диалог Cross-Tab Selection

    Content is described in the surrounding text.

  8. Законченный отчет покажет образец вывода от базы данных-образца Sakila.

    Рис. 6.29. Cross-Tab Report Creation Wizard: итоговый отчет

    The generated final report example includes three columns,
from left-to-right: Country, City, and Total. Each country includes an
associated total, and a total of all countries is displayed on top in the
right-most column.

Как только связь ODBC была открыта в рамках Crystal Reports, можно просмотреть и добавить любые поля в доступных таблицах в отчеты.

6.7. Программирование Connector/ODBC

С подходящим менеджером ODBC и установленным драйвером Connector/ODBC любой язык программирования или окружающая среда, которая может поддержать ODBC, могут соединиться с базой данных MySQL через Connector/ODBC.

Это включает, но не ограничивается, языками Microsoft (включая Visual Basic, C# и такие интерфейсы, как ODBC.NET), Perl (через модуль DBI и драйвер DBD::ODBC).

6.7.1. Connector/ODBC с Visual Basic, используя ADO, DAO и RDO

Этот раздел содержит простые примеры использования Connector/ODBC с ADO, DAO и RDO.

6.7.1.1. ADO: rs.addNew, rs.delete и rs.update

Следующий пример ADO (ActiveX Data Objects) составляет таблицу table my_ado и демонстрирует использование rs.addNew, rs.delete и rs.update.

Private Sub myodbc_ado_Click()

Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field
Dim sql As String

'connect to MySQL server using Connector/ODBC
Set conn = New ADODB.Connection
conn.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};"_
     & "SERVER=localhost;"_
     & " DATABASE=test;"_
     & "UID=venu;PWD=venu; OPTION=3"
conn.Open

'create table
conn.Execute "DROP TABLE IF EXISTS my_ado"
conn.Execute "CREATE TABLE my_ado(id int not null primary key, name varchar(20)," _
             & "txt text, dt date, tm time, ts timestamp)"

'direct insert
conn.Execute "INSERT INTO my_ado(id,name,txt) values(1,100,'venu')"
conn.Execute "INSERT INTO my_ado(id,name,txt) values(2,200,'MySQL')"
conn.Execute "INSERT INTO my_ado(id,name,txt) values(3,300,'Delete')"

Set rs = New ADODB.Recordset
rs.CursorLocation = adUseServer

'fetch the initial table ..
rs.Open "SELECT * FROM my_ado", conn
Debug.Print rs.RecordCount
rs.MoveFirst
Debug.Print String(50, "-") & "Initial my_ado Result Set " & String(50, "-")
For Each fld In rs.Fields
  Debug.Print fld.Name,
Next
Debug.Print

Do Until rs.EOF
  For Each fld In rs.Fields
    Debug.Print fld.Value,
  Next
  rs.MoveNext
  Debug.Print
Loop
rs.Close

'rs insert
rs.Open "select * from my_ado", conn, adOpenDynamic, adLockOptimistic
rs.AddNew
rs!ID = 8
rs!Name = "Mandy"
rs!txt = "Insert row"
rs.Update
rs.Close

'rs update
rs.Open "SELECT * FROM my_ado"
rs!Name = "update"
rs!txt = "updated-row"
rs.Update
rs.Close

'rs update second time..
rs.Open "SELECT * FROM my_ado"
rs!Name = "update"
rs!txt = "updated-second-time"
rs.Update
rs.Close

'rs delete
rs.Open "SELECT * FROM my_ado"
rs.MoveNext
rs.MoveNext
rs.Delete
rs.Close

'fetch the updated table ..
rs.Open "SELECT * FROM my_ado", conn
Debug.Print rs.RecordCount
rs.MoveFirst
Debug.Print String(50, "-") & "Updated my_ado Result Set " & String(50, "-")
For Each fld In rs.Fields
  Debug.Print fld.Name,
Next
Debug.Print

Do Until rs.EOF
  For Each fld In rs.Fields
    Debug.Print fld.Value,
  Next
  rs.MoveNext
  Debug.Print
Loop
rs.Close
conn.Close
End Sub

6.7.1.2. DAO: rs.addNew, rs.update и скроллинг

Следующий пример DAO (Data Access Objects) составляет таблицу table my_dao, демонстрирует использование rs.addNew, rs.update и скроллинга набора результатов.

Private Sub myodbc_dao_Click()
Dim ws As Workspace
Dim conn As Connection
Dim queryDef As queryDef
Dim str As String

'connect to MySQL using MySQL ODBC 3.51 Driver
Set ws = DBEngine.CreateWorkspace("", "venu", "venu", dbUseODBC)
str = "odbc;DRIVER={MySQL ODBC 3.51 Driver};"_
      & "SERVER=localhost;"_
      & " DATABASE=test;"_
      & "UID=venu;PWD=venu; OPTION=3"
Set conn = ws.OpenConnection("test", dbDriverNoPrompt, False, str)

'Create table my_dao
Set queryDef = conn.CreateQueryDef("", "drop table if exists my_dao")
queryDef.Execute

Set queryDef = conn.CreateQueryDef("", "create table my_dao(Id INT AUTO_INCREMENT PRIMARY KEY, " _
    & "Ts TIMESTAMP(14) NOT NULL, Name varchar(20), Id2 INT)")
queryDef.Execute

'Insert new records using rs.addNew
Set rs = conn.OpenRecordset("my_dao")
Dim i As Integer

For i = 10 To 15
  rs.AddNew
  rs!Name = "insert record" & i
  rs!Id2 = i
  rs.Update
Next i
rs.Close

'rs update.
Set rs = conn.OpenRecordset("my_dao")
rs.Edit
rs!Name = "updated-string"
rs.Update
rs.Close

'fetch the table back...
Set rs = conn.OpenRecordset("my_dao", dbOpenDynamic)
str = "Results:"
rs.MoveFirst
While Not rs.EOF
  str = " " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2
  Debug.Print "DATA:" & str
  rs.MoveNext
Wend

'rs Scrolling
rs.MoveFirst
str = " FIRST ROW: " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2
Debug.Print str
rs.MoveLast
str = " LAST ROW: " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2
Debug.Print str
rs.MovePrevious
str = " LAST-1 ROW: " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2
Debug.Print str

'free all resources
rs.Close
queryDef.Close
conn.Close
ws.Close
End Sub

6.7.1.3. RDO: rs.addNew и rs.update

Следующий пример RDO (Remote Data Objects) составляет таблицу my_rdo и демонстрирует использование rs.addNew и rs.update.

Dim rs As rdoResultset
Dim cn As New rdoConnection
Dim cl As rdoColumn
Dim SQL As String

'cn.Connect = "DSN=test;"
cn.Connect = "DRIVER={MySQL ODBC 3.51 Driver};"_
             & "SERVER=localhost;"_
             & " DATABASE=test;"_
             & "UID=venu;PWD=venu; OPTION=3"
cn.CursorDriver = rdUseOdbc
cn.EstablishConnection rdDriverPrompt

'drop table my_rdo
SQL = "drop table if exists my_rdo"
cn.Execute SQL, rdExecDirect

'create table my_rdo
SQL = "create table my_rdo(id int, name varchar(20))"
cn.Execute SQL, rdExecDirect

'insert - direct
SQL = "insert into my_rdo values (100,'venu')"
cn.Execute SQL, rdExecDirect
SQL = "insert into my_rdo values (200,'MySQL')"
cn.Execute SQL, rdExecDirect

'rs insert
SQL = "select * from my_rdo"
Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect)
rs.AddNew
rs!id = 300
rs!Name = "Insert1"
rs.Update
rs.Close

'rs insert
SQL = "select * from my_rdo"
Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect)
rs.AddNew
rs!id = 400
rs!Name = "Insert 2"
rs.Update
rs.Close

'rs update
SQL = "select * from my_rdo"
Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect)
rs.Edit
rs!id = 999
rs!Name = "updated"
rs.Update
rs.Close

'fetch back...
SQL = "select * from my_rdo"
Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect)
Do Until rs.EOF
   For Each cl In rs.rdoColumns
       Debug.Print cl.Value,
   Next
   rs.MoveNext
   Debug.Print
Loop
Debug.Print "Row count="; rs.RowCount

'close
rs.Close
cn.Close
End Sub

6.7.2. Connector/ODBC с .NET

Этот раздел содержит простые примеры, которые демонстрируют использование драйверов Connector/ODBC с ODBC.NET.

6.7.2.1. Connector/ODBC с ODBC.NET и C# (C sharp)

Следующий образец составляет таблицу my_odbc_net и демонстрирует ее использование в C#.

/**
 * @sample: mycon.cs
 * @purpose : Demo sample for ODBC.NET using Connector/ODBC
 *
 **/

/* build command
 *
 *csc /t:exe
 */out:mycon.exe mycon.cs
 */r:Microsoft.Data.Odbc.dll
*/
using Console = System.Console;
using Microsoft.Data.Odbc;

namespace myodbc3
{
  class mycon
  {
    static void Main(string[] args)
    {
      try
      {
        //Connection string for Connector/ODBC 3.51
        string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" +
                             "SERVER=localhost;" +
                             "DATABASE=test;" +
                             "UID=venu;" +
                             "PASSWORD=venu;" +
                             "OPTION=3";
        //Connect to MySQL using Connector/ODBC
        OdbcConnection MyConnection = new OdbcConnection(MyConString);
        MyConnection.Open();
        Console.WriteLine("\n !!! success, connected successfully !!!\n");
        //Display connection information
        Console.WriteLine("Connection Information:");
        Console.WriteLine("\tConnection String:" +
                          MyConnection.ConnectionString);
        Console.WriteLine("\tConnection Timeout:" +
                          MyConnection.ConnectionTimeout);
        Console.WriteLine("\tDatabase:" + MyConnection.Database);
        Console.WriteLine("\tDataSource:" + MyConnection.DataSource);
        Console.WriteLine("\tDriver:" + MyConnection.Driver);
        Console.WriteLine("\tServerVersion:" + MyConnection.ServerVersion);
        //Create a sample table
        OdbcCommand MyCommand =
          new OdbcCommand("DROP TABLE IF EXISTS my_odbc_net", MyConnection);
        MyCommand.ExecuteNonQuery();
        MyCommand.CommandText =
          "CREATE TABLE my_odbc_net(id int, name varchar(20), idb bigint)";
        MyCommand.ExecuteNonQuery();

        //Insert
        MyCommand.CommandText =
          "INSERT INTO my_odbc_net VALUES(10,'venu', 300)";
        Console.WriteLine("INSERT, Total rows affected:" +
                          MyCommand.ExecuteNonQuery());;
        //Insert
        MyCommand.CommandText =
          "INSERT INTO my_odbc_net VALUES(20,'mysql',400)";
        Console.WriteLine("INSERT, Total rows affected:" +
                          MyCommand.ExecuteNonQuery());
        //Insert
        MyCommand.CommandText =
          "INSERT INTO my_odbc_net VALUES(20,'mysql',500)";
        Console.WriteLine("INSERT, Total rows affected:" +
                          MyCommand.ExecuteNonQuery());
        //Update
        MyCommand.CommandText = "UPDATE my_odbc_net SET id=999 WHERE id=20";
        Console.WriteLine("Update, Total rows affected:" +
          MyCommand.ExecuteNonQuery());
        //COUNT(*)
        MyCommand.CommandText = "SELECT COUNT(*) as TRows FROM my_odbc_net";
        Console.WriteLine("Total Rows:" + MyCommand.ExecuteScalar());

        //Fetch
        MyCommand.CommandText = "SELECT * FROM my_odbc_net";
        OdbcDataReader MyDataReader;
        MyDataReader =MyCommand.ExecuteReader();
        while (MyDataReader.Read())
        {
          if (string.Compare(MyConnection.Driver,"myodbc3.dll") == 0)
          {
             //Supported only by Connector/ODBC 3.51
             Console.WriteLine("Data:" + MyDataReader.GetInt32(0) + " " +
                               MyDataReader.GetString(1) + " " +
                               MyDataReader.GetInt64(2));
          } else {
            //BIGINTs not supported by Connector/ODBC
            Console.WriteLine("Data:" + MyDataReader.GetInt32(0) + " " +
                              MyDataReader.GetString(1) + " " +
                              MyDataReader.GetInt32(2));
          }
        }
        //Close all resources
        MyDataReader.Close();
        MyConnection.Close();
      }
      catch (OdbcException MyOdbcException) //Catch any ODBC exception.
      {
        for (int i=0; i < MyOdbcException.Errors.Count; i++)
        {
          Console.Write("ERROR #" + i + "\n" + "Message: " +
                        MyOdbcException.Errors[i].Message + "\n" +
                        "Native: " +
                        MyOdbcException.Errors[i].NativeError.ToString() +
                        "\n" + "Source: " +
                        MyOdbcException.Errors[i].Source + "\n" +
                        "SQL: " + MyOdbcException.Errors[i].SQLState + "\n");
        }
      }
    }
  }
}

6.7.2.2. Connector/ODBC с ODBC.NET и Visual Basic

Следующий образец составляет таблицу my_vb_net и использует ее в VB.

' @sample: myvb.vb
' @purpose : Demo sample for ODBC.NET using Connector/ODBC
'
' build command
'
' vbc /target:exe
' /out:myvb.exe
' /r:Microsoft.Data.Odbc.dll
' /r:System.dll
' /r:System.Data.dll
'
Imports Microsoft.Data.Odbc
Imports System

Module myvb
Sub Main()
Try
'Connector/ODBC 3.51 connection string
Dim MyConString As String = "DRIVER={MySQL ODBC 3.51 Driver};" & _
    "SERVER=localhost;" & _
    "DATABASE=test;" & _
    "UID=venu;" & _
    "PASSWORD=venu;" & _
    "OPTION=3;"

'Connection
Dim MyConnection As New OdbcConnection(MyConString)
MyConnection.Open()
Console.WriteLine("Connection State::" & MyConnection.State.ToString)

'Drop
Console.WriteLine("Dropping table")
Dim MyCommand As New OdbcCommand()
MyCommand.Connection = MyConnection
MyCommand.CommandText = "DROP TABLE IF EXISTS my_vb_net"
MyCommand.ExecuteNonQuery()

'Create
Console.WriteLine("Creating....")
MyCommand.CommandText = "CREATE TABLE my_vb_net(id int, name varchar(30))"
MyCommand.ExecuteNonQuery()

'Insert
MyCommand.CommandText = "INSERT INTO my_vb_net VALUES(10,'venu')"
Console.WriteLine("INSERT, Total rows affected:" & _
MyCommand.ExecuteNonQuery())

'Insert
MyCommand.CommandText = "INSERT INTO my_vb_net VALUES(20,'mysql')"
Console.WriteLine("INSERT, Total rows affected:" & _
MyCommand.ExecuteNonQuery())

'Insert
MyCommand.CommandText = "INSERT INTO my_vb_net VALUES(20,'mysql')"
Console.WriteLine("INSERT, Total rows affected:" & _
MyCommand.ExecuteNonQuery())

'Insert
MyCommand.CommandText = "INSERT INTO my_vb_net(id) VALUES(30)"
Console.WriteLine("INSERT, Total rows affected:" & _
MyCommand.ExecuteNonQuery())

'Update
MyCommand.CommandText = "UPDATE my_vb_net SET id=999 WHERE id=20"
Console.WriteLine("Update, Total rows affected:" & _
MyCommand.ExecuteNonQuery())

'COUNT(*)
MyCommand.CommandText = "SELECT COUNT(*) as TRows FROM my_vb_net"
Console.WriteLine("Total Rows:" & MyCommand.ExecuteScalar())

'Select
Console.WriteLine("Select * FROM my_vb_net")
MyCommand.CommandText = "SELECT * FROM my_vb_net"
Dim MyDataReader As OdbcDataReader
MyDataReader = MyCommand.ExecuteReader
While MyDataReader.Read
  If MyDataReader("name") Is DBNull.Value Then
     Console.WriteLine("id = " & _
     CStr(MyDataReader("id")) & "name = " & _
          "NULL")
  Else
    Console.WriteLine("id = " & _
    CStr(MyDataReader("id")) & "name = " & _
    CStr(MyDataReader("name")))
  End If
End While

'Catch ODBC Exception
Catch MyOdbcException As OdbcException
Dim i As Integer
Console.WriteLine(MyOdbcException.ToString)

'Catch program exception
Catch MyException As Exception
Console.WriteLine(MyException.ToString)
End Try
End Sub

Поиск

 

Найди своих коллег!

Вы можете направить письмо администратору этой странички, Алексею Паутову. mailto:alexey.v.pautov@mail.ru