Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД / УСТАНОВ_ЛЕКЦИИ_БД / УСТАНОВ_ЛЕКЦИИ_БД / О ядре баз данных Программное обеспечение.doc
Скачиваний:
37
Добавлен:
26.05.2015
Размер:
287.23 Кб
Скачать

Сортировка с помощью ключевого слова order by

Используйте оператор ORDER BY для сортировки записей, полученных с помощью инструкции SELECT, в соответствии со значениями одного или нескольких полей. Оператор ORDER BY указывается в конце инструкции, как показано ниже:

SELECT Toy, Price , InStock

FROM Toylnventory

ORDER BY Toy

Можно проводить сортировку по значениям нескольких полей, указав эти поля в необходимом порядке сортировки:

SELECT Toy, Price

FROM Toylnventory

ORDER BY Price DESC, Toy

По умолчанию сортировка всегда проводится по возрастанию. Для явного указания порядка сортировки используйте ключевое слово DESC (descending— убывание) или ASC (ascending— возрастание), после которого необходимо указать имя соответствующего поля.

Выполнение групповых обновлений и удалений в sql

Инструкции UPDATE и DELETE позволяют изменять или удалять группу записей в источнике данных с помощью одной команды. Эти инструкции работают непосредственно с исходной БД (повышение цены на 10% для товаров определенной категории):

UPDATE Toys

SET Price = Price * 1.1

WHERE Category = ' Trains '

Имя таблицы указывается сразу после слова UPDATE. После этого указывается оператор SET, с помощью которого вы определяете значение одного или нескольких полей в таблице. Необязательный оператор WHERE позволяет задать критерии, ограничивающие записи, к которым будут применяться изменения.

Пример удаляет записи для всех игрушек, которые отсутствуют на складе и не были заказаны:

DELETE FROM Toys

WHERE InStock = 0 And OnOrder = 0

Для удаления значений отдельных полей, а не целых записей, используйте инструкцию UPDATE вместе с оператором SET, определяющим значение поля равным Null .

Инструкции UPDATE и DELETE приводят к необратимым изменениям в базе данных - обязательно создайте резервную копию базы данных.

Converting DAO Code to ADO

DAO

ADO(ADODB)

Note   

DBEngine

None

Workspace

None

Database

Connection

Recordset

Recordset

Dynaset-Type

Keyset

Retrieves a set of pointers to the records in the recordset

Snapshot-Type

Static

Both retrieve full records but a Static recordset can be updated.

Table-Type

Keyset with adCmdTableDirect Option

Field

Field

When referred to in a Recordset

DAO

ADO

Open a Recordset

Dim db as Database

Dim rs as DAO.Recordset

Set db = CurrentDB()

Set rs = db.OpenRecordset("Employees")

Dim rs as New ADODB.Recordset

rs.Open "Employees", CurrentProject.Connection, adOpenKeySet, adLockOptimistic

Edit a Recordset

rs.Edit

rs("TextFieldName") = "NewValue"

rs.Update

rs("TextFieldName") = "NewValue"

rs.Update

Update переводит курсор на следующую запись

1. Создание запроса и размещение его в БД с именем SecondQuarter для всех счетов из таблицы Orders, размещенных позже 3-31-96:

DAO

Public Sub GetOrders()

Dim dbs As DAO.Database

Dim qdf As DAO.QueryDef

Dim strSQL As String

Set dbs = CurrentDb

strSQL = "SELECT * FROM Orders WHERE OrderDate >#3-31-96#;"

Set qdf = dbs.CreateQueryDef("SecondQuarter", strSQL)

End Sub

ADO

Dim dbs As Database, qdf As QueryDef, strSQL As String

Set dbs = CurrentDb

strSQL = "SELECT * FROM Orders WHERE OrderDate >#3-31-96#;"

Set qdf = dbs.CreateQueryDef("SecondQuarter", strSQL)

2. Использование переменной вместо константы типа Дата.

Dim dbs As Database, qdf As QueryDef, strSQL As String

Dim dteStart As Date

dteStart = #3-31-96#

Set dbs = CurrentDb

strSQL = "SELECT * FROM Orders WHERE OrderDate> #" & dteStart & "#;"

Set qdf = dbs.CreateQueryDef("SecondQuarter", strSQL)

3. Создание запроса по значению элемента OrderDate на форме Orders. .

Dim dbs As Database, qdf As QueryDef, strSQL As String

Set dbs = CurrentDb

strSQL = "SELECT * FROM Orders WHERE OrderDate> #" & Forms!Orders!OrderDate & "#;"

Set qdf = dbs.CreateQueryDef("SecondQuarter", strSQL)

Recordset Property

You cannot use this property with ODBCDirect recordset types in DAO.

Recordset возвращает набор данных на форме, в отчете в списке или поле со списком. Если форма основана на запросе, то объект Recordset формы эквивалентен копии (клону) объекта Recordset запроса. Свойство RecordsetClone позволяет обращаться к текущей записи на форме.

Recordset type

Based on SQL data

Based on Jet data

ADO

Read/Write

Read/Write

DAO

N/A

Read/Write

Следующий пример открывает форму, открывает набор данных и связывает форму с новым набором данных типа Recordset через свойство Recordset открытой формы.

Global rstSuppliers As ADODB.Recordset

Sub MakeRW()

DoCmd.OpenForm "Suppliers"

Set rstSuppliers = New ADODB.Recordset

rstSuppliers.CursorLocation = adUseClient

rstSuppliers.Open "Select * From Suppliers", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

Set Forms("Suppliers").Recordset = rstSuppliers

End Sub

Таким образом, свойство Recordset можно использовать для:

  • отображения на подчиненных формах одних и тех же данных, т.е. синхронизации форм.

Set Me.Recordset = Forms!Form1.Recordset

  • использования методов к объекту Recordset, которые не поддерживаются на форме, например, методома Find для поиска записи

  • завершения транзакции на многочисленных формах.

Изменение свойства Recordset формы может повлечь за собой изменение свойств RecordSource, RecordsetType, and RecordLocks. Другие свойства могут автоматически отключиться (Filter, FilterOn, OrderBy, OrderByOn).

Вызов метода Requery (Forms(0).Recordset.Requery) для набора данных на форме может привести к разрыву связей формы с набором. Поэтому, для обновления данных на форме, связанной с набором, установите свойство RecordSource формы самому себе

(Forms(0).RecordSource = Forms(0).RecordSource).

Пример использования свойства Recordset для создания копии объекта Recordset, привязанного к форме.

Sub Print_Field_Names()

Dim rst As DAO.Recordset

Dim fld As Field

Set rst = Me.Recordset

For Each fld in rst.Fields

Debug.Print fld.Name

Next

End Sub

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

Sub SupplierID_AfterUpdate()

Dim rst As DAO.Recordset

Dim strSearchName As String

Set rst = Me.Recordset

strSearchName = CStr(Me!SupplierID)

rst.FindFirst "SupplierID = " & strSearchName

If rst.NoMatch Then

MsgBox "Record not found"

End If

rst.Close

End Sub

Проверка типа набора записей.

Sub CheckRSType()

Dim rs as Object

Set rs=Forms(0).Recordset

If TypeOf rs Is DAO.Recordset

Then

MsgBox "DAO Recordset"

ElseIf

TypeOf rs is ADODB.Recordset

Then

MsgBox "ADO Recordset"

End If

End Sub

Соседние файлы в папке УСТАНОВ_ЛЕКЦИИ_БД