Tìm thủ thuật nhanh hơn với chức năng tìm trong Blog

Hiển thị các bài đăng có nhãn Thủ Thuật. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Thủ Thuật. Hiển thị tất cả bài đăng

5/8/12

Bài 1 : Sắp xếp tiếng Việt theo font chữ VNIWindows (VNI)

Nguồn:  Thủ Thuật Access
Tác giả: Xuân Thanh 
----------------------------
Có nhiều bạn hỏi về cách sắp xếp tiếng Việt trong Access. Hôm nay tôi xin chia sẻ với các bạn một số thủ thuật này. Trước hết xin lỗi những ai là thầy cô giáo vì cách sắp xếp tiếng Việt được hiểu theo nhiều cách khác nhau. Ở đây tôi xin sắp xếp theo thứ tự sau
1/ Xếp từ phải sang
2/ Xếp theo thứ tự của bảng chữ cái tiếng Việt
3/ Về dấu, thứ tự ưu tiên sẽ là không dấu, huyền, sắc, hỏi, ngã, nặng
thủ thuật ở đây là dùng chuỗi mã hóa đễ chuyển về thứ tự như đã nói ở trên
Chúng ta cùng nghiên cứu nhé

1/7/12

Ngăn chặn không cho Access tự động lưu record

Chúng ta biết rằng Access luôn tự động lưu lại các record mỗi khi ta nhập mới hoặc sửa đổi. Để ngăn không cho access tự động lưu, muốn lưu phải hỏi trước, nếu đồng ý thì lưu, nếu không thì undo lại giá trị trước khi thay đổi, ta dùng thủ thuật sau của sự kiện BeforeUpdate của form

3/9/11

Ẩn những giá trị trùng lắp

Bài viết này hướng dẫn bạn kết hợp thuộc tính Visible với HideDuplicate để ẩn giá trị lặp đi lặp lại trên một báo cáo. Trong cơ sở dữ liệu, các báo cáo làm từ quan hệ 1-n dẫn đến tên mã hàng lặp đi lặp lại thế này:
[Hình: DupeNoHide.png]

Thuộc tính HideDuplicate cho phép ẩn đi các ô OrderID, OrderDate, và CompanyName cho ta report dễ đọc hơn nhưng không hoàn toàn đúng
[Hình: DupeHide.png]

Date và Company ở order 10617 bị biến mất. TƯơng tự , Company ở Order 10619 cũng bị mất. Vấn đề đặt ra làm thế nào ngăn được những trường hợp này? Tức là cho phép hiện ra nếu nó là 1 OrderID mới.

24/2/11

Làm Việc với folder (TT)

Tác giả: Haquocquan
Vui lòng giữ nguyên tên tác giả và site khi bạn sử dụng hoặc dùng lại thủ thuật này
--------------------------------------------------------------------------------------------
Tiếp: Liệt kê các subfolders trong một folder:
Đoạn code dưới đây sẽ liệt kế các subfolders trong folder E:\XUAT\ vào table LuuSub

10/1/11

Mã hóa và giải mã- tgiả vba

Tác giả: VBA
site: Diễn đàn Thủ Thuật Access
ứng dụng 2 hàm này các bác có thể sử dụng trong việc quản lý mã hoá mật khẩu trong table User của các bác là hay nhất

21/11/10

Set Security Low cho Access

' site: http://thuthuataccess.com
' Write by Noname
' Vui lòng giữ thong tin site và tác giả nếu bạn dùng hoặc share lại code này

---------------------------------------------------------------------------------------
Như các bạn dùng Access đã biết. Mặc định khi cài thì chế độ sercurity của Access được set ở chế độ medium, nên khi mở Access, nó hiện bảng Security Warning rồi mới cho mở file. thủ thuật này cho phép bạn tạo 1 nút nhấn, cho phép người dùng tự Set chế độ sercurity thành low để lần sau không hỏi nữa!
Nguyên lý:
Mặc định, giá trị trong registry ở khóa HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Access\Security\ "Level" =2 vì vậy, ta phải set nó thành 1 thì lần sau nó không hỏi nữa.

