|
Программирование >> Разработка пользовательского интерфейса
converted to PDF by HupBaH9I Тип запроса Инструкция SQL
Синтаксис использования метода RunSQL выглядит так: DoCmd.RunSQL инструкцияSQL Инструкция SQL - это строковое выражение, которое содержит правильное SQL выражение. При этом вы можете обращаться к другой базе данных. Максимальная длина строки - 32768 символов. В следующем примере требуется наличие формы с названием Моя форма , которая имеет следующие объекты: Несвязанное текстовое поле txtField1. Несвязанное текстовое поле txtField2. Командная кнопка cmbInsert3. В методе для события Click запишем следующий код, предполагая, что данные, которые мы занесем в поля txtField1 и txtField2, должны попасть в новую запись таблицы Моя Таблица : Sub cmbInsert3 Click() Dim SQLstr As String, SQLstr1 As String SQLstr = INSERT INTO [Моя Таблица] (Фамилия, Имя) SQLstr1 = VALUES ([txtField1],[txtField2]) DoCmd.RunSQL SQLstr & SQLstr1 End Sub Как вы видите, нам совершенно не нужно иметь отдельный запрос добавления, достаточно написать четыре строчки кода. Теперь пользователь будет добавлять новые записи там, где это выглядит вполне логично, а не экспериментируя с запросами на вкладке Запросы в контейнере базы данных. Данные строчки являются не более, чем примером, никто не пытается призывать вас отказаться от обычного ввода данных посредством использования связанных полей в форме и соответственно от всех средств, которые предоставляет это мощное средство работы с данными. В этой главе мы пытались показать, насколько удобно использовать SQL - структурный язык запросов, который на текущий момент является самым распространенным средством работы с базами данных. Бесспорно и в Visual FoxPro и в Access вы можете при желании обойтись без SQL, но будет ли это разумно? Чем больше вы используете SQL, тем легче вам переходить с одной СУбД на другую. А многие средства быстрой разработки приложений, такие как Delphi или Visual Basic, просто немыслимо использовать без SQL. В этой главе мы не стали рассматривать использование SQL в Visual Basic, но можете считать, что вы уже знаете достаточно, для того чтобы работать с этим средством разработки приложений. Visual Basic использует DAO для работы с базами данных. Следовательно, вы можете использовать объект QueryDef для работы. Можете не откладывать на завтра, а начинать прямо сейчас. Visual Basic, начиная с версии 4.0, имеет еще более гибкое и, в некотором плане, работающее быстрее с данными средство - RDO, но об этом речь впереди. В следующей главе мы расширим набор SQL команд, а также рассмотрим вопросы работы с внешними данными. 7.6. Работа с данными в локальной сети В этом параграфе мы обсудим основные принципы работы в компьютерной сети, которые практически одинаковы во всех системах управления базами данных. Основное различие, как правило, скрывается в словах рекламных проспектов, которые утверждают, что продукт супернеобычный, сверхскоростной, сам знает, когда запись блокировать, когда разблокировать, или, если угодно, снять блокировку. Некоторые компании поступают еще хитрее - замаскировав новым термином старую технологию ловят доверчивые пользовательские сердца. Ваше дело - верить или не верить рекламе, но разобраться, что необычного нас ждет, когда мы, наконец, решим обрабатывать наши данные в сети, стоит. При чтении этого параграфа вы ознакомитесь с основными особенностями разработки пользовательского приложения, которое предназначено для работы в локальной сети. подготовитесь к решению возможных сетевых конфликтов, которые могут возникнуть у пользователей при работе с приложением в сети. Visual FoxPro Как правило, данные необходимо использовать не на одном компьютере. Обычно с ними работает группа пользователей. Способ обмена данными посредством дискеты, безусловно, значительно облегчает работу программиста, однако такой способ организации выглядит в настоящее время скорее вызовом, чем правилом. Тем более, что сама работа в сети экономит массу средств и самое главное - время, которое, как вам уже известно, все больше становится эквивалентом денег. Visual FoxPro обеспечивает работу с данными с помощью монопольного или раздельного доступа к данным, опций блокировки, буферизации таблиц и записей, а также поддержки транзакций. Помимо этого Visual FoxPro автоматизирует многоразовую установку среды окружения посредством сессий данных. В многопользовательских системах необходима уверенность, что только один пользователь может заносить данные в файл или запись в текущий момент. Один из способов добиться этого -открыть таблицу с монопольным доступом. Ни один пользователь или приложение не смогут после этого ни читать данные из этого файла, ни писать в него. Приложение выведет сообщение об ошибке, если какая-нибудь таблица, необходимая для монопольного доступа, уже открыта. После выполнения команды SET EXCLUSIVE ON все таблицы будут открываться в монопольном режиме. Если необходимо проверить текущую установку, то используйте функцию SET() с аргументом EXCLUSIVE следующим образом: ? SET( EXCLUSIVE ) Если вы не хотите менять текущую установку в приложении для монопольного или многопользовательского режима открытия таблиц, то открывайте таблицу с помощью команды USE и точного указания, в каком режиме вы будете ее использовать. Например, если вам обязательно надо открыть таблицу в монопольном режиме, необходимо использовать следующую команду: USE myfile EXCLUSIVE В дополнение к монопольному или многопользовательскому режиму доступа к файлам вы можете управлять доступом к таблицам с помощью блокировок как файлов, так и записей. Блокировки могут обеспечить как долгосрочный, так и краткосрочный контроль над данными. Вдобавок, блокировки предотвратят одновременную модификацию двумя или более пользователями одной и той же записи или таблицы. Существуют два типа блокировок: автоматические и ручные. Если выполняемая команда требует блокировки таблицы или записи и запись или таблица еще не заблокированы, Visual FoxPro автоматически пытается совершить блокировку, выполняет команду и снимает блокировку. Команды могут блокировать запись, целую таблицу или заголовок таблицы. Когда заблокирована запись, то другие пользователи могут добавлять, удалять и изменять другие записи, кроме заблокированной. Блокировка таблицы предотвращает любые изменения другими пользователями в таблице. Блокировка заголовка занимает промежуточное положение, другие пользователи могут изменять записи, но не могут удалять и добавлять записи. В табл. 7.5 приводятся команды, которые осуществляют автоматическую блокировку, и указано, какой вид блокировки они выполняют. Таблица 7.5. Команды, осуществляющие автоматическую блокировку в Visual FoxPro Команда ALTER TABLE APPEND APPEND BLANK APPEND FROM APPEND FROM ARRAY APPEND MEMO BLANK BROWSE, CHANGE, EDIT CURSORSETPROP() DELETE DELETE NEXT 1 DELETE RECORD < > DELETE <<область >> DELETE-SQL GATHER INSERT INSERT-SQL MODIFY MEMO READ RECALL RECALL NEXT 1 RECALL RECORD < > RECALL <<область>> REPLACE REPLACE NEXT 1 REPLACE RECORD < > REPLACE <<область>> SHOW GETS TABLEUPDATE() UPDATE UPDATE-SQL Что блокируется Вся таблица Вся таблица Заголовок таблицы Вся таблица Заголовок таблицы Текущая запись Текущая запись Текущая запись и связанные по текущему полю записи в дочерних или родительских таблицах, как только началось редактирование Зависит от параметров Текущая запись Текущая запись Запись < > Вся таблица Текущая запись Текущая запись Вся таблица Заголовок таблицы Текущая запись после начала редактирования Текущая запись и все записи из других таблиц, связанные по редактируемым полям Текущая запись Текущая запись Запись < > Вся таблица Текущая запись и все записи из других таблиц, связанные по редактируемым полям Текущая запись и все записи из других таблиц, связанные по редактируемым полям Запись < > и все записи из других таблиц, связанные по редактируемым полям Вся таблица и все связанные таблицы Текущая запись и все записи из других таблиц, связанные по редактируемым полям Вся таблица Вся таблица Вся таблица Иногда бывает необходимо применить ручную блокировку. Visual FoxPro блокирует текущую таблицу с помощью функции FLOCK(). В отличие от команды SET EXCLUSIVE ON, которая предотвращает любой доступ к таблице со стороны других пользователей, FLOCK() блокирует таблицу, оставляя ее доступной для чтения. Остальные пользователи могут открывать таблицу и просматривать записи, даже не задумываясь о том, что она заблокирована. FLOCK() блокирует текущую таблицу и возвращает .T., если блокировка прошла успешно. Если в качестве аргумента функции вы укажете псевдоним или номер рабочей области, то у вас появится возможность заблокировать таблицу в другой, не текущей рабочей области. Например: FLOCK(1) или FLOCK(Account). Эта особенность очень полезна для блокировки связанных таблиц. RLOCK() и LOCK() блокируют текущую запись и возвращают .T., если
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |