Chào mừng, Khách
Bạn cần phải đăng ký trước khi bạn có thể đăng trên trang web của chúng tôi.

Tên người dùng
  

Mật khẩu
  





Diễn đàn Tìm kiếm

(Tìm kiếm nâng cao)

Diễn đàn Thống kê
» Thành viên: 264
» Thành viên mới nhất: thuytiencp
» Các chủ đề diễn đàn: 215
» Các bài viết diễn: 1,640

Thống kê đầy đủ

Thành viên online
Hiện đang có 32 người dùng trực tuyến.
» 2 Thành viên | 30 Khách
feeling, lmthu

Chủ đề Mới nhất
Thiết lập code in nhãn th...
Chuyên mục: Vấn đề chung
Đăng bởi lần cuối: tranthanhan1962
7 Giờ trước
» Bài trả lời: 7
» Lượt xem: 177
Cập nhật theo điều kiện
Chuyên mục: Vấn đề chung
Đăng bởi lần cuối: feeling
9 Giờ trước
» Bài trả lời: 0
» Lượt xem: 13
Tìm kiếm theo nhiều tiêu ...
Chuyên mục: Forms
Đăng bởi lần cuối: mrtoanbin
10 Giờ trước
» Bài trả lời: 3
» Lượt xem: 79
Nhờ anh chị hỗ trợ
Chuyên mục: Query
Đăng bởi lần cuối: ongke0711
Hôm qua, 10:49 AM
» Bài trả lời: 3
» Lượt xem: 84
[Góc thơ] THAO THỨC
Chuyên mục: Góc Thơ
Đăng bởi lần cuối: Nguyễn Thành Sáng
21-01-18, 10:36 PM
» Bài trả lời: 554
» Lượt xem: 25,301
Sự ổn định của UNION QUER...
Chuyên mục: Query
Đăng bởi lần cuối: duynamvnn1208
21-01-18, 09:52 PM
» Bài trả lời: 1
» Lượt xem: 52
Chương trình quản lý bán ...
Chuyên mục: Thư Viện Ứng Dụng
Đăng bởi lần cuối: mrsiro
21-01-18, 09:26 PM
» Bài trả lời: 41
» Lượt xem: 2,183
[S.O.S] Điều khiển hiển t...
Chuyên mục: Forms
Đăng bởi lần cuối: tranthanhan1962
21-01-18, 05:31 PM
» Bài trả lời: 16
» Lượt xem: 575
Tạo Report như mẫu lý lịc...
Chuyên mục: Report
Đăng bởi lần cuối: tranthanhan1962
21-01-18, 01:36 AM
» Bài trả lời: 4
» Lượt xem: 173
Nhờ giúp dùm bài tập acce...
Chuyên mục: Query
Đăng bởi lần cuối: tranthanhan1962
21-01-18, 01:09 AM
» Bài trả lời: 2
» Lượt xem: 64

 
  Lỗi readonly khí nhiều query thao tác trên cùng 1 table.
Viết bởi: The Wind - 19-08-10, 12:27 PM - Chuyên mục: Query - Bài trả lời (9)

Mình đang làm làm CT access trên access 2007. Nhưng có 1 vấn đề mà mình không biết phải sử lý làm sao.

Mình thiết kế 1 form main (nằm trong 1 form khác nên không thể ở dạng slip form): dạng single form, phía trên là thông tin báo cáo cuối cùng. phía dưới là subform dạng datasheet danh sách các báo cáo. cả 2 form này đều không cho thao tác thay đổi, xóa, hay thêm mới. mà phải nhấn vào buttom mở forms nhập báo cáo lên để chỉnh hay thao tác. Vấn đề là khi mình gọi form nhập này lên thì nó luôn ở dạng read only vì lý do nào đo mình không chắc chắn ( khi cố set value cho nó thì báo lỗi 3328: table read only)
Các form của mình đều thông qua query để kết nối với table, chứ không kết nối bằng VBA
Có vẻ là khi một form gọi đến 1 bảng thì mọi form khác sau nó gọi đến bảng này đều không thể thao tác được vì table bị chuyển sang dạng read only.

Mình thực sự không tốt lắm về access, các bạn có thể giúp mình không. Mong reply sớm nhất có thể.

In mục này

  Thông báo thử nghiệm diễn đàn Thủ Thuật Access
Viết bởi: Noname - 19-08-10, 12:17 PM - Chuyên mục: Thông báo - Không có hồi đáp

Thông báo thử nghiệm diễn đàn Thủ Thuật Access

Noname chào các anh chị!

Cảm ơn các anh chị thời gian qua đã theo dõi và chia sẻ kinh nghiệm cùng Blog Thủ Thuật Access.

http://thuthuataccess.blogspot.com


Tuy nhiên, có nhiều thắc mắc mà trong phạm vi một blog không cho phép chúng ta chia sẻ kinh nghiệm, học hỏi và phát triển các vấn đề liên quan đến MS Access. Vì vậy, hôm nay Noname xin lập thêm 1 diễn đàn để hỗ trợ, chia sẻ cho các anh chị tốt hơn.

Diễn đàn hiện tại chỉ là thử nghiệm, nên tên miền và host free. Đợi sau này nếu hoạt động tốt, tạo được sân chơi cho các Accessor chúng ta, đồng thời có kinh phí thì No sẽ nghĩ đến chuyện mua tên miền chính thức và Host chính thức!

Tên miền hiện tại của diễn đàn:

http://www.thuthuataccess.com


Tên miền phụ:

http://thuthuataccess.tk


Lưu ý:

- Vì là tên miền và host miễn phí, nên khả năng mất bài viết của quý vị là rất cao. Vì vậy, nếu bài nào thật sự thấy giá trị và tâm huyết, các anh chị nên lưu lại trên máy nhằm giảm rủi ro.

- Một lưu ý nữa là vì host miễn phí nên dung lương có giới hạn, các anh chị nên post file đính kèm lên:

http://www.mediafire.com/ hoặc 1 host miễn phí khác rồi chia sẻ link

Hình ảnh nên post trên http://photobucket.com hoặc 1 trang share hình nào đó rồi chèn vào forum!


Vì đây chỉ là forum thử nghiệm, đang trong quá trình xây dựng nên các anh chị thẳng thắn đóng góp ý kiến vào box Góp ý diễn đàn : http://www.thuthuataccess.com/forum/forum-3.html để diễn đàn hoạt động tốt hơn!


Thân mến!

Noname

In mục này

  [thẻ] Tạo Table với 2 cột,
Viết bởi: Noname - 19-08-10, 01:17 AM - Chuyên mục: Chức năng diễn đàn - Bài trả lời (9)

[thẻ] Tạo Table với 2 cột
Tạo ra 1 bảng với 2 cột. bao gồm tiêu đề cột và nội dung

Phát biểu

Mã:
[table]Tiêu đề 1 | Nội dung 1 | Tiêu đề 2 | Nội dung 2 [/table]

Kết quả:

Tiêu đề 1 Tiêu đề 2
Nội dung 1 Nội dung 2

In mục này

  Thiết kế Ctrình phân quyền
Viết bởi: Noname - 15-08-10, 01:48 PM - Chuyên mục: Thư Viện Ứng Dụng - Bài trả lời (27)

Phân quyền trong Access

Trong Access đã hỗi trợ phân quyền bằng cách tạo file workGroup *.mdw, *.mda. tuy nhiên cách này hơi nhiêu khê ở chỗ là máy sử dụng phải map tới file này thì mới xài được.
Vì vậy một cách khác mọi người quan tâm là phân quyền trực tiếp trong chương trình access của mình. Nếu mình post 1 đoạn chương trình lên cho mọi người tham khảo thì quá dễ dàng, nhưng điều đó không mang ý nghĩa học tập. Vì vậy, mình quyết định sẽ tiến hành Phân tích bài toán và thiết lập từng bước sao cho dễ hiểu nhất, ai biết Access cũng có thể làm được.


I/Mô tả:

Chương trình sẽ yêu cầu đăng nhập mỗi khi mở, nếu không có user name thì chỉ vào được quyền hạn chế dành cho khách.

II/ Thiết kế và giải thuật:

Mô tả ý tưởng:

- Khi bạn đăng nhập vào, chương trình sẽ ghi nhận username của bạn trong một biến toàn cục(public).
Sau đó sẽ qua một function để biết bạn thuộc group nào.( mình chia group thành các cấp khác nhau, cấp cao thì quyền nhiều hơn cấp dưới)

- Ở mỗi process cụ thể sẽ cho biết cấp tối thiểu để được đăng nhập vào process đó.

Chuẩn bị table:
- Table cần có là danh sách user: tblDSUser(ID,pass)
- Table lưu cấp của các user: tblWorkGroup(WgLevel, WgName,user)
Trong đó : username là khóa ngoại liên kết với tblDSUser

Dữ liệu nhập thử:

tblDSUser
ID --- Pass

Admin ---- Admin
Duytuan ---- tuan
Guest ----

tblWorkGroup

WGLevel---WgName---User
9---Admin --- Admin
8---User --- Duytuan
0---Guest---guest

Việc đều tiên là bạn vào khai báo một biến toàn cục tên là user, cách làm như sau:
Vào menu Tool => marcr Visual basic editor

Một cửa sổ VB xuất hiện, tại đây bạn vào menu Inser => module
Trong Module mới tạo, bạn khai báo một biến toàn cục để lưu tên user hiện hành:

Mã:
Public username as string


OK, bây giờ bạn đã đủ đồ nghề để tạo form đăng nhập.
[Hình: loginForm.jpg]



Đầu tiên, bạn tạo 1 form, đặt tên nó là frmLogin

1/Vẽ 1 lable với caption như sau “Xin mời nhập Username,pass hoặc nhấn vào guest để ghé thử”

2/Vẽ 1 combobox đặt tên là: cbbusername,
thuộc tính row source: SELECT tblDSUser.ID, tblDSUser.Pass FROM tblDSUser;

3/ Vẽ một textbox đặt tên là txtPassWord
Input mask kiểu Password

4/ Vẽ 1 text box đặt tên là txtPassTemp
Thuộc tính visible là No
5/ vẽ một nút đặt tên là cmdLogin
6/Vẽ một nút đặt tên là cmdGuest
Vậy là xong phần giao diện, bây giờ là cái ruột

Mô tả:
Sau khi cập nhật tên user thì txtPassTemp sẽ lấy về cái password , và field này user hoàn toàn không nhìn thấy. Mục đích là để so sánh pass này với cái pass của user nhập vào. Đúng thì tiếp tục log vào form chính, đồng thời gán biến username bằng tên đăng nhập, sai thì báo lỗi.

Như vậy, hành động after Update của ComboBox nhập user như sau:


Trích:
Mã:
Private Sub cbbUsername_AfterUpdate()
Me.txtPassTemp.Value = cbbUserName.Column(1)
‘ lấy về password
End Sub

Bây giờ ta xử lý nút Login,

đầu tiên bạn khoan đã xử. Bạn tạo 1 form đặt tên là frmMain rồi chừa trống đấy, form này để dành sau khi login thì nó sẽ gọi lên.

Bây giờ ta quay lại với nút login.
Nó phải làm các việc sau:+
- Kiểm tra password nhập vào có đúng với field : txtPassTemp hay không, nếu đúng thì làm cái việc là gán biến toàn cục username bằng giá trị của ô CbbUsername.
- Chào mừng user đó đăng nhập
- Mở form frmMain
- Đóng form frmLogin lại
Nếu sai thì báo là nhập sai

Đoạn code xử lý như sau:


Trích:
Mã:
Private Sub cmdLogin_Click()
If Me.txtPassWord.Value = Me.txtPassTemp.Value Then
Username = Me.cbbUserName
MsgBox "Welcom To " & Username
DoCmd.OpenForm "frmMain"
DoCmd.Close acForm, "frmLogin"
Else
MsgBox "Login Fail, check your Username and your password"
End If
End Sub
Bây giờ tới nút cmdGuest

Tương tự nhưng không cần kiểm tra gì cả, tên username được gán bằng tên Guest và vào thẳng form main

Trích:
Mã:
Private Sub CmdGuest_Click()
Username = "Guest"
MsgBox "Welcom To " & Username
DoCmd.OpenForm "frmMain"
DoCmd.Close acForm, "frmLogin"
End Sub

Trong khi chờ đợi các bạn cứ thiết kế Main form như hình nhé, nội dung thì thứ 2 No lên phân tích tiếp

[Hình: MainForm.jpg]
Hôm trước mình nhầm lẫn một chút ở khâu chuẩn bị table

Trích:
Mã:
Chuẩn bị table:
- Table cần có là danh sách user: tblDSUser(ID,pass)
- Table lưu cấp của các user: tblWorkGroup(WgLevel, WgName,user)
Trong đó : username là khóa ngoại liên kết với tblDSUser
sai ở table tblWorkGroup, vì như vậy thì ở mỗi level ta chỉ tạo được một user thôi
Mình xin đính chính lại table này
Mã:
tblWorkGroup(WgLevel, WgName,user)

Đầu tiên, để chuẩn bị cái ruột cho mainform, chúng ta phải có một đoạn code để lấy về level của user hiện hành.
Các bạn còn nhớ cái module mà bạn đã khai báo biến toàn cục: username chứ?
bây giờ mở nó lên, viết tiếp vào đoạn code lấy về level user

Trích:
Mã:
Function checkuser() As Integer
On Error GoTo Err ' nếu user vào trực tiếp bằng quyền guest thì cho level là 0
Dim rs1 As Recordset
Dim sql As String
sql = " select max(WGlevel) from tblWorkGroup where user= '" & Username & "'"
Set rs1 = CurrentDb.OpenRecordset(sql)
rs1.MoveFirst
checkuser = rs1(0).Value
Exit Function

Err:
checkuser = 0
Exit Function

End Function
OK, bây giờ đồ nghề đầy đủ, các bạn vẽ mainform rồi chứ/? Đặt tên cái form đó là frmMain.
Các nút trên form đặt tên lần lượt là: cmdAdmin,cmdUser,cmdGuest
Trong chương trình của mình sẽ chia làm 9 cấp độ đăng nhập, quyền cao nhất Admin,sẽ vào với level 9, các user tùy theo là trưởng phòng hay nhân viên sẽ có level 1-8
Guest sẽ vào với level 0. Giải thuật của ta ứng với mỗi nút là sẽ tạo ra yêu cầu level tối thiểu. Đối với user Admin thì tối thiểu phải level 9
OK.
Bây giờ ta xử lý nút cmd Admin như sau

Trích:
Mã:
Private Sub cmdAdmin_Click()
Dim userRequest As String ‘ biến yêu cầu user tối thiểu
userRequest = 9
If userRequest <= checkuser Then
MsgBox "Xin chao ban đa dang nhap vao quyen admin"
Else
MsgBox "ban khonn duoc dang nhap function nay"
End If
End Sub
Tương tự với Nút user, ở ví dụ này, nút user yêu cầu phải level 8 mới vào được. bạn có thể hạ thấp level yêu cầu xuống cho nhân viên.
Trích:
Mã:
Private Sub cmdUser_Click()
Dim userRequest As String
userRequest = 8
If userRequest <= checkuser Then
MsgBox "Xin chao ban da dang nhap vao quyen user"
Else
MsgBox "ban khong duoc dang nhap function nay"
End If
End Sub
Và nút guest cũng tương tự
Trích:
Mã:
Private Sub CmdGuest_Click()
Dim userRequest As String
userRequest = 0
If userRequest <= checkuser Then
MsgBox "Xin chao dang nhap vao quyen khach"
Else
MsgBox "ban khogn duoc dang nhap function nay"
End If
End Sub
Hihi, đáng lẽ có thể sửa quyền khách cho hợp lý hơn, nhưng mình copy paster cho nhanh