19/11/10

Làm Việc với Folder

Tác giả: Haquocquan
Vui lòng giữ nguyên tên tác giả và site khi bạn sử dụng hoặc dùng lại thủ thuật này
-------------------------------------------
1. Kiểm tra xem folder có tồn tại hay không.

30/10/10

Thủ Thuật Lưu Vết Truy Cập Chương trình (Audit Trail)

'Writer By: Noname
'Site: http://thuthuataccess.com - Vui long giu nguyen site va tac gia neu ban dung hoac share module nay

------------------------------------------------------------------
Đầu tiên, Bạn thiết kế một table tblAuditTrail(Times,UserID,UserName,ComputerName,module,Action)
Tạo một đoạn chương trình con như sau trong một module mới

16/10/10

Tạo số chứng từ tăng dần và reset lại theo yêu cầu người dùng

Writer: Noname
site: http://thuthuataccess.com
Vui lòng giữ nguyên thông tin tác giả và site nếu bạn dùng hoặc chia sẻ thủ thuật này

-------------------------------------
Trong thực tế, một số chứng từ yêu cầu có số tăng dần và reset lại, cụ thể là các sổ thu , chi. Các quyển hóa đơn bán lẻ...
thủ thuật này cho phép chúng ta tạo ra các số chứng từ tăng dần và reset lại 1 khi nhấn vào nút reset.

Tạo số chứng từ tự tăng dần và reset lại mỗi khi người dung yêu cầu

Chúng ta có 1 table lưu các số chứng từ như sau:
Tblhoadon(STT,soHD,ngay, donvi,…)

14/10/10

In chứng từ nhiều hơn 10 record thì chuyển sang bảng kê

Tác giả: Noname
Site: http://thuthuataccess.com
-----------------------------------------------------
Vui lòng giữ nguyên tên và site nếu bạn dùng nội dung trong bài viết này
Giả sử bạn có table ( hoặc query) tên là table1.
Giờ bạn muốn in 1 chứng từ với điều kiện sau:
- Ít hơn 10 dòng, in bình thường
- Nhiều hơn 10 dòng, in chứng từ với dòng chữ: Chi tiết trong bảng kê . Đồng thời cho in luôn bảng kê!

Như vậy ta cần có 3 report sau:
- Chứng từ
- Chứng từ với dòng chữ : Chi tiết bảng
- bảng

Ở đây mình chỉ đề cập thủ thuật liên quan việc xử lý nút in. Còn nội dung mình không xem xét!
Trong nút nhấn In của form in, ta xử lý như sau:

Code:
Private Sub Command0_Click()
Dim rs As Recordset
Dim n As Integer
Set rs = CurrentDb().OpenRecordset("Table1", dbOpenDynaset)
rs.MoveLast
n = rs.RecordCount
MsgBox n

If n <= 9 Then
DoCmd.OpenReport "hoadon", acViewPreview
Else
DoCmd.OpenReport "hoadon1", acViewPreview
DoCmd.OpenReport "bangke", acViewPreview
End If

End Sub

Với hoadon là chứng từ không bảng
hoadon1: chứng từ có kèm bảng
table1 là table/ query chứa dữ liệu cần in


Để thảo luận thêm và download demo, vui lòng vào:
http://thuthuataccess.com/forum/thread-301.html

17/9/10

Gọi Form Chờ khi thực hiện tập lệnh !

Hỏi:Em đặt một nút command button, trong đó chạy một số câu lệnh và phải mất khoảng 5 phút.
Trong quá trình thực hiện lệnh, em muốn hiện lên màn hình dòng chữ:
" Đang thực hiện công việc, xin vui lòng chờ trong giây lát"

11/9/10

Tùy chọn liên kết lại các table từ file data có password

Tips này hướng dẫn chúng ta cập nhật lại link cho table khi chuyển file data có password sang một vị trí khác, hoặc chúng ta có nhiều file data giống nhau password và cấu trúc, chỉ khác nhau nội dung.
Chúng ta không cần phải khai báo lại password mà chỉ nhập password ở lần link lần đầu tiên (khi thiết kế)
(relink table from Database Access with password)
Writen by: Noname
Writen Site: http://thuthuataccess.com/forum
Please do not removed my info if using or share this code


Để sử dụng được code này, bạn vui lòng khai báo thư viện Office.

- Đầu tiên, bạn tạo 1 form mới, trên form,
+vẽ 1 textbox đặt tên là txtPath. dùng để nhập đường dẫn file data.
+ vẽ 1 nút nhấn, với caption là ... dùng để chọn file data, và ghi kết quả.
Vẽ 1 nút nhấn với caption là refresh link để thực thi hành động cập nhật lại đường dẫn table
[Image: chonfiledata.png]

Trong ví dụ đính kèm dưới đây, bạn có 2 file đính kèm là data3 và data4 với password đều là 123456.
Đầu tiên, bạn link table theo cách link thông thường, nó sẽ hỏi password của bạn, bạn nhập password bình thường, chọn các table để liên kết. Và kể từ đây bạn không cần phải nhập password thêm lần nào nữa.

Bạn tạo 1 module mới và copy các đoạn code sau vào:

Đoạn code này cho phép ta gọi hàm getfile để tìm tới file data

Code:
Function getFile(Tit As String, formatName As String, formatType As String)
Dim dlgOpen As FileDialog
Set dlgOpen = Application.FileDialog(msoFileDialogOpen)
With dlgOpen
    .Title = Tit
    .Filters.Clear
    .Filters.Add formatName, formatType
    .AllowMultiSelect = False
    result = .Show
    If (result <> 0) Then
getFile = Trim(dlgOpen.SelectedItems.Item(1))
End If
End With
End Function

Đoạn code này lấy về password lưu trong hệ thống:
Code:
' Lấy về password của lần connect trước
Function getconnect(T As String) As String
Dim con As String
con = DLookup("[Connect]", "MSysObjects", "[name]='" & T & "'")
getconnect = con
End Function
Đoạn code này link table với đường dẫn và password có sẵn
Code:
'Liên kêìt table
Sub LinkTable(T As String, path As String, connectString As String)
Dim tblLink As TableDef
Dim DBlink As Database
Set DBlink = OpenDatabase(path, False, False, connectString)
On Error GoTo Err
DoCmd.DeleteObject acTable, T
Err:
DoCmd.TransferDatabase acLink, "Microsoft Access", path, acTable, T, T
'DBlink.Close
Set DBlink = Nothing
End Sub

Đoạn code này kiểm tra các table nào là liên kết, nếu nó là liên kết thì sẽ tiến hành liên kết theo đường dẫn mới
Code:
Sub refreshLinkTable(path As String)
'Writen by:Noname
'Writen site: http://thuthuataccess.com/
'Please do not remove my info if using or share this modules
Dim r As Recordset
Dim s As String
s = "SELECT ForeignName FROM MSysObjects WHERE ForeignName Is Not Null"
Set r = CurrentDb().OpenRecordset(s)
If r.RecordCount > 0 Then
r.MoveLast
For i = 0 To r.RecordCount - 1
    LinkTable r(0), path, getconnect(r(0))
    r.MovePrevious
Next i
End If
r.Close
Set r = Nothing
End Sub

Giờ trong hành động nhấn chuột của nút Open, ta nhập code sau vào:
Code:
Private Sub cmdOpen_Click()
txtPath.Value = getFile("Select Data File", "data file", "*.mdb")
End Sub

Hành động nút refresh link ta nhập code sau vào:

Code:
Private Sub cmdreLink_Click()
refreshLinkTable Me.txtPath
MsgBox "link table thanh cong"
End Sub

