truy nhập cơ sở dữ liệu trong visual basic
Trang 1III/ Truy cập cơ sở dữ liệu trong Visual Basic
1/ Giới thiệu ODBC (Open Database Connectivity)
Khái niệm
ODBC là một chuẩn do Microsoft đưa ra để truy cập dữ liệu Phát triển ODBC, Microsoft muốn xây dựng một Application Programming Interface ( API ) duy nhất có thể sử dụng để truy cập cơ sở dữ liệu trên nhiều hệ quản lý cơ sở dữ liệu khác nhau Có 2 ưu điểm mà ODBC tận dụng được là :
• ODBC cung cấp một giao diện duy nhất để truy cập đến nhiều cơ sở dữ liệu khác nhau, nhờ đó giảm bớt thời gian nghiên cứu cơ sở dữ liệu mới cho bạn và cho nhà phát triển
• ODBC cho phép phát triển ứng dụng Client độc lập với Server cuối
ODBC là thành phần tối quan trọng cho phép bạn sử dụng Visual Basic để phát triển các ứng dụng Client / Server
Cấu trúc của ODBC gồm 4 phần chính :
• Application (ứng dụng) : là giao diện để người dùng làm việc
với ứng dụng Nó sử dụng API ( Application Programming Interface) với ODBC để xây dựng kết nối đến cơ sở dữ liệu và điều khiển dữ liệu thông qua các câu lệnh SQL.
• Driver Manager ( trình quản lý điều khiển ) : là trung gian
giữa ứng dụng và trình điều khiển đã được xác định để truy cập từng loại cơ sở dữ liệu Còn đối với dữ liệu , nó chỉ yêu cầu kết
Trang 2nối đến DataSource , không cần thiết một liên kết đến trình điều khiển.
• Driver (trình diều khiển ) :bổ sung cho ODBC API một hệ
thống quản lý cơ sở dữ liệu bằng cách xây dựng mối quan hệ đến server, chịu sự điều khiển của các điều lệnh SQL sau đó trả kết quả về, hay thông báo lỗi cho ứng dụng
• DataSource ( nguồn dữ liệu ) : đây là sự kết nối giữa hệ
quản trị cơ sở dữ liệu với hệ điều hành từ xa hay mạng được yêu cầu để truy cập một cơ sở dữ liệu riêng nào đó chẳng hạn :
Oracle chạy dưới Open VMS được truy cập
thông qua Path Works / DECNet.
DB2 chạy dưới MVS được truy cập thông qua
một cổng
Paradox hay Foxpro truy cập cơ sở dữ liệu cục
bộ nên không đòi hỏi hệ điều hành từ xa hay mạng nào
Thực chất ODBC là các tập tin DLL do các nhà cung cấp xây dựng và thông qua một giao diện nào đó, người dùng sẽ cung cấp các thông số cho các tập tin này để nó thực hiện nhiệm vụ.
Ta có thể mô tả cấu trúc ODBC theo hình vẽ như sau :
Trang 3 ODBC được bổ sung như là một các file có thể thi hành được, như các file INI, DLL ( Dynamic Link Libraries) như sau :
• ODBC Administrator (ODBCADM EXE) : là chương trình thuộc nhóm CONTROL PANEL , cho phép cái đặt các trình điều khiển ODBC mới và định nhgĩa
Trang 4DataSource mới Việc cài đặt sẽ chi tiết hơn trong
ODBCINST INI , và DataSource cũng rõ ràng hơn trong ODBC INI
• Drive Manager (ODBC DLL) : quản lý trình điều khiển, chịu trách nhiệm kết nối DataSource đến các trình điều khiển Khởi động các trình điều khiển ODBC khác nhau và khởi động kích hoạt khác.
• Drivers : Các trình điều khiển tự chúng bao gồm một hay nhiều DLLs cũng như hỗ trợ các file INI , tùy thuộc vào các trình bổ sung của các nhà cung cấp
Trước khi có thể truy cập đến một cơ sở dữ liệu thông qua ODBC , cần phải định nghĩa DataSource để ODBC biết được cần kết nối đến đâu Có thể dùng một trong hai cách :
• Sử dụng ODBC Administrator để định nghĩa Data Source.
• Sử dụng hàm RegisterDatabase của Visual Basic để định nghĩa theo chương trình Data Source
Chẳng hạn làm việc với Microsoft SQL Server ta phải biết một số thông tin sau
• Tên DataSource
• Mô tả về DataSource
• Tên Server trên mạng nơi có chứa cơ sở dữ liệu.
• Tên cơ sở dữ liệu.
Trang 5Ví dụ : Để truy cập cơ sở dữ liệu Nwind , ta cần định nghĩa Data Source
như sau
• Tên DataSource : NWIND.
• Mô tả về DataSource : Nothwind Database
• Tên của Server : Query_1.
• Tên của cơ sở dữ liệu : Northwind.
Sử dụng ODBC Administrator để định nghĩa DataSource
• Các bước thực hiện:
Kích hoạt ODBC Administrator thông qua Control Panel
Nhắp vào nút lệnh Add từ cửa sổ chính của ODBC Administrator để thêm DataSource mới.
Trang 6 ODBC sẽ cung cấp một danh sách các trình điều khiển đã được cài đặt sẵn nhằm kết nối với các cơ sở dữ liệu khác nhau:
Trang 7 Điền tiếp các thông tin về DataSource vào hộp thoại của ODBC sau khi đã chọn loại một trình điều khiển để kết nối Giả sử ta đã chọn SQL Server :
Thực hiện xong các bước này khi về cửa sổ chính ta sẽ thấy được tên DataSource và loại trình điều khiển kết nối đến Tức là DataSource đã được định nghĩa trong ODBC Administrator :
Trang 8 Sử dụng RegisterDatabase để định nghĩa DataSource :
Visual Basic cung cấp phương thức RegisterDatabase để có thể định
nghĩa theo chương trình Data Source Phương thức này gồm có 4 tham số sau :
• Data Source Name
• Trình điều khiển được sử dụng để kết nối cơ sở dữ liệu
• Một biểu thức số cho biết hộp thoại trình điều khiển ODBC có nên hiển thị hay không
• Một chuỗi chứa tất cả các thông tin khác được yêu cầu bởi trình điều khiển
Ví dụ : Trong file INI cho Data Source của NWIND mà ta vừa tạo sẽ
thấy :
[NWIND]
Trang 9Từ đó ta có thể thấy tên DataSource là NWIND , trình điều khiển là c:\WIN95\SYTEM\sqlsrvr.dll lấy được các thông tin trên ta sẽ tạo mã lệnh có tác dụng tương đương l à:
2/ DAO (Database Access Object)
Khái niệm
DAO : Các đối tượng truy xuất dữ liệu, cho phép những ứng dụng khác giao tiếp với hệ thống cơ sở dữ liệu như Microsoft Access và
Microsoft FoxPro.
Private Sub cmdRegDatabase_Click()
Dim Attribs As String
Attribs = “ Description = Northwind Database “ & Chr$ (13) Attribs = Attribs & “ Server = QUE_1” & Chr$ (13)
Attribs = Attribs & “Database = Northwind”
DBEngine.RegisterDatabase “NWIND”,“SQL Server”,True,Attribs
End Sub.
Trang 10 Là một thư viện đối tượng có khả năng mở rộng khá tốt cho phép người triễn khai thao tác nhiều loại cơ sở dữ liệu
Cung cấp các khớp nối đến các chức năng của Jet Engine từ Visual Basic và Microsoft Access.
Dùng DAO có thể xử lý mỗi đối tượng cá biệt như Workspace, Database,
TableDef, Field … bằng cách tạo một biến đối tượng và qui định biến đó biểu thị một đối tượng nào muốn xử lý, giúp cho việc truy cập cơ sở dữ liệu dễ dàng hơn.
Mở một cơ sở dữ liệu đã có sẵn
Khai báo các biến đối tượng cơ sở dữ liệu bằng lệnh Dim
Dùng các biến đối tượng cơ sở dữ liệu để liên kết đến các cơ sở dữ
• Tạo biến đối tượng Recordset.
• Xác định các fields và records trong một bảng, hay mối liên kết của các record giữa các bảng với nhau.
• Các loại recordsets :
Recordset Type Definition
Table Cho phép thao tác trực tiếp trên bảng của dữ liệu đang
Trang 11Dynaset Tập hợp các con trỏ đến dữ liệu được mở.
Snapshot Dữ liệu được lưu trữ trong bộ nhớ Chỉ được phép đọc Định vị Record
Khi di chuyển từ record này sang record khác trong tập hợp recordset, Jet Database Engine cung cấp các phương pháp để thực hiện như sau:
Phương pháp Move Thay đổi vị trí con trỏ từ record hiện tại sang record khác Phương pháp Find Xác định record kế tiếp thỏa điều kiện cần tìm Được áp
dụng cho dynasets và snapshots
Phương pháp Seek Tìm record đầu tiên của bảng thỏa điều kiện yêu cầu Thuộc tính Bookmark Đánh dấu vị trí của một record xác định.
Thêm records (AddNew Records)
Dùng phương pháp AddNew để thiết lập một record mới Thực chất phương pháp AddNew là xóa vùng nhớ tạm để thêm các thông tin của record mới Dữ liệu trong các field của một record sẽ được chấp nhận sau khi dùng phương pháp Update.
Cấu trúc lệnh : recordset AddNew
Chuẩn bị thay đổi Records (Edit Records)
Chép record hiện thời vào vùng nhớ tạm Dữ liệu sau khi thay đổi trong các field của một record sẽ được chấp nhận sau khi dùng phương pháp Update.
Cấu trúc lệnh : recordset Edit
Trang 12 Cập nhật (Update Records)
Lưu dữ liệu từ vùng nhớ tạm vào cơ sở dữ liệu,chèn nội dung mới vào record hiện thời hoặc thêm vào một record mới.
Cấu trúc lệnh : recordset Update (type, force )
Xóa Records
Xóa record hiện thời.
Cấu trúc lệnh : recordset Delete
3/ RDO (Remote Data Object )So sánh RDO và DAO
RDO: Remote Data Objects : cung cấp các phương pháp truy cập đến cơ sở
dữ liệu Nhìn chung RDO và DAO tương tự nhau, tuy nhiên dùng RDO sẽ làm cho ứng dụng nhanh hơn, đơn giản vì nó dùng các hàm hệ thống ở mức thấp hơn Tuy nhiên có trở ngại là việc hiển thị kết quả khi dùng phương pháp này không được hổ trợ như DAO.
Có thể so sánh tương quan giữa RDO và DAO như sau :
Trang 13rdoParameter Parameter
Các kiểu hỗ trợ của rdoResultset, giống như của Recordset.
rdoResultset TypesRecordset Types
Forward-only Forward - only
rdoResultset của RDO không trả kết quả về dạng bảng Các phương pháp :
RdoCreateEnviroment rdoEngine CreateWorkspacce DBEngine
OpenConnection rdoEnviroment OpenDatabase Workspace
CreateQuery rdoConnection CreateQueryDef Database
OpenResultset rdoConnection OpenResultset Database
Cả DAO và RDO cùng có chung các phương pháp sau :
• AddNew : thêm một hàng (record)
• Delete : xóa hàng (record) mà con trỏ đang trỏ đến.
• Edit : chuẩn bị thay đổi hàng (record) mà con trỏ đang trỏ đến.
• MoveFirst : di chuyển về record đầu tiên.
Trang 14• MoveLast : di chuyển về record cuối cùng.
• MoceNext : di chuyển đến record tiếp sau.
• MovePrevious : di chuyển đến record trước đó.
• Update : cập nhật những thay đổi trên record.
4/ RDC (Remote Data Control )
Kết nối đến dữ liệu thông qua ODBC Đây là một công cụ tương đối tốt vì được hổ trợ hiển thị kết quả chẳng hạn dùng Dbgrid, qua thử nghiệm cho thấy tốc độ khá nhanh so với các phương pháp khác Ví dụ : dùng RDC để kết nối đến Oracle thông qua DSN có tên ora
Trang 15RDC PropertyData Control Property
5/ ADO (ActiveX Data Object)
ADO là phương pháp truy cập dữ liệu thông qua OLE DB Đến VB 6 thì đây được xem như là phương pháp truy cập dữ liệu chủ yếu Nó được hổ trợ mạnh bằng các thành phần mới có ghi chú (OLEDB) Việc hiển thị dữ liệu cũng như các tập hợp hết quả trả về đều tiện lợi Các thành phần của ADO:
ADO cung cấp các phương pháp :
• AddNew : thêm một hàng (record)
Trang 16• Delete : xóa hàng (record) mà con trỏ đang trỏ đến.
• Close : đóng sự kiện mở một một recordset.
• Move : di chuyển đến vị trí hiện thời của record
• MoveFirst : di chuyển về record đầu tiên.
• MoveLast : di chuyển về record cuối cùng.
• MoceNext : di chuyển đến record tiếp sau.
• MovePrevious : di chuyển đến record trước đó.
• Update : cập nhật những thay đổi trên record.
• CancelUpdate : hủy bỏ sự thay đổi của một record hiện thời hay thêm một record mới.
• Open : mở record mới ngay vị trí con trỏ hiện thời.
• Requery : cập nhật dữ liệu trong tập recordset bằng câu lệnh
Trang 17ado.RecordSource = "Select * from hoso" ado.Refresh
Hoặc dùng cách
Set conn = New ADODB.Connection
conn.ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.3.51; DataSource=c:\Nwind.mdb"
conn.Open
Set rado = New ADODB.Recordset
rado.Open "Select * from hoso", conn, adOpenKeyset, adLockPessimistic,
adCmdText Set ado.Recordset = rado
6/ ODBC API Function
Đây là phương pháp dùng trực tiếp các hàm ODBC cấp thấp để truy cập dữ liệu
♦ Declare Function SQLAllocEnv Lib "odbc32.dll" (env As Long) As Integer
♦ Declare Function SQLAllocConnect Lib "odbc32.dll" (ByVal env As Long, hdbc As Long) As Integer
♦ Declare Function SQLConnect Lib "odbc32.dll" (ByVal hdbc As Long, ByVal Server As String, ByVal serverlen As Integer, ByVal uid As String, ByVal uidlen As Integer, ByVal pwd As String, ByVal pwdlen As Integer) As Integer
♦ Declare Function SQLFreeConnect Lib "odbc32.dll" (ByVal hdbc As Long) As Integer
Trang 18♦ Declare Function SQLDisconnect Lib "odbc32.dll" (ByVal hdbc As Long) As Integer
♦ Declare Function SQLAllocStmt Lib "odbc32.dll" (ByVal hdbc As Long, hstmt As Long) As Integer
♦ Declare Function SQLFreeStmt Lib "odbc32.dll" (ByVal hstmt As Long, ByVal EndOption As Integer) As Integer
♦ Declare Function SQLExecDirect Lib "odbc32.dll" (ByVal hstmt As Long, ByVal sqlString As String, ByVal sqlstrlen As Long) As Integer
♦ Declare Function SQLSetConnectOption Lib
"odbc32.dll" (ByVal hdbc&, ByVal fOption%, ByVal vParam&) As Integer
♦ Declare Function SQLSetStmtOption Lib
"odbc32.dll" (ByVal hstmt&, ByVal fOption%, ByVal vParam&) As Integer
♦ Public Declare Function SQLDriverConnect Lib "odbc32.dll" (ByVal hdbc&, ByVal hWnd As Long, ByVal szCSIn$, ByVal cbCSIn%, ByVal szCSOut$, ByVal cbCSMax%, cbCSOut%, ByVal fDrvrComp%) As Integer
♦ Public Declare Function SQLCancel Lib "odbc32.dll" (ByVal hstmt&) As Integer
Vì sử dụng hàm cấp thấp nên tất nhiên tốc độ sẽ nhanh nhất, tuy nhiên đòi hỏi phải xử lý rất phức tạp Do đó chỉ được dùng khi thật cần thiết.
Trang 197/ Hiển thị dữ liệu :
Hộp liệt kê (List box)
Dùng tính chất Text để hiển thị thông tin đã được lưu trữ dưới dạng chuỗi.
Tính chất List : một mảng chuỗi chứa mọi mục, dùng để khởi tạo các mục trong hộp liệt kê.
Để chọn một mục trong hộp liệt kê ta nhắp chuột lên mục đó thông qua sự kiện Click hay Double - Click.
Để thêm một phần tử vào danh sách, có thể dùng hộp property của List box hay dùng : object AddItem item, index
Khi xóa một phần tử trong danh sách cần biết giá trị index của phần
tử đó trong danh sách,có thể dùng : object Remove Item, index
Nếu xóa tất cả các phần tử trong danh sách thì dùng: object .Clear
Hộp combo
Tính chất Style : định dạng của hộp combo
• Style= 0 (drop down combo ), bao gồm một text box và một
danh sách các chọn lựa thả sẵn xuống
• Style = 1 (simple combo box), hiển thị dưới dạng một text
box và một danh sách nhưng không thả xuống
• Các giá trị này có được bởi sự kiện Change.
• Style = 2 (drop down list ), một danh sách thả sẳn xuống.
Các mục trong hộp sẽ được sắp xếp theo thứ tự ASCII khi chọn tính chất
Trang 20Sorted = True Nếu không chọn, giá trị mặc định của tính chất Sorted =False, danh sách các mục tùy thuộc vào danh sách đã đặt trong hộp liệt kê.
Dùng tính chất Text để hiển thị thông tin đã được lưu trữ dưới dạng chuỗi.
Tính chất List : một mảng chuỗi chứa mọi mục, dùng để khởi tạo các mục trong hộp liệt kê.
Để thêm một phần tử vào danh sách, có thể dùng hộp property của
List box hay dùng : object AddItem item, index
Khi xóa một phần tử trong danh sách cần biết giá trị index của phần tử
đó trong danh sách,có thể dùng : object Remove Item, index
Nếu xóa tất cả các phần tử trong danh sách thì dùng: object .Clear
Các phương pháp này tương tự như các phương pháp dùng cho List box.
Data Control
Dùng để điều khiển dữ liệu Cho phép thao tác trên record và hiển thị dữ liệu thông qua bound controls.
Các sự kiện của Data Control
VbDataActionCancel 0 Hủy bỏ các sự kiện của Data control VbDataActionMoveFirst 1 Di chuyển đến record đầu tiên
VbDataActionMovePrevious 2 Di chuyển đến record trước đó VbDataActionMoveNext 3 Di chuyển đến record kế tiếp VbDataActionMoveLast 4 Di chuyển đến record cuối
Trang 21VbDataActionAddNew 5 Thêm record
VbDataActionUpdate 6 Thay đổi, định nghĩa record VbDataActionDelete 7 Xóa một record
VbDataActionFind 8 Tìm kiếm một record VbDataActionBookmark 9 Tạo Bookmark
VbDataActionClose 10 Đóng Data control VbDataActionUnload 11 Đóng một Form
Datacontrol có hình dạng:
Data Bound Grids
Dùng để hiển thị cùng lúc nhiều records với các field của nó trong tập các recordset theo dạng hàng (record) và cột (field).
Để hiển thị cần xác định DataSource là tên điều khiển dữ liệu, chẳng hạn Datacontrol và xác định RecordSource = dữ liệu nguồn.
Thêm một record (hàng) : object AllowAddNew [= value].
• Value = True : cho phép thêm record vào dưới DBGrid
• Value = False : không cho phép thêm record vào dưới DBGrid
Xóa một record (hàng) : object AllowDelete [= value]
• Value = True : cho phép xóa record vào dưới DBGrid
• Value = False: không cho phép xóa record vào dưới DBGrid Thay đổi, định nghĩa các record : object AllowUpdate [= value]
• Value = True : cho phép thay đổi, định nghĩa dữ liệu trong DBGrid
Trang 22• Value = False: không cho phép thay đổi, định nghĩa dữ liệu trong DBGrid
Dbgrid hỗ trợ cho datacontrol hay RDC, tuy nhiên việc hiển thị dữ liệu của cộng cụ này đôi khi không chính xác.
Dbgrid có hình dạng :
Data Grid
VB 6 hỗ trợ công cụ datagrid cho việc hiển thị dữ liệu do ADO cung cấp Công cụ này tương tự như dbgrid, nhưng việc hiển thị có vẽ chính xác hơn.
Datagrid có hình dạng :
IV/ SQL
1/ Giới thiệu chung về SQL ( Structered Query Language )
Ngôn ngữ truy vấn có cấu trúc, được dùng trong hầu hết các hệ cơ sở dữ liệu quan hệ.
SQL là một ngôn ngữ tựa tiếng Anh, nó sử dụng các từ select, insert, delete trong tập lệnh.
Trang 23 SQL là ngôn ngữ phi thủ tục (non - procedure language), chỉ cần cho biết thông tin cần truy xuất mà không cần chỉ ra cách thực hiện để có được các thông tin đó.
SQL xử lý các tập hợp mẫu tin ở cùng một thời điểm, dạng chung nhất của mẫu tin là một bảng (table).
Dùng SQL có thể :
• Truy vấn dữ liệu.
• Thêm vào, cập nhật và hủy bỏ các hàng của bảng.
• Tạo mới, thay đổi và hủy bỏ các đối tượng cơ sở dữ liệu.
• Kiểm soát truy vấn đến cơ sở dữ liệu và các đối tượng cơ sở
3 lệnh này được dùng để thêm các hàng mới,sử đổi và hủy bỏ các hàng của các bảng trong cơ sở dữ liệu Các lệnh này còn được gọi là các lệnh DML ( Data Manipulation Language)
Create Alter Drop
Các lệnh này được dùng để thiết lập, thay đổi và hủy bỏ một cấu trúc dữ liệu Chúng còn được gọi là lệnh DDL (Data Definition Language )
Graint Revoke
Các lệnh này được dùng để gán và hủy bỏ các quyền truy xuất đến dữ liệu và cấu trúc bên trong.
Trang 242/ So sánh SQL của Oracle và SQL Server
Các kiểu dữ liệu dùng trong SQL