Hướng dẫn cơ bản tương đối ổn rồi, bây giờ ta “ màu mè” một chút là khi vào chương trình bắt buột phải login vào cái frmLogin, cách nào ư? Nhiều lắm, nhưng mình thích dùng cái marcro.
Bạn tạo một marcro, đặt tên nó là AutoExec
Thằng này sẽ tự chạy mỗi khi ta vào chương trình.
Nội dung của marcro AutoExec chỉ có 1 hành động dòng như sau:

Open form
Form name: frmLogin
View: form
Windows mode: Dialog

Sở dĩ tôi bảo các bạn dùng marcro là vì cái Dialog này, nó bắt buột phải đăng nhập mới vào, còn không thì nhấn guest.
Sau đó ta vào menu Tool =>startup bỏ chọn hết tất cả để nó không cho các user táy máy khi đăng nhập.
Chưa xong đâu, bạn quay lại cái Module, mở nó lên, vào menu Tool => “tên chương trình” properties nhảy qua tab protection, cài password cho cái source của bạn luôn. Cho mấy tay táy máy khỏi link vào import mấy cái table quý hóa của mình.
OK.
Đóng chương trình và mở lại. Thử với các quyền thử xem!

Và bây giờ bạn muốn edit chương trình thì làm thế nào? Dễ thôi! Nhấn phím shift trong khi mở nó sẽ không load macro AutoExec nữa, vào cửa sổ design như bình thường!
Vậy chương trình không an toàn về bảo mật? Ồ không đâu, tôi sẽ giới thiệu trong bài khác về cách vô hiệu hóa phím shift, và khi muốn mở lại thì phải Enable phím shift

Nếu các bạn chưa tin về tính bảo mật? Hãy thử chương trình Demo của Noname xem! trừ khi bạn đăng nhập vào quyền admin, còn lại các user kia thì không sửa xóa gì chương trình được cả
http://duyeagle.googlepages.com/phanquyen.rar

In mục này

  Tắt Security warning của Access
Viết bởi: Noname - 15-08-10, 01:40 PM - Chuyên mục: Thư viện thủ thuật - Bài trả lời (3)

Hỏi

khi mở database thì xuất hiện thông báo “Security warning Certain content in the database has been disabled” và chọn nút option thì xuất hiện tiếp bảng thông báo và phải chọn Enble this content.
Xin các bạn hướng dẫn viết code để khi sử dụng bất kỳ máy tính nào khi mở database này lên không còn xuất hiện thông báo nữa và mặc định là chọn Enble this content.

Đáp
Cái này là tùy chọn của hệ thống, không liên quan chương trình của bạn.
Để lần sau hệ thống không còn hỏi nữa, bạn mở ms Access lên. Vào Tool->macro ->sercurity. Chọn Low-> OK
--------------------------------------------------------------------
Cách Khác:
Tổng quát, vấn đề này do Windows quản lý trong registry, vì vậy bạn soạn 1 file text và chuyển thành đuôi .reg với nội dung sau. :

Code:

Mã:
[HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Access\Security]
"Level"=dword:00000001

Save lại và run trên máy có chạy ứng dụng Access
Chú ý, đây là mình đang dùng với Access2003
Bạn có thể sửa thông số tương ứng cho các bản Office khác.ví dụ Office 2007 thì đổi thành 12.0

AccessSer.rar‎

In mục này

Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