If fldTitle=“Ком. предст.” Then
rstEmp.Edit
fldTitle=“Ком. агент”
rstEmp.Update
End If
rstEmp.MoveNext
Loop
rstEmp.Close
dbsSales.Close
End Sub
Создание запросов
Методв CreateQueryDef:
Set запрос = БД.CreateQueryDef ([имя] [, строка SQL])
- запрос - объектная переменная, в которых будет храниться ссылка на вновь создаваемый объект типа QueryDef
- БД - объектная переменная, хранящая ссылку на объект Database, в коором будет храниться создаваемый объект QueryDef
- имя - имя запроса
- строка SQL - выражение SQL, ..... объект QueryDef
Например,
Dim dbs As Database
Dim myqdf As QueryDef
SQL str = “Select * From Products”
SQL str = SQl str & “Where price >1000 and price <2000”
SQL str = SQL str “Order by ProductName”
Set myqdf = dbs Create QueryDef (“NewProducts”, SQL str)
Связь с другими приложениями Windows
VB позволяет использовать многозадачность Windows, позволяя активировать любое из заданных приложений, либо посылать напрямую команды активному приложению из проекта VB. Обмен информацией между приложениями Windows средствами VB осуществляется одним из трех способов:
1) использование буфера обмена Clipboard;
2) технологии DDE - динамический обмен данных;
3) технологии OLE - связывание и встраивание объектов.
Буфер обмена
Буфер обмена позволяет обмениваться текстовыми и графическими данными между несколькими приложениями с помощью операций вырезки - вставки.
Методы объекта Clipboard
Метод Clear - очищает буфер обмена перед его использованием, Clipboard.Clear
Метод SetText - посылает текстовую информацию, содержащуюся в строковой переменной или строковом выражении в буфер, уничтожая старую информацию.
Clipboard.SetText.StringData
Метод GetText - возвращает копию текста, хранящегося в буфере обмена (операция вставки). Этот метод используется как обычная функция:
txtUser.SelText= Clipboard.GetText( ) - вставляет содержимое буфера в текстовое поле.
При работе с буфером обмена и полями ввода используются операции выделения текста. Выделенному тексту присущи три свойства:
SelStart - номер позиции текста, с которой начинается выделение.
txt.User.SelStart = 0 - выделение текста с начала поля ввода.
SelLength - количество символов в выделенном фрагменте текста.
txtUser. SelLength = Len (txt.User.Text) - выделены все символы поля ввода.
SelText - выделенный фрагмент текста. Если текст не выделен, то = “ “
A$ = txtUser.SelText - переменная A$ примет значение выделенной строки.
Пример. Процедура копирования в буфер выделенного текста
Private Sub Copy_Click ()
Clipboard.SetText txtUser.SelText
Enb Sub
Операция вырезать:
Private Sub Cut_Click
Clipboard.SetText txtUser.SelText
txtUser.SelText = “ ”
Enb Sub
Операция вставки:
Private Sub Paste_Click
txtUser.Text = Clipboard.GetText( )
Enb Sub
Перенос графических изображений с помощью буфера обмена.
Чтобы правильно восстановить графическое изображение из буфера обмена, VB должен знать его тип.
Таблица типов данных буфера.
Символьные константы | Значение | Формат |
VbCFText | 1 | текст .txt |
VbCFBitmap | 2 | побитовое изображение .bmp |
VbCFMetafile | 3 | побитовое изображение .wmf |
VbCFDib | 8 | побитовое изображение .dib |
VbCFPalette | 9 | цветовая палитра |
Можно узнать тип данных в буфере с помощью метода GetFormat:
Clipboard GetFormat (Format %), где Format % - значение или константа из таблицы. Возвращает значение True, если данные из буфера имеют соответствующий формат.
If Clipboard.GetFormat (2) Then MsgBox “Побитовое изображение”.
Для получения изображения из буфера используется метод GetData:
Clipboard. GetData (Format %), где Format %
Пример.
If Clipboard. GetFormat (VbCFText) Then
txtUser.Text = Clipboard.GetText ( )
Else If Clipboard.GetFormat (VbCFBitmap) Then
pic My.Picture = Clipboard. GetData(VbCFBitmap)
Else If Clipboard.GetFormat (VbCFMetafile) Then
pic My.Picture = Clipboard. GetData(VbCFMetafile)
Else If Clipboard.GetFormat (VbCFDib) Then
pic My.Picture = Clipboard. GetData(VbCFDib)
Else MsgBox “Не определн графический объект”
End If
Копирование изображения из графического окна в буфер обмена в формате побитового изображения:
Private Sub PictureCopy_Click( )
Clipboard.Clear
Clipboard.SetData Pic.My.Picture,2
DDE
При использовании метода DDE одно приложение Windows (клиент) запрашивает у другого приложения (сервера) какую-либо информацию. Для VB в качестве сервера может выступать текстовая форма, а клиентами могут быть поля ввода, графические окна или надписи. Однако элементы управления на форме могут также передавать информацию с помощью своих свойств. Любое приложение может выступать одновременно и как клиент и как сервер: Excel?VB?WinWord.
Для установки связи нужно знать имя соответствующего приложения, например, WinWord, Excel, имя DDE для формы VB соответствующего имени исполняемого файла, либо имени проекта без расширения, если в среде разработки.
Кроме того, задается предмет DDE-связи, в частности, специфические имена файлов. Например для Excel это .xls и .xle.
И третье, указывается, какая информация передается - элемент данных DDE-связи. Например для Excel-сервера DDE элементом данных будет ячейка ... Для VB как сервера DDE элементом данных будут графические окна, поля ввода, надписи.
Свойства DDE.
LinkTopic формат: имя сервера \ имя приложения, например
Excel\ C:\ EXCEL\ Sheet1.xls
Можно устанавливать значение этого свойства для поля ввода, графического окна, надписи. Изменение значения свойства приводит к закрытию всех связей с данным приложением. Это позволяет приложению-клиенту переключаться на другие объекты.
LinkItem - определяет конкретные данные, которые будут передаваться от сервера к клиенту. Например, содержание ячейки первого столбца первой строки листа Excel Ric1/
Синтаксис: [имя формы, ] имя элемента управления.LinkItem = Item $
Item $ - строкове выражение, которое определяет элемент данных сервера.
LinkMode - режимя связи: LinkMode = 1 - горячая связь, LinkMode = 2 - холодная связь, LinkMode = 0 нет (связь разрывается)
Горячая связь - сервер посылает данные, содержащиеся в элементе связи DDE, когда эти данные изменяются в приложении-сервере; холодная - клиент должен требовать новой передачи данных.
События DDE
LinkOpen - генерируется всякий раз при установлении связи (например, информация пользователю)
Private Sub picMy_LinkOpen (Cancel As Integer)
M$ = “DDE связь установлена с” + PicMy.LinkTopic “поданным”+
M$ = M$ + PicMy.LinkItem
MsgBox
End Sub
LinkClose - завершение сеанса DDE;
для формы - Private Sub frmMy_LinkClose( ),
для элемента управления Private Sub txtMy_LinkClose(Index As Integer)
LinkExecute - если клиенту необходима какая-либо информация от сервера, когда клиент посылает команду серверу.
Private Sub Form_LinkExcecute(Command As String, As Integer )
LinkError - для обработки ошибок в сеансе связи
Private Sub FormMy_LinkError(LinkErr As Integer )
Методы DDE
LinkExecute - для посылки команд серверу DDE
элемент управления.LinkExecute Командная строка
LinkPoke - пересылка содержимого любого элемента управления DDE-клиента серверу.
Например, txtMy.LinkPoke (посылает содержание .Text)
LinkRequest - посылка запроса DDE-серверу.
LinkMode = 2
txtMy.LinkRequest - запрос на пересылку информации в свойство Text
LinkSend - если форма выступает в качестве DDE-сервера и необходимо послать содержание окна изображения.
picMy.LinkSend (при внесении существенных изменений в изображении).
OLE
OLE, сокращение от object linking and embedding (связывание и встраивание объектов), сначала рассматривалась как технология, дополняющая и расширяющая динамический обмен данными DDE. Впоследствии она далеко ушла от своего начального предназначения. В частности, сейчас этот термин рассматривается отдельно от других и имеет собственное предназначение.
Одним из отличий OLE от DDE является то, что переданный объект полностью сохраняет свой внешний вид и свойства, которыми он обладал в создавшем его приложении. Т.е. электронные таблицы представляются как электронные таблицы, текстовые документы выглядят так же, как они выглядели в текстовом процессоре и т.д. После того как в проект Visual Basic добавляется контейнерный элемент OLE, по сути дела создается мост, связывающий пользователя с другим приложением Windows, и этот элемент выглядит точно так же, как он выглядел в другом приложении.
При работе с OLE первым и самым важным понятием является объект. Объект представляет собой данные, которые поставляются приложением Windows, поддерживающим OLE, например, для Excel это электронная таблица (или ее часть). Для работы с объектами OLE необходимо использовать переменные типа Object (см. главу II), а для передачи информации в эти объекты используется тип данных Variant.
Для понимания смысла связывания представим себе группу, совместно работающую над этой книгой. Кроме автора, в работе принимают участие технический редактор, помощник редактора, корректор и многие другие. Наиболее эффективным способом работы над книгой для такой группы будет использование единого экземпляра документа с возможностью внесения изменений в текст книги каждым участником рабочей группы. Заметим, что необходимо использовать один экземпляр книги (например, на центральном сервере); в этом случае группе не придется беспокоиться о том, что какие-то важные исправления будут пропущены. (Выражаясь на жаргонном языке, это позволяет работать в большей степени параллельно, чем последовательно, нескольким участникам группы.) В случае со связанными объектами данные остаются в приложении, которое их создало. Представим себе процесс связывания как прикрепление связи к уже существующим данным. Технически при связывании в приложение Visual Basic вставляется значок, указывающий на связь, а изображение данных cохраняется в элементе управления OLE.
Идея встраивания находит применение в том случае, когда создается документ, объединяющий различные приложения Windows "под одной крышей". Встраивание в OLE позволяет пользовательским элементам встраивать внутрь себя данные. Когда Visual Basic обращается к управляющему элементу OLE, элемент переключается обратно в приложение, в котором он был создан, что позволяет использовать возможности "родного" приложения для внесения в элемент необходимых изменений.