Xong rồi đấy!
Chúc thành công.
Demo
Để thảo luận thủ thuật này, vui lòng ghé vào diễn đàn:
http://thuthuataccess.com/forum/thread-199.html

29/8/10

Tùy chọn file Data để liên kết đến

Hỏi: Hiện tại mình đã viết xong một chương trình kế toán phục vụ cho công việc của mình. Có một điều mình muốn áp dụng cho nhiều doanh nghiệp, mỗi doanh nghiệp một file .mdb thấy không hay lắm. Bây giờ mình muốn : trong thư mục D:\KeToan có file ChuongTrinh.mdb (Là chương trình chính), mỗi một doanh nghiệp dữ liệu chứa riêng một file mdb khác ví dụ như Data01, Data02, Data03... (Chỉ có Table thôi). Mình muốn các bạn giúp mình thiết kế một form (trước khi giao diện của chương trình hiện lên) form này hiện lên danh sách các Data có trong thư mục cùng với ChuongTrinh.mdb để cho mình chọn Data… khi đó chương trình sẽ tự liên kết đến Data mà mình đã chọn.
Đáp:
Để làm được như bạn, đầu tiên bạn phải làm được những việc sau:
1/ Liệt kê tên những table nào cần liên kết.
2/Lấy về đường dẫn file Data cũa bạn
3/ Gọi 1 đoạn code cho phép bạn xóa table đang link, và link lại tới file mới!

Bước 1: bạn tự viết ra giấy nhé
Bước 2:
Để chọn được file, bạn phải khai báo bộ thư viện của Office bằng cách vào cửa sổ VBA, Menu Tool--> references, chọn Microsoft Office 11.0 library. (chọn 10.0 với AccessXP).
[Image: OfficeLib.JPG]

Tạo tạo 1 module và copy 2 đoạn code sau vào:

Code 1 dùng gọi hộp chọn file:
Function getFile(Tit As StringformatName As StringformatType As String)Dim dlgOpen As FileDialog
Set dlgOpen 
Application.FileDialog(msoFileDialogOpen)With dlgOpen
    
.Title Tit
    
.Filters.Clear
    
.Filters.Add formatNameformatType
    
.AllowMultiSelect False
    result 
= .Show
    
