Мегаобучалка Главная | О нас | Обратная связь


Файлы последовательного доступа



2019-10-11 183 Обсуждений (0)
Файлы последовательного доступа 0.00 из 5.00 0 оценок




Используются когда:

а) редко вносятся изменения

б) информация в файле обрабатывается от начала до конца

в) если нужно добавлять информацию в конец файла.

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

Запись информации в файл:

Open “имя файла” for Output as # 1

# 1 - это идентификатор файла - число от 1 до 255 с символом #. Максимальное число одновременно открытых файлов определяются параметром в Config.sys.

По команде Open резервируется файловый буфер в памяти компьютера. По мере заполнения буфера активируются соответствующий диск и весь блок информации посылается непрерывным потоком на диск (количество будет устанавливаться в Config.sys). После окончания работы с файлом он закрывается командой Close # идентификатор файла. Команда Close сбрасывает информацию на диск и очищает буфер. Для сброса содержимого буфера на диск (в критических ситуациях) используется команда Reset. Для ввода информации в файл можно использовать команду Print #

“ Запись в файл

Open “File 1” For Output As #1

Print #1, “1 2 3 4 5 ” или Print #1, txtDisplay.Text

Close #1

Если в текущем каталоге есть файл с таким именем, то этой командой он будет уничтожен.

Close без параметров закрывает все файлы.

Для определения размера открытого файла можно использовать команду LOF (идентификатор файла)

Open “File 1” For Output As #1

Print #1, “1 2 3 4 5 ”

Print LOF(1)

Вместо Print можно использовать Write # идентификатор файла, список переменных.

 

Чтение из файла

Open ”имя файла” For Input As # идентификатор файла

Задается свободный идентификатор, который в данный момент не используется в программе. Или так:

 

FileNumber % = FreeFile

Open “имя файла” For Input As # FileNumber %

После этого можно использовать оператор Line Input # для построчного чтения информации из файла:

Open “File1” For Input As #1

Line Input #1, A$ принимает в A$ всю информацию до Enter

Print A$

Close #1

Либо Input # идентификатор файла, список переменных, если запись с помощью Write, txtDisplay

Если файл сложной структуры, состоит из полей и записей, то файл будет читаться целыми записями командой LineInput, либо можно информацию читать из отдельных полей командой Input #

Например, чтение записей из файла Spisok в массив

1. Определяем тип пользователя

Type StudentRecord

Name As String

Adress As String

End Type

2. Объявляем массив записей типа Student как глобальную переменную

Global StudentAdress( ) As StudentRecord

Sub Proc( )

Dim FileNum As Integer, I As Integer

ReDim StudentAdress(1 to 150)

FileNum = FreeFile

Open “Spisok” For Input As # FileNum

For I=1 to 150

Input #FileNum, StudentAdress(I).Name

Input #FileNum, StudentAdress(I).Adress

Next I

Close FileNume

End Sub

 

Чтение текстового фала в текст, поле

. . . .

FileNum = FreeFile

Open “My.txt” For Input As FileNum

txtDisplay.Text=Input(LOF (FileNum), FileNum)

Close  #FileNum

где LOF(FileNum) размер файла в байтах

 

Дозапись информации в существующий последовательный файл

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

Open “имя файла” For Append As # идентификатор файла

При этом:

- VB открывает файл, а если он не существует, то создает и создает соответствующий буфер;

- находит конец файла на диске;

- готовит к записи в конец файла.

Пусть существует текстовый файл My.txt и нужно дописать в его конец строку “До свидания”:

FileNum=FreeFile

Open “My.txt” For Append As FileNum

Print #FileNum, “До свидания”

Close #FileNum

При обработке больших файлов часто необходимо проверять на достижение конца файла. Для этого существует оператор EOF (идентификатор файла).

Фрагмент программы чтения информации из файла, созданного с помощью оператора Print #

. . . . .

B$ = “ ”

FileNum=FreeFile

Open “My.txt” For Input As #FileNum

Do Until EOF(FileNum)

Line Input #FileNum, A$

B$=B$+A$

Loop

txtDisplay.Text=B$

Close #FileNum

 

Файлы прямого доступа

Напоминают базу данных. Файл состоит из упорядоченных записей одинакового размера. Существует запись, состоящая из полей, в которых содержаться данные. Обеспечивает быстрый поиск информации, но дисковое пространство используется неэффективно.

При создании файла указывается максимальная длина существующей записи. Команда создания файла:

