Изменяем в коде содержимое таблицы, создаем и стираем таблицы
SQL-оператор SELECT не меняет содержимое базы данных, а только делает выборку. В этом подразделе мы на примерах познакомимся с SQL-операторами, которые изменяют содержимое таблицы базы данных, а также создают таблицы и удаляют их. Это операторы INSERT, DELETE, UPDATE, CREATE TABLE, DROP TABLE. Для их испытания вполне можно использовать наш последний проект. В текстовое поле вы вводите SQL-оператор и нажимаете кнопку Выполнить запрос. В исходной базе данных происходят изменения. Однако, в нижней сетке вы не увидите ничего. Чтобы наблюдать изменения, нужно нажать кнопку Из базы – на экран и посмотреть в верхнюю сетку.
Добавляем записи в таблицу. Оператор INSERT. Следующий оператор приказывает вставить в таблицу роман Толстого «Воскресение» объемом в 700 страниц:
INSERT INTO Книги (Avtor, Nazvanie, Kol_str)
VALUES ('Толстой', 'Воскресение', 700)
Точный смысл:
ВСТАВИТЬ В
таблицу Книги новую запись. В этой записи полям Avtor, Nazvanie, Kol_str, придать соответственно
ЗНАЧЕНИЯ
«Толстой», «Воскресение», 700.
Поля, которым не придано значение, остаются пустыми (в сетке мы увидим значение (null) ). Обратите внимание, что строковые константы берутся не в двойные, а в одинарные кавычки.
Вместо констант можно писать выражения. Пример:
INSERT INTO Книги (Avtor, Nazvanie, Kol_str)
VALUES ('Толстой', 'Воскресение', 400+300)
Удаляем записи из таблицы. Оператор DELETE. Следующий оператор приказывает стереть из таблицы все тонкие книги Толстого:
DELETE FROM Книги
WHERE (Kol_str<100) And (Avtor='Толстой')
Точный смысл:
СТЕРЕТЬ ИЗ
таблицы Книги все записи,
ГДЕ число страниц меньше 100 и автор – Толстой.
Если часть WHERE не писать, будут стерты все записи таблицы:
DELETE FROM Книги
Обратите внимание, что в верхней сетке при нажатии на кнопку Из базы – на экран записи «не стираются». Создается ошибочное впечатление, что они не стираются и в самой базе данных. Оно создается потому, что указанные SQL-операторы выполняют изменения именно в базе данных, а не в DataSet. Адаптер, отправляя при нажатии на верхнюю кнопку из измененного файла в DataSet, скажем, 5 записей (а в DataSet их все еще 7), обновляет в DataSet только эти 5 записей, остальные не трогая. Чтобы избежать такого впечатления, нужно перед оператором заполнения DataSet
OleDbDataAdapter1.Fill(DataSet11)
выполнить оператор, опустошающий DataSet:
DataSet11.Книги.Clear()
Изменяем записи в таблице. Оператор UPDATE. Следующий оператор во всей таблице меняет Толстого на Льва Толстого:
UPDATE Книги
SET Avtor='Лев Толстой'
WHERE Avtor='Толстой'
Точный смысл:
ИЗМЕНИТЬ
таблицу Книги, а именно:
УСТАНОВИТЬ
полю Avtor значение «Лев Толстой» везде,
ГДЕ значением поля Avtor является «Толстой»
Следующий оператор все тонкие книги делает толстыми и антикварными:
UPDATE Книги
SET Kol_str= [Kol_str]+500, Data=#1/1/1600#
WHERE Kol_str<100
точнее, во всех записях, где число страниц меньше 100, оно увеличивается на 500 и устанавливается дата – 1 января 1600 года.
Таким образом, оператор UPDATE может менять значения всех полей во всех записях, удовлетворяющих условию.
Создаем таблицу. Оператор CREATE TABLE. Следующий оператор создает в нашей базе данных вдобавок к таблице «Книги» новую таблицу с двумя строковыми полями, без ключевого поля:
CREATE TABLE Сотрудники (Фамилия STRING, Отдел INTEGER)
Точный смысл:
СОЗДАТЬ ТАБЛИЦУ
с именем Сотрудники и с такими полями: Фамилия типа STRING и Отдел типа INTEGER
Типы данных в базах. Следующий оператор иллюстрирует основные типы полей, встречающиеся в таблицах баз данных, совместимых с Access:
CREATE TABLE Книги2 (Avtor STRING, Nazvanie STRING, Data DATETIME, Kol_str INTEGER, Качество LOGICAL, Цена CURRENCY, Рейтинг DOUBLE)
Пояснения: Здесь я создаю таблицу Книги2 с 7 полями. Описания полей приведены в скобках и разделены запятыми. Первое поле – Avtor, второе – Nazvanie и так далее.
В базах данных типы STRING, INTEGER, SINGLE, DOUBLE, DATETIME означают примерно то же самое, что и одноименные типы VB. Вместо Boolean пишем LOGICAL. При этом «Истина» и «Ложь» могут изображаться числами -1 и 0, или флажком (установленным или неустановленным) Можно пользоваться числовым типом CURRENCY – «Деньги». При этом число 48,2 может изображаться как 48,20р. Можете попробовать и другие простые типы VB, но не все они поддерживаются и не все под привычными именами.
Создание ключевого поля. Следующий оператор иллюстрирует создание ключа:
CREATE TABLE Книги3 (Avtor STRING, Nazvanie STRING, Код INTEGER CONSTRAINT Ключ PRIMARY KEY)
Пояснения: Здесь я создаю таблицу Книги3 с 3 полями. Последнее поле Код я сделал ключевым. Чтобы создать ключевое поле с именем Код, я использовал выражение
Код INTEGER CONSTRAINT Ключ PRIMARY KEY
Здесь INTEGER – тип поля, это целые числа. Слово CONSTRAINT означает, что на значения в этом поле накладываются какие-то ограничения, они не могут быть произвольными целыми числами. Слова PRIMARY KEY конкретизируют эти ограничения. Имеется в виду, что поле является ключом (так называемым первичным ключом), а значит, значения не могут повторяться. Если вы случайно попытаетесь ввести туда число, которое уже встречалось, VB или Access не даст вам это сделать. Слово Ключ – это произвольное имя ключа, в простейшем случае оно вам не понадобится.
Очень удобно, когда ключевое поле само собою заполняется числами 1, 2, 3 … Для этого вместо INTEGER нужно выбрать тип COUNTER:
Код COUNTER CONSTRAINT Ключ PRIMARY KEY
В этом случае уже нельзя самостоятельно вводить числа в это поле.
Ключевым можно сделать любое поле, если вы уверены, что значения в нем не повторяются. Например:
CREATE TABLE Книги4 (Avtor STRING, Nazvanie STRING CONSTRAINT Ключ PRIMARY KEY)
Здесь ключевым будет поле Nazvanie и компьютер будет присматривать за тем, чтобы одинаковых названий не встречалось.
Уничтожаем таблицу. Оператор DROP TABLE. Следующий оператор уничтожает в базе данных таблицу Сотрудники:
DROP TABLE Сотрудники