If (result <> 0Then
getFile 
Trim(dlgOpen.SelectedItems.Item(1))End IfEnd With

End 
Function 

Code 2: Dùng Relink table lại

Sub LinkTable(As Stringpath As String)' kiêÒm tra table, nêìu coì rôÌi thiÌ xoìa ði
On Error GoTo Err

DoCmd.DeleteObject acTable, T
Err:
'
link lai tablelink moi
DoCmd
.TransferDatabase acLink"Microsoft Access"pathacTableTT
End Sub 

Xong phần chuẩn bị code, giờ bạn tạo 1 Form, trên form vẽ 1 textbox tên là txtPath, 1 nút nhấn tên là cmdOpen, 1 nút nhấn tên là cmdreLink

Sự kiệnc click của cmdOpen nhập như sau:

Private Sub cmdOpen_Click()txtPath.Value getFile("Select Data File""data file""*.mdb")End Sub 

Sự kiện click của cmdOpen, nhập vào như sau:

Private Sub cmdreLink_Click()LinkTable "tblKhachhang"txtPath
LinkTable 
"tblTiendien"txtPath
LinkTable 
"tblTienNuoc"txtPath
  'Sửa tên các table tương ứng thành của bạn
msgbox 
" Đã nhập thành công dữ liệu  file " txtpath
End Sub 
[Image: chonfiledata.png]

Demo Download:

Để thảo luận thêm về chủ đề này, mời bạn vào : http://thuthuataccess.com/forum/thread-154-post-222.html

4/7/10

Save as một table thành table khác trong Back-end từ Front-end !

Hỏi: Tôi muốn từ 1 file Access này dùng lệnh kết nối với file Access khác để copy 1 table1 thành table2 thì làm thế nào?

Đáp:

Bạn có thể dùng code sau để run bất cứ lệnh SQL gì ở 1 database nguồn:


Sub runSQLOnfile(mySql As String, myDB As String)
Dim DB As Database
Dim sqlName As QueryDef
' Mở myDB
Set DB = OpenDatabase(myDB)
' tạo 1 query tạm
Set sqlName = DB.CreateQueryDef("")
sqlName.sql = mySql

sqlName.Execute
DB.Close
End Sub



Khi đó bạn có thể gọi đoạn code trên từ một nút nhấn như sau:

Private Sub Command1_Click()
' kết nối DBLuu.mdb
'run SQL trong DBLuu
Dim mySql As String
Dim myDB As String
Dim sAppPath As String
sAppPath = Application.CurrentProject.Path
myDB = sAppPath & "\DBLUU.mdb"
mySql = "SELECT * INTO Table2 FROM Table1"
runSQLOnfile mySql, myDB
MsgBox " Đã copy table thành table 2"
End Sub


Xem Demo: Download
____________________________________________________________________________________
Thảo luận thêm: http://thuthuataccess.com/forum

3/6/10

Thao tác với registry (nâng cao)

Trước đây mình có giới thiệu 1 bài viết giúp chúng ta thao tác với registry. Phạm vi bài viết đó chỉ là ghi/ đọc 1 giá trị vào đó nhằm tiện lợi cho lần mở chương trình kế tiếp. Các bạn có thể ứng dụng tùy biến cho user save password hay vài giá trị mà user muốn mặc định...

Xem thêm

Tuy nhiên, do một số nhu cầu đặc biệt, bạn muốn can thiệp sâu hơn vào registry. Điều này đòi hỏi bạn phải có chút am hiểu về nó. Ứng dụng là bạn có thể change workgroup, tạo ổ mạng, setting vài mặc định cho access hay các ứng dụng khác...


Dưới đây mình sẽ giới thiệu vài hàm hỗ trợ ta thao tác với registry :


Reading from the Registry:


Code:

'reads the value for the registry key i_RegKey
'if the key cannot be found, the return value is ""
Function RegKeyRead(i_RegKey As String) As String
Dim myWS As Object

On Error Resume Next
'access Windows scripting
Set myWS = CreateObject("WScript.Shell")
'read key from registry
RegKeyRead = myWS.RegRead(i_RegKey)
End Function


Checking if a Registry key exists:

Code:

'returns True if the registry key i_RegKey was found
'and False if not
Function RegKeyExists(i_RegKey As String) As Boolean
Dim myWS As Object

On Error GoTo ErrorHandler
'access Windows scripting
Set myWS = CreateObject("WScript.Shell")
'try to read the registry key
myWS.RegRead i_RegKey
'key was found
RegKeyExists = True
Exit Function

ErrorHandler:
'key was not found
RegKeyExists = False
End Function


Saving a Registry key:

Code:

'sets the registry key i_RegKey to the
'value i_Value with type i_Type
'if i_Type is omitted, the value will be saved as string
'if i_RegKey wasn't found, a new registry key will be created
Sub RegKeySave(i_RegKey As String, _
i_Value As String, _
Optional i_Type As String = "REG_SZ")
Dim myWS As Object

'access Windows scripting
Set myWS = CreateObject("WScript.Shell")
'write registry key
myWS.RegWrite i_RegKey, i_Value, i_Type

End Sub


Deleting a key from the Registry:

Code:

'deletes i_RegKey from the registry
'returns True if the deletion was successful,
'and False if not (the key couldn't be found)
Function RegKeyDelete(i_RegKey As String) As Boolean
Dim myWS As Object

On Error GoTo ErrorHandler
'access Windows scripting
Set myWS = CreateObject("WScript.Shell")
'delete registry key
myWS.RegDelete i_RegKey
'deletion was successful
RegKeyDelete = True
Exit Function

ErrorHandler:
'deletion wasn't successful
RegKeyDelete = False
End Function


