Access hàm so sánh chuỗi textbox
Xin chào các tín đồ Access. Có lẽ nhiều người biết các ngăn chặn vọc phá cũng như tùy biến thuộc tính startup Access bằng cách vào Tool--> Startup. Show
So sánh - tổng hợp 2 table với UnionHỏi:Mình hiện nay có 2 table A và table B : Giờ mình muốn lọc bằng lệnh SQL hoặc query : điều kiện 1_những record nào trùng file mahang và tenhang trùng giữa 2 table A và B . 2_Lọc ra những record không trùng giữa 2 table A và B . 3 -Làm thế nào để Hợp nhất hai table A và B: lấy tất cả những record trùng và không trùng của 2 table (các record trùng nhau sẽ thành 1 record) Đồng Bộ hai tableHỏi: Tôi có 2 table có cấu trúc gần giống nhau. Tuy nhiên có khác biệt 1 ít về dữ liệu. Xin hướng dẫn đồng bộ table1 sang table 2. Ví dụ: table1( Maso, ten). Table2(maso, ten, diachi, ...) Tôi muốn 1/Thêm maso,ten từ table 1 sang table nếu trong table 2 thiếu. 2/Update lại tên nếu cùng 1 mã số nhưng tên table1 khác trong table 2 3/ xóa những recode trong table2 không có mã trong table1 Lập Hàm có lượng tham số thay đổiHỏi: Bạn HaQuocQuan có hỏi làm sao tạo một hàm có số lượng tham số tùy ý. Đáp: Điển hình của các hàm có tham số tùy ý ta có thể thấy ở Excel, nó thường ở dạng Hàm( mảng các tham số, hằng số 1, hằng số 2...) Với hằng số để cho ta biết trong trường hợp nào thì trả về giá trị nào. Dưới đây, mình xin tạo 1 hàm có số tham số thay đổi tương tự hàm sum của Excel Tạo số phiếu tăng theo mẫu : date+STTHôm trước mình giới thiệu thủ thuật tạo số phiếu tăng tự động theo đoạn code của anh phatnq2002 trang Dân Kế Toán Tạo số chứng từ tăng dần và reset mỗi tháng Hôm nay, mình giới thiệu đoạn code tạo số chứng từ tăng dần theo mẫu dạng: dd/mm/yy + số TT Để số thứ tự tự động tăng dần để trường STT là Text. Đồng thời ta thêm 1 trường couter kiểu Number - Integer để đếm số phiếu trong ngày. Trường này sẽ tăng khi bạn nhập phiếu mới với giá trị = max giá trị ngày đó. Tính ngày làm việc thực tế giữa khoảng thời gianRất nhiều nhà quản lý kế hoạch ( planning) muốn tính ngày làm việc thực tế giữa hai khoảng thời gian. Dưới đây mình xin giới thiệu đoạn code tính ngày làm việc thực tế. Trừ thứ 7 và chủ nhật. Mời các bạn tham khảo. Không tạo được ActiveX trong AccessHỏi: Em có tạo một sổ địa chỉ lấy dữ liệu từ tập tin MDB. Khi chạy chương trình trên máy nhà em thì bình thường nhưng khi chạy trên máy khác thì không được và có thông báo lỗi "Run-time error '429': Active X component can't create object". Thông báo này là sao, xin chỉ cho em cách khắc phục. Kiểm tra sự tồn tại của Fields trong tableHỏi : tôi có 1 table là: tblHOSO; tôi muốn dùng code để kiểm tra xem trong tblHOSO có field KIEMTRA không? Lỗi khi Chuyển từ File mdb thành mdeGần đâydo nhu cầu bảo mật chống sửa form/ Report , chống luc lọi trong các đoan code cũng như cải thiện tốc độ chương trình do VBA đã được biên dịch. Một số bạn đã chuyển ứng dụng Access của mình thành file *. mde nhưng vướng lỗi. Sau đây, mình xin thống kê và cách xử lý. Tạo số chứng từ tăng và reset khi sang tháng khácHỏi: Tôi muốn chứng từ phát sinh trong tháng thì tăng tự động, qua tháng tính lại từ đầu. Đáp: Dim so so = DMax("SOCT", "table", "Year(ngayhachtoan) = " & Year(Date()) & " AND Month(ngayhachtoan) = " & Month(Date())) If Nz(so, 0) = 0 Then soct = "0001" Else soct = Right("000" & CInt(so) + 1, 4) End If Trả lời của phatnq2002 trang Dân Kế Toán ____________________________________________________________________________________ Thảo luận thêm tại: http://thuthuataccess.co.cc/forum Thiết kế textbox, command ...sao cho đẹpHỏi: Một số form mình thiết kế các textbox, command, combobox theo hình thức thủ công, mặc dù mình đã O kỹ rồi nhưng thấy cũng chưa hài lòng lắm. Các bạn làm ơn chỉ mình cách làm sao để: canh đều trái phải; kích thước dài, rộng bằng nhau để xem cho đẹp mắt hơn. Đáp: Access cung cấp cho ta công cụ Align và Size ( Click chuột phải vào tập các đối tượng đã chọn hoặc vào menu Format) Đối với Align, ta có: (dùng chỉnh vị trí của đối tượng : Lable, Combobox, Textbox, button...) Left: Canh theo đối tượng ngoài cùng phía bên trái Right:Canh theo đối tượng ngoài cùng phía bên phải Top:Canh theo đối tượng trên cùng Bottom: Canh theo đối tượng thấp nhất Đối với size của đối tượng ta có: To Tallest : Format Chiều Cao của các đối tượng theo đối tượng có chiều cao lớn nhất To Shortest Makes :Format Chiều cao của các đối tượng theo đối tượng có chiều cao nhỏ nhất To Widest Makes:Format chiều rộng của các đối tượng theo đối tượng có chiều rộng lớn nhất To Narrowest :Format chiều rộng của các đối tượng theo đối tượng có chiều rộng nhỏ nhất To Fit: Format size đối tượng phù hợp với nội dung (chữ hoặc hình) của nó To Grid: Format size đối tượng vừa với lưới định sẵn của Access ____________________________________________________________________________________ Thảo luận thêm tại: http://thuthuataccess.com/forum Format có điều kiện cho field trong AccessHỏi :Tôi có bảng tblViDu: TK 111:Tiền mặt Mẹ, 1111:Tiền việt nam Con. Em muốn là sau khi mở bảng xem ở chế độ Datasheet thì chữ Mẹ thành màu đỏ,Chữ Con thành Màu xanh thì đinh dạng như thế nào? 9 Shortcut Key giúp bạn tiết kiệm thời gianNếu sử dụng thành thạo các phím nóng sau, bạn có thể tăng tốc một cách đáng kể cho việc nhập hoặc di chuyển giữa các dữ liệu: Xóa các bản ghi bị trùng trong bảng của bạn?Trên thực tế Access không cho phép bạn xóa các bản ghi bị trùng, nhưng bạn có thể thực hiện được tác vụ trên bằng cách tạo một table mới từ table cũ với các bản ghi không bị trùng sau đó xóa table cũ và đổi tên table mới tạo thành table cũ. Ẩn/ Hiện các đối tượng trong AccessShow / Hide Object ( tables, querys, forms, reports ) Question : Làm thế nào để có thể ẩn nhiều abngr cùng lúc.Hay là ta phải chọn từng bảng rôi ẩn.Vì trong CSDL có nhiều bảng mà ẩn từng cái bảng một thì rất là lâu.Tưng tụ với Form hay Report Tùy biến Tiêu Đề ReportQueston: Tôi có 1 report chia làm nhiều group. Mỗi cuối group tôi dùng page break để sang trang. Tôi muốn vài thông tin Page header chỉ hiển thị khi sang group mới. Hàm đọc số dùng mã Unicode trong AccessDo môi trường VBA chưa hỗ trợ Unicode đầy đủ nên việc thiết lập hàm đọc số tiếng Việt với mã (font) Unicode trong Access cũng như Excel có khó khăn. Bài viết này giới thiệu một cách thiết lập hàm đọc số dùng font Unicode trong Access (bạn cũng có thể áp dụng trong Excel, VB...).Report Footer luôn nằm ở cuối của trang cuối cùngGiả sử bạn muốn đặt Textbox Txt01 luôn nằm ở cuối của trang cuối cùng. Đừng đặt nó ở Report Footer mà đặt ở Page Footer và thêm đoạn code sau : Private Sub PageFooter_Format(Cancel As Integer, FormatCount As Integer) if Me.Page = Me.Pages then Me.Txt01.Visible = True else Me.Txt01.Visible = False End Sub ____________________________________________________________________________________ Thảo luận thêm tại: http://thuthuataccess.co.cc/forum Xử lý hiện thông báo khi không nhập dữ liệu vào texboxBạn sử dụng event on Lost Focus của textbox muốn ktra. Khi thoát khỏi thì check có IsNull hay kô? nếu IsNull là true thì quay lại ô đó textbox.SetFocus Chọn mẫu tin bằng ListboxHỏi:Giúp em phần từ (Item) listbox sang textbox Đáp: View report ở chế độ cố địnhHỏi: Làm thế nào để View report ở chế độ cố định Import Dữ Liệu Từ Excel Vào AccessĐể nhập mới nội dung một table (trong Access) từ một tập tin Excel, ta có thể dùng một trong những cách sau đây: Đăng nhập sai 5 lần chờ 15 phútQuestion :Thấy các diễn đàn chỉ cho đăng nhạp 5 lần,nếu sai thì 15 phút sau mới cho đang nhập lại.Thế thì mình nghĩ ra ý tương rằng,cái này chúng ta có thể áp dụng trong Form đăng nhập được không.Điều kiện: Đăng nhập sai 5 lần thì dù có đăng nhập đúng đi chăng nữa cũng không vào đuợc CSDL. Link table từ MDB có passwordTransferDatabase to open password protect database Question : Tôi xây dựng chương trình có 2 file: 1 file để thực hiện các thao tác trên FORM và xử lý thông tin (DBSYS.mdb) và 1 file để lưu trữ dữ liệu(DBDATA.mdb) - Để cho người khác không thể vào được các dữ liệu lưu trữ, tôi đặt pass vào file DBDATA. - Tôi tạo biến về đường dẫn để có thể tùy ý người sử dụng thay đổi thư mục của chương trình. Khi thay đổi thư mục của chương trình, thì sẽ tự tạo lại các link đến các table trong DBDATA. Vấn đề là: để thực hiện các lệnh link thì phải gõ pass. Nhưng mỗi một lệnh linktable, lại phải gõ pass một lần. Các PRO xem có cách nào giúp tôi: đặt sẵn và dùng VBA tại file chính (DBSYS) có thể link table từ DBDATA mà không cần phải gõ pass không (chỉ có sử dụng lệnh trong DBSYS mới không yêu cầu pass, còn các hình thức khác đều yêu cầu pass) Giáo Trình Access 2000Một giáo trình hay diễn giải chi tiết,với nhiều ví dụ sinh động,dễ hiểu bằng tiếng Việt 100% của Tác giả Nguyễn Sơn Hải rất thích hợp cho các bạn mới bắt đầu lập trình CSDL, đồng thời giúp bạn làm quen với VBA( visual basic for application), một ngôn ngữ thân thiện hỗ trợ hầu hết các ứng dụng của Microsoft. Tự động tạo CSDL Access bằng VBAHôm trước tôi giới thiệu các bạn cách tạo 1 file MDB mớiđể xuất dữ liệu ra đó. Hôm nay xin giới thiệu các bạn cách tạo 1 file Access mới hoàn toàn, đồng thời thông qua VBA để tạo table cùng các field trực tiếp trên đó! Canh Form giữa màn hìnhNhư các bạn biết. Mặc định Access đã cho ta thuộc tính auto Center và auto resize. Nhưng có vẻ như nó không đáp ứng được nhu cầu của chúng ta. Sau đây mình xin giới thiệu code canh giữa form. Trong Sự kiện Load Form, bạn cho code sau vào: Private Sub Form_Load() Const t = 567 Dim R As Integer, D As Integer, W As Integer, H As Integer ' với 10 là chieu rong cua form, tinh bang cm W = 10 * t ' 7 la chieu cao cua form tinh bang cm H = 7 * t R = (Me.InsideWidth + W) D = (Me.InsideHeight + H) DoCmd.MoveSize R, D, W, H End Sub Lấy về số seri CPU, ổ cứng MainBoard trong AccessĐôi khi có 1 số nhu cầu lấy thông tin phần cứng trong chương trình (chẳng hạn để cấp bản quyền). Dưới đây là Đoạn Code cho phép bạn lấy thông tin CPU máy tính: Không cho xoá File DataHỏi: File data muốn sử dụng thì phải share full, mà share full thì bị mần thịt là chuyện thường xuyên. A e cho hỏi có cách nào khắc phục ko cho xoá File Data.Mdb trong môi trường nhiều người dùng. Có chương trình ngoại vi nào không cho xoá File Data mà các Client vẫn hoạt động bình thường không? Nhập đường dẫn 1 file ảnh vào chương trình để lưu!Hôm trước tôi có nêu thủ thuật Insert 1 ảnh vào form/report khi đã có đường dẫn ảnh. Hôm nay tôi sẽ giới thiệu các bạn cách để nhập liệu đường dẫn ấy sao cho người dùng chỉ cần click chuột. Trên form, bạn vẽ 1 textbox đặt tên là txtPic, một nút nhấn tên cmdInsertPic,1 đối tượng ảnh đặt tên là image bạn phải tạo 1 funtcion để lấy về đường dẫn file ảnh In hình ảnh khi có đường dẫn hìnhHỏi: Tôi đã lưu hình ảnh vào ổ đĩa G: ( G: là ổ đĩa mạng). Và có 1 cơ sở dữ liệu lưu đường dẫn theo dạng : tvhinh(mahang,txtpic). Bây giờ trong Report làm sao tôi có thể vẽ lại các hình tôi đã lưu! Đáp: Trong Report, bạn vẽ 1 textbox đặt tên là txtpic, đặt thuộc tính visible của nó là False. Vẽ 1 đối tượng image đặt tên nó là image1 Sau đó cho đoạn code sau vào Tạo một đường viền cho reportTôi muốn tạo một đường viền cho report giống như boder style của word khi in mà kô phải mất công kẻ bằng tay được ko? Đáp: Cho đoạn code sau vào report! Private Sub Report_Page() On Error Resume Next Me.DrawWidth = 6 ' do rong duong line Me.DrawStyle = 0 ' 0 den 6 => kieu duong mat dan ' Sử dụng công thức object.Line (x1, y1) - (x2,y2), color, [Box=B] Me.Line (0, 0)-(Me.ScaleWidth, Me.ScaleHeight), vbred, B End Sub Thảo Luận vấn đề này tại đây Thiết kế Ctrình phân quyềnPhâ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. Tắt Security warning của AccessHỏ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. Chuyển chữ thường thành chữ HoaHỏi: Tôi làm chương trình qlý SV, vô ý lúc nhập tên toàn nhập chữ thường, tôi muốn tạo một hàm có thể in hoa tất cả mẫu tự đầu của từng từ trong trường văn bản thì phải làm như thế nào? Trả lời: Hàm của bạn làm như sau: Function Inhoachucaidau (Word as Variant) as String Dim temp as string, C as string, OldC as String, X as integer If IsNull(Word) then Exit Function Else Thay thế báo lỗi tiếng Anh bằng tiếng ViệtThường khi thao tác với Access, bạn hay gặp các câu báo lỗi bằng tiếng Anh, thay vào đó, bạn muốn khi gặp lỗi tương tự thì phải báo bằng tiếng Việt. Ta làm như sau:
Code Kiểm tra sự tồn tại của 1 file trong Access' kiem tra su ton tai file Function FileExit(fname As String) As Boolean
Gắn một số phím tắt cho các command buttonHỏi: Tôi muốn gắn một số phím tắt cho các command button trên form để khi bấm phím tắt đó, các câu lệnh sẽ được thực hiện.( cach tao 1 autokeys trong access ) Đáp: Bạn có thể cài shotcut key bằng cách chọn 1 ký tự trong caption của các button. Và thêm ký tự "&" trước ký tự đó. Khi bạn nhấn ALT + ký tự. Nó sẽ là shotcut key. Ví dụ nút OK thì bạn viết : &OK Shotcutkey sẽ là ALT+O Code kiểm tra sự tồn tại của tablePublic Function KIEMTRA(TableName As String)As Boolean ' Khai báo biến cục bộ truy xuất đến Database Access Dim DB As Database ' Biến N lưu trữ số Tables của Database (dùng Byte là đủ) Dim N As Byte ' Biến i để duyệt qua từng Table Dim i As Byte ' Khởi tạo biến DB Set DB = DBEngine.Workspaces(0).Databases(0) ' Lấy số Tables có trong Database n = DB.TableDefs.Count ' Duyệt tuần tự từng Table For i = 0 To n - 1 ' Nếu tên Table thứ i bằng với tên Table muốn tìm If DB.TableDefs(i).Name = TableName Then ' Hàm trả về giá trị TRUE KIEMTRA = True ' Thoát khỏi hàm Exit Function End If ' Chuyển qua Table kế Next i ' Nếu ra khỏi vòng lặp mà vẫn chưa tìm thấy thì hàm trả về False KIEMTRA = False End Function ____________________________________________________________________________________ Thảo luận thêm tại: http://thuthuataccess.co.cc/forum Hàm Tách Tên, Họ trong AccessMình xin giới thiệu 1 hàm tự tách tên, họ trong Access: Public Function Split(Ten As String, Kieu As Byte) Dim bytSpace As Byte bytSpace = InStrRev(Ten, " ", -1) If bytSpace = 0 Then Split = Ten Exit Function End If If Kieu = 0 Then Split = Right(Ten, Len(Ten) - bytSpace) Else Split = Left(Ten, bytSpace - 1) End If End Function Xoá các table theo điều kiện trong AccessHỏi: Tromg file MDB của em có nhiều table để lưu dữ liệu của các năm khác nhau. EM chỉ muốn lưu 3 năm gần nhất thôi. Ví dụ: năm nay là 2009, em chỉ cần lưu dữ liệu của 2007, 2008, 2009; năm tới 2010: chỉ lưu 2008, 2009, 2010. Em muốn tự khi lưu dữ liệu ngày đầu tiên của năm mới, thì table từ 3 năm về trước sẽ tự động bị xoá đi. Cụ thể: ngày 01/01/2010, em lưu dữ liệu thì table lưu dữ liệu của 2007 bị xoá đi. Đồng thời, em muốn xoá table với điều kiện nó tồn tại: Cụ thể: câu lệnh để thực hiện: Nếu tableA có trong MDB thì xoá tableA Các bác cho em xin đoạn code nhé Upsize Access lên MS SQL serverTheo thực tế 1 database Access còn rất nhiều hạn chế về : _ Phân quyền sử dụng. _ Sử dụng tối đa 10 users . _ Quản lý và lưu vết user đã ghi/đọc/xóa ... Trong cuộc sống náo nhiệt, môi trường sử dụng phần mềm quản lý khá phong phú đa dạng với nhiều ngôn ngữ lập trình khác nhau. Đối với việc sử dụng database trong một mạng Lan cũng rất phổ biến. Nay mình có 1 datbase access quản lý hồ sơ muốn share cho mọi người dùng chung mạng Lan, qua việc đọc 1 số bài hướng dẫn sơ lược và có đề cập đưa database Access lên SQL Server để quản lý cao hơn, chuyên nghiệp hơn. Mong Noname và các bạn hướng dẫn cụ thể và có hình ảnh minh họa về việc đưa database Access lên SQL Sever, đây cũng là vấn đề khó giải quyết và nóng bỏng nhất đối với các bạn khác. Chân thành cảm ơn Hiện thông báo không có dữ liệu khi in reportCho mình hỏi: Mình tạo 1 form in từ ngày đến ngày, nếu trong điều kiện đó mà reprt kô có dữ liệu thì hiện ra 1 câu thông báo tại form luôn và kô hiện ra report. Đáp: Bất cứ report nào cũng có record source đúng không, thường là 1 query/table. Như vậy vấn đề ở đây là bạn kiểm tra query/table xem có record nào không, nếu không có=> gởi thông báo. Nếu có thì cho in report. Đơn giản vậy thôi Tính Toán thời gian giữa hai thời điểm với dateiffĐôi khi bạn có nhu cầu tính số ngày, số tháng, số quý giữa hai thời kỳ nhằm phục vụ báo cáo.Cụ thể tính tiền trợ cấp hoặc bảo hiểm xã hội! Mình xin giới thiệu hàm: DateIff( loại, từ ngày, đến ngày) bạn dùng hàm datediff("d", date1, date2) để tính số ngày bạn dùng hàm datediff("m", date1, date2) để tính số tháng bạn dùng hàm datediff("q", date1, date2) để tính số quý .... Tạo chương trình trắc nghiệm bằng AccessTôi xin trình bày một ví dụ đơn giản nhưng rất cơ bản để từ đó bạn có thể tự "chíp" theo ý đồ của mình. Ví dụ: số câu hỏi cho mỗi lần trắc nghiệm là 30 (được chọn ngẫu nhiên từ ngân hàng câu hỏi), chọn 1 trong 4 đáp án. Giả sử ứng dụng Access có tên là DataTN.MDB. Bạn tạo một table có tên NganHangCauHoi để chứa ngân hàng các câu hỏi, có cấu trúc như bảng 1. Bảng này chứa số lượng không hạn chế các câu hỏi, mỗi câu hỏi được đánh số tự động, và có 4 mục tin (TraLoi1, TraLoi2, TraLoi3, TraLoi4) chứa nội dung 4 câu trả lời mà thí sinh có thể chọn. Mục tin DapAnDung chứa số thứ tự (từ 1 đến 4) của câu trả lời đúng. Mục tin DaDuocChon dùng để đánh dấu câu hỏi nào đã được chọn trong quá trình lựa chọn ngẫu nhiên 30 câu hỏi dùng cho bộ đề. Bạn cần phải thiết kế một form để nhập liệu vào bảng này. Làm sổ quỹ trong AccessEm muốn làm trình kế toán với số liệu thu chi và quỹ còn lại . Ví dụ như sau: STT___Thu___Chi_______Quỹ còn lại______Diễn giải 1_____0_____100_______500____________mua vật tư 2_____200___0_________700____________kế hoạch a 3_____300___0_ Private Const GWL_EXSTYLE = (-20) Private Const GWL_STYLE = (-16) Private Const WS_MAXIMIZEBOX = &H10000 Private Const WS_MINIMIZEBOX = &H20000 Private Const WS_SYSMENU = &H80000 Private Const HWND_TOP = 0 Private Const SWP_NOMOVE = &H2 Private Const SWP_NOSIZE = &H1 Private Const SWP_FRAMECHANGED = &H20 Private Const SWP_DRAWFRAME = SWP_FRAMECHANGED Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long Sub UnHideAccessCloseButton() End Sub000___________kế hoạch b Quỹ còn lại 3 = [quỹ còn lại 2] + [thu 2] - [chi 2] Bác nào biết cách làm hướng dẫn chi tiết dùm em với, em làm query trong MS Access. Không in số 0 trong reportKhi in 1 trường bằng số thì format #,### sẽ không in nếu dữ liệu bằng 0. - format : #,###.## : 0 không in ra nhưng 300.00 thì in ra 300. (có 2 khoản trắng phía sau) - format #,###.00 : 0 thì in ra 0.00; 300.15 in ra 300.15 (đúng) Mình muốn format trường số với 2 số lẻ (ví dụ trường Ngoại tệ USD) khi dữ liệu bằng 0 sẽ không in ra nếu có dữ liệu thì sẽ in ra với 2 số lẻ: Msgbox dùng Unicode Tiếng việtGần đây 1 số bạn ở các forum hay hỏi làm cách nào để hiện câu thông báo kiểu msgbox bằng tiếng Việt. Có 1 số bạn hướng dẫn theo nhiều cách, tuy nhiên mình thấy vẫn chưa hợp lý: - Cách 1: chỉnh Regional and Language Options thành Tiếng Việt. Cách này chưa hợp lý ở kiểu gõ và sẽ bị lỗi ở hệ thống bàn phím dùng số. - Cách 2: thay đổi font hệ thống trong thẻ Appearance. Chuyển thành font TCVN3 hay VNI. Sau khi đóng chương trình, hệ thống sẽ trả về lại như cũ. Tự động liên kết các tableTôi có một cơ sở dữ liệu Access và thực hiện split thành backend File QLVB đặt trong thư mục Run (thư mục Run nằm trong thư mục QLVB) chứa form, repost, ... File QLVB_en đặt trong thư mục Data (thư mục Data trong thư mục QLVB) chứa các table Khi tôi di chuyển (hoặc đồng bộ) thư mục QLVB (từ USB vào máy và ngược lại) là các liên kết của các table không còn nữa. Bạn nào rành về Access có thể viết đoạn mã giúp tôi tự động nối lại các liên kết đó không. thao tác với registryĐôi khi bạn có nhu cầu làm việc với registry trong Access, ví dụ lưu vị trí form, lưu đường dẫn mặc định để lấy dữ liệu. Hoặc lưu username mặc định, kiểm tra 1 computer có phải lần đầu tiên sử dụng chương trình không... Mọi việcsẽ dễ dàng hơn nhiều nếu bạn thao tác với registry.... Chặn xoay chuột để tới lui recordChặn xoay chuột để tới lui record Thiết kết trên Form mình đã tắc Record Selector để không cho tới lui các Record đã nhập trước đó, nhưng khi dùng nút giữa xoay chuột nó vẫn chạy tới lui. Hỏi: Làm sao để chặn thao tác xoay chuột "Cuộn lên xuống bằng nút xoay trên Mouse". Lệnh Tạm ngưng trong AccessTrong Access, khi bạn cần tạm ngưng chương trình trong một khoảng thời gian nào đó trước khi thực hiện lệnh mới. Ta dùng hàm Sleep. Để sử dụng được hàm này, ta khai báo : Public Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long) Và sử dụng: Sleep (5000) để tạm ngưng 5 giây! ____________________________________________________________________________________ Thảo luận thêm tại: http://thuthuataccess.co.cc/forum Lấy về tên của máy tính đang dùng:Lấy về tên của máy tính đang dùng: Environ("ComputerName") Ứng dụng bạn có thể phân quyền cho user cụ thể nào đó như chief accountant...hoặc vị trí cố định mà bắt buộc phải dùng PC đó mới có thể chạy được Module. Đơn giản hơn là trong hành động Form Load, bạn chào hỏi bằng hàm này: msgbox "Hello " & Environ("ComputerName") Tạo đồng hồ trong AccessĐó hỏi: Có cách nào để tạo đồng hồ trong chương trình Access (dưới dạng text box chẳng hạn) đồng bộ với đồng hồ máy tính? Đây trả lời: Bạn có thể sử dụng thuộc tính Timer Interval và thủ tục xử lý tình huống OnTimer. Cụ thể, trên form vẽ một text box có tên txtDongHo. Gán trị 1000 cho thuộc tính Timer Interval của form, rồi gõ đoạn mã 1 vào thủ tục xử lý tình huống OnTimer của form. Đoạn mã 1 Private Sub Form_Timer() txtDongHo = Format(Hour(Time()), "00") & ":" & _ Format(Minute(Time()), "00") & ":" & _ Format(Second(Time()), "00") End Sub CHƯƠNG CAN CHÍP theo echip ____________________________________________________________________________________ Thảo luận thêm tại: http://thuthuataccess.com/forum Tạo report có chiều cao co dãn theo dữ liệuTrong khi làm report. Có những dữ liệu vượt quá chiều ngang của field trình bày. Nhưng nếu ta set cho field đó có khả năng can grow thì nó sẽ nhảy dòng, làm lệch các khung ta đã canh chỉnh.Những người có kinh nghiệm giải quyết bằng cách chừa 1 khoảng trống đủ lớn để không bị "rớt dòng" đại loại như thế! Tuy nhiên, nếu không có dữ liệu nào thừa rớt dòng thì khoảng trống đó lãng phí trong report! Vấn đề đặt ra là làm cách nào để report có thể tự do dãn chiều cao ở mỗi dòng khác nhau cho phù hợp với dữ liệu Mở nút Close(x) khi đã khóaHỏi: Theo hướng dẫn trên, tôi đã khoa nút close , giờ muốn mở lại thì làm thế nào? Đáp: Bạn tạo 1 Module mới với nội dung sau: Code: Private Const GWL_EXSTYLE = (-20) Private Const GWL_STYLE = (-16) Private Const WS_MAXIMIZEBOX = &H10000 Private Const WS_MINIMIZEBOX = &H20000 Private Const WS_SYSMENU = &H80000 Private Const HWND_TOP = 0 Private Const SWP_NOMOVE = &H2 Private Const SWP_NOSIZE = &H1 Private Const SWP_FRAMECHANGED = &H20 Private Const SWP_DRAWFRAME = SWP_FRAMECHANGED Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long Sub UnHideAccessCloseButton() End SubTrong form Admin hãy tạo 1 nút để gọi hàm UnHideAccessCloseButton nhấn nút và đóng lại rồi xem kết quả nhé! ____________________________________________________________________________________ Thảo luận thêm tại: http://thuthuataccess.co.cc/forum Khóa phím close trong AccessHỏi: Tôi đã cung cấp cho người dùng nút đóng trên chương trình Access của tôi và kh6ong muốn họ dùng nút nhất close(x) sẵn của Windows thì phải làm thế nào! Đáp: Bạn có thể ẩn nút close bằng đoạn code sau: Code: Private Const GWL_EXSTYLE = (-20) Private Const GWL_STYLE = (-16) Private Const WS_MAXIMIZEBOX = &H10000 Private Const WS_MINIMIZEBOX = &H20000 Private Const WS_SYSMENU = &H80000 Private Const HWND_TOP = 0 Private Const SWP_NOMOVE = &H2 Private Const SWP_NOSIZE = &H1 Private Const SWP_FRAMECHANGED = &H20 Private Const SWP_DRAWFRAME = SWP_FRAMECHANGED Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long Sub HideAccessCloseButton() End SubKhoá phím ctrl-F4 và Alt-F4 , shift
Ý tưởng của hungtano Bạn tạo 1 macro tên AutoKeys, - ở cột Macro Name, bạn điền ^{F4}, ở cột Action bạn chọn Msgbox, ở phần dưới Action Argument bạn tạo 1 thông báo "Phím này đã bị khóa" - ở cột Macro Name, bạn điền %{F4}, ở cột Action bạn chọn Msgbox, ở phần dưới Action Argument bạn tạo 1 thông báo "Phím này đã bị khóa"
Đánh Số Thứ Tự Cho reportHỏi: Báo cáo của tôi có rất nhiều dòng, tôi muốn đánh số thứ tự cho mỗi record thì phải làm sao? Đáp: Trong phần detail của report, tạo một text box. Vô Properties của textbox đó,nhảy qua tab Data, đặt thuộc tính Control Source là =1, Thuộc tính runing Sum là Over All. Hehe , nó sẽ đánh số thứ tự toàn bộ các phần tử. Nếu chỉ muốn đánh số thú tự trong 1 Group thì chon Over Group Hình minh Họa: Chúc may mắn! Phục Hồi Table lỡ xóaTrả lời: Ý tưởng đặt ra là ta sẽ tìm lại table bi xóa trong những file ~templete (được tạo ra khi access dang chạy). Bạn tạo một command button phuchoi gọi lệnh UndeleteTable () như sau nhé: Private sub phuchoi_click () Call UnDeleteTable () End sub Enable phím shift khi lỡ chạy module khóa mà quên viết module mở khóa(bài này là ý tưởng của bạn hungtano) Hỏi: Tôi đã xây dựng xong CT nhân sự (C:\QLNS.mdb). Tôi tạo 1 custom menu bar, giấu đi Main menu của Access, tạo form startup, disable phím Shift để không ai có thể mở được cửa sổ database. Sau một thời gian CT bị lỗi nhưng hỡi ơi tôi lại quên viết code enable phím Shift nên không tài nào mở của sổ database, mở cửa sổ viết code để sửa lại CT. Tôi phải làm sao đây ? Đáp: Rất đơn giản, bạn tạo 1 file .mdb mới , viết code để can thiệp vào file QLNS.mdb, enable phím Shift. Cách làm: Trong file .mdb mới, bạn tạo 1 form, tạo 1 command button và : Private Sub EnableSHIFTButton_Click() Thảo luận thêm: http://thuthuataccess.com/forum nén file Access bằng VBABình thường,khi mà các câu lệnh Make, Append, delete thực hiện nhiều lần thì file access của bạn sẽ phình to không tưởng tượng được, có khi lên tới hàng GB, để nén access ta vào menu tool-->database Ulities-->Compact and repair Database Nhưng đôi khi chúng ta cần thực hiện điều đó bằng VBA vì đã khóa Menu, thay bằng customise menu, hoặc với mục đích thân thiện với người dùng chỉ trên một nút nhấn. hãy copy đoạn code sau của tác giả Juan M. Afan de Ribera để làm điều đó Code: ' * Code Start * Public Sub CompactDB() CommandBars("Menu Bar"). Controls("Tools"). Controls("Database utilities"). Controls("Compact and repair database..."). accDoDefaultAction End Sub ' * Code End * Thảo luận thêm: http://thuthuataccess.com/forum Hiện duy nhất một cửa sổ khi mở nhiều formTrích: Các bạn giúp mình với, làm sao khi mở một From VD From này la From Main, trong From Main này có các Nút lệnh để mở các From khác. Thì làm sao khi mở một From khác thì trên Takbar không xuất hiện From này mà vẩn còn From Main hiện diện trên Taskbar. Vì nếu tôi mở nhiều Fron trên một chương trình thì Taskbar sẻ đầy. Bạn chỉ cần vào Tools/options Bỏ dấu check ở mục Windows on Taskbar. khi đó trên Task bar chỉ còn duy nhất 1 màn hình Access thôi, bạn thư nhé. ------ sanyovietnam in MaNguon Trích: Nguyên văn bởi hungtano Bổ sung : Vì Access luôn chọn Check box Windows on Taskbar = True (default) nên nếu đem file mdb của bạn sang máy khác thì sẽ gặp lại trường hợp nhiều cửa sổ trên taskbar. Cách tổng quát hơn : Khi mở form Startup bạn thêm dòng lệnh : Private Sub Form_Open(Cancel As Integer) Application.SetOption "ShowWindowsInTaskbar", False End Sub Xem thêm : http://msdn.microsoft.com/library/de...baloptions.asp Thảo luận thêm: http://thuthuataccess.co.cc/forum Kiểm tra 1 form trong chương trình đã được mở hay chưa!Trong access, đôi khi bạn cần kiểm tra một form có đang load hay chưa để lấy về thông số, tránh động tác thừa vì đôi khi load lên một form dạng bảng, có nhiều đối tượng là rất lâu. Function dưới đây sẽ giúp bạn giải quyết vấn đề đó một cách dễ dàng Code: Function fIsLoaded(ByVal strFormName As String) As Boolean 'Giá trị trả về là 0 nếu chưa mở, -1 là đã mở rồi End Function
' Code End Thảo luận thêm: http://thuthuataccess.com/forum Xuống dòng trong MsgboxAccess 97 trở về trước khi xuống dòng dùng ký tự @. Access gần đây dùng vbCrLf để xuống dòng. Việc chủ động xuống dòng trong Msgbox giúp hiển thị thông báo rõ ràng hơn. MsgBox "1. Hello!" & vbCrLf & "2. Xin chào các bạn!" & vbCrLf & "3. Seeuagain!", vbInformation, "Message" Thảo luận thêm: http://thuthuataccess.com/forum Export dữ liệu ra excelKhông phải mọi thứ Access đều có thể giúp được bạn, đôi khi phải vận dụng linh hoạt với Excel. Câu lệnh Export một đối tượng Access ra Excel DoCmd.OutputTo Kiểu đối tượng, "tên đối tượng", "MicrosoftExcelBiff8(*.xls)", "", True, "", 0 Ví dụ bạn đẩy một query tên là DThutheothang ra excel: DoCmd.OutputTo acQuery, "DThutheothang", "MicrosoftExcelBiff8(*.xls)", "", True, "", 0 Thảo luận thêm ở:Diễn đàn Access Convert Null thành zeroKhi bạn phải cộng trừ với 1 giá trị rỗng, lập tức sẽ bị báo lỗi dữ liệu. Nhất là trường hợp các bạn dùng left join sẽ bị cộng khi bên kia không tìm thấy khóa. Vì vậy một mẹo nhỏ là bạn tạo một hàm đển convert giá trị null thành số 0. Sau đó, mỗi khi cộng trừ nhân chia thì ta thêm trước field đó dòng NZ([field chứa giá trị]) Convert Null-Zero Trích: Function NZ(anyValue As Variant) As Variant NZ = IIf(IsNull(anyValue), 0, anyValue) End Function Thảo luận thêm: http://thuthuataccess.com/forum Ký Tự xuống dòng trong SQLHỏi Cho tôi hỏi khi mình nhập bằng textare có ký bấm enter để xuống dòng vậy phim enter này lưu xuống SQl bằng ký tự gì vậy? bạn nào biết chỉ dùm nha, tôi đã dùng thử "\n" nhưng không đúng Đáp Trích: Nguyên văn bởi huynhvantham Nó là kết hợp 2 ký tụ: CHAR(13) và CHAR(10) Ví dụ bạn muốn Insert: Chạy trong Sql Query: In sert into tablename(firstname,lastname) values('Nguyen' + CHAR(13) + CHAR(10) + 'Van', 'A') Nếu bạn dùng TEXTAREA thì khi insert vào database thì bạn không cần phài thêm ký tụ xuống dòng. Vì TEXTAREA nó đả hổ trợ bạn chỉ cần gán giá trị của TEXTAREA cho Field dưới database là ok. Thảo luận thêm: http://thuthuataccess.com/forum Tạo Dòng Chữ chạy trên formHỏi Tạo dòng chữ chạy trên Form của Access: Cũng như mong muốn ở trên, trên 1 Form bất ký mình muốn chạy một dòng chữ để cần thông tin về vấn đề nào đó ví dụ như là "Chương trình này được tạo bởi...." Đáp: Trích: Nguyên văn bởi HungTano Hùng Tano + Bạn tạo 1 label , tên : LblWelcome - 1 nút lịnh, tên CmdRun Nhập các đoạn code sau : Private Sub CmdRun_Click() LblWelcome.Caption = "This program is designed by ..." & Space(3) Me.TimerInterval = 200 End Sub Private Sub Form_Timer() Dim x, y As String x = Left(LblWelcome.Caption, 1) y = Right(LblWelcome.Caption, Len(LblWelcome.Caption) - 1) LblWelcome.Caption = y + x End Sub Thảo luận thêm: http://thuthuataccess.co.cc/forum Sử dụng Unicode tiếng Việt trong MS AccessTG:Võ hùng- PC world Trong Access 2K trở lên chạy trên Windows XP/2K, không cần phải thay thế font hệ thống bằng các font TCVN, VNI, Vietware..., bạn vẫn có thể sử dụng font Unicode tiếng Việt trong các thành phần từ khi lập trình cho đến khi sử dụng: ô nhập liệu, tiêu đề trên form, menu, toolbar... Quan trọng nhất, bạn có thể viết code sử dụng font Unicode để tạo các message box hiển thị tiếng Việt. Điểm mấu chốt là khi tạo các form, report, menubar, toolbar, bạn sử dụng font Unicode dựng sẵn, nhưng khi lập trình (viết code) bạn dùng font Unicode tổ hợp. Lưu ý: khi viết code nhớ chọn font có chữ Vietnamese ở đằng sau, ví dụ font Times New Roman (Vietnamese). Cài đặt hệ điều hành 2K/XP Vào Control panel->Regional and Language Options. Trong bảng này có 3 tab: + Tab Regional options (gọi là Tab 1) + Tab Languages (gọi là Tab 2) + Tab Advanced (gọi là Tab 3) - Đầu tiên bạn vào Tab 2, đánh dấu chọn "Install files for complex script and right-to-left languages (including Thai)" (nếu chưa chọn). Có thể chương trình yêu cầu bạn đưa vào đĩa cài đặt WinXP(2K). Lưu ý: không nên dùng các đĩa cài đặt XP đã được chỉnh sửa như Wesmosiss WinXP,... - Chọn OK và khởi động lại máy. - Vào lại Tab 1, chọn Vietnamese. - Vào Tab 3, chọn Vietnamese. - Chọn OK và khởi động lại máy. Cài đặt MS Office Sau khi đã cài đặt MS Office, bạn vào Start -> Programs -> Microsoft Office Tools -> Microsoft Office Language Settings, chọn ngôn ngữ mặc định là Vietname Phân quyền sửa Chương trình trong AccessHỏi Bạn nào có biết cách phân quyền sử dụng trong Access không chỉ cho mình với. Có nghĩa là với chương trình mình tạo ra thì chỉ có mình mới có thể sửa source code được, có thể sửa design... được thôi, người sử dụng chỉ được quyền sử dụng và không có quyền truy cập vào source code cũng như table... để sửa chương trình. Ở bên mình mọi người cũng có kiến thức về Access nên biết là cứ bấm F11 là vào được data của chương trình. Đáp Trích: Nguyên văn bởi hungtano Bạn phải làm 2 việc :
Còn muốn triệt để hơn, không cho xem code thì .mdb --> .mde
Nguyên lý : trong database có 1 thuộc tính (property) gọi là : AllowBypassKey. Thuộc tính này cho phép bạn enable/disable phím SHIFT. + Nếu AllowBypassKey = False --> disable phím SHIFT + Nếu AllowBypassKey = True --> enable phím SHIFT Cách làm : bạn tạo 1 Form (tạm gọi : F_ShiftKey) có 2 nút lịnh : 1 để enable và 1 disable phím SHIFT. Đưa 2 private sub dưới đây vào.......... Private Sub DisableSHIFTButton_Click() On Error GoTo ErrHandler Dim db As Database Dim ThuocTinh As Property Set db = CurrentDb db.Properties("AllowBypassKey") = False Set db = Nothing Egress: On Error Resume Next Set db = Nothing Set ThuocTinh = Nothing Exit Sub ErrHandler: MsgBox Err.Number If Err.Number = 3270 Then ' Property not found. Set ThuocTinh = db.CreateProperty("AllowBypassKey", dbBoolean, False) db.Properties.Append ThuocTinh Resume Next Else MsgBox Err.Description Resume Egress End If End Sub \================================================= Private Sub EnableSHIFTButton_Click() On Error GoTo ErrHandler Dim db As Database Dim ThuocTinh As Property Set db = CurrentDb db.Properties("AllowBypassKey") = True Set db = Nothing Egress: On Error Resume Next Set db = Nothing Set ThuocTinh = Nothing Exit Sub ErrHandler: MsgBox Err.Number If Err.Number = 3270 Then ' Property not found. Set ThuocTinh = db.CreateProperty("AllowBypassKey", dbBoolean, True) db.Properties.Append ThuocTinh Resume Next Else MsgBox Err.Description Resume Egress End If End Sub ++++++ OK chưa bạn ? .............................................. Chưa đâu ! Bây giờ đặt F_ShiftKey ở đâu trong chương trình để không ai được quyền mở ngoại trừ Admin ? Có nhiều cách : cách đơn giản nhất là đặt ….ở đâu cũng được với 1 điều kiện : để mở F_ShiftKey cần phải biết password. Ở sự kiện Form_Open, bạn yêu cầu nhập đúng password : Lambada mới cho mở form này. Private Sub Form_Open(Cancel As Integer) Dim Message, Title, MyValue Message = "Ban vui long cho biet mat khau :" ' Set prompt. Title = "Kiem tra" ' Set title. MyValue = InputBox(Message, Title) If MyValue <> "Lambada" Then DoCmd.Close End If End Sub Thảo luận thêm: http://thuthuataccess.co.cc/forum Tính số ngày sử dụng chương trìnhMình có một chương trình Access tự viết nhỏ, mình muốn chương trình tính được số ngày sử dụng hoặc số lần đã mở chương trình nhưng không phụ thuộc vào ngày của hệ thống Trích: Nguyên văn bởi hungtano Trả lời bạn tạo 1 table, tạo field có tên là userTime, kiểu number Khi user mở starup form, ở sự kiện open của form, bạn viết 1 đoạn code mở table trên và edit thêm sự kiện như sau: Private Sub Form_Open(Cancel As Integer) Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset("T2") With rs .MoveFirst .Edit !UserTime = !UserTime + 1 .Update End With rs.Close End Sub Thảo luận thêm: http://thuthuataccess.com/forum Truyền thông số từ ComboboxHỏi: Các Huynh chỉ dùm trong Access khi chọn 1 mục trong Combo box VD: MANV nào đó thì ở TextBox kế bên hiển thị ngay tên nhân viên theo MANV đó. Trích: Nguyên văn bởi ndtoan123 :Cách 1 Mình cho vd nhé: Giả sử bạn có bảng nhân viên(MaNV;TenNV) bây giờ tại Form: Frmnhanvien bạn có 1 combobox(tên là Cboma) để gõ mã nhân viên và 1 Textbox(tên là txttenNV) để hiển thị tên nhân viên ứng với mã NV đã chọn. VD khi gõ vào combobox mã nhân viên NV01 thì textbox sẽ hiển thị là Nguyễn Văn A; khi gõ vào nhân viên NV02 thì textbox hiển thị là Nguyễn văn B... Muốn vậy tại textbox trên Form frmnhanvien: chọn Text txttenNV gõ vào công thức: \=Dlookup("tenNV","nhanvien","nhanvien!maNV=[Forms]![frmNhanvien]![Cboma]") thì bạn sẽ có được kết quả ngay nhưng nhớ đặt thuộc tính Looked= Yes cho Textbox txttenNV (Mục đích là textbox này chỉ để hiển thị kết quả, không cho sửa đổi) Trích: Nguyên văn bởi pinkair Cách 2 Ví dụ bạn có Table la NhanVien gồm hai trường MaNV, TenNV Bạn tạo Form có 1 Combo la CmbMaNV; 1 Text Box là txtTenNV Source của CmbMaNV là table NhanVien trên. Đoạn code như sau: Private Sub cmbMaNV Click() Me.txtTenNV.Value = Me.cmbMaNV.Column(1) End Sub Mình đã làm rồi, rất là OK bạn ah, bạn có thể sử dung Thảo luận thêm: https://thuthuataccess.com/forum Cách chuyển số sang tỷ lệ phần trămBình thường trong excel khi chia hai số cho nhau ta được số thập phân ví dụ 2/3=0.66666. Nếu ta Format lại ra dạng phần trăm thì có thể ra 66.6666%. Vậy trong Access có thể format như vậy được không? |