1 Mục lục 1 2 Làm quen với visual basic 0 9


Tạo đối tượng để thao tác trên cấu trúc của một CSDL



tải về 1.69 Mb.
trang31/39
Chuyển đổi dữ liệu09.10.2016
Kích1.69 Mb.
#32631
1   ...   27   28   29   30   31   32   33   34   ...   39

13.6Tạo đối tượng để thao tác trên cấu trúc của một CSDL


DAO cung cấp các thủ tục rất phong phú dùng để tạo cơ sở dữ liệu, bảng, trường, và các định nghĩa truy vấn. Ngoài ra, DAO còn cho phép ta tạo kiểu dữ liệu hiệu chỉnh mới trong ứng dụng, chẳng hạn như các thuộc tính hiệu chỉnh của các đối tượng cơ sở dữ liệu và những kiểu tài liệu cơ sở dữ liệu mới.

13.6.1Tạo một CSDL


Ta có thể sử dụng phương thức CreateDatabase của đối tượng DBEngine trong DAO để tạo cơ sở dữ liệu Jet của Microsoft.

Khi tạo một cơ sở dữ liệu, ta phải cung cấp tên một tập tin (thường có phần mở rộng là MDB) và một locale. Locale là một chức năng của ngôn ngữ được dùng bởi người sử dụng ứng dụng; nó chỉ ra thứ tự đối chiếu cho cơ sở dữ liệu. Thứ tự đối chiếu xác định cách thức lưu trữ các dữ liệu dạng văn bản trong cơ sở dữ liệu theo mặc định.



Lưu ý: Phương thức CreateDatabase của đối tượng DBEngine thay thế dòng lệnh CreateDatabase thường dùng trong các phiên bản cũ của DAO. Nhưng bởi vì DBEngine là một trong những đối tượng DAO mà ta không cần tham chiếu tường minh trong chương trình, ta có thể tiếp tục sử dụng CreateDatabase như cách cũ, không có tham chiếu đến đối tượng DBEngine trước nó. Tuy nhiên, nếu muốn chính xác 100%, ta dùng DBEngine.CreateDatabase thay vì CreateDatabase.

Ví dụ sau tạo một cơ sở dữ liệu. Ngoài ra, nó còn nối thêm một bảng duy nhất với 2 trường vào cơ sở dữ liệu .

Option Explicit

' References MS DAO 3.51

Private db As Database

Private td As TableDef

Private f As Field

Private Sub cmdCreate_Click()

On Error GoTo ErrHandler

Set db = DBEngine.CreateDatabase("..\..\DB\newdb.mdb", dbLangGeneral)

Set td = New TableDef

Set f = td.CreateField("LastName", dbText, 50)

td.Fields.Append f

Set f = td.CreateField("FirstName", dbText, 50)

td.Fields.Append f

td.Name = "tblSupplier"

db.TableDefs.Append td

Set db = Nothing

MsgBox "The database newdb.mdb has been created."

Exit Sub


ErrHandler:

If Err = 3204 Then

MsgBox "Try deleting the database 'newdb.mdb' first, pal."

Else


MsgBox Err.Description

End If


End Sub

Bởi vì phương thức CreateDatabase phát ra một lỗi nếu cơ sở dữ liệu đã có sẵn, chương trình này chứa phần xử lý lỗi thông báo cho người sử dụng những gì cầm làm khi cơ sở dữ liệu đã có sẵn. Cũng lưu ý rằng ta không cần tạo một đối tượng DBEngine. Nó luôn có sẵn để sử dụng bởi ứng dụng.


13.6.2Sử dụng đối tượng TableDef để thao tác với bảng


Ta sử dụng đối tượng TableDef để thao tác với cấu trúc của các bảng trong ứng dụng. Ta có thể dùng đối tượng TableDef để tạo bảng mới hoặc thay đổi bảng hiện hành.

13.6.2.1Sử dụng đối tượng TableDef để tạo một bảng mới


Để tạo một bảng mới, ta tạo một đối tượng kiểu TableDef và sau đó nối nó vào tập hợp TableDefs bằng cách sử dụng phương thức Append của tập hợp. (Cách làm này tương tự cho nhiều kiểu đối tượng DAO khác dùng để tạo các thành phần cố định của một cơ sở dữ liệu ).

Ví dụ sau đây dùng TableDef để tạo một bảng mới. Đoạn chương trình này sử dụng đối tượng Field và tập hợp Fields; sẽ được trình bày trong phần sau. Lưu ý rằng nếu ta dùng đoạn chương trình này để tạo một bảng có sẵn, ta sẽ bị báo lỗi thi hành. Do đó, nếu ta có sẵn một bảng là tblEmployee, ta chỉ ra giá trị cho thuộc tính Name của đối tượng TableDef tblEmployeeNew.

Option Explicit

' References: Microsoft DAO 3.51 Object Library

Dim db As Database

Private Sub Form_Load()

Set db = OpenDatabase("..\..\db\novelty.mdb")

End Sub


Private Sub cmdCreate_Click()

On Error GoTo ErrHandler

Dim td As TableDef

Dim f As Field

Set td = New TableDef

Set f = New Field

f.Name = "FirstName"

f.Type = dbText

td.Name = "tblEmployeeNew"

td.Fields.Append f

db.TableDefs.Append td

MsgBox "Lo, the table has been created."

Exit Sub

ErrHandler:

If Err.Number = 3010 Then

MsgBox "You can't create the table twice, chief."

Else

MsgBox Err.Description



End If

End Sub


Ta có thể tạo bảng và trường theo cách chính quy. Ta có Microsoft Access và Visual Data Manager của Visual Basic để làm việc này.

Ngoài ra, Để tạo bảng và các trường trong bảng cũng như mối quan hệ của bảng bằng chương trình ta dùng thêm phương thức CreateField của TableDef để tạo đối tượng Field và sử dụng phương thức CreateRelation của đối tượng Database. Để tạo chỉ mục sử dụng phương thức CreateIndex của đối tượng TableDef.


13.6.2.2Sử dụng đối tượng QuyryDef để thao tác trên truy vấn chứa sẵn


Ta có thể sử dụng đối tượng QueryDef của DAO để tạo và sửa đổi các truy vấn chứa sẵn. Ngoài việc tạo các truy vấn chứa sẵn, đối tượng QueryDef còn cho phép thi hành các truy vấn tham số hoá; đây là một láy do phổ biến để truy cập các đối tượng QueryDef thông qua lập trình DAO.

Ta còn có cách khác để tạo các truy vấn chứa sẵn thông qua DAO. Đó là sử dụng Microsoft Access hay Visuald Data Manager của Visual Basic để tạo các truy vấn chứa sẵn.

Ta tạo định nghĩa truy vấn trong cơ sở dữ liệu bằng cách sử dụng đối tượng QueryDef của DAO. Các định nghĩa này có thể là tạm thời, nghĩa là chúng sẽ biến mất khi hoàn tất hoặc là vĩnh viễn chứa trong cơ sở dữ liệu.

Ta tạo một đối tượng QueryDef bằng đoạn chương trình sau:

Option Explicit

' References MS DAO 3.51

Dim db As Database

Dim qd As QueryDef

Sub Form_Load()

Set db = OpenDatabase("..\..\DB\novelty.mdb")

End Sub

Private Sub cmdCreate_Click()



On Error GoTo ErrHandler

Set qd = New QueryDef

qd.SQL = "SELECT * FROM tblCustomer " & _

"WHERE LastName Like 'L*' " & _

"ORDER BY [LastName], [FirstName]"

qd.Name = "qryCustomerSortName"

db.QueryDefs.Append qd

MsgBox "Whaddya know, the query was created."

Exit Sub

ErrHandler:

MsgBox "There was an error creating the querydef. (" & _

Err.Description & ")"

End Sub

Ta chỉ ra tên của QueryDef cần tạo bằng cách sử dụng thuộc tính Name của đối tượng QueryDef. Nếu ta cố tạo một QueryDef có sẵn, nó sẽ kích hoạt một lỗi bẫy được.



Đừng quên đặt tên cho QueryDef mới; nếu không, ta sẽ không có cách nào tham chiếu đến nó ( và Jet không thể lưu nó). Nhớ rằng, ta cần xác định truy vấn nào có sẵn trong cơ sở dữ liệu tại thời điểm bất kỳ bằng cách lặp qua tập hợp QueryDefs.

13.6.2.3Sử dụng đối tượng QueryDef để thi hành truy vấn


Ta có thể thi hành truy vấn bằng cách sử dụng các phương thức của đối tượng QueryDef . Ta thường thực hiện điều này trong những trường hợp mà ta cần làm một công việc bất thường nào đó trước khi thi hành truy vấn, như là chỉ định một tham số, hoặc khi ta cần thi hành một truy vấn hành động dùng để cập nhật, xoá hay sửa đổi các mẩu tin trong cơ sở dữ liệu.

Để thi hành một QueryDef, ta sử dụng phương thức OpenRecordset của đối tượng QueryDef (để thi hành một truy vấn hành động ).

Để thi hành một QueryDef , ta theo các bước sau:


  1. Tạo một instance của đối tượng QueryDef bằng lập trình

  2. Tạo một chuỗi SQL định nghĩa những gì QueryDef sẽ làm khi nó thi hành.

  3. Gán chuỗi SQL cho thuộc tính SQL của QueryDef.

  4. Nối QueryDef vào tập hợp QueryDefs của đối tượng Database.