Ví dụ sau cho phép bạn startip chương trình unikey lưu trong thư mục D:\\Soft\\UniKey4.0\\unikey40RC2-1101-win32\\UniKeyNT.exe


Key của nó muốn lưu trong registry là

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]


"'UniKey"="D:\\Soft\\UniKey4.0\\unikey40RC2-1101-win32\\UniKeyNT.exe"


Ta phát biểu:

Dim key as String, v as String

key="[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]

'UniKey'"

v="D:\\Soft\\UniKey4.0\\unikey40RC2-1101-win32\\UniKeyNT.exe"

RegKeySave key,v


Chúc thành công!


Ngoài ra việc thao tác với registry bạn phải thật cẩn thận vì có thể làm hỏng cả hệ thống. Nên trước khi làm việc, bạn nên sao lưu 1 bản dự phòng bất trắc.
____________________________________________________________________________________
Thảo luận thêm: http://thuthuataccess.com/forum

29/4/10

Lập trình giao tiếp Web Server bằng thư viên WinHttp trên Access

Trên thực tế, rất nhiều dữ liệu ta cần lấy từ web, hoặc nhập liệu lên web site từ MS Access.
Bài viết dưới đây của mình nhằm hướng dẫn các bạn khái niệm cơ bản nhất để làm 1 ứng dụng tương tác Web server bằng Access thông qua thư viện winhttp

Để sự dụng thư viện này, các bạn phải khai báo trong khung soạn thảo code

Đầu tiên. Bạn tạo 1 file MDB mới. Tạo 1 form mới và vẽ
1 textbox tên texbox1
1 nút command button tên command1
1 đối tượng image tên pisture 1.

Trong khung soạn VBA, nhập đoạn code sau vào.
Sub getPicture(url As String)
Set WinHttpReq = New WinHttpRequest

 ' Tạo một mảng chứa dữ liệu trả về
    Dim d() As Byte
   
    ' Mở 1 thủ tục một yêu cầu lấy dữ liệu
    WinHttpReq.Open "GET", url, False

    ' Gửi yêu cầu đó tới server
    WinHttpReq.Send
   
    ' Lấy về tiến trình tải về .
    Text1.Value = WinHttpReq.Status & " - " & WinHttpReq.StatusText

    ' Đưa dữ liệu nhận được vào mảng đã khai báo với file tạm là temp.gif trong bộ nhớ
    Open "temp.jpg" For Binary As #1
    d() = WinHttpReq.ResponseBody
    Put #1, 1, d()
    Close
   
    ' gán file vào giá trị đối tượng picture tạo sẵn
    Picture1.Picture = "temp.jpg"
End Sub
Trong hành động click nút nhấn, ta gọi thủ tục trên:
Private Sub Command1_Click()
getPicture "http://i39.photobucket.com/albums/e193/duytuan2002/Access/Thuthuataccess.jpg"
End Sub
 
Giờ bạn xem điều kì diệu xảy ra.
Down load demo ở đây: Click

Về tương lai có lẽ các bài hướng dẫn của mình sẽ hướng tương tác web. Mình sẽ cập nhật những gì học được sau.
các bạn có thể tham khảo các hàm của thư viện winhttp trên trang web của microsoft:
http://msdn.microsoft.com/en-us/library/aa383979%28v=VS.85%29.aspx
____________________________________________________________________________________
Thảo luận thêm: http://thuthuataccess.co.cc/forum

26/3/10

Kiểm tra kiểu dữ liệu của fields

Hỏi: tôi có một table có field MASO, tôi không rõ kiểu dữ liệu của Field. Muốn tự động kiểm tra xem Field đó có kiểu dữ liệu là gì (haquocquan)

Đáp:

Nhập function sau vào:

13/3/10

Tùy biến chọn file Excel để Import vào Acces

Chú ý, để sử dụng được các đối tượng có sẵn của Office, bạn phải khai báo sữ dụng thư viện Office bằng cách vào cửa sổ VBA, Menu Tool--> references, chọn Microsoft Office 11.0 library. (chọn 10.0 đối với AccessXP)


