GIỚI THIỆU VỀ SQL

Một phần của tài liệu Tài liệu Giải pháp bán tự động dịch vụ 116 docx (Trang 84)

Structured Query Language (SQL) lỏ cõch để liởn lạc với một cơ sở dữ liệu quan hệ mỏ cho phờp ta định nghĩa, query, hiệu chỉnh vỏ điều khiển dữ liệu. Sử dụng cỷ phõp SQL, ta cụ thể xĩy dựng một phõt biểu mỏ lấy cõc record mỏ mỏ ta cần.

Cõc lớp database được hiện thực với ODBC, sử dụng SQL ở cấp gọi (call level) ODBC sử dụng SQL để liởn lạc với một data source thừng qua ODBC driver. Những ODBC driver sẽ diễn dịch lệnh SQL sang dạng database cụ thể, như lỏ Microsoft Access

Cõc từ khụa SQL thừng dụng:

∗ SELECT xõc định bảng vỏ cột trong data source được sử dụng . ∗ WHERE dỳng như một bọ lọc cõc selection .

∗ ORDER BY dỳng để sắp thứ tự recordset . ∗ INSERT thởm cõc record mới vỏo một recordset . ∗ DELETE xụa cõc record từ một recordset . ∗ UPDATE hiệu chỉnh cõc field của một record . Cõc kiểu dữ liệu của SQL tương ứng với C++ :

∗ CHAR CString .

∗ DECIMAL CString 1 ∗ SMALLINT int ∗ REAL float ∗ INTEGER long ∗ FLOAT double ∗ DOUBLE double ∗ NUMERIC CString 1 ∗ VARCHAR CString

∗ LONGVARCHAR CLongBinary, CString 2 ∗ BIT BOOL

∗ TINYINT BYTE ∗ BIGINT CString 1 ∗ BINARY CByteArray ∗ VARBINARY CByteArray

∗ LONGVARBINARY CLongBinary, CByteArray 3 . ∗ DATE CTime, CString .

∗ TIME CTime, CString .

∗ TIMESTAMP CTime, CString .

III. TRUY XUẤT DATABASE BẰNG MFC ODBC.

MFC cung cấp nhiều cõch để lỏm việc với database. Ta cụ thể gọi cõc hỏm API trực tiếp hoặc ta cụ thể sử dụng MFC để đơn giản hụa cõc thao tõc lỏm việc với database.

Mừ hớnh lập trớnh MFC cung cấp một đối tượng database cho mỗi database được mở. Đối tượng database đụ thể hiện sự kết nối của ta tới database. Ta thực hiện cõc query vỏ cập nhật dữ liệu thừng qua cõc đối tượng recordset.

1. Nếu Cõc Quan Hệ Của Database Đọ Biết Trước Tại Thời Điểm Lập Trớnh :

Bớnh thường khi select cõc record từ data source bằng lệnh SELECT , ta được một tập hợp kết quả lỏ một tập hợp cõc record từ một bảng hay query. Với cõc lớp database, ta sử dụng một đối tượng recordset để select vỏ truy xuất tập kết quả. Đĩy lỏ một đối tượng của lớp dẫn xuất từ lớp CRecordset do ta định nghĩa. Khi định nghĩa một lớp recordset, ta đặc tả datasource kết hợp với nụ, bảng sử dụng vỏ cõc cột của bảng. Wizard của MFC sẽ tạo ra một lớp kết nối tới dataource được chỉ định. Cõc wizard nỏy sẽ tạo ra hỏm thỏnh viởn GetDefaultSQL của lớp CRecordset để trả về tởn bảng.

Khi đụ ta cụ thể:

− Xem xờt cõc data field của record hiện tại. − Lọc hoặc sort recordset đụ.

− Cutomize phõt biểu default SQL SELECT. − Scroll cõc record đọ select.

− Thởm, cập nhật, xụa cac record (nếu cả data source vỏ recordset lỏ cập nhật được). − Kiểm tra xem recordset cụ cho phờp requerying vỏ lỏm tươi nội dung của recordset đụ hay khừng.

− Xõc định lược đồ của Data Source.

Để cỏi đặt cõc data member trong đối tượng CRecordset, ta cần biết lược đồ quan hệ của data source mỏ ta nối kết. Trong trường hợp nỏy ta đọ xõc định trước sẽ lỏm việc trởn database nỏo. Do đụ Class Wizard sẽ thực hiện việc cỏi đặt cõc data member của đối tượng CRecordset.

