Программирование >>  Разработка пользовательского интерфейса 

1 ... 90 91 92 [ 93 ] 94 95 96 ... 147


Свойства запроса

Общие 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 Первая запись в курсоре



1 ... 90 91 92 [ 93 ] 94 95 96 ... 147

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика