1. Cơ Sở Dữ Liệu (CSDL) Lỏ Gớ:
Một cõch đơn giản, một CSDL lỏ một tập hợp những mẩu tin (record). Mỗi mẩu tin trong CSDL bao gồm cõc trường (field). Mỗi trường chứa những thừng tin liởn quan đến mẩu tin đụ. Vợ dụ, ta cụ một CSDL địa chỉ. Trong CSDL nỏy, ta cụ một mẩu tin cho mỗi người. Mỗi mẩu tin cụ 6 trường : tởn người, địa chỉ, thỏnh phố, mọ điện thoại vỳng, vỏ số điện thoại. Một mẩu tin trong CSDL cụ dạng như sau:
− Name : Nguyễn Văn Ba. − Street : 192/36 Trần Văn Đang. − City : Hồ Chợ Minh.
− Zip Code : 08.
− Phone num : 8967805.
Toỏn bộ CSDL sẽ chứa nhiều mẩu tin giống như mẩu tin trởn. Để tớm địa chỉ hay số điện thoại của người nỏo đụ, ta tớm tởn (Name), từ đụ tớm tất cả cõc thừng tin trong mẩu tin đụ.
2. Cõc Mừ Hớnh CSDL :
Cụ hai loại mừ hớnh sau:
2.1. Mừ hớnh CSDL phẳng (Flat Database Model) :
Mừ hớnh chứa tập của những mẩu tin (tập nỏy gọi lỏbảng (table)). Giữa cõc bảng nỏy khừng cụ mối quan hệ với nhau. Mừ hớnh nỏy thợch hợp với những CSDL nhỏ. Với những CSDL lớn, một mẩu tin chứa hỏng trăm trường, mừ hớnh CSDL phẳng sẽ dẫn đến sự dư thừa dữ liệu vỏ lọng phợ khừng gian lưu trữ.
Vợ du : ta cụ CSDL phẳng như sau:
− Addr (Name, Street, City, Zip Code, Phone num).
2.2. Mừ hớnh CSDL quan hệ (Relational DataBase Model:
Mừ hớnh nỏy bao một số CSDL phẳng cụ mối liởn kết với nhau. Sử dụng mừ hớnh CSDL quan hệ, ta khừng chỉ thao tõc được trởn cõc mẩu tin đơn lẻ như trởn mừ hớnh CSDL phẳng mỏ cún cụ thể liởn kết một tập của những mẫu tin khõc. Mừ hớnh nỏy cho phờp ta lưu trữ dữ liệu hiệu quảhơn. Giữa cõc bảng cụ những mối liởn kết thừng qua khụa (key).
Vợ dụ: cụ một CSDL quan hệ như sau:
− Employees ( EmployeeID, EmployeeName, EmployeeRate, DeptID). − Manager (ManagerID, ManagerName, DeptID).
− Department (DeptID, DeptName, ManagerID).
Cõc từ in đậm lỏ cõc khụa của bảng, cõc từ in nghiởng biểu thị mối quan hệ giữa cõc bảng.
3. Cõc Cõch Truy Xuất CSDL:
Cụ hai cõch truy xuất CSDL
∗ DAO (Database Access Object):
− DAO cung cấp một khung (framework) sử dụng code để tạo vỏ thao tõc CSDL. DAO cung cấp một tập phĩn cấp những đối tượng, sử dụng cơ chế Microsoft Jet database để truy xuất dữ liệu vỏ cấu trỷc CSDL trong :
− CSDL Microsoft Jet (.MDB) tạo bởi Microsoft Access. − ODBC data driver, sử dụng một ODBC driver.
− CSDL ISAM : như dBase, Paradox, Microsoft Foxpro.
Ưu điểm của DAO:
− Hoạt động hiệu quả với Microsoft(.MBD) database. − Tương thợch với ODBC class, với Microsoft Visual Basic. − Cụ khả năng chỉ định những mối quan hệ giữa cõc bảng. − Hỗ trợ hai cõch truy xuất dữ liệu:
+ Data definition language (DDL) : ta cụ thể tạo, xụa, CSDL, tạo, xụa bảng, tạo những trường, chỉ số vỏ những hỏnh vi ảnh hưởng đến cấu trỷc của CSDL.
+ Data manipulate language (DML) : ta cụ thể thực hiện cõc cĩu truy vấn, thởm, xụa, vỏ soạn thảo cõc mẩu tin vỏ thao tõc trởn nội dung của CSDL.
∗ ODBC (Open DataBase Connectivity):
Lỏ những giao tiếp lập trớnh ứng dụng (APIs) cung cấp khả năng viết những ứng dụng độc lập với một hệ thống quản trị CSDL (DBMS) cõ biệt nỏo.
Ưu điểm của ODBC :
− Với ODBC ta cụ thể truy xuất bất cứ nguồn dữ liệu (datasource) nỏo, cục bộ hay từ xa, dỳng cõc driver 16ứbit hay 32ứbit.
4. Chọn Phương Phõp Truy Xuất CSDL:
Do yởu cầu của đề tỏi : truy xuất dữ liệu trởn mừ hớnh CSDL phẳng, vỏ hướng tới khả năng mở rộng đề tỏi cho cõc loại ứng dụng truy xuất dữ liệu dưới dạng Client/Server sử dụng CSDL viết bằng Oracle, chỷng em chọn ODBC.
II. TRUY XUẤT DỮ LIỆU DỉNG ODBC: 1. Giới Thiệu Về ODBC :
− ODBC (Open Database Connectivity) lỏ một giao tiếp lập trớnh ứng dụng (Application Programming Inteface viết tắt lỏ API ) được chấp nhận rộng rọi cho việc truy xuất cơ sở dữ liệu (database) viết tắt lỏ CSDL. Nụ dựa trởn đặc tợnh giao tiếp Call_Level (CLI) từ Xopen vỏ ISO/IEC cho database API vỏ sử dụng ngừn ngữ truy vấn cụ cấu trỷc (SQL) lỏ ngừn ngữ truy xuất CSDL.
− ODBC được thiết kế cho việc thao tõc giữa cõc phần (interoperation) mạnh nhất, nghĩa lỏ khả năng truy xuất đến những hệ thống quản lý CSDL (DBMS) với cỳng một source code của cỳng một ứng dụng. Những ứng dụng CSDL gọi những hỏm trong giao tiếp ODBC được thực thi trong những mừđun (database – specified module) gọi lỏ driver. Việc sử dụng driver tõch ứng dụng ra khỏi những lời gọi hỏm giống như driver mõy tợnh tõch chương trớnh xử lý từ ra khỏi những lệnh mõy in. Bởi vớ driver được nạp vỏo thời gian chạy, user phải thởm một driver mới để truy xuất một DBMS mới vỏ khừng cần phải dịch lại hoặc liởn kết lại ứng dụng.
2. Kiến trỷc của ODBC:
∗ Kiến trỷc của ODBC gồm 4 thỏnh phần:
Application: Thực hiện việc xử lý vỏ gọi cõc hỏm ODBC để truyền cõc phõt biểu SQL vỏ nhận cõc kết quả.
Driver Manager: Nạp cõc driver mỏ ứng dụng cần.
Driver: Xử lý cõc lời gọi hỏm ODBC, truyền cõc yởu cầu đến cõc data source chỉ định, vỏ trả kết quả về cho ứng dụng. Nếu cần, driver đụ cụ thể sữa đổi yởu cầu của ứng dụng để yởu cầu đụ phỳ hợp với cỷ phõp được hỗ trợ bởi DBMS đụ.
Data source: Bao gồm dữ liệu mỏ người dỳng muốn truy xuất vỏ hệ điều hỏnh kết hợp với nụ, DBMS, vỏ mạng (nếu cụ) đuwọc dỳng để truy xuất DBMS.
Đối với một ứng dụng, Driver Manager vỏ driver như lỏ một đơn vị xử lý cõc lời gọi hỏm ODBC.
Sơ đồ biểu diễn mối quan hệ giữa cõc phần:
SVTH: Nguyễn Hữu Phỷ – Trần Lở Trung Trang 48
Application
Driver Manager
Driver Driver Driver
Data Source Data Source Data Source
ODBC API
− Multiple driver vỏ datasource cụ thể tồn tại cho phờp ứng dụng truy xuất dữ liệu từ nhiều datasource.
− ODBC API được sử dụng ở hai nơi : giữa Application với Driver Manager, giữa Driver Manager với mỗi driver. Giao tiếp giữa Driver Manager vỏ driver cụ khi được xem như lỏ Service provide interface hoặc SPI với ODBC API vỏ SPI lỏ giống nhau.
∗ .Nhiệm vụ của cõc phần:
Application :
Lỏ một chương trớnh gọi ODBC API để truy xuất data. Mặc dỳ cụ nhiều loại ứng dụng nhưng được phĩn thỏnh ba loại như sau :
− Generic Application : lỏ những ứng dụng shrinkứwrapped hoặc off –theứshell. Generic Application được thiết kế để lỏm việc với những DBMS khõc nhau. Vợ dụ : bảng tợnh hoặc gụi tĩnh (statictics pakage) sử dụng DBMS để nhập data cho những phĩn tợch về sau vỏ một word processor sử dụng ODBC để lấy dah sõch cõc thư từ một database.
Một phạm trỳ con quan trọng của Generic Application lỏ mừi trường phõt triển ứng dụng, chẳng hạn như Power Builder hoặc Microsof Visual Basic. Mặc dỳ ứng dụng được tạo với những mừi trường sẽ chỉ lỏm việc với những DBMS đơn, bản thĩn mừi trường cần lỏm việc với multi DBMSs.
− Vertical Application : biểu hiện một loại cừng việc đơn, chẳng hạn như yởu cầu dữ liệu vỏ lỏm việc với một sơ đồ database được điều khiển bởi người phõt triển ứng dụng. Vợ dụ : một doanh nghiệp nhỏ dỳng ứng dụng với dBase trong khi một doanh nghiệp lớn dỳng ứng dụng với Oracle.
Ưng dụng sử dụng ODBC theo cõch mỏ ứng dụng bị rỏng buộc vỏo bất cứ một DBMS nỏo mặc dỳ cụ thể bị rỏng buộc với một số giới hạn do DBMS.
− Custom Application : được sử dụng để thực hiện những cừng việc đặc biệt trởn một cừng ti đơn.
Một ứng dụng sử dụng giao diện ODBC thực hiện những nhiệm vụ sau, khừng quan tĩm chỷng dỳng loại DBMS nỏo:
+ Yởu cầu kết nối với data source.
+ Gởi cõc yởu cầu SQL tới data source đụ.
+ Định nghĩa vỳng lưu trữ vỏ cõc dạng dữ liệu cho cõc kết quả trả về từ cõc yởu cầu.
+ Lấy kết quả. + Xử lý lỗi.
+ Bõo kết quả cho user nếu cần.
+ Chấp nhận hoặc hủy bỏkết quả cho cõc điều khiển giao dịch. + Kết thỷc kết nối tới data source.
Driver Manager:
Lỏ thư viện quản lý việc liởn lạc giữa ứng dụng vỏ driver. Trong nến Windows, Driver Manager lỏ thư viện liởn kết động (dynamic link library viết tắt lỏ dll).
Sự tồn tại của Driver Manager rất tiện lợi cho người viết ứng dụng vỏ giải quyết một số vấn đề chung đối với tất cả cõc ứng dụng bao gồm xõc định driver nỏo được nạp hay gỡ bỏ vỏ gọi hỏm trong driver.
Họy xem điều gớ xảy ra nếu ứng dụng gọi hỏm một cõch trực tiếp trong driver. Trừ khi nụ được liởn kết tới một driver cụ thể, nụ sẽ phải tạo một bảng những con trỏ trỏ tới những hỏm trong driver đụ vỏ gọi những hỏm thừng qua con trỏ. Sử dụng cỳng một source code cho nhiều driver tại một thời điểm sẽ gĩy phức tạp, ứng dụng phải thiết lập con trỏ hỏm trỏ tới những hỏm trong driver tương ứng vỏ gọi hỏm thừng qua con trỏ.
Driver Manager giải quyết vấn đề trởn bằng cõch cung cấp một nơi để gọi mỗi hỏm. Ưng dụng được liởn kết với Driver Manager vỏ gọi những hỏm ODBC trong Driver Manager chứ khừng phải trong driver.
Ưng dụng xõc định driver đợch vỏ datasource với một thẻ kết nối (connection handle) khi nụ nạp Driver, Driver Manager sẽ tạo một bảng những con trỏ trỏ tới những hỏm trong driver đụ vỏ nụ dỳng thẻ kết nối để tớm địa chỉ của hỏm trong driver vỏ gọi hỏm đụ thừng qua địa chỉ.
Như vậy, nhiệm vụ của Driver Manager như sau:
− Sử dụng file ODBC.INI để õnh xạ một tởn của data source thỏnh một thư viện liởn kết động driver.
− Xử lý cõc lời gọi khởi động ODBC.
− Cung cấp cõc điểm nhập tới cõc hỏm ODBC cho mỗi driver. − Cung cấp cõc tham số vỏ chuỗi hợp lệ cho cõc lời gọi ODBC.
Driver :
Lỏ những thư viện hiện thực cõc hỏm trong ODBC API vỏ mỗi ODBC API tương ứng với một DBMS riởng biệt. Vợ dụ 1 driver cho Oracle khừng thể truy cập trực tiếp data trởn một DBMS Informix. Driver cho thấy khả năng của DBMS lớp dưới. Driver khừng bị đúi hỏi phải hiện thực những khả năng khừng được hỗ trợ bởi DBMS.
Driver chia lỏm hai loại:
− Fileứbased driver : driver truy cập data vật lý một cõch trực tiếp. Trong trường hợp nỏy driver hoạt động vừa lỏ driver vừa lỏ datasource, nghĩa lỏ nụ xử lý lời gọi ODBC vỏ cĩu SQL.
− DBMSứbased driver : driver truy xuất dữ liệu vật lý thừng qua một cơ chế database riởng biệt. Trong trường hợp nỏy driver chỉ xử lý cĩu ODBC, vỏ gởi cĩu SQL sang cơ chế database xử lý.
Một driver thực hiện những nhiệm vụ sau để đõp ứng tới cõc lời gọi hỏm từ một ứng dụng:
− Thiết lập một kết nối tới một data source. − Gởi cõc yởu cầu tới data source.
− Chuyển đổi dạng dữ liệu tới hoặc từ cõc dạng khõc, nếu ứng dụng yởu cầu. Trả kết quả cho ứng dụng
− Định dạng cõc lỗi thỏnh cõc mọ lỗi chuẩn để trả về cho ứng dụng. − Khai bõo vỏ thao tõc cõc cursor nếu cần. for access to a cursor name.) − Khởi tạo cõc giao dịch nếu data source yởu cầu.
Data source:
Một datasource đơn giản lỏ nguồn dữ liệu, cụ thể lỏ một file, một database trởn một DBMS. Mục đợch của datasource lỏ tập trung tất cả thừng tin cần thiết để truy xuất data : drivername, địa chỉ network, networdsoftware. Như vậy một data source lỏ một thể hiện (instance) của một kết hợp giữa một DBMS vỏhệ điều hỏnh cỳng với mạng cần để truy xuất nụ.
Một ứng dụng kết nối với một DBMS trởn một hệ điều hỏnh nỏo đụ, được cho phờp truy xuất bởi một mạng nỏo đụ. Vợ dụ:
− Một DBMS Oracle chạy trởn hệ điều hỏnh Windows NT , được truy xuất thừng qua mạng Windows
3. Cấu Hớnh Một ODBC Data Source;
Để sử dụng một data source với một ứng dụng mỏ ta đọ phõt triễn, ta phải sử dụng ODBC Administrator để cấu hớnh nụ. Một ODBC Administrator đăng ký vỏ cấu hớnh cõc data source sẵn cụ tại mõy cục bộ hoặc trởn mạng. Ta sử dụng ODBC Administrator để thởm, hiệu chỉnh, vỏ hủy bỏ cõc data source trong hộp thoại Data Source, thởm vỏ hủy bỏ cõc ODBC driver.
4. Hướng Dẫn Gọi Cõc Hỏm ODBC:
Mỗi hỏm ODBC được bắt đầu bằng SQL, để sử dụng ta phải include cõc file SQL.H, SQLEXT.H, and WINDOWS.H. Những file nỏy chứa cõc hằng số vỏ cõc nguyởn mẫu của cõc hỏm ODBC.
Buffer:
− Một ứng dụng truyền dữ liệu tới một driver thừng qua một buffer nhập. Driver nỏy trả dữ liệu về thừng qua buffer xuất. Ứng dụng phải cấp phõt bộ nhớ cho cả buffer nhập lẫn buffer xuất.
− Đối với buffer nhập, chiều dỏi của nụ phải lớn hơn hoặc bằng 0. Đĩy lỏ chiều dỏi thực sự của dữ liệu trong buffer nhập. Đụi với dữ liệu chuỗi, thớ chiều dỏi bằng 0 biểu thị chuỗi rỗng. Nếu nụ cụ giõ trị SQL_NULL_DATA thớ driver sẽ bỏ qua giõ trị trong buffer nhập.
− Đối với buffer xuất, để ứng dụng trả về kết quả ta cần truyền cõc đối số sau: − Địa chỉ của buffer xuất.
− Chiều dỏi của buffer xuất. Driver sẽ bỏ qua thừng số nỏy nếu kiểu dữ liệu trả về cụ độ rộng cố định như integer, real.
− Địa chỉ của biến mỏ driver trả về chiều dỏi của dữ liệu. Giõ trị trả về sẽ lỏ SQL_NULL_DATA nếu dữ liệu đụ cụ giõ trị NULL trong tập kết quả. Ngược lại, nụ sẽ lỏ số bytes dữ liệu (khừng bao gồm byte kết thỷc nếu lỏ chuỗi)
− Nếu buffer xuất qũ nhỏ, driver sẽ cắt bớt dữ liệu vỏ trả về SQL_SUCCESS_WITH_INFO nếu dữ liệu bị cắt khừng bị mất ý nghĩa. Nụ sẽ trả về SQL_ERROR nếu dữ liệu mất ý nghĩa. Ứng dụng cụ thể gọi SQLError để lấy thừng tin về kết quả cắt hoặc lỗi.
− Mừi trường, kết nối vỏ cõc handle của phõt biểu SQL ODBC định nghĩa 3 kiểu handle:
− Handle mừi trường: chỉ ra vỳng bộ nhớ lưu trữ thừng tin toỏn cục. Bao gồm cõc handle kết nối, cụ kiểu HENV.
− Handle kết nối: chỉ ra vỳng nhớ chứa thừng tin về một kết nối cụ thể, cụ kiểu HDBC. Mỗi handle kết nối được kết hợp với một handle mừi trường. Tuy nhiởn, handle mừi trường cụ thể cụ nhiều handle kết nối.
− Handle phõt biểu: chỉ ra vỳng nhớ chứa phõt biểu SQL, cụ kiểu HSTMT. Như trởn, mỗi handle phõt biểu chỉ được kết nối với một handle kết nối nhưng handle kết cụ thể cụ nhiộu handle phõt biểu.
Sử dụng cõc kiểu dữ liệu
− Dữ liệu được lưu trữ trởn data source cụ một kiểu dữ liệu SQL. Một driver sẽ õnh xạ cõc kiểu dữ liệu của SQL sang cõc kiểu dữ liệu của ODBC SQL tương ứng.
− Mỗi kiểu dữ liệu ODBC SQL tương ứng với một kiểu dữ liệu ODBC C. Trước khi trả kết quả về từ data source, driver sẽ tiến hỏnh chuyển kiếuang kiểu C. Trước khi gởi dữ liệu đi, driver cũng tiến hỏnh đổi nụ sang kiểu dữ liệu tương ứng.
Cõc mọ kết quả của cõc hỏm ODBC
Khi một ứng dụng gọi một hỏm ODBC, driver thực hiện sẽ trả về một mọ được định nghĩa trước. Đụ lỏ: SQL_SUCCESS SQL_SUCCESS_WITH_INFO SQL_NO_DATA_FOUND SQL_ERROR SQL_INVALID_HANDLE SQL_EXECUTING SQL_NEED_DATA
Nếu hỏm trả về SQL_ SUCCESS_WITH_INFO hoặc SQL_ERROR, ứng dụng cụ thể gọi SQLError để lấy thừng tin về lỗi.
5. Cõc Bước Ưng Dụng Căn Bản:
Để tương tõc với một data source, một ứng dụng cần thực hiện cõc cừng việc:
− Bước một :kết nối tới Datasource : nạp driver vỏ cấp environment handle. Sau đụ, ứng dụng đăng ký version của ODBC, cấp handle kết nối vỏ kết nối tới datasource.
− Bước hai: khởi động ứng dụng.
− Bước ba : Xĩy dựng vỏ thực thi cĩu lện SQL.
Nếu cĩu lệnh chứa dựng thừng số, ứng dụng rỏng buộc chỷng vỏo ứng dụng bằng cõch gọi hỏm SQLBindParameter.
Sau khi SQL statement được tạo vỏ cõc thừng số được rỏng buộc, cĩu lệnh được thực thi với SQLExecDirect. Nếu cĩu lệnh được thực thi với nhiều lần nụ cụ thể được chuẩn bị với SQLPrepare vỏ thực thi với SQLExecute.