
Hiển thị mã Unicode trong Access 2000
Trước khi giải quyết vấn đề chúng ta cần làm rõ một
số điểm. Thường Office 2000 dùng ngôn ngữ VBA
version 6.0 để viết code. Trên Win9x hay WinMe, có
hai trở ngại khi dùng Unicode trong lập trình hiển thị
chuỗi Unicode lên các phần tử giao diện, đó là:
1. Môi trường soạn thảo code VBA không cho phép
bạn nhập đúng các chuỗi Unicode.
2. Các đối tượng giao diện chuẩn của VBA, version
6.0 không hiển thị được chuỗi Unicode.
Để khắc phục 2 trở ngại trên, bạn nên:
-Nhập chuỗi Unicode trong cửa sổ thiết kế giao diện
và cửa sổ soạn code theo định dạng UTF-8 vì định
dạng này tương thích với mã ASCII truyền thống. Dĩ
nhiên, trước
khi sử dụng thật chuỗi UTF-8, bạn cần chuyển nó về
định dạng USC-2 thông qua việc gọi hàm API
Windows có tên là MultibyteToWideChar().

-Thay vì dùng các đối tượng giao diện có sẵn của môi
trường thiết kế VBA, bạn phải dùng các đối tượng
Form2 tương ứng. "Microsoft Form 2.0 Object
Library" là một thư viện các đối tượng giao diện mà
Microsoft mới viết sau này để hỗ trợ đúng mã
Unicode.
Chúng tôi có viết một form đơn giản, có 1 textbox để
nhập giá trị số, 1 textbox để hiển thị chuỗi chữ tương
ứng (ở dạng đơn giản nhất, cốt yếu để minh họa việc
xử lý chuỗi Unicode), 1 button cho phép chuyển số
thành chuỗi. Các đối tượng được dùng đều có trong
thư viện "Form 2.0". Qui trình xây dựng ứng dụng
này gồm các bước cụ thể sau:
1. Vì phát biểu Declare của VB không khai báo đúng
các hàm API có tham số là chuỗi Unicode nên trước
tiên bạn phải xây dựng một thư viện kiểu (type
library) chứa hàm MultiByteToWideChar() để dùng
trong ứng dụng. Hãy dùng một trình soạn thảo văn

bản soạn nội dung đặc tả thư viện TypeLib chứa hàm
MultiByteToWideChar() bằng ngôn ngữ ODL như
sau (cất nội dung lên file uniutil.odl):
[
uuid(13C9AF40-856A-101B-B9C2-
04021C007002),
helpstring("WIDE Windows API Type Library")
]
library WideWin32API
{
[
helpstring("KERNEL API Calls"),
dllname("KERNEL32")
]
module KernelAPI
{
[
helpstring("Convert a UTF8 string to a UCS-2

string."),
entry("MultiByteToWideChar")
]
long _stdcall MultiByteToWideChar
(
[in] long CodePage,
[in] long dwFlags,
[in] BSTR lpMultiByteStr,
[in] long cchMultiByte,
[in] BSTR lpWideCharStr,
[in] long cchWideChar
);
};
};
2. Dịch file ODL trên thành file thư viện kiểu
uniutil.tlb bằng tiện ích mktyplib.exe. Để có tiện ích
này, bạn có thể cài bộ Visual Studio 6.0, nếu cài ở
chế độ Typical, bộ VS sẽ được cài vào thư mục

"c:\Program Files\Microsoft Visual Studio". Nếu vậy,
để dịch file uniutil.odl ở trên, bạn hãy tạo một cửa sổ
DOS Prompt, dùng lệnh cd để chuyển về thư mục
chứa file uniutil.odl, rồi nhập tuần tự 2 lệnh sau để
dịch nó:
c:\progra~1\micros~3\vc98\bin\vcvars32.bat
mktyplib /I c:\progra~1\micros~3\vc98\include
/win32 /tlb uniutil.tlb uniutil.odl
Giả sử tên ngắn của thư mục "Program Files" là
progra~1, của thư mục "Microsoft Visual Studio" là
micros~3.
3. Chạy VB, tạo 1 project "Standard Exe" để quản lý
ứng dụng.
4. Ấn chuột phải vào chỗ trống trong cửa sổ
ToolBox, chọn mục "Components..." để hiển thị cửa
sổ "Components", ấn button Controls, duyệt đến mục
"Microsoft Forms 2.0 Object Library" và chọn nó để