Ví dụ :

Private Sub cmdRun_Click()

On Error GoTo ErrHandler

Dim rs As Recordset

Dim qd As QueryDef

Set qd = db.QueryDefs("qryCustomerSortName")

Set rs = qd.OpenRecordset

Do Until rs.EOF

lstCustomer.AddItem rs!LastName & " " & _

rs!FirstName & " " & _

rs!Address

rs.MoveNext

Loop

Exit Sub


ErrHandler:

MsgBox "There was an error running the query. " & _

"Are you sure you created it?"

End Sub

13.6.2.4Sử dụng đối tượng QueryDef để tạo truy vấn


Ta có thể tạo một QueryDef bằng cách lập trình. Để tạo một QueryDef, ta tạo một đối tượng QueryDef mới bằng cách sử dụng phương thức CreateQueryDef của đối tượng Database. Phương thức này cho phép cung cấp một tên cho truy vấn và gán cho nó một chuỗi SQL. Thi hành phương thức này cũng lưu QueryDef vĩnh viễn trong cơ sở dữ liệu.

Dim db As Database

Dim qd As QueryDef

Set db = OpenDatabase("..\..\DB\novelty.mdb")

Set qd = db.CreateQueryDef(“qryCustomer” , “Select * from tblCustomer”)

Mỗi lần tạo QueryDef, ta có thể thao tác với nó trong chương trình như ta vẫn thường làm. Cho QueryDef một tên là để xác định xem truy vấn có được chứa vĩnh viễn trong cơ sở dữ liệu hay không. Nếu ta muốn tạo một QueryDef mà không chứa vĩnh viễn trong cơ sở dữ liệu, chỉ cần truyền một chuỗi rỗng thay cho tham số thứ nhất của phương thức CreateQueryDef.


13.6.2.5Sử dụng đối tượng Parameter để tạo truy vấn tham số hoá


Tập hợp Parameters của một QueryDef cho phép ta tiến hành một truy vấn tham số hoá. Các truy vấn này được xây dựng với một hay nhiều thành phần cố ý bỏ qua; các thành phần này được phải cung cấp đủ khi truy vấn thi hành.

Ta tạo các truy vấn tham số hoá bởi vì chúng thi hành nhanh hơn các truy vấn xây dựng trong SQL chứa trong chương trình Visual Basic. Điều này xảy ra vì bộ máy cơ sở dữ liệu biên dịch một truy vấn trước khi ta thi hành, giúp tối ưu hoá thi hành của truy vấn.

Chương 12 trình bày cú pháp của một truy vấn tham số hoá

SELECT * FROM tblCustomer WHERE ID=pID

Tham số trong truy vấn này là pID. Dưới cú pháp SQL của Jet, pID được thông dịch thành một tham số bởi vì nó không hưởng ứng tên của trường hoặc bảng bất kỳ trong cơ sở dữ liệu.

Để truy vấn thi , ta cung cấp một giá trị cho tham số này. Ta cung cấp một tham số trong chương trình bằng cách chỉ ra thuộc tính Value của đối tượng Parameter thích hợp.

Option Explicit

' References MS DAO 3.51

Private db As Database

Private qd As QueryDef

Private rs As Recordset

Private Sub Form_Load()

Set db = OpenDatabase("..\..\DB\novelty.mdb")

Set qd = db.QueryDefs("qryCustomerByID")

End Sub

Private Sub cmdQuery_Click()



qd.Parameters("pID").Value = txtID.Text

Set rs = qd.OpenRecordset

If rs.EOF And rs.BOF Then

MsgBox "Sorry, no customers with that " & _

"ID are in the database."

Else


MsgBox rs!Address & vbCrLf & _

rs!Phone, _

vbInformation, _

"Info for " & rs!FirstName & _

" " & rs!LastName

End If


End Sub

Để tìm ra một khách hàng với ứng dụng này, người sử dụng nhập số ID của khách hàng trong hộp văn bản. Nếu ứng dụng tìm thấy một khách hàng với ID đó trong cơ sở dữ liệu, nó sẽ hiển thị địa chỉ và số điện thoại cảu khách hàng đó. Nếu ứng dụng xác định rằng không có mẩu tin đáp ứng tiêu chí tìm kiếm, nó sẽ thông báo cho người sử dụng.



Lưu ý: Bởi vì tham số của một QueryDef là một hàm của câu lệnh SQL định nghĩa truy vấn, ta không thể tham số mới vào tập hợp Parameters của một QueryDef như cách ta thường làm để thêm một đối tượng vào tập hợp trong DAO.


tải về 1.69 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   27   28   29   30   31   32   33   34   ...   39




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương