Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 11
На сайте нет зарегистрированных пользователей

Пользователей: 13,364
новичок: eqvufy
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Лабораторная работа по динамическим спискам на Turbo Pascal (удаление ду...
Моделирование работы ЭВМ на GPSS + Пояснительная записка
Компьютерный магазин на Turbo Pascal (База данных) + Пояснительная записка

Работа с базами данных с помощью DAO
Павел Сурменок
www.vb-studio.boom.ru

Введение

Всё больше программ использует для хранения данных базы данных.
Один из инструментов для работы
с базами данных - библиотека DAO (Data Access Objects).
О ней и пойдёт речь в этой статье.
Для начала нужно подключить эту библиотеку.
Для этого в меню Project|References отметьте пункт "
Microsoft DAO 3.6 Objects Library" .
В составе Visual Basic 6.0 поставляется библиотека версии 3.6.
Если у Вас более ранняя версия - отметьте её, особых различий нет.
Примечание: В этой статье будет рассмотрена работа с базами MS Access (*.mdb).
Бывают и другие типы баз данных, например FoxPro.


Выборка данных

Как осуществить выборку данных? Сначала объявляем переменные.


Dim db As DAO.Database 'Объявляем базу данных
Dim rs As DAO.Recordset 'Объявляем рекордсет
Dim sSQL As String 'Переменная, где будет размещён SQL запрос

Открываем базу данных. Для этого вызываем метод OpenDatabase,
и в качестве параметра передаём
полный путь и имя файла базы данных. Обратите внимание,
что db - это объект и поэтому пишем ключевое слово Set.


Set db = DAO.OpenDatabase (" C:\db.mdb" )
Формируем строку SQL запроса. Допустим, нам нужно получить все поля таблицы Orders.


sSQL = " SELECT * FROM Orders;"
Теперь открываем рекордсет. Для этого вызываем метод
OpenRecordset объекта db с первым параметром - SQL запросом.
У этого объекта есть ещё 3 необязательных параметра.
Параметр type определяет тип открытия рекордсета.
Может принимать значения одной из этих констант:

Константа Значение Описание
dbOpenTable 1 Редактируемый объект. Может быстро находить и
возвращать записи при использовании индексируемых таблиц.
dbOpenDynaset 2 Обновляемый. Эффективный, поскольку представляет
набор ссылок
на данные в основном запросе (а не на реальные данные).
Может возвращать записи из нескольких таблиц
благодаря использованию объединения, даже когда эти таблицы
связываются из нескольких баз данных.
Такие записи во многих случаях обновляемы.
dbOpenSnapshot 4 Могут обрабатываться быстрее, чем объекты Dynaset и Table,
в особенности для небольших наборов записей. Может возвращать
записи из нескольких таблиц
благодаря использованию объединения. Такие записей во многих случаях обновляемы.
dbOpenForwardOnly 8 Работает быстрее, чем объект Snapshot.
Может возвращать записи из нескольких таблиц
благодаря использованию объединению.
dbOpenDynamic 16 Обновляемый. Может возвращать записи из нескольких
таблиц благодаря использованию объединения.


Значение по умолчанию для параметра type - dbOpenTable.
Параметр options определяет некоторые характеристики открываемого рекордсета.
Может принимать значение, состоящее из комбинации 11 констант.
Параметр LockEdit (в DAO 3.5 этот параметр называется lockedits)
определяет тип блокировки рекордсета.
Может принимать значение одной из 5 констант:


Константа Значение Описание
dbReadOnly 4 Только для чтения.
dbPessimistic 2 Запись блокируется только редактируемая запись.
dbOptimistic 3 Запись блокируется только при сохранении данных на диск
(пока не закончил работу метод Update).
dbOptimisticValue 1 Для многопользовательского режима. Перед update
(запись на диск) производится проверка,
была ли изменена запись. Если да, то сгенерируется ошибка,
и update не будет произведен.
В отличном случае update будет произведен и на время update
запись заблокируется.
dbOptimisticBatch 5 Пакетная блокировка.


Set rs = db.OpenRecordset (sSQL)
Рекордсет открыт. Информация, выбранная из базы данных, находится в объекте rs.
Теперь нам нужно достать оттуда данные.
Для передвижения по записям в объекте типа RecordSet используется 5 методов:


Move Используется для перемещения к произвольной записи. В качестве параметра передаётся номер записи.
MoveFirst Используется для перемещения к первой записи.
MoveLast Используется для перемещения к последней записи.
MoveNext Используется для перемещения к следующей записи.
MovePrevious Используется для перемещения к предыдущей записи.


Также пригодятся свойства BOF и EOF.
BOF возвращает True, если текущая запись находится перед первой записью в объекте типа Recordset.
EOF возвращает True, если текущая запись находится после последней записи в объекте типа Recordset.


Текущая запись находится в классе Fields.


With rs
.MoveFirst 'Перемещаемся к первой записи
Do While Not .EOF 'Выполнять пока есть записи
Debug.Print .Fields (0) 'Достаем значение текущей записи для поля номер 0
Debug.Print .Fields (1) 'Достаем значение текущей записи для поля номер 1
Debug.Print .Fields (2) 'Достаем значение текущей записи для поля номер 2
':
.MoveNext 'Перемещаемся к следующей записи
Loop
End With
Вместо Debug.Print естественно можно поставить и оператор присваивания (=)

a = .Fields (0)

Закрываем рекордсет и базу данных


rs.Close
db.Close

В конце процедуры для того, чтобы освободить память пишем

Set rs = Nothing
Set db = Nothing
Добавление и изменение записей

Для добавления и изменения записей используется похожая технология.
При добавлении записи открываем рекордсет.


Dim db As DAO.Database 'Объявляем базу данных
Dim rs As DAO.Recordset 'Объявляем рекордсет
Dim sSQL As String 'Переменная, где будет размещён SQL запрос

Set db = DAO.OpenDatabase (" C:\db.mdb" )
sSQL = " SELECT * FROM Orders;"
Set rs = db.OpenRecordset (sSQL)

Для добавления записи используется метод AddNew объекта типа Recordset.


rs.AddNew
Теперь запись добавлена, и мы заполняем все поля для данной записи.


rs.Fields (0) = " Значение 1"
rs.Fields (1) = " Значение 2"
'...
Обновляем рекордсет.


rs.Update
Закрываем рекордсет и базу данных и освобождаем память.


rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
Код для изменения записи очень похож на предыдущий код.
Для изменения записи используется метод Edit.
Также нужно изменить SQL запрос и сделать его примерно таким:


SELECT * FROM Orders WHERE ID = 23;
Предполагается наличие поля ID, тип которого числовой
и его значение уникально для каждой записи.
В данном случае мы будем изменять запись значение поля ID которой равно 23.


Dim db As DAO.Database 'Объявляем базу данных
Dim rs As DAO.Recordset 'Объявляем рекордсет
Dim sSQL As String 'Переменная, где будет размещён SQL запрос

Set db = DAO.OpenDatabase (" C:\db.mdb" ) 'Открываем базу
sSQL = " SELECT * FROM Orders;" 'Формируем запрос
Set rs = db.OpenRecordset (sSQL) 'Открываем рекордсет

rs.Edit 'Редактируем запись
'Ставим новые значения
rs.Fields (0) = " Значение 1"
rs.Fields (1) = " Значение 2"
':
rs.Update 'Обновляем рекордсет
'Закрываем рекордсет и базу данных
rs.Close
db.Close
'Освобождаем память
Set rs = Nothing
Set db = Nothing

Удаление записи

Удаление записи можно произвести двумя путями. Первый путь
- исполнение SQL запроса с командой DELETE.
Идентифицировать запись будем по полю ID. Предполагается,
что значения поля ID уникальны для каждой записи.
Удаляем запись, ID которой равно 5.


Dim db As DAO.Database 'Объявляем базу данных
Dim sSQL As String 'Переменная, где будет размещён SQL запрос

Set db = DAO.OpenDatabase (" C:\db.mdb" ) 'Открываем базу
sSQL = " DELETE FROM Orders WHERE ID=5;" 'Формируем запрос

Рекордсет открывать не нужно, так как нам не надо получать данные из базы.
Для исполнения запроса мы используем метод Execute объекта типа Database.
Он имеет 2 параметра. Первый параметр Query - строка исполняемого запроса.
Второй необязательный параметр options - константа или ком
отражающая характеристики исполняемого запроса.


db.Execute sSQL
'Закрываем рекордсет и базу данных
rs.Close
db.Close
'Освобождаем память
Set rs = Nothing
Set db = Nothing

Второй способ удаления записи заключается в использовании
метода Delete объекта типа Recordset.
Этот метод удаляет текущую запись. Он не имеет параметров.


rs.Delete

Количество записей и номер текущей записи

Для определения количества записей в рекордсете используется
свойство RecordCount объекта типа Recordset.
Но есть небольшая неувязочка... Если рекордсет типа Dynaset,
Snapshot или ForwardOnly,
то свойство RecordCount покажет число записей, только при
достижении последней записи.
В этом случае нужно сразу переместиться к концу рекордсета.


rs.MoveLast
rs.MoveFirst

Номер текущей записи определяется с помощью свойства AbsolutePosition.
Отсчёт начинается с нуля.
Т.е. если текущая запись - первая, то AbsolutePosistion покажет 0.
Если текущая запись находится до первой или после последней,
то свойство AbsolutePosition покажет -1.
Свойство PercentPosition возвращает процентное отношение номера текущей записи от количества записей.


Debug.Print " Количество записей " & CStr (rs.RecordCount)
Debug.Print " Текущая запись " & CStr (rs.AbsolutePosition + 1)
Debug.Print Cstr (Round (rs.PercentPosition, 2)) & " %"

Пример работы с DAO можно взять здесь.
http://www.infocity.kiev.ua/prog/basic/content/daoex.zip
Опубликовал Kest October 29 2008 14:29:34 · 0 Комментариев · 13940 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Синтаксический ан...
Программирование ...
Программирование ...
Дарахвелидзе П., ...
Email
Иллюстрированный ...
HtmlLerz PRO
Создание Web-сайт...
SUIPack
Игра змейка
Rotolabel
GPSS World Studen...
RAS
Разработка Web-пр...
Java 2. Наиболее ...
MpegPlay
Пользовательская...
Заставка. Изображ...
PDJ Scrollers
PDA версия сайта

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97832
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14191
Borland Delphi ... 10290
Turbo Pascal fo... 7373
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Сульшер может лиши...
будут обращаться к...
ВВЕДЕНИЕ В ОТСЕЧЕНИЕ
Триггеры операций ...
Шифрование алгорит...
Расшифровать файл ...
• Management — гло...
Пошаговое выполнен...
Оценка ущерба посл...
Защита Web-форм от...
Модели выполнения ...
Контейнеры
Где светодиодные л...
Подготовка среды р...
Ламбда-подъем при ...
Тестирование
Когда одного недос...
Коды, исправляющие...
EQU (ОПРЕДЕЛИТЬ ЭК...
Трояны - это свои ...
Контроль изменений
Константные объект...
Too many files
Выжить в Песочнице!
10.4. Принцип рез...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?