Open “MyLib.dat” For Random As # идентификатор файла

Len = длина записи, можно определять с помощью функции Len (имя переменной записи) в текущем каталоге.

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

Close # идентификатор файла - закрывает файл.

Каждая запись в файле имеет номер записи. Это позволяет работать с конкретной записью. При описании записи задаются пользовательским типом:

Type Books

Auther As String *30

Title As String *40

End Type

Запись, содержащую пятой записи файла в переменную:

Get #FileNum, 5, NewBook (если NewBook типа Books)

Запись из переменной в сороковую запись файла:

Print #FileNum, 40, NewBook

Созданные типы записей определяют размер файла прямого доступа. Размер файла определяется функцией FileLen (“имя файла”). Размер записи Len(NewBook) в байтах.

 

Двоичные файлы

Двоичные файлы - частный случай файлов произвольного доступа, однако размер в них равен 1. Вы оперируете байтами и всегда можно записать или прочитать любой байт файла, указав лишь его позицию в файле. В режиме двоичного доступа можно открыть как последовательный файл, так и файл прямого доступа. Можно одновременно и читать, и записывать в файл.

Имеются следующие операторы:

Открытие - Open “имя файла” For Binary As #FileNum

Запись в файл - Put #FileNum, № байта в файле, имя переменной для записи в файл

Чтение из файла - Get #FileNum, № байта в файле, имя переменной для записи в файл.

Доступ к данным в VB

VB предоставляет средства доступа к данным, которые дают возможность создавать и использовать системы БД, управляющих данными приложения.

VB позволяет обращаться к базам данных многих популярных форматов: MS Access, Btrieve, dBase, FoxPro, Paradox, а также базам данных ODBS систем клиент-сервер, таким как MS SQL Server.

В стандартной редакции VB инструменты работы с данными включают:

а) процессор БД Microsoft Jet;

б) элемент управления Data;

в) объектный интерфейс программирования Dao (Data Access Objects).

Два последних инструмента обеспечивают два методв взаимодействия с процессором Jet.

Элемент управления Data дает ограниченные возможности обращения к существующим базам данных практически без программирования. Модель DAO - программный интерфейс, обеспечивающий полный контроль над БД. Это коллекция объектных классов, которые моделируют структуру реляционной БД. Они обеспечивают свойства и методы, которые позволяют выполнять все операции с БД, такие как создание БД, определение таблиц, полей и индексов, установление отношений между таблицами, запросы в базах данных.

Процессор Jet транслирует эти операции в процессе выполнения. Он транслирует запросы приложения в физические операции по обработке файлов БД. Он читает, записывает и изменяет базу данных, выполняет индексацию, блокировку, защиту. Он также принимает запросы SQL, в соответствии с которыми выполняет требуемые действия в базе данных, и обрабатывает результаты, возвращаемые запросами.

Хранилище данных - это файл или файлы, непосредственно создание таблицы БД. Для внутренней БД VB или MS Access - это файл формата .mdb. Для других баз это может быть каталог, содержащий файлы .dbf.

 

Архитектура доступа к данным в VB

 

Схема доступа к данным в приложении VB

 

пользователь интерфейс

процессор БД

хранилище данных

 

Процессор БД располагается между прикладной программой и физическими файлами БД. Этим определяется независимость приложения от типа БД, к которой происходит обращение. Вне зависимости от формата БД в приложении используются одни и те же объекты доступа к данных и методы программирования.

Управление пользовательским интерфейсом осуществляется кодом VB, который манипулирует объектами и методами доступа к данным и запрашивает услуги БД, например, добавление или удаление записей или выполнение запросов. Запросы услуг адресуются не файлу БД, а процессору Jet, который выполняет запрошенные операции по обработке данных и возвращает результаты приложению.

Процессор БД Jet реализован в виде набора файлов динамических библиотек .dll, которые связываются с приложением VB в процессе выполнения Dao в физические операции непосредственно с файлами БД данного формата.

Программирование работы с БД в VB заключается в создании объектов Dao, таких как Database, TableDef, Field и Index. Свойства и методы этих объектов используются для выполнения операций в БД. Результат этих операций можно вывести на экран, а данные пользователя вводятся через формы VB. Это дает большую гибкость, т.к. одни и те же объекты, свойства и методы можно использовать для доступа к БД различных форматов. Можно также создавать приложения, в которых в единственном запросе или отчете соединяются таблицы из двух и более различных БД.

VB через DAO и Jet работает со следующими БД:

1) БД VB - внутренние БД. Формат, что и у MS Access. Создаются и управляются непосредственно процессором Jet.

2) Внешние БД ISAM (индексно-посреднические организации), включая Btrieve, dBase, FoxPro 2. , 3. , Paradox. Эти БД можно создавать и обрабатывать в VB. Можно также обращаться к текстовым источникам данных и .... MS Excell и Lotus-1, 2, 3.

3) БД ODBC - интеллектуальные БД клиент-сервер: MS SQL Server, Oracle, поддерживающие стандарт ODBC.

Новый режим DAO - ODBC Direct позволяет обращаться к источникам данных ODBC, минуя процессор Jet.

Он транслирует запросы приложения в физические операции по обработке файлов БД. Он читает, записывает, изменяет БД, выполняет индексацию, блокировку, защиту и поддержание ссылочной целостности. Он также содержит процессор запросов, который принимает запросы SQL и в соответствии с ними выполняет требуемые действия в БД, а также процессор результатов, обрабатывающий результаты, возвращаемые запросами.

В процессе обработки запроса процессор Jet выдает подмножество одной из таблиц БД, хотя уже существует или временно создает новую сетку (просмотр) в памяти в виде комбинации данных из разных таблиц. Сетки, состоящей из записей, которые были извлечены из БД, соответствует объект VB RecordSet. Если сетка является дополняемой, то она называется dynaset, в противном случае - snapshop/

 

Доступ к БД с помощью элемента управления данными Data без программирования

 

Элемент управления Data ничего не отображает, а только сопровождает поток информации между приложением и БД. Для отображения информации из БД на экране используются связанные элементы управления, т.е. элементы управления, которые могут работать с элементом управления Data. Они называются data aware или data bound. К связанным элементам управления относятся: текстовые поля, надписи, флажки, элементы управления изображением, графические окна, списки, комбинированные списки, OLE. Связанные элементы должны находиться на той же форме, что и Data. Информация из БД посредством элемента управления Data будет передаваться связанному элементу и сохраняться в его свойствах (хотя он может быть невидим).

После размещения элемента управления Data на форме необходимо задать его свойства:

DataBaseName - имя БД, к которой необходимо подключиться.

RecordSource - для определения таблицы или запроса к БД, в том числе SQL-запросы.

Затем к форме добавляется связанной элемент управления и привязывается к элементу управления Data, для чего:

Свойство DataSource устанавливается по имени элемента управления Data.

Свойство DataField устанавливается по имени столбца из RecordSource.

После выполнения операции привязки, нажатие на стрелки элемента управления Data (< - первая запись, < - ... запись, > - следующая запись, > - последующая запись), будет изменять содержимое связанного элемента управления.

 

Другие свойства элемента управления Data.

Connect - определяет тип БД, например, FoxPro 3.0.

Exclusive = True - запрет доступа к БД, пока пользователь ее не закроет (после этого необходимо ... Share.exe)

ReadOnly (True/False)

RecordSetType - если RecordSet создается с помощью кода или элемента управления.

 

Метод Refresh- по этому методу все связанные элементы формы обновляют свое состояние в соответствии с текущим состоянием таблицы.

Data1.Refresh.

Он открывает БД, а также устанавливает указатель записи на первую строку в таблицу или сети просмотра.

Свойство RecordSet объекта Data - это воображаемая таблица, к которой подключен элемент Data. Это может быть реальная таблица из RecordSource или сетка просмотра, определяемая SQL-выражением.

 

Методы RecordSet

AddNew - очистка буфера копирования, содержащего данные, которые должны быть записаны в БД, и перемещение текущей записи в конец. = Добавление записи, которая становится текущей.

Data1.RecordSet.AddNew.

Delete - удаление текущей записи.

Update - реальная пересылка содержимого буфера копирования в таблицу или dynaset.

Edit - копирует текущую запись в буфер копирования для возможности ее редактирования.

MoveNext - перейти на следующую запись

MovePrevious - перейти на предыдущую запись

MoveLast - перейти на последнюю запись

MoveFirst - перейти на первую запись

BOF - начало файла.

EOF - конец файла.

RecordCount - количество записей с первой до текущей.

Пример. Удаление всех записей в таблице.

Data1.RecordSet.MoveFirst

Do While Data1.RecordSet.EOF

Data1.RecordSet.Delete

Data1.RecordSet.MoveNext

Loop

 

Свойство RecordSource - источник записей, позволяет помимо таблиц БД использовать операторы SQL, чтобы выделить подмножество записей, удовлетворяющих некоторым условиям. Это позволяет создавать программные элемента dynaset или snapshop.

Ввод следующий фраз:

Select - отбор информации из полей.

From - указывает имя таблицы.

Where - определяет условия выборки.

Group By - для распределения выбранных записей в определенные группы.

Having - определяет условие, которому должна удовлетворять следующая группа записей.

Order By - порядок сортировки выбранных записей.

Например.

Data1.RecordSource = “Select Name, Address From AdressBook ...

Data1.RecordSource = “Select Name, Address From AdressBook

Data1.RecordSource = “Select Name, Address From AdressBook Where Name = ‘Иванов’‘’

“ . . . . Like ‘’Иван” (Ивасев, Иваницкий, Иванченко...)

Select Employers.Dept, M\Name From Supervisors, Employers Where Employers.Dept = Supervisiors.Dept

Можно использовать переменные

Data1.RecordSource = “Select * From Telephone Where Name = ‘ “& A &”’”

Text1.Text

В фразе Where можно использовать конечные операции And, Or, Not для соединения нескольких выражений или операции сравнения <, <=, >, >=, <>, Between, Like, In (для записей в БД)

Например

Data1.RecordSource = “Select * From Products

Where Tovar in (Select Tovar From_ Details Where Price>=25)”

 

Помимо запросов SQL можно изменять (Update, Set - новое значение Where), добавлять (Insert into), удалять (Delete From) записи в таблице.

Например

Dim A As String

A = “Update Orders”

A = A + “Set Amount = Amount * 1.1, Cast = Cast * 0.97”

A = A+ ”Where Order = ‘Цемент’”

Data1.Database.Execute ... Query - запрос с воздействием

 

Свойство Value

Можно ссылаться на некоторое поле текущей записи, даже если на форме нет связанного элемента.

Например

Sub

Dim A As String

A = Data1.RecordSet.Fields(“Name”).Value

MsgBox “Фамилия: ” + A

End Sub

Объектная модель DAO

Объектная модель DAO - объектно - ориентированный интерфейс процессора БД Jet . Это иерархия классов, которые являются логическим представлением реляционной модели базы данных. [AAnA1] Эти классы используются для создания объектов доступа к данным, обращающихся к конкретной базе данных.

 

 

DBEngine[AAnA2]

     
 


 

Workspace

 


           Database

                 
       

 


 TableDef     QueryDef    Recordset    Container   Relation

         
   


Field            Field             Field          Document   Field

 

 

Index          Parameter

         

 

 


Error         Field

 

 

Рис. Фрагмент объектной иерархии DAO.

 

Наличие объектной иерархии означает, что объекты могут содержать другие объекты, которые, в свою очередь, могут содержать другие объекты. Эта объектное включение реализуется через специальный вид объекта- коллекцию. Основное назначение объекта- коллекции - содержать и группировать другие объекты. Все объекты, содержащиеся в данной коллекции, одного вида.

Элементы в иерархии DAO фактически классы, а не объекты. Это макеты для объектов, создаваемых при формировании приложения базы данных, Класс подобен типу данных в том смысле, что он описывает, к какому виду объекта происходит обращение. Например, в объявлении Dim Ws As устанавливается, что переменная Ws будет служить ссылкой на объект класса[AAnA3] Workspace.

Наверху иерархии - объект DBEngine, непосредственно процессор базы данных MS Jet. Он является владельцем коллекции Workspaces (рабочая область), которая содержит объекты Workspace. Каждый объект Workspace включает коллекцию Databases, которая содержит один или больше объектов Database. Каждый объект Database включает коллекцию TableDefs, которая содержит один или больше объектов TableDef (определение таблицы) и т.д.

Объекты члена коллекции индексируются, начиная с 0 и могут быть доступны через этот индекс. Например, первый объект TableDef объекта Database, именуемого Database1, будет адресоваться как Database1. TableDefs (0). Второй TableDef того же объекта Database - Database1. TableDefs (1) и т.д. Объекты в иерархии идентифицируются полным путем через вложенные коллекции, к которым они принадлежат. Например,    

       DBEngine. Workspaces(0). Databases(0). [AAnA4] ss TableDefs (0).Fields(“Customer”)

 адресуется к полю Customer в первом TableDef коллекции TableDefs первого Database коллекции Databases первого Workspace коллекции Workspaces объекта DBEngine. Кроме того, для коллекции Fields можно вместо индекса использовать свойство Name объекта Field коллекции. При явном обращении к члену коллекции по именивместо точки используется восклицательный знак. Например, [AAnA5] ss

TableDefs (0).Fields(“Customer”) эквивалентно

TableDefs (0).Fields!Customer.

Большинство объектов доступа к данным имеет умолчательные коллекции. Это позволяет упрощать программный код. Например, умолчательная коллекция, которую содержит объект Recordset - коллекция Fields. Например, все 3 записи эквивалентны:

Cust= Recordset1! Customer

Cust= Recordset1 .Fields!Customer

Cust= Recordset1 . Fields(“Customer”).

 

 

Программирование с объектами DAO.

 

Программирование с объектами DAO заключается в создании объектных переменных и управления ими, вызове методов объектов и установке их свойств. Например,

Dim DB As Database, WS As Workspace(“account.mdb”) ‘ Объявления переменных

Set WS=DBEngine. Workspaces(0) ‘ Организуется рабочая область (именнованный сеанс пользователя).

Set DB= WS.OpenDatabase(“account.mdb”) ‘ Метод OpenDatabase объекта WS типа Workspace используется для открытия  базы данных[AAnA6] account.mdb и присвоения ссылки на нее объектной переменной DB типа Database.

Set RS=DB.OpenRecordset(“Clients”) ‘ С помощью метода OpenRecordset объекта DB создается набор записей на основе таблицы Clients, ссылка на который присваивается переменной RS типа Recordset.

RS.Index=“ClientID”  ‘ Свойству Index объекта RS присваивается значение ClientID.

 

[AAnA7]

Создание базы данных

 

Процедура построения  базы данных[AAnA8] Jet - это процесс создания и определения объектов доступа к данным, которые соответствуют таблицам, полям, индексам и отношениям структуры новой базы данных.

Пусть требуется создать библиографическую базу данных Biblio.mdb, состоящую из 3-х таблиц “Авторы”(Authors), “Названия”(Titles), “Издатели”(Publishers), связанных между собой следующими отношениями:

Titles                               Authors                             Publishers

Title                               AU_ID                                  PubID [AAnA9]

Year Published              Author                                 Name

ISBN                                                                                 Company

AU_ID                                                                              Address

PubID                                                                                 ...(10) [AAnA10]

 

 

Необходимо создать объект Database , определить его логическую структуру, добавив объекты TableDef и Field.

1. Для каждого объекта  базы данных создаются новые объектны[AAnA11] е переменные:

Dim DB As DataBase, WS As Workspace ‘объект базы данных DataBase [AAnA12]

Dim AuTd As TableDef, TitTd As TableDef, PubTd As TableDef  ‘ объект ‘TableDef для каждой из 3-х таблиц

Dim AuFlds(2) As Field, TitFlds(5) As Field, PubFlds(10) As Field ‘ объект Field

 ‘для каждого поля каждой таблицы

Dim AuIdx AS Index, TitIdx As Index, PubIdx As Index ‘ объект Index для

 ‘каждого индекса каждой из 3-х таблиц

 

2.На основе метода CreateDatabase объекта Workspace создается новая база данных:

Set Ws=DBEngine. Workspace(0)

Set Db=Ws.CreateDataBase(“C:\VB\Biblio.mdb”,dbLangGeneral,dbVersion30) ‘ [AAnA13] константа dbLangGeneral определяет языковую версию базы данных, а dbVersion30- базу данных Jet версии 3.0

 

3. С помощью метода CreateTableDef объекта Database создаются объекты Tabledef для каждой[AAnA14] таблицы базы данных[AAnA15] :

Set TitTd=DB.CreateTableDef(“Titles”)

Set AuTd= DB.CreateTableDef(“Authors”)

Set PubTd= DB.CreateTableDef(“Publishers”)

 

4. С помощью метода CreateField объекта TableDef создаются объекты Field для каждого поля каждой[AAnA16] таблицы базы данных. Для каждого поля устанавливаются свойства, определяющие размер, тип данных и другие необходимые атрибуты. Например, для поля Author код будет выглядеть следующим образом[AAnA17] :

Set AuFlds(0)=AuTd.CreateField(“AU_ID,dbLong)

‘ сделать поле счетчиком

AuFlds(0).Attributes=dbAutoIncrField

Set AuFlds(1)=AuTd.CreateField(“Author,dbText)

AuFlds(1)=50 ‘ длина поля

 