• Record Field Exchange (RFX)

Cõc lớp MFC ODBC tự động di chuyển dữ liệu giữa một data source vỏ một đối tượng recordset. Khi ta dẫn xuất ra một lớp từ Crecordset vỏ khừng dỳng bulk row fetching dữ liệu sẽ được truyền thừng qua cơ chế RFX

Nếu ta dỳng bulk row fetching trong một lớp dẫn xuất Crecordsetthớ framework sẽ dỳng cơ chế bulk record field exchange (Bulk RFX) để truyền dữ liệu.

Việc di chuyển dữ liệu giữa một data source vỏ cõc data member của một recordse cần phải gọi hỏm DoFieldExchange nhiều lần. Tuy nhiởn RFX hầu như trong suốt nếu như ta sử dụng cõc lớp recordset bằng ClassWizard vớ nụ được sinh mọ tự động. Ta sử dụng Class Wizard để õnh xạ cõc data member của recordset thỏnh cõc cột của cõc bảng trởn data source đụ.

Khi ta tự thởm cõc data member vỏo một lớp recordset, ta phải thởm một lời gọi hỏm RFX trong hỏm DoFieldExchange cho mỗi thừng số. Thởm một lời gọi CFieldExchange::SetFieldType cho mỗi nhụm tham số, chỉ định số tham số tổng cộng trong m_nParams.

• Lọc cõc record

Lọc record lỏ chọn lựa chỉ những record thỏa mọn điều kiện trong cõc record cụ sẵn. Một bộ lọc lỏ một điều kiện tớm kiếm được định nghĩa bằng mệnh đề WHERE của SQL.

Ta phải thiết lập mọt bộ lọc của đối tượng recordset sau khi xĩy dựng đối tượng nhưng trước khi gọi hỏm Open (hoặc trước khi gọi hỏm Requery). (adsbygoogle = window.adsbygoogle || []).push({});

Để đặc tả một bộ lọc của recordset:

− Xĩy dựng một đối tượng recordset mới (hoặc chuẩn bị để gọi hỏm Requery cho một đối tượng đọ tồn tại).

− Đặt cõc giõ trị m_strFilter của đối tượng đụ.

− Bộ lọc lỏ một chuỗi kết thỷc null. Nụ chứa nội dung của mệnh đề WHERE nhưng khừng bao gồm từ khụa WHERE.

Vợ dụ:

m_pSet->m_strFilter="sdtm=‘8642854’" hoặc m_pSet->m_strFilter="std=" sdt_input;

Ghi chỷ: Trong ODBC SQL dấu nhõy đơn được dỳng để biểu thị hằng ký tự. − Đặt cõc tham số khõc như sort, mode.

− Gọi Open cho đối tượng mới (hoặc Requery một đối tượng cũ. − Cõch thức vỏ khi nỏo ta cụ thể thay đổi một recordset

− Khi khai bõo một lớp recordset bằng ClassWizard: Chỉ định select bảng nỏo vỏ cột nỏo.

Khi hiện thực lớp nỏy: Viết độ cõc hỏm thỏnh viởn như OnSetOptions để thay đổi cõc giõ trị mặc nhiởn. Chỉ định cõc tham số nếu dỳng một recordset cụ tham số.

Khi xĩy dựng một đối tượng recordset: Chỉ định cõc điều kiện tớm kiếm dỳng trong mệnh đề WHERE để lọc cõc record. Chỉ định thứ tự sắp xếp trong mệnh đề ORDER BY. Chỉ định cõc giõ trị tham số cho cõc tham số.

Khi gọi hỏm Open: Chỉ định chuỗi SQL để thay thế chuỗi default được thiết lập bằng ClassWizard.

Khi gọi Requery: Chỉ định cõc tham số mới, cõc filter hoặc sort mới.

Khi gọi hỏm Open: Open sẽ tạo ra một phõt biểu SQL sử dụng cõc thỏnh phần sau: Tham số lpszSQL. Nếu khõc NULL, tham số nỏy đặc tả chuỗi lệnh custom SQL, hoặc một phần của lệnh nỏy. Nếu chuỗi nỏy bắt đầu bằng SELECT hoặc {CALL, nụ sẽ được dỳng như phõt biểu SQL của recordset. Nếu khừng, nụ sẽ được dỳng để tạo ra mệnh đề FROM.

Chuỗi được trả về bởi GetDefaultSQL. Mặc nhiởn, đĩy lỏ tởn bảng mỏ ta đặc tả cho recordset trong ClassWizard, nhưng ta cụ thể thay đổi giõ trị trả về của hỏm nỏy. Khi framework gọi hỏm nỏy, nếu chuỗi đụ khừng bắt đầu bằng SELECT hoặc {CALL thớ đụ lỏ tởn bảng được dỳng để tao ra chuỗi SQL.

Field data member của recordset, được buộc để đặc tả cõc cột của bảng. Framework xõc định sự tương quan giữa cõc cột vỏ cõc member nỏy từ cõc hỏm RFX trong hỏm thỏnh viởn DoFieldExchange hoặc DoBulkFieldExchange.

Cõc bộ lọc cho recordset, được để trong m_strFilter.

Thứ tự sắp xếp cho recordset, được để trong m_strSort dỳng để tạo ra mệnh đề ORDER BY.

Giõ trị của cõc parameter data member ta đặc tả trong class. Ta thiết lập cõc giõ trị nỏy trước khi gọi Open hoặc Requery . Framework buộc cõc tham số nỏy với "?" đặt trong chuỗi SQL. Khi biởn dịch, ta dặc tả chuỗi nỏy bằng cõc dấu chấm hỏi. Khi thực thi, framework sẽ điền giõ trị ta truyền vỏo.

Sau khi xĩy dựng xong phõt biểu SQL, Open gởi nụ tới ODBC Driver Manager (vỏ ODBC Cursor Library), Manager sẽ gởi nụ tới ODBC driver của DBMS chỉ định. Driver liởn lạc với DBMS để thực hiện select trởn data source vỏ nạp record. Framework nạp record nỏy vỏo trong cõc data member của recordset.

Ta cụ thể kết hợp cõc kỹ thuật nỏy để mở cõc bảng vỏ kết hợp nhiều bảng với nhau. Ta cũng cụ thể select cõc cột mỏ khừng biết trước khi thiết kế chương trớnh vỏ buộc nụ cho recordset field. Nếu cõc recordset khừng thỏa mọn yởu cầu, ta cụ thể gọi hỏm ODBC API hoặc thực thi cõc phõt biểu SQL bằng CDatabase::ExecuteSQL.

2. Lỏm Việc Với Cõc Database Khừng Được Xõc Định Trước :

Nếu cõc CSDL cỳng cõc lược đồ quan hệ của chỷng khừng được biết trước ở thời điểm lập trớnh thớ ta phải viết lại hỏm DoFieldExchange hoặc DoBulkFieldExchange của lớp dẫn xuất từ CRecordset. Đồng thời ta phải sử dụng 2 mảng động cõc con trỏ (con trỏ 2 lần) để chứa thừng tin về recordset đụ:

Mảng con trỏ thứ nhất trỏ tới vỳng dữ liệu được lấy về.

Mảng con trỏ thứ hai trỏ tới vỳng chứa chiều dỏi của từng field trong cõc record kết quả.

Kết quả trả về sẽ được chứa thỏnh từng field. Tức lỏ toỏn bộ cõc record của field thứ nhất sẽ được chứa vỏo phần tử [1,i] của con trỏ thứ nhất. Tương tự cho cõc field thứ hai, ba. Con trỏ chiều dỏi cũng được nạp kết quả thỏnh từng field như con trỏ dữ liệu.

Do đụ ta cần lấy số field của một record trả về bằng cõch dỳng hỏm GetODBCFieldCount()

Trong trường hợp nỏy, ta khừng biết trước kết quả dữ liệu trả về cụ kiểu gớ. Ta mặc nhiởn chuyển nụ về kiểu CString để cụ thể phõt ĩm lởn kởnh điện thoại bằng cõch dỳng RFX_TEXT.

Mọi cừng việc như lọc, sort cõc record phải thực hiện qua chuỗi lệnh SQL khi gọi hỏm Open.

• Hỏm RFX: (adsbygoogle = window.adsbygoogle || []).push({});

Mỗi hỏm RFX cụ 3 thừng số:

− Một con trỏ đối tượng CFieldExchange. Ta chỉ cần truyền con trỏ pFX cho hỏm DoFieldExchange.

− Tởn của cột trởn data source đụ.•

− Tởn của field data member tương ứng trong lớp recordset in the recordset class. • Cõc kiểu dữ liệu RFX:

Thư viện MFC cung cấp cõc hỏm RFX để chuyển đổi cõc kiểu dữ liệu giữa data source vỏ cõc recordset.

FunctionData Type

 RFX_Bool BOOL  RFX_Byte BYTE  RFX_Binary CByteArray  RFX_Double double  RFX_Single float  RFX_Int int  RFX_Long long  RFX_LongBinary CLongBinary  RFX_Text CString  RFX_Date CTime

IV. SƠ LƯỢC VỀ CSDL ĐƯỢC DỉNG TRONG ĐáI 116 BƯU ĐIỆN THáNH PHỐ:

∗ Phĩn tợch mẩu dữ liệu của Cơ sở dữ liệu.

Cơ sở dữ liệu đang dỳng trong đỏi được xĩy dựng bằng Foxpro vỏ bằng Oracle. Trong phạm vi đề tỏi, chỷng em chỉ dỳng CSDL được xĩy dựng bằng FoxPro. Ta cụ mừ tả một mẩu tin trong CSDL như sau:

 Một mẩu tin trong bảng chứa 72 trường, trong đụ gồm: − Stdm : chứa số điện thoại mới nhất của thuở bao. − Sdt : chứa số điện thoại cũ của thuở bao.

− Tcqv : tởn chủ thuở bao.

− Ttbv : dỳng để phĩn biệt nhỏ riởng hay cơ quan.

− Diachiv: chứa địa chỉ đầy đủ của thuở bao như : số nhỏ, tởn đường, phường, quận. − Tcqt : viết tắt tởn chủ thuở bao.

− Ttbt : viết tắt chữ đầu của giõ trị trường ttbv. − Diachit : viết tắt địa chỉ đầy đủ.

− May_sd:

− Duong : chứa tởn đầy đủ của đường phố. − N_vu:

− Trường từ W1 -> W20 : phĩn tợch thỏnh từ của tởn thuở bao. − Trường từ W21->W40 : phĩn tợch thỏnh từ của ttbv.

− Trường từ W41->W60 : phĩn tợch từ của diachiv.

Như vậy theo phĩn tợch trởn vỏ theo lý thuyết đọ nởu, mừ hớnh CSDL được dỳng trong đỏi 116 lỏ mừ hớnh CSDL phẳng.

Trong ứng dụng, kết quả cần quan tĩm lỏ tởn, địa chỉ của thuở bao nởn trong cõc trường trởn, ta chỉ quan tĩm đến cõc trường sau:

− sdt :trường nỏy dỳng lỏm khụa tớm kiếm số điện thoại chưa được cập nhật. − sdtm : trường nỏy dỳng lỏm khõ tớm kiếm mới nhất.

− tcqv: chứa tởn chủ thuở bao.

− diachiv: chứa địa chỉ đầy đủ của thuở bao.

V. HOẠT ĐỘNG CỦA PHẦN TRUY XUẤT DỮ LIỆU:

Phần truy xuất dữ liệu nhận vỏo một số điện thoại vỏ trả về một cĩu cần phõt ĩm trởn kởnh điện thoại.

Sau khi nhận vỏo số điện thoại, phần truy xuất dữ liệu giả sữ rằng đụ lỏ số điện thoại mới nhất của thuở bao. Nụ dỳng trường sdtm lỏm khụa tớm kiếm trong CSDL. Nếu tớm thấy giõ trị của trường sdtm của mẩu tin nỏo trỳng với số điện thoại nhận được, sẽ trả về một con trỏ trỏ đến mẩu tin đụ. Nhờ con trỏ nỏy ta lấy được thừng tin từ cõc trường cần thiết : tcqv, diachiv. Nếu khừng tớm thấy, phần truy xuất dữ liệu tiếp tục giả sữ số điện thoại nhận được lỏ số điện thoại của thuở bao mỏ khõch chưa được cập nhật. Bĩy giờ, nụ dỳng trường sdt

lỏm khụa tớm kiếm. Nếu tớm thấy, nụ trả về một con trỏ. Dựa vỏo con trỏ nỏy, ta lấy thừng tin cần thiết từ cõc trường sdtm, tcqv, diachiv.

Như vậy chuỗi cần phõt ĩm sẽ cụ hai dạng sau:

− Thừng bõo cho khõch tởn chủ thuở bao, địa chỉ ứng với số điện thọai mới nhất. − Thừng bõo cho khõch số điện thoại mới nhất, tởn chủ thuở bao, địa chỉ ứng với số điện thoại mỏ khõch chưa được cập nhật. (adsbygoogle = window.adsbygoogle || []).push({});

Thừng bõo nỏy sẽ được dỳng lỏm input cho phần xử lý dữ liệu ĩm. ∗ Vấn đề truy xuất CSDL đồng thời:

Việc truy xuất CSDL mang tợnh chất chỉ đọc thừng tin từ một CSDL cụ sẵn, cho nởn, ta cụ thể cụ nhiều tõc vụ đọc thừng tin trong cỳng một thời điểm. Điều nỏy giải quyết được yởu cầu nhiều kởnh điện thoại cỳng truy xuất thừng tin cỳng một lỷc trởn cỳng một CSDL.

Vấn đề cập nhật dữ liệu khi ứng dụng đang hoạt động :

Việc cập nhật dữ liệu khừng nằm trong phạm vi của ứng dụng mỏ lỏ nhiệm vụ của chương trớnh quản lý CSDL.

Chương trớnh đang dỳng CSDL của FoxPro. Do FoxPro khừng hỗ trợ cập nhật dữ liệu động nởn muốn cập nhật dữ liệu, ứng dụng phải dừng hoạt động.

Để cập nhật dữ liệu trong khi ứng dụng đang hoạt động, ứng dụng phải dỳng CSDL được tạo bởi Microsoft Access hay của Oracle vớ chỷng hỗ trợ việc cập nhật dữ liệu động.

SVTH: Nguyễn Hữu Phỷ – Trần Lở Trung Trang 92 MODULE T MODULE TNG NG H HP ằMP ằM CHƯƠNG III

1. Chức Năng:

Module tổng hợp ĩm nhận input lỏ chuỗi từ Tiếng Việt được tạo bởi module tớm kiếm dữ liệu, cho output lỏ dạng ĩm phõt trởn kởnh điện thọai.

2. Chọn Phương Phõp Tổng Hợp Am :

Ở phần cơ sở lý thuyết tổng hợp ĩm cho Tiếng Việt, chỷng em đọ nởu bốn phương phõp ghờp ĩm, trong đụ đõng chỷ ý lỏ phương phõp ghờp ĩm loại một vỏ phương phõp ghờp từng từ đơn. Để đảm bảo chất lương ĩm cho ứng dụng, chỷng em dỳng phương phõp ghờp từ đơn.

3. Cõc Bước Chuẩn Bị:

Tổng cộng số từ Tiếng Việt dỳng cho ứng dụng khoảng 2000 từ bao gồm : tởn, ho, tởn lụt của chủ thuở bao; tởn đường phố, quận, huyện, phường…

Tiến hỏnh thu ĩm qua SoundBlaster vỏ cắt bỏ những phần ĩm khừng cần thiết dỳng phần mềm WaveStudio.

4. Tổ Chức Lưu Trữ Dữ Liệu Am Thanh Vỏ Hiện Thực Tổng Hơp Am.

Cơ sở lý thuyết của ằm thanh đọ nởu trong phần trước. Trong phần nỏy trớnh bỏy cõch tổ chức dữ liệu ĩm thanh sao cho việc truy xuất, tạo dữ liệu ĩm cho hiệu quả.

Khi thu ĩm, trừ những cĩu chỏo, cĩu cõm ơn hoặc nhắc nhở được thu nguyởn cĩu, phần ĩm cún lại sẽ thu theo từ. Mỗi từ lỏ một file wav.

Dựa vỏo cấu trỷc của file wav chỷng em đề xuất hai cõch tổ chức lưu trữ. Mỗi cõch tổ chức lưu trữ bao gồm hai phần :

− Tổ chức lưu trữ dữ liệu ĩm thanh. − Giải thuật tổng hợp ĩm.

4.1. Chỉ lưu trữ dữ liệu ĩm

Ta mừ tả tổ chức dữ liệu ĩm như sau:

− Phần dữ liệu datawave được lưu riởng trởn một file DataWave.*. − Cõc thừng tin tớm kiếm được lưu trởn file index.*

− Phần mở rộng của file DataWave lỏ cõc ký tự trong bộ chữ cõi (a, ă, ĩ, b, c, d , đ, e, ở, f, g, h, i, j, k, l, m, n, o, ừ, ơ, p, q, r, s, t, u, v, w, x, y, z). Như vậy sẽ cụ 31 file DataWave

Một phần của tài liệu Tài liệu Giải pháp bán tự động dịch vụ 116 docx (Trang 84)