Bài giảng Cơ sở dữ liệu

1. Bộ máy (Engine) cơ sở dữ liệu là gì?

 Chức năng cơ bản của CSDL được cung cấp bởi một bộ máy CSDL, là hệ thống chương trình quản lý cách thức chứa và trả về dữ liệu.

 Bộ máy CSDL ở đây là Microsofts Jet. Jet là một hệ thống con được nhiều ứng dụng của Microsoft sử dụng.

 

ppt32 trang | Chia sẻ: gaobeo18 | Lượt xem: 1098 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Cơ sở dữ liệu, để xem tài liệu hoàn chỉnh bạn click vào nút TẢI VỀ ở trên
1. Bộ máy (Engine) cơ sở dữ liệu là gì?	Chức năng cơ bản của CSDL được cung cấp bởi một bộ máy CSDL, là hệ thống chương trình quản lý cách thức chứa và trả về dữ liệu. Bộ máy CSDL ở đây là Microsofts Jet. Jet là một hệ thống con được nhiều ứng dụng của Microsoft sử dụng.Cơ sở dữ liệuChú ý : trước khi lập trình phải khai báo thư viện DAO như sau: Tools/References/Microsof DAO 3.6 Object Library/okDate1Design: Nguyen Hien Du2. Sơ đồ quan hệ của các đối tượngDBEngineWorkspacesDatabasesTableDefsQueryDefsRecordsetsFieldsIndexesFieldsParametersFieldsFieldsDate2Design: Nguyen Hien Du3. Các đối tượng phục vụ việc xử lý đối tượngĐối tượng kiểu Database: dùng để thao tác với một cơ sở dữ liệuĐối tượng kiểu Tabledef: Dùng để tạo, xoá, sửa cấu trúc của bảngĐối tượng kiểu QueryDef: Dùng để tạo, xoá, sửa cấu trúc của truy vấnĐối tượng kiểu Recorset: Dùng để xử lý các bản ghi của CSDLDate3Design: Nguyen Hien Du4.Các chức năng xử lý	Khi sử dụng đối tượng kết hợp với phương thức và thuộc tính ta có thể xử lý một số công việc sau:Sắp xếp các bản ghi theo một trật tự nhất định nào đó.Lấy ra những bản ghi thoả mãn một số điều kiện nào đóDò tìm các bản ghi mà ta cầnThêm, xoá và sửa các bản ghiDate4Design: Nguyen Hien DuBiến Kiểu DATABaSE1. Làm việc với một cơ sở dữ liệu cần:	+ Khai báo một biến kiểu Database	+ Cho biến này tham chiếu đến một CSDL cụ thể nào đó trong một vùng làm việc nào đó2. Để kết nối với CSDL hiện hành có 2 cáchCách 1: (Dùng hàm CurrentDB)‘Khai báo biến DB kiểu Database Date5Design: Nguyen Hien DuDim DB as Database‘ Thắt chặt mối quan hệ giữa biến DB và CSDL hiện hành.Set DB=CurrentDB()Cách 2:Dim DB as DatabaseSet DB= DBEngine.Workspace(0).Databases(0)Date6Design: Nguyen Hien Du3. Làm việc với một CSDL khác	Tại một thời điểm có thể đồng thời làm việc với nhiều CSDL khác nhau. Như vậy có thể đồng thời cùng xử lý bảng, truy vấn. 	Tuy nhiên chỉ cho phép sử dụng biểu mẫu, Macro, Report, Modul của CSDL hiện tại.Cách làm việcDim DB as DatabaseDim Ws as WorkspaceSet Ws=DBEngine.Workspace(0)Set DB=Ws.Opendatabase()Date7Design: Nguyen Hien DuĐể đóng một đối tượng ta dùng phương thức Close	DB.CloseVí dụ:Dim db As Databasea = Dir("Ketoanmt.MDB")If a = "" Then MsgBox "Ketoanmt.MDB not found" Exit SubEnd Ifa = VBA.CurDir$() & "\" & aSet db = Workspaces(0).OpenDatabase(a)MsgBox "ketoanmt.MDB is now open"db.CloseDate8Design: Nguyen Hien DuBiến kiểu RecorSet	Để xử lý dữ liệu của bảng, truy vấn ta dùng biến khai báo kiểu RecordsetCó 3 loại RecordsetKiểu RecordsetSố bản ghiDữ liệuLoại TableCó thể thay đổiCó thể thay đổiLoại DynasetCó thể thay đổiCó thể thay đổiLoại SnapshotKhông thay đổiKhông thay đổiDate9Design: Nguyen Hien Dua. Recordset loại Table: 	Chỉ áp dụng cho bảng của CSDL hiện tại, có thể thêm, xoá, sửa, sắp xếp tìm kiếm theo phương thức Seekb. Recordset loại Dynaset: 	Có thể áp dụng trên bảng, truy vấn. Có thể thay đổi dữ liệu (thêm, xoá, sửa) và tìm kiếm theo phương thức Findc. Recordset loại Snapshot: 	Có thể áp dụng trên bảng và truy vấn nhưng chỉ cho xem dữ liệuDate10Design: Nguyen Hien DuPhương thức Openrecordset()là phương thức cơ bản để tạo một biến RecordsetCách viết:Set Bien_R=Bien_O.OpenRecordset(Nguồn,loại)- Bien_O: là một biến đối tượng kiểu database, Tabledef, hoặc Querydef- Nguồn: là chuỗi ký tự biểu thị tên bảng, truy vấn hoặc câu lệnh SQL- Loại: là một trong các giá trị (dbOpenTable, dbOpenDynaset, dbOpenSnapshot)Date11Design: Nguyen Hien DuVí dụ: Tạo Recordset gắn với csdl hiện hànhDim db As DAO.DatabaseDim Rs As DAO.RecordsetSet db = DBEngine.Workspaces(0).Databases(0)Set Rs = db.OpenRecordset("DSCB", dbOpenTable)While Not Rs.EOF MsgBox Rs.Fields("Hoten").Value Rs.MoveNextWendRs.Closedb.CloseDate12Design: Nguyen Hien DuVí dụ 2. Kết hợp với các lệnh SQLDim db As DAO.DatabaseDim Rs As DAO.RecordsetSet db = DBEngine.Workspaces(0).Databases(0)Set Rs = db.OpenRecordset("SELECT Hoten FROM DSCB", dbOpenDynaset)While Not Rs.EOF MsgBox Rs.Fields("Hoten").Value Rs.MoveNextWendRs.Closedb.CloseDate13Design: Nguyen Hien DuVí dụ 3. Kết hợp với truy vấn. giả sử ta tạo query có tên “HT”.Dim db As DAO.DatabaseDim Rs As DAO.RecordsetSet db = DBEngine.Workspaces(0).Databases(0)Set Rs = db.OpenRecordset(“HT", dbOpenDynaset)While Not Rs.EOF MsgBox Rs.Fields("Hoten").Value Rs.MoveNextWendRs.Closedb.CloseDate14Design: Nguyen Hien DuHoăc có thể viếtDim db As DAO.DatabaseDim Rs As DAO.RecordsetDim Qr As DAO.QueryDefSet db = DBEngine.Workspaces(0).Databases(0)Set Qr = db.QueryDefs("a1")Set Rs = Qr.OpenRecordset()While Not Rs.EOF MsgBox Rs.Fields("Hoten").Value Rs.MoveNextWendRs.Closedb.CloseDate15Design: Nguyen Hien Du2. Tham chiếu đến các trường của Recordset	Để lấy dữ liệu của các trường hoặc thay đổi giá trị của các trường cần tham chiếu đến các trường của Recordset.Dùng tên trườngCó thể dùng 3 cách viết sau:Bien_Rec!tên trườngBien_Rec(“Tên trường”)Bien_Rec.Fields(“Tên trường”).ValueVí dụ: Date16Design: Nguyen Hien DuDim db As DAO.DatabaseDim Rs As DAO.RecordsetDim Qr As DAO.QueryDefSet db = DBEngine.Workspaces(0).Databases(0)Set Rs = db.OpenRecordset(“HT", dbOpenDynaset)While Not Rs.EOF	MsgBox Rs!Hoten & Rs.Fields("Ngaysinh").Value & Rs("kv") Rs.MoveNextWendRs.Closedb.CloseDate17Design: Nguyen Hien Dub. Dùng số thứ tự của trườngĐể truy cập tới các trường thông qua số thứ tự cần dùng đối tượng và các thuộc tính sau:Dùng thuộc tính count của đối tượng Fields để xác định:N = Bien_Rec.Fields.Count- Trong đó các trường thứ i (i=0..N-1) được viết như sau:Bien_Rec.Fields(i)Để xác định tên trường thứ i ta dùng thuộc tính Name:Bien_Rec.Fields(i).NameĐể truy cập tới giá trị của trường ta dùng:Bien_Rec.Fields(i).ValueDate18Design: Nguyen Hien DuVí dụSub Dembg()Dim Db as DAO.Database, DimRec as DAO.RecordSet, dem as integer	Set Db=CurrentDb()	Set Rec=Db.OpenrecordSet("diem")	dem=Rec.RecordCount	Msgbox"tổng số bản ghi là" & demEnd SubDate19Design: Nguyen Hien Du3. Tham chiếu đến các ô diều khiển của biểu mẫu	Để tham chiếu đến các ô của biểu mẫu ta có thể dùng các cách:- Forms!Tên_biểu_mẫu!ô_điều_khiển- Forms! Tên_biểu_mẫu(“ô_điều_khiển”)ví dụ: giả sử forms Hoso có các textbox co tên Hoten, Ngaysinh ta viết như sau:Forms![Hoso]![Hoten]Forms![Hoso](“Ngaysinh”)Date20Design: Nguyen Hien DuMột số phương thức của REcordsetPhương thức di chuyểnMoveFirst: Về bản ghi đầu tiênMovePrevious: Về bản ghi trước MoveNext: về bản ghi tiếpMoveLast: Về bản ghi cuối cùngPhương thức thêm, xoá, sửaADD: Thêm mới bản ghiUPDATE: Cập nhật (Ghi lại) Bản ghiEDIT: Sửa bản ghiDELETE: Xóa bản ghiDate21Design: Nguyen Hien Du4. Phương thức tìm kiếm loại Dynaset,SnapshotFindFirst : Tìm bản ghi đầu tiênFindLast :Tìm bản ghi cuối cùngFindNext :Tìm bản ghi tiếp theoFindPrevious :Tìm bản ghi trước đó5. Thuộc tính NoMatch()	NoMatch=False : nếu tìm thấy	NoMatch=True : Nếu không tìm thấy6. Nhân biết vị trí bản ghi đầu, cuối	EOF = True: đã ở bản ghi cuối	BOF=True : đã ở bản ghi đầu tiênDate22Design: Nguyen Hien Du1. Khởi tạo cơ sở dữ liệu.Cấu trúc:Set db = ws.CreateDatabase (name, locale, options)Trong đó:Db: là biến có kiểu là DatabaseWs: là biến có kiểu WorkspaceName: tên csdl cần tạoLocate: chọn ngôn ngữ sử dụng và mật khẩu csdlOption: lựa chọn phiên bản bộ máy csdlKhởi tạo đối tượngDate23Design: Nguyen Hien DuDim Ws as dao.workspaceDim db as dao.databaseVí dụ 1: Set db = ws.CreateDatabase("Newdb.mdb", dbLangGeneral, dbEncrypt) Ví dụ 2:Set db = ws.CreateDatabase("NewDB.mdb", dbLangGeneral & ";pwd=Password” , dbEncrypt) Date24Design: Nguyen Hien Du2. Khởi tạo TableSet TB = DB.CreateTableDef (name)Trong đó:TB: là biến có kiểu TabledefName: tên bảng cần tạoVí dụ:Dim tb as dao.tabledefSet tb = db.CreateTableDef(“Khachhang“)Date25Design: Nguyen Hien Du3. tạo trườngCấu trúc:Set fd = Tb.CreateField (name, type, size)Trong đó:Fd: biến kiểu trườngName: tên trườngType: kiểu của trườngSize: độ rộng của trườngLưu ý: đối với kiểu number hoặc date không đặt độ rộng cho trường, chỉ áp dụng cho kiểu textDate26Design: Nguyen Hien DuCác kiểu dữ liệu của trường:dbBooleandbBytedbChardbCurrencydbDatedbDoubledbIntegerdbLongdbLongBinaryLong Binary (OLE Object)dbMemodbNumeric, dbSingle, dbText..Date27Design: Nguyen Hien DuVí dụ:Set db = OpenDatabase(“Khachhang.mdb") Set td = db.CreateTableDef(“Custommer")With td 	.Fields.Append .CreateField(“Makh", dbText) .Fields.Append .CreateField(“Tenkhach", dbtext) 	.Fields.Append .CreateField(“Soluong", dbinteger)End With db.TableDefs.Append tdDate28Design: Nguyen Hien Duví dụ : Ta có bảng NHANSU gồm các trường : hoten, mucluong, ngáyinh, namlenluong. Tạo thủ tăng lương thêm 10000 đồng cho những cán bộ lên lương từ năm 2000 trở về trước .Sub tangluong()Dim db as DAO.Database, Rec as DAO. RecordSetSet Db=currentDb() (gắn biến db vào CSDL hiệnthời)Set Rec=Db.OpenRecordSet("NHANSU")Do Until Rec.EOF (làm cho đến hết tệp)Date29Design: Nguyen Hien Duif Rec![namlenluong]=20Sub danhsach()Dim Db as DAO. DatabaseDim Rec as DAO.RecordSetSet Db=CurrentDb()Set Rec=Db.OpenRecordSet("Diem")Rec.Movefirst (chuyển trỏ đến bản ghi đầu tiên)Date31Design: Nguyen Hien DuDo Until Rec.EOFif Rec![TongDiem]>=20 ThenMsgbox"SBD:" & Rec![SBD] & vbcrlf & "họ tên:" & Rec![hoten] & vbcrlf & "tổng diiểm" & Rec![tongdiem]End ifRec.MoveNext (chuyển trỏ đến bản ghi kế tiếp)loopRec.Close Db.CloseEnd subDate32Design: Nguyen Hien Du

File đính kèm:

  • pptCSDL.ppt