5.Используя метод Append добавить каждое поле к его таблице, а каждую таблицу - к базе данных:

AuTd.Fields.Append AuFlds(0)[AAnA18]

AuTd.Fields.Append AuFlds(1)[AAnA19]

DB.TableDefs.Append AuTd

 

[AAnA20]

6. Используя метод CreateIndex объекта TableDef, создать индексы для каждой таблицы и установить их свойства. Например. для таблицы Authors:

 Set AuIdx=AuTd.CreateIndex(“Au_ID”)

AuIdx.Primary=True ‘Первичный ключ

AuIdx.Unique=True ‘Уникальный ключ

 

7. Используя метод CreateField объекта Index, создать поля для каждого индексного объекта:

Set NewFld=AuIdx.CreateField(“Au_ID”)

 

8. Добавить поле к объекту Index, а объект Index к объекту TableDef:

AuIdx.Fields.Append NewFld

AuTd.Indexes.Append AuIdx

 

Вновь созданные поля объекта Index не становятся частью объекта TableDef. Вместе с тем им дается то же самое свойство Name, что и у поля объекта TableDef, которое они должны индексировать. Свойства Type и Size у этих полей не определяются.

 

 

Связывание таблиц

 

Создание объектов TableDef, которые содержат первичный и внешний ключи, позволяют связывать записи в одной таблице с соответствующими записями в другой таблице, согласно общим значениям первичного/внешнего ключей. При добавлении или удалении записей важно поддерживать так называемую ссылочную целостность. Ссылочная целостность означает, что внешний ключ в любой ссылающейся таблице всегда должен ссылаться на достоверную запись в адресуемой таблице, содержащей первичный ключ. Для поддержания ссылочной целостности используется объект Relation.

1. Добавить отношение к базе данных :

Dim Au_Tit As Relation  ‘ объект [AAnA21] Relation

Set Au_Tit =Db.CreateRelation(“Authors_Titles”) ‘ создается объект [AAnA22] Relation с помощью метода .CreateRelation

Au_Tit.Table=“Authors” ‘ Устанавливаются свойства объекта [AAnA23] Relation

Au_Tit.ForegnTable=“ Titles”

 

2. Создать поле, которое в отношении будет определять общее поле первичного/внешнего ключа:

DimTempField As Field

Set TempField = Au_Tit.CreateField(“Au_Id”) ‘ создается связующее поле [AAnA24] с помощью метода CreateField

TempField. ForegnName =“Au_Id” ‘ Устанавливаются свойства объекта Field [AAnA25]

 

3. Добавить объект Fields к объекту Relation, а объект Relation к объекту Database [AAnA26] с помощью метода Append:

Au_Tit.Fields.Append TempField

Db.Relations..Append Au_Tit

 

 

Связывание таблиц внешних баз данных[AAnA27]

 

Кроме определения новых таблиц можно присоединять таблицы из любой поддерживаемой внешней базы данных [AAnA28] или из другой базы данных[AAnA29] Jet. При связывании таблицы информация соединения сохраняется во внутренней базе данных Jet, и соединение будет устанавливаться автоматически всякий раз при открытии этой базы данных. Сами же данные остаются во внешней базе данных[AAnA30] .

Процедура связывания таблицы внешней базы данных подобна определению и созданию новой внутренней таблицы, за исключением того, что при создании объекта TableDef необходимо определить свойства SourceTableName и Connect. Кроме того, для этой таблицы нельзя связывания создавать или добавлять новые объекты Field и Index.

Для связывания внешней таблицы с базой данных необходимо:

 Создать для связываемой таблицы новый объект TableDef, используя метод CreateTableDef объекта Database. Назначить таблице новое имя (свойство Name). Например, чтобы присоединить таблицу Сustomers из базы данных Stocks.mdb к базе данных Biblio.mdb,можно записать:

Set NewTd=DB.CreateTableDef(“Customers”) ‘ Предполагается , что база данных Biblio.mdb открыта методом OpenDatabase и ей назначена переменная DB.

 

2. Установить свойства SourceTableName и Connect объекта TableDef:

NewTd. SourceTableName=“Customers”

NewTd. Connect=“;DATABASE=C:\Access\Stocks.mdb;”

 

3.Добавить новый объект TableDef к базе данных:

 

DB.TableDefs.Append NewTd

 

Модификация базы данных

 

Процедуры изменения базы данных подобны ее созданию. Используются те же методы Create и Append.

 

1.Для добавления таблицы к базе данных необходимо добавить новый объект TableDef к существующей коллекции TableDefs. Например:

Dim DB As DataBase [AAnA31]

Dim NewTd As TableDef ‘ Создать новый объект TableDef

Dim NewFld As Field ‘Создать новый объект Field

 

Set Db=DBEngine. Workspace(0).OpenDatabase(“Biblio.mdb”)

Set NewTd=DB.CreateTableDef(“NewTable”)

Set NewFld= NewTd.CreateField(“NewField”,dbInteger)

NewTd.Fields.Append NewFld ‘добавить поле к таблице

DB.TableDefs.Append NewTd ‘добавить таблицу к базе данных

Db.Close ‘Закрыть базу данных

 

1. Для добавления поля к таблице необходимо добавить новый объект Field к существующей коллекции Fields

 

Dim DB As DataBase [AAnA32]

Dim Td As TableDef

Dim Fld As Field ‘Создать новый объект Field

Set Db=DBEngine. Workspace(0).OpenDatabase(“C:\Biblio.mdb”)[AAnA33]

Set Td=DB. TableDefs(“Authors”)

Set Fld= Td.CreateField(“NewField1”,dbText,30) ‘Создать первое новое поле

Td.Fields.Append Fld ‘добавить поле к коллекции Fields

Set Fld= Td.CreateField(“NewField2”,dbText,20) ‘Создать второе новое поле с помощью той же переменной

Td.Fields.Append Fld ‘добавить еще один объект к коллекции Fields

Db.Close ‘Закрыть базу данных

 

2.Для добавления таблицы к базе данных необходимо добавить новый объект TableDef к существующей коллекции TableDefs. Например:

Dim DB As DataBase [AAnA34]

Dim NewTd As TableDef ‘ Создать новый объект TableDef

Dim NewFld As Field ‘Создать новый объект Field

 

Set Db=DBEngine. Workspace(0).OpenDatabase(“C:\Biblio.mdb”)

Set NewTd=DB.CreateTableDef(“NewTable”)

Set NewFld= NewTd.CreateField(“NewField”,dbInteger)

NewTd.Fields.Append NewFld ‘добавить поле к таблице

DB.TableDefs.Append NewTd ‘добавить таблицу к базе данных

Db.Close ‘Закрыть базу данных

 

3. Для добавления индекса к таблице необходимо добавить новый объект Index к существующей коллекции Indexes . Например:

 

Dim DB As DataBase, Td As TableDef, NewIdx As Index ,NewFld As Field  [AAnA35]

Set Db=DBEngine. Workspace(0).OpenDatabase(“C:\Biblio.mdb”)

Set Td=DB. TableDefs(“Authors”)

Set NewIdx =Td.CreateIndex(“Address[AAnA36] _Index”)

NewIdx.Unique=False

Set NewFld= NewIdx.CreateField(“Address”,)

NewIdx.Unique=False

NewIdx.Fields.Append NewFld ‘добавить поле к объекту Index

Td. Indexes.Append NewIdx ‘добавить объект Index к TableDef

Db.Close ‘Закрыть базу данных

 

4. Для удаления таблицы используется метод Delete коллекции TableDefs. Этот метод удаляет из таблицы все поля, индексы и данные, содержащиеся внутри таблицы. Например:

Db.TableDefs.Delete “Authors”

 

5. Для удаления поля (объекта Field)используется метод Delete объекта TableDef.

 Для удаления индексированного поля необходимо сначала удалить индекс, а также созданные посредством этого индекса объекты Relation. После этого можно будет удалить объект Field или объект TableDef, который является частью отношения.

 

6. Для удаления индекса используется метод Delete коллекции TableDefs.

Например:

Db.TableDefs(“Authors”). Indexes.Delete “Address[AAnA37] _Index” ‘ Из коллекции Indexes в таблице Authors удаляется индекс “Address[AAnA38] _Index”.

Нельзя удалять объект Index, который формирует объект Relation.

 

7. Для изменения  поля необходимо создать новый объект TableDef, который отражает требуемые изменения в полях, и затем переместить данные в новую таблицу, удалив старую.

 

Модификацию базы данных можно также проводить с помощью специальных запросов SQL.

 

Работа с записями базы данных

 

Работа с записями базы данных(добавление, удаление, модификация, поиск, сортировка) осуществляются DAO посредством объектов Recordset. Объект Recordset представляет записи исходной таблицы или записи, получаемые в результате выполнения запроса. Существуют 5 типов объектов Recordset:

* Объект Recordset типа table работает с локальной таблицей базы данных или вешней базы данных, созданной MS Jet. Этот объект можно индексировать, используя индекс, созданный для исходной таблицы, что намного ускоряет сортировку и поиск по сравнению с другими типами объектов Recordset.

* Объект Recordset типа dynaset (динамический набор) создается для локальных или связанных таблиц или с результатами запросов. Фактически, это набор ссылок на записи одной или более таблиц. С помощью dynaset можно получать и модифицировать данные более, чем одной таблицы, включая связанные таблицы из других баз данных. Набор dynaset и его исходные таблицы модифицируют друг друга. Dynaset - наиболее гибкий и мощный тип набора записей, хотя поиск в них работает не так быстро, как в случае table.

* Объект Recordset типа snapshot (моментальный снимок) содержит фиксированную копию данных в состоянии на момент создания snapshot. Snapshot, созданный на базе источника данных MS Jet, не может быть обновлен. Snapshot требует меньших затрат обработки, чем dynaset или table, и запросы в них выполняются быстрее.

* Объект Recordset типа forward- only (листаемый снимок, только вперед), обеспечивает подмножество функций snapshot. Он предоставляет меньше всего возможностей, но зато самое высокое быстродействие. Он не является обновляемым, и он позволяет перемещаться по записям только в прямом направлении.

* Объект Recordset типа dynamic - результирующий набор запроса одной или нескольких исходных таблиц, в котором можно добавлять, изменять или удалять записи.

Выбор того или иного типа набора записей зависит от того, какие функции необходимо выполнить, нужно ли изменять или просто просматривать данные. Обычно Объект Recordset типа table почти всегда обеспечивает наивысшую эффективность.

 

[AAnA39]

Создание перемещений RecordSet

Для этого используется метод OpenRecordSet

Set rstNew = dbs.OpenRecordSet(“Customers”, dbs.Open RecordSet),

где rstNew - переменная, dbs.OpenRecordSet(“Customers”, dbs.Open RecordSet) - ссылка на объект, возвращаемый методом OpenRecordSet.

Этот метод доступен не толко для объекта Database, но и Connection, TableDef, QueryDef и существующих наборов RecordSet.

Set rstNew = qdf.OpenRecordSet

Например, создается объект RecordSet из сохраненного в текущей БД запроса.

Dim dbs As Database, Rst As RecordSet

Set dbs=OpenDatabase (“Nwind.mdb”

[ Set rst = dbs.OpenRecordSet (“Сохраняет_Запрос”)]

или если сохранение запроса не существует

 

Dim strQuerySQL As String

Set dbs=OpenDatabase (...

StrQuerySQL=“Select * From Products”_ & “Order by ProductName”

Set rst=dbs.OpenRecordSet (strQuerySQL)

 

Перемещение по набору записей

Методы MoveFirst, MoveLast, MoveNext, MovePrevious - перемещает указатель.

Move [n]

Переделы набора записей определяется свойствами BOF и EOF, количество записей свойством - RecordCount.

Найти определенную запись в наборе можно с помощью метода Seek (для Table) и Find (dynaset, snapshop): FindFirst, FindLast, FindNext, FindPrevious.

Например

rstOrderDetails.Find “Order ID= ” & rstOrders.[Order ID] - для первой записи в Orders найти .... запись в OrderDetails

 

rst Suppliers.Index=“CompanyName”

rst Suppliers.Seek “=” str CompanyNAme

If rst Suppliers. NoMatch Then ...

(используется текущий индекс таблицы, определенной свойством Index). Свойство NoMatch используется для проверки найденной записи, критерий поиска.

После создания объекта RecordSet типа table или dynaset в переменной можно удавлять или добавлять, модифицировать новые записи (Update, Delete, AddNew).

.... модификации намного эффективнее с помощью запросов SQL.

Dim dbs As DataBAse, qdfChangeTitles As QueryDef

Set dbs = Open Database (‘ Nwind.mbb)

Set qdfChangeTitles=dbs.Create QueryDef (“ “)

qdf ChangeTitles.SQL=“Update Employers” & “Where Title = ‘Бухг’”

 

После извлечения записи можно обращаться к ее отдельным полям через коллекцию Fields объекта Reco



2019-10-11 183 Обсуждений (0)
Файлы последовательного доступа 0.00 из 5.00 0 оценок









Обсуждение в статье: Файлы последовательного доступа

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (183)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.009 сек.)