|
Программирование >> Разработка пользовательского интерфейса
Свойства запроса Общие I □ писание........................ Строка подключения ODBC......... pDBC;DSN=superbase;SourceDB Возврат записей.................. Да Таблица сообщений............... Нет Время ожидания ODBC............. GO Рис. 8.10. Среди других свойств следует обратить внимание на Возврат записей. Если вы собираетесь использовать запросы определения данных, то установите значение этого свойства равным Нет . В Visual Basic визуальное создание pass-through запросов не доступно при работе с Data Manager. Для того чтобы создавать запросы pass-through программно, используются объекты QueryDef. Далее будет разобран небольшой пример, созданный с помощью Visual Basic и использующий pass-through запросы для работы с внешними данными. Приложение состоит из одной формы, которая представлена на рис. 8.11. Щ Forml recN П Account Summa Forward 11000 Back Save Рис. 8.11. Данная форма при загрузке использует SQL pass-through запрос для создания набора данных, который мы можем просматривать и редактировать. сервере, например, использовать запросы модификации. Важным аргументом в пользу использования SQL pass-through запросов является, как уже было сказано выше, более высокая скорость выполнения, но, помимо этого, с помощью SQL pass-through вам доступны не только команды выборки, но и команды определения данных, возможность запускать хранимые процедуры. В итоге вы получаете, в зависимости от данных вам прав, довольно значительные возможности по управлению данными на сервере. По большому счету, визуально запросы pass-through не создаются, но какие-то элементы автоматизации присутствуют. Для того чтобы создать запрос с помощью Конструктора Запросов, перейдите на вкладку Запросы в контейнере базы данных. Затем в меню Запрос выберите команду Запрос SQL и опцию К серверу, которая в английской версии называется Pass-Through. После выбора этого пункта меню больше не будет доступен режим конструктора, то есть SQL команды придется набирать вручную. Не будет доступен даже Построитель. Единственное, что вы можете выбрать - это свойства вашего запроса, среди которых имя источника данных (Data Source). Чтобы получить доступ к диалогу свойств, выберите команду Свойства в меню Вид (рис. 8.10). Private Sub Form Load() Set Db = Workspaces(0).OpenDatabase( C:\SPORT\TOTEACH.MDB ) Проверка наличия в базе данных запроса с именем My QD1 , и если запрос присутствует, то удаляем его. For I = 0 To Db.QueryDefs.Count - 1 If Db.QueryDefs(I).Name = My QD1 Then Db.QueryDefs.Delete My QD1 Exit For End If Next I Мы создаем запрос или, на языке, DAO объект QueryDef и устанавливаем строку соединения. Set Qd1 = Db.CreateQueryDef( My QD1 ) Qd1.Connect = odbc;dsn=vfp34; Записываем SQL запрос и устанавливаем свойство ReturnsRecord (Возврат записей) равным Истине, так как наш запрос должен возвращать записи Qd1.SQL = SELECT * FROM Account Qd1.ReturnsRecords = True В этой части процедуры мы устанавливаем соответствие между полями набора данных, предварительно создав его, и объектами формы, а именно двумя текстовыми полями Set Rs = Db.OpenRecordset( My Qd1 , dbOpenSnapshot) Me.Text1 = Rs!account Me.Text2 = Rs!summa vtext1 = Rs!account vtext2 = Rs!summa Me.Text3 = Rs.RecordCount End Sub Как видно из примера, основное отличие pass-through запросов от остальных запросов - это наличие непустого свойства Connect и установка свойства ReturnRecords. Если вы отредактируете какое-либо из полей формы, то сможете записать изменения на сервер с помощью pass-through запроса. Такой сложный путь необходим ввиду того, что выборки, получаемые в результате выполнения pass-through запросов, не модифицируемы. Private Sub Command3 Click() For I = 0 To Db.QueryDefs.Count - 1 If Db.QueryDefs(I).Name = My QD2 Then Db.QueryDefs.Delete My QD2 Exit For End If Next I Set Qd2 = Db.CreateQueryDef( My QD2 ) Qd2.Connect = odbc;dsn=vfp34; Qd2.SQL = Update account set account= & Str(Me.Text1) & , summa = & Str(Me.Text2) & where account = & Str(vtext1) & and summa = & Str(vtext2) Qd2.ReturnsRecords = False Qd2.Execute Set Rs = Db.OpenRecordset( My Qd1 , dbOpenSnapshot) Rs.FindNext account= & Str(Me.Text1) & and summa= & Str(Me.Text2) Me.Text3 = Rs.RecordCount End Sub Обратите внимание, что свойство ReturnsRecords устанавливается равным False и на обращение к методу Execute объекта QueryDef. Но основным предназначением использования pass-through запросов все же считается не выборка данных, а запросы определения данных и выполнение хранимых процедур на сервере. В следующем примере создается таблица на внешнем по отношению к Access источнике данных (Data Source) Set Qd3= Db.CreateQueryDef( My QD3 ) Qd3.Connect = odbc;dsn=vfp34; Qd3.SQL = CREATE TABLE madebyaccess(field1 c(20)) Qd3.ReturnsRecords = False Qd3.Execute 8.4. Использование ODBC API для доступа к внешним данным ODBC API - прикладной интерфейс программиста для доступа к функциям ODBC. Структура ODBC была изложена в начале этой главы. В этом параграфе мы познакомимся с некоторыми функциями ODBC более подробно и рассмотрим примеры использования этих функций для доступа к данным на сервере. Кодирование с помощью ODBC значительно сложнее, но выигрыш в скорости может быть существенным. Здесь следует отметить, что наибольший выигрыш в производительности достигается при доступе к базам данным ODBC. Если же вы попытаетесь с помощью данного метода улучшить показатели доступа к данным, к которым Access обращается с помощью ISAM -последовательного индексного доступа к данным, то результат будет не столь хорош, как хотелось бы, а иногда и совсем плох. Для того чтобы воспользоваться функциями ODBC API, их необходимо подключить с помощью команды Declare. ODBC API объявления Declare Function oSQLAllocEnv Lib odbc32.dll Alias SQLAllocEnv (phenv As Long) As Integer Declare Function oSQLAllocConnect Lib odbc32.dll Alias SQLAllocConnect (ByVal henv As Long, phdbc As Long) As Integer Declare Function oSQLConnect Lib odbc32.dll Alias SQLConnect (ByVal hdbc As Long, ByVal szDSN As String, ByVal cbDSN As Integer, ByVal szUID As String, ByVal cbUID As Integer, ByVal szAuthStr As String, ByVal cbAuthStr As Integer) As Integer Declare Function oSQLAllocStmt Lib odbc32.dll Alias SQLAllocStmt (ByVal hdbc As Long, pHstmt As Long) As Integer Четыре функции, которые приведены выше, служат для установки указателя для окружения, соединения, утверждения и установления связи с приложением - сервером. Установка указателя с перечисленными объектами - необходимая процедура для дальнейших действий, которые вы планируете совершить, используя соединение, построенное с помощью ODBC API. Причем вызов этих функций должен происходить в том порядке, в каком они перечислены выше. Далее приводится пример использования этих функций для построения процедуры, которая соединит вас с источником данных. Причем вы не связаны рамками Access или Visual Basic, подойдет любой продукт, который поддерживает доступ к функциям, хранящимся в динамически подсоединяемых библиотеках DLL. Перед использованием этой функции необходимо определить структуру следующего типа (в языках, которые не могут создавать типов, придумайте что-нибудь другое, выход всегда есть): Type ORecordSet lngHenv As Long Указатель окружения lngHdbc As Long Указатель соединения lngHstmt As Long Указатель утверждения lngHstmtUpdate As Long Указатель используемый для изменений и удалений intColumns As Integer Возвращаемые колонки lngRows As Long Возвращаемые записи lngRowCount As Long Число записей для операций со многими записями lngRowSetSize As Long Размер набора записей в курсоре lngMaxRows As Long Максимальное число возвращаемых записей lngMaxWidth As Long Максимальная ширина поля lngCursor As Long Тип курсора lngConcur As Long Тип совпадения EOF As Boolean Указывает конец файла BOF As Boolean Указывает начало файла lngFirstRow As Long Первая запись в курсоре
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |