|
Программирование >> Проектирование интерфейса пользователя
просами на ввод соответствующих значений (окно, предлагающее ввести значение параметра Имя, показано на рис. 16.1). Обратите внимание: число параметров с учетом литерального значения 0, отвечающего полю ID, равно числу столбцов в таблице MUSIC. Рис. 16.1. Так выглядит диалоговое окно, в котором предлагается ввести значение параметра, указанного в команде INSERT В команде INSERT листинга 16.5 приведены только те поля, которые подлежат интерактивному заполнению. В пределах одной и той же команды INSERT могут задаваться как литеральные значения, так и параметры - в любых сочетаниях. Например, заведомо зная значения, которые следует сохранить в большинстве полей, вы можете указать параметры только для одного или двух - именно так чаще всего и происходит. Добавление записи с помощью SELECT Весьма полезный способ применения команды INSERT связан с задачей копирования данных из одной таблицы в другую. В этом случае вместо предложения VALUES используется вложенный запрос на основе SELECT. Ниже приведена соответствующая синтаксическая формула. INSERT INTO ИмяТаблицыПриемника (ИмяПоля! [, ИмяПоля2, ...]) SELECT ИмяТаблицыИсточника.ИмяПоля! [, ИмяТаблицыИсточника.ИмяПоля2, ...] FROM ИмяТаблицыИсточника Практически, все осталось на месте, кроме предложения VALUES, в котором указывается выражение SELECT. Напомним, что перечни полей SELECT и INSERT INTO должны совпадать по типам и количеству элементов. Предположим, у вашего друга также есть коллекция музыкальных записей и собственная база данных с таблицей MUSIC, поля которой в точности совпадают с полями одноименной таблицы вашей базы данных. Как создать базу данных для объединенной коллекции? Используйте SELECT и INSERT INTO, как показано в листинге 16.6. Листинг 16.6. Пример команды INSERT INTO с вложенным запросом, выполняющим импорт полей из идентичной базы данных INSERT INTO MUSIC (ID, ARTIST, TITLE, FORMAT, PUBLISHER) SELECT 0, ID, ARTIST, TITLE, FORMAT, PUBLISHER FROM MUSIC2 Анализ Команда INSERT INTO не претерпела изменений до списка полей. Поскольку в качестве первичного ключа используется автоматически создаваемый счетчик, первый элемент команды SELECT равен 0. После литерального значения 0 каждое поле исходной таблицы (во вложенном запросе) помещается в список полей команды SELECT. Команда INSERT (теперь вы согласитесь) демонстрирует немалую гибкость. Выражение SELECT само по себе незаурядно , но в сочетании с INSERT способно творить чудеса. Обновление данных Команда UPDATE применяется для одновременного изменения содержимого полей одной или нескольких записей. Основной вариант выражения позволяет обновить значения всех столбцов таблицы. Расширенная версия дает возможность сузить набор записей, подвергающихся воздействию, с помощью предложения WHERE. Ниже приведена общая синтаксическая формула команды UPDATE. UPDATE ИмяТаблицы SET ИмяПоля! = Значение! [, ИмяПоля2 = Значение2, ...] [WHERE Предложение] Служебные слова SQL в соответствии с общепринятым соглашением вводятся в верхнем регистре - так, как в данном случае набраны UPDATE, SET и WHERE. Предложение SET должно включать, по меньшей мере, один предикат вида ИмяПоля = Значение, и их количество не ограничено. Знакомое вам предложение WHERE, как всегда, необязательно. Листинг 16.7 демонстрирует несколько примеров употребления команды UPDATE для изменения данных в таблице MUSIC. Листинг 16.7. Примеры использования команды UPDATE 1: 2 : UPDATE Music UPDATE Music UPDATE Music SET Title se( TITLE ) ; SET Eirst Name = ICap( [Eirst Name] ); SET Publisher = Columbia Records WHERE Publisher = Columbia Каждая из строк листинга 16.7 содержит отдельную команду SQL. В строке 1 используется встроенная функция UCase, переводящая содержимое поля TITLE всех записей таблицы MUSIC в верхний регистр. Строка 2 иллюстрирует применение пользовательской функции iCap, предназначенной для преобразования первого символа переданной строки (в данном случае - значения поля FIRSTNAME) в верхний регистр. Текст функции ICap приведен в листинге 16.8. Строка 3 демонстрирует команду UPDATE, содержащую предложение WHERE и обновляющую только те записи таблицы MUSIC, в поле PUBLISHER которых хранится значение Columbia . Листинг 16.8. Пример пользовательское ции, которую можно вызвать в команде SQL 1: Function ICap( ByVal FieldValue As String ) As String 2: ICap = UCase(Left$(FieldValue, 1)) & LCase(Mid$(FieldValue, 2)) 3 : End Function Функция ICap достаточно проста. Первая буква строки FieldValue, переданной в качестве аргумента, с помощью стандартной функции UCase переводится в верхний регистр, а остальные символы, посредством LCase, - в нижний. Как мы уже неоднократно говорили, функции и процедуры не должны быть пространными и сложными. При более внимательном рассмотрении вы могли бы обратить внимание, что текст функции, приведенной в листинге 16.8, нуждается в дополнениях. Что случится, например, если переданная в виде параметра строка окажется пустой? Да-да, это наша с вами ошибка - выполнение функции будет прервано. В данном случае необходимо принять меры, способные предотвратить аварийный сброс программы (подробнее об этом - в главе 18-й час. Обработка ошибок во время выполнения программы ). Удаление данных ▲ Информацию, попавшую в базу данных, когда-либо наверняка придется удалить. Эта обязанность в языке SQL возложена на команду DELETE. Она довольно проста (впрочем, ничего удивительного - как говорится, ломать - не строить ). Синтаксис выражения DELETE таков: DELETE FRO блицы [WHERE Предложение] Предполагая использовать команду DELETE в прикладной программе, будьте внимательны. Подумайте о возможности открытия окна предупреждающего сообщения (функция MsgBox придется как раз кстати), которое позволит пользователю подтвердить свои зловещие намерения или вовремя от них отказаться. Изучением технологий программирования на SQL и управления базами данных нельзя заниматься между прочим, в часы беззаботного досуга. В понятие хорошей программы входит достаточно большое число различных составляющих. Характерный пример. Записи в таблице MUSIC отвечает несколько строк таблицы TRACKS - это понятно. Мы удалили эту запись. Что делать с соответствующей информацией таблицы TRACKS? (Другими словами, если нет сведений о музыкальном альбоме, зачем нужны эдакие сиротские строки о его композициях?) При удалении записей одной таблицы зачастую следует позаботиться об изъятии логически взаимосвязанных записей из других таблиц. То же справедливо и в отношении операций изменения данных. Во многих системах управления базами данных поддерживаются процедуры каскадного удаления и обновления информации. Имеется в виду, что система самостоятельно следит за логической целостностью данных. Для реализации возможностей каскадного выполнения операций обычно необходимы дополнительные действия со стороны администратора базы данных и авторов приложений. Если необходимая настройка не произведена, ответственность за целостность данных возлагается на код прикладной программы SQL или VBA. Заметно упрощают работу также хорошие средства программирования и администрирования баз данных. Не бойтесь обращаться за помощью к литературе, информационным источникам в Internet и квалифицированным специалистам, способным подсказать решения в трудных ситуациях. Многие известные эксперты с пониманием откликнутся на ваши просьбы, если вы обратитесь к ним по электронной почте или с помощью средств ведения виртуальных дискуссий. Нескольких простых примеров будет вполне достаточно. Введя команду DELETE FROM Music, вы заставите Access полностью очистить таблицу MUSIC - вряд ли это может входить в ваши планы. Зато команда DELETE с предложением WHERE применяется весьма часто.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |