CÁC HÀNG SỐ ĐƯỢC SỬ DỤNG ĐỂ THIẾT LẬP
Chuong 2: Chuong 2: CAC MO HINH TRUY CAP DU LIÊU
déi record, gid tri nay thay déi dé phan ánh các nội dung của record mới. Nhiều thuộc tính khác của #¡eiở chứa siêu dữ liệu ngoài - dữ liệu (metadata- data) về dữ liệu trong một record. Thuộc tinh Name là một điều khiển để các trình ứng dụng của bạn có thể tham chiếu tới một trường. Thuộc tính DefinedS¡ize đặc trưng cho kích thước lớn nhất của một field (tính bằng số các ký tự của các field dạng Text).
Thuéc tinh ActualSize là chiều dài thực (tính bằng số byte) về các nội dung giá trị của một déi tugng Field. Thudéc tinh Attributes chứa một mảng các đặc điểm thông tin về một field. Nó có thể báo cho biết giỏ trị của fủield là cú khả năng cập nhật (updatable) hay khụng hoặc nó có thể chứa giá trị Null hay không.
(CC GHI CHÚ: Các thuộc tính DefinedSize và ActualSize sử dụng kích thước khác nhau cho các field dạng Text. DefinedSize là số ký tự lớn nhất trong một field và ActualSize là số byte trong một field. Vi cdc field Text vai Jet 4 biéu dién cac ký tự tương ứng 2 bytes, gid tri ActualSize của chúng co thể nhiều gấp đôi giá trị DefinedSize. Vì các field số và các field Text trong các cơ sở dữ liệu biểu diễn các ký tự tương ứng với † byte (ví dụ, một cơ sở dữ liệu của Jet 3.51), diém khác nhau này không còn tổn tại.
Các phương pháp Eicid: GetChunh va AppendChunk tạo thuận tiện xử lý văn bản lớn hoặc cỏc ủeld dữ liệu nhị phõn trong các chunk (khoảng) nhỏ hơn để tận dụng bộ nhớ hơn. Bạn sử dụng phương pháp GefChunk để mang vào bộ nhớ mét phan cia field lớn. Déi sé Size chi rd sé byte dé tìm trong một dẫn chứng của phương pháp GetChunk. M6i dẫn chứng liên tục, lần lượt của phương pháp bắt đầu đọc đữ liệu mới từ vị trí đã kết thúc trước đó.
Phương pháp AppendChunk cho phép bạn xây dựng một văn bản lớn hoặc field dữ liệu nhị phân trong các chunk từ bộ nhớ. Giống như phương pháp Ge(ChunÈ, nó ghi dữ liệu mới vào một field từ vị trí của phương pháp AppendChunh trước đã kết thúc. Để sử dụng cả hai phương pháp một cách chính xác, thuộc tính adFidLong của
133
mét déi tuong Field trong thuéc tinh Attributes phai được thiết lập la True.
Cac thuéc tinh Name va Value
Thủ tục sau đây trình bày cách sử dụng chung cho các thuộc tinh Name va Value. N6 liét kê tất cả các tên field tương ứng với các giá trị. Thủ tục này tạo recordset từ record đơn của nó dựa trên câu lệnh SQL
Sub FieldNameValue( )
Dim cnni As ADODB.Connection Dim rsCustomers As ADODB.Recordset Dim fldLoop As ADODB. Field
' Mở kết nối và recordsel.
strCnn = “Provider=Microfoft.Jet.OLEDB.4.0 ; “ &_
“Data Source=C:\Program Files\Microsoft Office\OfficeV’ & _
“Samples\Northwind.mdb ;”
Set cnn1 = New ADODB.Connection cnn1.Open strCnn
Set rsCustomers = New ADODB.Recordset rsCustomers.ActiveConnection = cnn1
rsCustomers.Open “SELECT * FROM Customers “ &_
“WHERE CustomerID=’BONAP’”,, , , adCmdText
‘ Dua cae tén field va cdc giá trị cho record.
For Each fidLoop In rsCustomers.Fields
Debug.Print fldLoop.Name, fldLoop.Value Next fldLoop
End Sub
Thủ tục này bắt đầu bằng việc mở một kết nối và sau đó tạo recordset vào kết nối này. Câu lệnh SQL trích các record cho khách hang vdi field CustomerID tương ứng với BONAP. Vòng lặp Do tiếp nối cỏc vũng lặp qua cỏc fủield của recordset. Việc in thuộc tinh Nưme cùng với thuộc tính Vaiue giúp cho có thể đọc được.
Chương 2: CÁC MÔ HÌNH TRUY CAP DU LIEU
Thuộc tính Type
Thuộc tính 7ype của một đối tượng Fieid cho biết loại dữ liệu nó có thể chứa. Thuộc tính này trả về một trong những hằng số của kiểu dữ liệu trong miền cdc gid tri DataTypeEnum. Ban có thể xem các tùy chọn này trong Object Browser cho thư viện ADODB. Hình 2-5 trình bày các hằng số này trong màn hình Object Browser.
Bằng việc chọn kiểu cho một fủield, bạn cú thể xỏc định cỏc giỏ trị hợp 1é cho thuéc tinh Value.
face ~ =] s[- j 8| % #I DmaTyprtaum =] BYE
Search Results
Etineary [etass Tmember ]
IÁ ADODB af DataTypeEnum 4J a0ljment
Classes: Members of Datatype num’
„# DatzlypgErem _ ` ;^|| 2) adBigidl ˆ
ca" EdlM00eEnum 2 agBmary 0 Error +) 2uBoolean
ô3 End$ +) a48STR + EiiofVAlueEnura J adthapter af EventReasonEnum = |/-) adChar a EventStalusEnum ằ EG a? ExeculeGptionEnum =| +3 adDate s33 Fisld +! 20080212 2# FielgAlibuteEnum. af adDBFiieTime 0% Fields 42 8gDBYime
+ FiRerÔtoupEnum vị| 2 80D8T,raeS1amp. 2
Const aucurcency 2
| Member of AYOPE Hela lyentwary
Hinh 2-5: Object Browser trình bày một lựa chọn của các hằng số kiểu dữ liệu.
In các kiểu dữ liệu của field
Hai thủ tục dưới đây làm việc đồng thời để xử lý các hằng số của kiểu dữ liệu với ADO. Thủ tục #eidNameType mở một recordset dựa trên bang Orders trong co sé dit liéu Northwind.
Bảng này có trạng thái khác nhau hợp lý của các kiểu dữ liệu, vì
135
vậy nó tạo thuận lợi để nghiên cứu các kiểu dư liệu. Sau khi mở một recordset, thủ tục này lặp qua các field trung recordset, và in từng tờn và kiểu của đối tượng #ùeÍd. Hàm #ield7ype chuyển cỏc giá trị hàng số thành một chuỗi diễn tả hằng số đó. Hằng số adCurrency cé gid tri la 6. Ham FieldType giải mã gid tri 6 thanh chuéi “adCurrency”. Tha tuc FieldnameType in timg tên field và tên hằng số của kiểu đữ liệu.
Sub FieldNameType( )
Dim cnn1 As ADODB.Connection Dim rsOrders As ADODB.Recordset Dim fldLoop As ADODB.Field
‘ MG két néi va recordset.
strCnn = “Provider=Microfoft. Jet.OLEDB.4.0 ; “ &_
“Data Source=C:\Program Files\Microsoft Office" & _
‘\Office\Samples\Northwind.mdb ;”
Set cnn1 = New ADODB.Connection cenn1.Open strCnn
Set rsOrders = New ADODB.Recordset rsOrders.ActiveConnection = cnni rsOrders.Open “orders”, , , , adCmdTable ' Báo cáo các lên và các kiểu của field cho record.
For Each fldLoop In rsOrders.Fields
Debug.Print “Name: “ &fidLoop.Name & vbCr & _
“Type : “ &FieldType(fld! cop.Type) & vbCr Next fldLoop
End Sub
Public Function FieldType(intType As Interger) As String Select Case intType
Case adVarWChar
FieldType = “adVarWChar’”
Case adCurrency
Chương 2: CÁC MÔ HÌNH TRUY CẬP DỮ LIỆU
FieldType = “adCurrency”
Case adinterger
FieldType = “adInterger”
Case adDate
FieldType = “adDate”
End Select
End Function
Hình 2-6 dưới đây trình bày trích đoạn kết quả xuất ra từ
FieldNameType.
immediate - *; [x]
Name: OrdérID
Type: adiInteger Name: CustomerIbD Type: adVarUChar Name: EmployeeID Type: adInteger Name: OrderDate Type: adDate Name: RequiredDate Type: adDate Name: ShippedDate Type: adlate Name: ShipVia Type: adInteger Name: Freight
Type: adCurrency ~
atl >]
Hình 2-6. Phần trích đoạn xuất ra của thủ tục FieldNameType
Phần trích này gồm tối thiểu một field từ mỗi kiểu dữ liệu đã giải mã trong hàm FieldType. Ban cé thé chay FieldNameType va FieldTxpe tương phần với recordset dựa trên các nguễn đữ liệu khác
137
một cách đễ dàng hơn so với bang Orders. Ban con cé thể gặp kiểu dữ liệu khác ngoài bốn kiểu có trong danh sách. Trong trường hợp nay, field Type trong report sẽ là trống. Bạn có thể chỉnh ly van dé này bằng cách định rõ giá trị của field. Muốn vậy bạn hãy đặt một điểm ngắt trong câu lệnh Ðebug.Print bên trong vòng lặp Do của thi tuc FieldNameType. Ban kiém tra giá trị của fidloop.Type cho một. field không hiển thị kiểu dữ liệu và tương hợp các tên của hằng tương phản giá trị của hằng đó trong Objeet Browser cho DataTypeEnum. (Xem Hình 2-5). Cuối cùng, bạn sửa đổi lại câu lénh Select Case trong thi tuc FieldType dé gidi ma hằng số mới.
Tìm gió trị nhập của field dai nhdt
Thủ tuc FieldSize dưới đây dùng thuộc tinh ActualSize dé tim giá trị nhập vào dài nhất trong field CompanyName cia bang Shippers trong co sở dữ liệu Northwind. Thủ tục này bắt đầu bằng cách tạo một kết nối đến cơ sở dữ liệu Northwind, và sau đó mở một recordset dựa vào bảng S/ippers. Phần thứ hai của thường trình thú tục tìm tên shipper (nhà cung cấp ship) đài nhất và hiển thị một hộp thông báo trình bày số ký tự trong tên và tên của chính nó,
Sub FieldSizes( )
Dim cnni As ADODB.Connection Dim rsShippers As ADODB.Recordset Dim fldLoop As ADODB.Field
Dim intMaxChars As Interger, strMsg As String Dim strName As String
' Mở mối quan hệ và các recordset.
strCnn = “Provider=Microfoft. Jet.OLEDB.4.0 ; “ &_
“Data Source=C:\Program Files\Microsoft Office” & _
‘\Office\Samples\Northwind.mdb ;”
Set cnn1 = New ADODB.Connection cnn1.Open strCnn
Set rsShippers = New ADODB.Recordset rsShippers.ActiveConnection = cnn1