Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Базы данных -> FoxPro -> Service pack 3 и Visual FoxPro, что нового


Service pack 3 и Visual FoxPro, что нового
Дмитрий Артемов (по материалам компании Microsoft)

В прежние времена, новой функциональности, представленной в этом "наборе обновлений" хватило бы на новую версию или уж как минимум на промежуточную, которая кладется в самостоятельную коробку, снабжается документаций и пр. Так что можно считать что с выходом Visual Studio Service Pack 3 (SP3) на рынке появился Visual FoxPro 6.5.

Что же там такого. Ну, как обычно исправление довольно большого числа ошибок самого Visual FoxPro. Исправление неправильно работчающего кода в примерах. Но это мелочи и ради них я не стал бы тратить ваше время.

Действительно серьезными изменениями является реализация раннего связывания объектов и многопоточность DLL, которые строятся средствами Visual FoxPro. Вот с них-то мы и начнем. Поддержка раннего связывания. Что было раньше, то есть сейчас. Вы работаете с ADO. Создаете объект Recordset, размещаете на форме объект Microsoft DataGrid 6.0 (OLEDB). И что. Да почти ничего. Основная проблема в том, что до момента запуска вашей формы Visual FoxPro не имеет ни малейшего представления о том, что за объекты используются его приложениями. Но когда форма запущена, дело уже сделано. Объект создан и попытка "прикрепить" к нему объект, оканчивается сообщением об ошибке. Это может быть не так уж страшно для данных, которые открываются только на чтение. В конце концов, Recordset можно разобрать и руками. Гораздо хуже дело обстоит при необходимости модификации и отслеживания редактирования данных. Короче говоря, куда как проще использовать стандартный курсор Visual FoxPro, наполнять его из Recordset и привязывать к обычному объекту Grid из числа базовых объектов. Но ведь это ненормально! Инструменты и технологии, разработанные одной и той же фирмой должны работать вместе, тем более что Microsoft постоянно заявляет о своей приверженности к компонентной модели приложений, когда собранная из кусочков система предстает как единое целое для пользователя. Вот и на. Кусочки есть, работы нет. По крайней мере не было до выхода SP3. Теперь мы можем сделать следующее (спасибо Мише Корнееву за пример):

Создаем форму. Помещаем на нее один из новых объектов Microsoft DataGrid 6.0 (OleDB) и в коде метода Init формы помещаем такой код:

LOCAL lo_ADOR
lo_ADOR=CREATEOBJ('ADODB.RecordSet')
WITH lo_ADOR
.FIELDS.APPEND("F1",129,20)
.FIELDS.APPEND("F2",129,20)
.OPEN .AddNew
.FIELDS('F1').VALUE="Это просто"
.AddNew
.FIELDS('F2').VALUE="Работает"
ENDWITH
THIS.CONTROLS(1).DATASOURCE=lo_ADOR

Запустим форму и если все прошло как следует, мы получаем наш Recordset, привязанный к объекту DataGrid. Так решена динамическая привязка источника данных к объекту. Но это на этапе исполнения.

Что если нам нужно привязать Recordset на этапе проектирования формы, например, чтобы выполнить какие-то действия над DataGrid? В первую очередь необходимо получить ссылку на DataGrid. После того как мы поместили этот объект на форму нужно выполнить несколько шаманских пассов для получения желаемого результата. Тут я пользуюсь решением, предложенным Джоном Петерсеном: 1. Создаем в командном окне ADO Recordset.

*!* Для примера я использую стандартную базу Visual FoxPro и
*!* DSN по имени tastrade
*!* oConn = CreateObject("adodb.connection")
*!* oConn.Open("tastrade")
*!* ors = CreateObject("adodb.recordset")
*!* With ors
*!* .activeconnection = oconn
*!* .source = "Select * From Customer"
*!* .CursorLocation = 3
*!* .Open
*!* EndWith
*!* Важно, чтобы переменная, которая содержит ссылку на
*!* Recordset имела видимость Public.
*!* 2. Имея готовый объект Recordset создаем форму и помещаем на нее
*!* Microsoft DataGrid, Versin 6.0 (OLEDB).
*!* 3. Для получения ссылки на DataGrid помещаем курсор мыши на него,
*!* переходим в командное окно и исполняем команду:
*!* oGrid = Sys(1270)
*!* Теперь, когда у нас есть все необходимые ссылки можно выполнить привязку
*!* Recordset и DataGrid
*!* oGrid.DataSource = oRS
*!* 4. Тереь щелкните правой клавишей мыши на объекте DataGrid,
*!* в появивишемся меню выберите команду DataGrid Object, Clear Fields.
*!* Снова щелкните правой клавишей и выберите команду Retrieve Fields.
*!* Мы получаем список полей, из нашего источника данных.
*!* Во время исполнения нужно будет еще раз выполнить привязку
*!* источника данных, но мы уже определили все объекты Column
*!* в коллекции Columns объекта DataGrid.

Новости COM серверов. Много раз мне приходилось отвечать "Нет" на вопрос о том поддерживает ли Visual FoxPro истинную многопоточность. Теперь на этот вопрос можно ответить "Да". Хотя и с некоторыми оговорками. После того как вы установите SP3 на своем компьютере. В каталоге System32 появится еще одна динамическая библиотека с именем Vfp6t.dll. Это специальная библиотека поддержки исполненя (runtime library), предназначенная для работы COM серверов, выполненных в форме DLL. Основная задача этой библиотеки - поддерживать серверы, созданные для работы в среде Microsoft Transaction server. В отличие от стандартной библиотеки поддержки исполнения Vfp6r.DLL, новая библиотека более легкая и, как следствие, не поддерживает некоторые команды, полный перечень которых вы сможете найти в файле помощи Vfpsp3.chm, описывающем все нововведения.

В основном речь идет о командах, которые обеспечивают взаимодействие с пользователем. При этом, новая библиотека поддерживает многопоточность и многочисленные клиенты, желающие получить доступ к функциональности COM сервера не должны топтаться в очереди, ожидая когда будет выполнен текущий запрос. Согласитесь, что это обеспечивает гораздо лучшую производительность. Теперь, при создании DLL средствами Visual FoxPro, вам предлагается на выбор несколько вариантов сборки. В зависимости от выбранного варианта, ваша DLL получает метку, которая говорит ей, какую библиотеку поддержки исполнения следует искать при загрузке. Эта метка может быть изменена только при последующих сборках. Если вы собираете проекты из командной строки, то новая функциональность поддерживается новой командой:

BUILD MTDLL FileName FROM ProjectName

Кроме всего прочего, новая библиотека всегда существует в единственном экземпляре, тогда как существующая библиотека Vfp6r.DLL при определенных ситуациях копируется под новым именем, чтобы избежать блокировки от другого процесса, который уже использует ее в монопольном режиме. Для конфигурирования COM серверов теперь используется тот же самый Config.fpw, только он должен быть встроен внуть сервера. Это означает, что пользователь, на машине которого расположено несколько файлов конфигурации, не сможет испорить работу вашего сервера только потому что его файл конфигурации попался серверу первым.

Service pack 3 для Visual FoxPro можно взять отсюда (http://www.microsoft.com/msdownload/vstudio/combodownload.asp?lang=en)

 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.