Một số thủ thuật nhỏ
Xem bai viet bang font ABC
PCWorld VN 7/99
Bảo mật MDB trong Access (Access 97/2.0)
Nếu bạn viết ứng dụng có truy cập các tập tin MDB của Access, bạn cần phải dùng một cách bảo mật nào đó, để tránh sự dòm ngó của những tay phá hoại.
Một trong các cách mà nhiều nhà lập trình DAO (Data Access Object) thường dùng là thay đổi phần mở rộng của tập tin *.MDB.
Người dùng Access đều biết tập tin *.MDB là trọng tâm của cơ sở dữ liệu (CSDL). Rõ ràng phần mở rộng .MDB này là một gợi ý cho những tay tò mò muốn dùng Access mở tập tin *.MDB của bạn. Mặc dù bạn đã dùng mật khẩu để bảo vệ CSDL của mình, nhưng đối với nhiều người thì việc dò tìm mật khẩu lại là một công việc hứng thú hơn trò chơi Solitaire (ngoài ra cũng có nhiều công cụ giúp họ làm công việc dò tìm mật khẩu một cách nhẹ nhàng, nhanh chóng và thông minh - ND).
Thay đổi phần mở rộng của tập tin MDB không ảnh hưởng đến chương
trình của bạn, khi bạn dùng tên đầy đủ (bao gồm phần mở rộng đã
thay đổi của tập tin MDB) trong mã chương trình của mình. Điều này
khiến những tay tò mò khó lòng tìm ra tập tin CSDL của bạn để có
thể triển khai các công cụ dò tìm mật khẩu tương ứng.
Cần phải nói thêm rằng các macro virus Access thường tìm các tập tin
có phần mở rộng là MDB để lây nhiễm. Và lưu ý đừng khai báo phần
mở rộng mới này vào danh sách tập tin tự động được Access mở.
VB Combo Box nhanh, nhanh và nhanh hơn nữa (Visual Basic 5.0/4.0)
Bạn hãy hình dung tình huống sau: một CSDL Warehouse có 100.000 hộp (box) chứa tài liệu. Bạn muốn dùng một Browser để xem nội dung của các tài liệu này. Table1 có ba trường: "box-code" (kiểu text bao gồm box-number và địa chỉ vật lý của box), "date" và "client-code". Table2 có hai trường: box-code và nội dung tài liệu, trong đó mỗi box có thể có nhiều hơn một nội dung.
Dùng hai danh sách (list box): List1 để chọn các box, List2 để thẩm tra nội dung tài liệu của box. Vấn đề ở đây là làm thế nào hiển thị 100.000 dòng vào trong List1. Giải pháp là chia chúng theo trang như được trình bày trong đoạn mã dưới đây. Giả định rằng Table1 và Table2 là các đối tượng bảng và được chỉ mục theo Idx_BoxCode, còn Tbl1 và Tbl2 là các bảng con tương ứng.
?Module-level variables
Dim db As database
Dim Tbl1 As Table
Dim Tbl2 As Table
Sub Form_Load()
Dim iCount As Integer
Const MAX_ITEMS = 10
Set db =_ OpenDatabase("F:\DAT\",_ False, False, "DBase
III;")
Set Tbl1 =_ db.OpenTable("Table1")
Set Tbl2 =_ db.OpenTable("Table2")
Tbl1.Index = "Idx_BoxCode"
Tbl2.Index = "Idx_BoxCode1"
Do While Not Tbl1.EOF
List1.AddItem Tbl1!BoxCode & " " _
& Tbl1(1) & " " & Tbl1(2)
iCount = iCount + 1
If iCount = MAX_ITEMS Then Exit Do
Tbl1.MoveNext
Loop
List1.ListIndex = 0
End Sub
Sub List1_CLick()
Dim temp As String
If List1.ListIndex = 0 Then
Tbl1.Seek "=", Left$(List1.List(0),7)
Tbl1.MovePrevious
If Tbl1.BOF Then
Tbl1.MoveNext
Else
List1.RemoveItem 9
List1.AddItem Tbl1!BoxCode & " " _
& Tbl1(1) & " " &_ Tbl1(2), 0
End If
ElseIf List1.ListIndex = 9 Then
Tbl1.Seek "=", Left$(List1.List(9),7)
Tbl1.MoveNext
If Tbl1.EOF Then
Tbl1.MovePrevious
Else
List1.RemoveItem 0
List1.AddItem Tbl1!BoxCode & " " _
& Tbl1(1) & " " & Tbl1(2), 9
End If
End If
List2.Clear
Tbl2.Seek "=", Left$(List1.Text, 7)
If Tbl2.Nomatch = False Then
temp = Tbl2!BoxCode
Do While Tbl2!BoxCode = temp
List2.AddItem Tbl2!BoxCode & " " Tbl2(1)
Tbl2.MoveNext
If Tbl2.EOF = True Then Exit Do
Loop
End If
End Sub
Với đoạn mã trên thì cho dù số lượng mẫu tin của Table1 rất lớn nhưng chỉ có 10 mẫu tin tương ứng được chuyển vào List1. Khi dòng đầu tiên hay dòng cuối cùng của List1 được chọn đến thì một dòng mới sẽ được thay vào đầu hoặc cuối List1.
Cách này thực sự tốt hơn cách sử dụng phát biểu hàm FindFirst và FindNext hoặc dùng câu lệnh của SQL: "SELECT * FROM Table2 WHERE BoxCode = ..." . Điều bất tiện duy nhất của nó là: đối tượng Table này không thể sử dụng được trong kiến trúc client-server.
Giấu nội dung của Workbook (Excel 97/95)
Trong một chương trình Excel VBA của mình, bạn muốn lần lượt mở và đóng đến hơn 300 tập tin Excel mà không hiển thị nội dung của chúng khi đóng mở. Muốn thế bạn đặt thuộc tính Visible của ứng dụng về False. Như vậy trong khi ứng dụng mở rồi đóng tập tin, nội dung tập tin sẽ không được hiển thị.
Đoạn mã sau đây sẽ minh họa cho điều trên, với vòng lặp của hơn 300 lần đóng mở tập tin. Trong mỗi lần mở tập tin, nội dung ô A1 được hiển thị. Giả định tồn tại tập tin "C:\MyBook.xls".
Sub OpenButHide()
Application.Visible=False
Workbooks.open FileName:="C:\MyBook.xls"
Worksheets("Sheet1").Activate
? Retrieve the value from the opened file.
MsgBox "Value in cell ?A1?"_ &Range("A1").Value
Workbooks("MyBook.xls").Close_
SaveChanges:=False
End Sub
Chú ý đặt lại thuộc tính Visible cho ứng dụng bằng dòng lệnh sau:
Application.Visible=True
Hữu Hoan
Theo Advisor VB 5/99
PcLeHoan
1996 - 2002
Mirror :
http://www.pclehoan.com
Mirror :
http://www.lehoanpc.net
Mirror :
http://www.ktlehoan.com