Và bây giờ bắt đầu:

Tạo 1 form tên là frmTest
Vẽ 1 Textbox tên là txtPath.
Vẽ 1 nút nhấn là cmdSelectfile
Vẽ 1 textBox đặt là txtRange để bạn nhập tên sheet muốn import vào
Vẽ 1 Textbox đặt tên là txtTable để bạn nhập tên Table muốn lưu
Vẽ 1 nút nhấn có tên cmdImport
Tạo 1 module copy đoạn code sau vào:

Function getFile(Tit As String, formatName As String, formatType As String)
Dim dlgOpen As FileDialog
Set dlgOpen = Application.FileDialog(msoFileDialogOpen)
With dlgOpen
.Title = Tit
.Filters.Clear
.Filters.Add formatName, formatType
.AllowMultiSelect = False
result = .Show
If (result <> 0) Then
getFile = Trim(dlgOpen.SelectedItems.Item(1))
End If
End With

End Function

Và lưu thành tên Module 1
Trong event Onclick của nút cmdSelectfile, ta nhập như sau:

Private Sub cmdSelectfile_Click()
Me![txtPath] = getFile("c:\", "Select the Excel File", "*.xls")
End Sub

Trong event Click của nút cmdImport, ta nhập như sau:
Private Sub cmdImport_Click()

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, txtTenTable, txtPath, True, txtRange
MsgBox "import thanh cong"
End Sub

Giờ sử dụng: đầu tiên ta click vào nút cmdSelectfile để chọn file Excel muốn import
Nhập tên Sheet muốn import vào txtRange (ví dụ: Sheet1:A1:H300)
Nhập tên table muốn lưu. (Ví dụ: Table1)
Và nhấn Nút Import
Rồi hưởng thành quả

DownloadDemo

____________________________________________________________________________________
Thảo luận thêm: http://thuthuataccess.co.cc/forum

4/2/10

Tính giá trị 1 công thức lưu trong table

Hỏi: Mình có table tblData thế này
  tblData
tblData
TK NODAU CODAU PSNO PSCO NOCUOI COCUOI
110 50000 0 20000 6000 24000 0
111 150000 0 10000 2000 138000 0
112 245000 0 15000 3000 227000 0
113 15000 0 2000 11000 2000 0
114 85000 0 3000 4000 78000 0
211 0 20000 6000 3000
11000
212 0 135000 7000 8000
120000
213 0 36000 5000 1000
30000
214 0 42000 6000 6000
30000

tblketqua( Chimuc,Congthuc,giatri)
Mình có các công thức lấy giá trị trên table tblData để cộng trừ nhân chia, và công thức này được lưu trên tblKetqua. Mình muốn tính toán và điền giá trị cuối cùng vào ô giatri trên tblketqua.


Đáp:
Lấy giá trị thông qua hàm Dlookup. Tổng quát, ta viết 1 function để lấy giá trị trên tblData như sau:
Function myIndex(Dong As String, Cot As String) As Long
 myIndex = DLookup(Cot, "tblData", "[TK]='" & Dong & "'")
End Function

Công thức lưu của bạn phải phát biểu dạng:
myIndex("110", "nodau")-(myIndex("113", "PSno") + myIndex("114", "PSCo"))
Lưu các công thức này vào field Congthuc trên tblketqua.

Ví dụ:
TBLKETQUA
TBLKETQUA
CHITIEU CONGTHUC SOTIEN
I. TÀI SẢN myIndex("110", "coCuoi")+ myIndex("111", "coCuoi")+ myIndex("113", "coCuoi") 0
1. Tài sản cố định myIndex("111", "noCuoi")-myIndex("112", "noCuoi") 0
2. Vật liệu myIndex("110", "nodau")-(myIndex("113", "PSno") + myIndex("114", "PSCo")) 0
II. NGUỒN VỐN myIndex("211", "Codau")+myIndex("212", "Codau")+myIndex("213", "Codau") 0
1. Tỷ lệ vốn chủ sở hữu myIndex("111", "NoCuoi") 0
Dùng hàm eval để thực thi các công thức dạng chuỗi. Eval(StringExp)
Run 1 query update để cập nhật giá trị công thức vào ô giá trị:
Private Sub cmdTinhKQ_Click()
SQL = "UPDATE TBLKETQUA SET SOTIEN = Eval([congthuc])"
DoCmd.SetWarnings False
DoCmd.RunSQL SQL
MsgBox " Da update thanh cong"
DoCmd.SetWarnings True
DoCmd.OpenTable "TBLKETQUA"
End Sub
Chúc thành công:
Mời xem demo: Download
____________________________________________________________________________________
Thảo luận thêm: http://thuthuataccess.co.cc/forum

3/2/10

Set Mặc Định định dạng ngày tháng

Hỏi: Nếu như trong phần mềm của mình định dạng Format cho trường Date là dd/mm/yyyy mà ngày tháng hệ thống là mm/dd/yyyy thì sẽ dẫn đến lẫn lộn ngày tháng khi nhập vào CSDL .Nếu như mình nhập 12/06/2009 thì nó sẽ hiển thị 6/12/2009.
Vậy có cách nào để khi mình mở phần mềm lên nó sẽ tự kiểm tra ngày hệ thống để trả về định dạng dd/mm/yyyy không ?
Đừng bảo mình chuyển trong Control Panel nhé ,vì như thế cứ mang pm đi máy nào cũng phải chỉnh lại mất công lắm,mà không pro

Đáp: ( dongnamnb- Danketoan)
Bạn có thể giải quyết bằng hàm API. Cách làm như sau:

1. Copy đoạn code sau vào 1 module

Option Compare Database

Public Const LOCALE_SSHORTDATE = &H1F
Public Const WM_SETTINGCHANGE = &H1A
'same as the old WM_WININICHANGE
Public Const HWND_BROADCAST = &HFFFF&

Public Declare Function SetLocaleInfo Lib "kernel32" Alias _
"SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As _
Long, ByVal lpLCData As String) As Boolean
Public Declare Function PostMessage Lib "user32" Alias _
"PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function GetSystemDefaultLCID Lib "kernel32" _
() As Long
Public Declare Function GetLocaleInfo Lib "kernel32" Alias _
"GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal _
lpLCData As String, ByVal cchData As Long) As Long

Sub SetSysDate()
Dim lLocal As Long
Dim Length As Long
Dim dwLCID As Long
Dim Buf As String * 1024

On Error GoTo SetSysDate_Error
lLocal = GetSystemDefaultLCID()
Length = GetLocaleInfo(lLocal, LOCALE_SSHORTDATE, Buf, Len(Buf))
If Not Left$(Buf, Length - 1) = "dd/MM/yyyy" Then
dwLCID = GetSystemDefaultLCID()
If SetLocaleInfo(dwLCID, LOCALE_SSHORTDATE, "dd/MM/yyyy") = False Then
MsgBox "Khong doi duoc dinh dang ngay he thong.", 64, "Thong bao"
Exit Sub
End If
PostMessage HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0

End If


Exit Sub

SetSysDate_Error:
MsgBox "Unexpected Error No. " & Err.Number & _
" in procedure SetSysDate of Form Main. " _
& vbCrLf & vbCrLf & Err.Description, 64, "Dish Care Centre"
End Sub
Ở sự kiện Form_Load của form startup của bạn, bạn gọi thủ tục SetSysDate như sau:
Private Sub Form_Load()

SetSysDate

End Sub
 Như vậy mỗi lần chạy chương trình của bạn thì định dạng ngày hệ thống sẽ tự động chuyển thành dạng dd/mm/yyyy
____________________________________________________________________________________
Thảo luận thêm: http://thuthuataccess.co.cc/forum