Một số kỹ năng đối với Access...

  • Thread starter paulsteigel
  • Ngày gửi
paulsteigel

paulsteigel

Trung cấp
13/11/05
103
0
16
48
Hoà Bình
www.sfdp.net
Ứng dụng thuộc tính Tag và thực đơn trong MS Access

Hì hi!
Xin các bác bỏ hộ em quyền sửa bài cái - em toàn tiện tay nhấn vô nút sửa... bị một lần rồi - làm cho bài của bác Hai2Hai đi tong. Giờ tì nữa lại bài của Tuân.
Có một ứng dụng nhỏ viết cho một dự án để phục vụ công tác theo dõi thời gian làm việc, em xin gửi đây, các bác có quan tâm thì tải về ở:
www.sfdp.net/Libs/gen/acc/Beta_TimeSheet.rar
Ngoài ra có một ví dụ về cách phân lớp thực đơn trong ứng dụng access, các bác cũng có thể tải về ở:
www.sfdp.net/Libs/gen/acc/vdp/MnBar.zip
Trong bài này tôi có giới thiệu phương pháp hiển thị thanh công cụ và thực đơn cho các lớp ứng dụng khác nhau. Các bạn có thể thấy qua đoạn trích nhỏ sau:
1. Khai thác thuộc tính Tag của đối tượng điều khiển trên thực đơn.
2. Lập thủ tục kiểm tra thuộc tính tag để có thể tùy theo tình hình mà hiển thị hay không một nút bấm nào đó.
Ví dụ: Tôi để tag của một điều khiển(A) là chuỗi 1,2,3,4 trong khi một điều khiển khác(B) chỉ có 1,2,4. Khi bắt đầu ứng dụng, ta ghi lại một biến toàn cục để ghi nhận lớp ứng dụng đang làm việc.
Thủ tục kiểm tra thuộc tính sẽ so sánh chuỗi Tag của điều khiển xem có chứa biến lớp ứng dụng không, nếu có thì hiển thị điều khiển, nếu không thì giấu đi.
Cụ thể điều khiển A hiển thị ở tất cả các lớp, trong khi điều khiển B sẽ không hiển thị ở lớp ứng dụng thứ 3.
Cảm ơn các bạn đã theo dõi và chúc giáng sinh vui vẻ.
-------------------
Em mạn phép rời bài này qua đây và đặt lại tiêu đề cho hợp lệ bác nhé! (bác có thể sửa lại)
Đào Việt Cường :0frown:
 
Sửa lần cuối:
Khóa học Quản trị dòng tiền
paulsteigel

paulsteigel

Trung cấp
13/11/05
103
0
16
48
Hoà Bình
www.sfdp.net
Kỹ năng đơn giản nhưng rất hiệu quả trong báo cáo của Access.

Hôm nay đọc lại một vài thư cũ tôi chợt nhận ra rằng đã có lúc mình đi sai đường và lạm dụng quá về viết mã chương trình. Cũng tốt nếu chúng ta viết được mã chương trình, nhưng đôi khi nếu quá lạm dụng, chúng ta có thể quên mất một điều là Access có khả năng làm được điều ta cần một cách rất đơn giản và đơn giản là ta sẽ bị phí phạm nguồn lực. Bài viết này tôi muốn nhấn mạnh đến việc - tiếp cận một yêu cầu đầu vào thế nào để có thể tiết kiệm được thời gian va công sức thông qua phân tích một ví dụ sau.
1. Yêu cầu:
Làm thế nào để báo cáo của access không hiển thị các trường dữ liệu trống và báo cáo tự co khi có các khoảng trống dữ liệu đó?
Đoạn trích nội dung trao đổi thế này:
[Chao ban
Minh xin noi ro them nhu sau:
minh co 1 danh thiep va nguoi dinh kem danh thiep la subreport cua no
nhung khi dua dinh dang vao,thi nguoi dinh kem do co 5 du lieu:ten,dia chi,dien thoai,...doi khi no chi lay ten,diachi,... hoac chi lay ten
minh co thu lai nhieu lan va thay rang: neu nhu danh thiep co subreport nguoi dinh kem dau tien chi lay ten va dien thoai thi cac danh thiep sau,du nguoi dinh kem co them diachi,di dong,... van chi hien len ten va dien thoai ma thoi
minh van chua tim duoc nguyen nhan
Cam on ban nhieu]

2. Trả lời:
Vấn đề có vẻ không khó nếu các bạn sử dụng thành thạo access, nhưng đối với tôi dưới con mắt của một người chỉ sử dụng access một cách thời vụ, tôi phân tích nó theo cách quá máy móc giống như các tôi vẫn làm với các ứng dụng của tôi.
Tôi đã đặt vấn đề thế này:
+ Access không thể có chức năng để tắt hiển thị đối với một số textbox nếu nó không chứa dữ liệu – võ đoán đúng không các bạn - chủ yếu là do tôi giả định qua kinh nghiệm.
+ Vì lý do như vậy tôi nghĩ đến biện pháp dùng chức năng Định dạng có điều kiện của Access (Conditional Formatting) và làm như sau:
Khi báo cáo được tải vào bộ nhớ, tôi lưu lại kích thước và độ cao của các đối tượng textbox và nhãn trong báo cáo vào một mảng.
Khi báo cáo bắt đầu định dạng tại phần Details, tôi kiểm tra xem nội dung gửi ra có bị trắng không, nếu không có dữ liệu thì thực hiện việc thu nhỏ đối tượng textbox và tắt hiển thị và sắp xếp lại các đối tượng textbox khác để loại bỏ khoảng trắng.
Nếu đối tượng gửi ra có dữ liệu thì tôi căn cứ vào giá trị ban đầu đã lưu lại khi mở báo cáo và lại sắp xếp lại vị trí của đối tượng.
Kết quả là báo cáo in ra như ý định, các khoảng không chứa dữ liệu được điền bằng dữ liệu của trường khác – và báo cáo không có những khoảng trắng vô lý.
Có lẽ sẽ không có vấn đề gì cho đến khi tôi thực hiện các xử lý này trong Subreport, ban đầu báo cáo in đầy đủ đối với 1,2 bản ghi đầu, đến các bản ghi sau, báo cáo phụ không làm đúng như ý tôi nữa mặc dù báo cáo chính vẫn làm tốt những gì tôi muốn.
Quả thật, sau khi tìm hiểu vấn đề mất 2 ngày, kết luận là chẳng có cách nào để chữa vẫn đề này và đành phải chấm dứt mà không có cách giải quyết.
Các bạn có thấy cách tiếp cận của tôi có gì sai không, không sai gì cả mà chỉ là quá phức tạp – làm cho những ai mới với access cảm thấy buồn lòng vì tại sao một công cụ tiện lợi như thế mà chẳng làm được cái việc cỏn con ấy.
Đến tận hôm nay, vâng phải sau 2 tuần tôi mới bình tĩnh và ngồi lại với nó, lục tung sách vở .... tôi chợt để ý đến cái gọi là thuộc tính CanGrow (Có thể lớn lên) và CanShrink (Có thể thu nhỏ) của các đối tượng Textbox, và các Section trong báo cáo của Access. Nó là gì? CanGrow thì chẳng có gì lạ - tôi vẫn sử dụng đặc tính này để vẽ lưới trong báo cáo, nhưng CanShrink là gì? Hình như tôi chưa bao giờ sử dụng đến nó thì phải....
Bấm F1 và xem:
You can use the CanShrink property to control the appearance of sections or controls on forms and reports that are printed or previewed. For example, if you set the property to Yes, a section or control automatically adjusts vertically to print or preview all the data the section or control contains.
Bạn có thể sử dụng thuộc tính CanShrink để quản lý cách hiển thị của Section hay điều khiển trên form hay báo cáo khi in ra hay in lên màn hình. Ví dụ, bạn có thể đặt thuộc tính này về Yes, đối tượng Section hay điều khiển sẽ tự động điều chỉnh theo chiều đứng để in hay hiển thị lên màn hình tất cả dữ liệu mà Section hay điều khiển đó chứa.
A. Remarks
You can use this property to control the appearance of printed forms and reports. When you set the property to Yes, the object automatically adjusts so any amount of data can be printed. When a control shrinks, the controls below it move up the page.
If you set a control's CanShrink property to Yes, Microsoft Access does not set the section's CanShrink property to Yes.
Sections shrink vertically across their entire width. For example, suppose a form has two text boxes side by side in a section, and each control has its CanShrink property set to Yes. If one text box contains one line of data and the other text box contains two lines of data, both text boxes will be two lines long because the section is sized across its entire width. To shrink the data independently, you can place two subform or subreport controls side by side, and set their CanShrink property to Yes.
Chú ý:
Bạn có thể sử dụng thuộc tính này để quản lý in ấn form hay báo cáo. Khi bạn đặt thuộc tính về Yes, đối tượng đó sẽ tự động điều chỉnh để hiển thị bất kỳ lượng dữ liệu nào có thể được in ra. Khi đối tượng co lại, đối tượng bên dưới sẽ dịch lên trên trong trang in.
Section co theo chiều đứng theo suốt bề rộng của nó. Ví dụ, giả định một form có 2 textbox ở sát nhau trong một section, mỗi điều khiển đều có thuộc tính canshrink để ở Yes. Nếu một textbox chứa một dòng dữ liệu và cái còn lại chứa 2 dòng dữ liệu, thì cả 2 texbox sẽ hiển thị trên 2 dòng vì Section sẽ co giãn theo chiều đứng trên toàn bề rộng của nó. Để co dữ liệu một cách độc lập, bạn có thể đặt 2 subform hay subreport bên cạnh nhau và đặt thuộc tính Canshrink của chúng về Yes
Bingo!... đây rồi – có nghĩa là nếu tôi để chế độ Canshrink về Yes thì hoàn toàn ổn với các đối tượng Textbox, nhưng làm sao đây nếu tôi cần phải in các nhãn – cần nhớ là các nhãn không có thuộc tính này...? Vò đầu bứt tai một hồi – tôi nghĩ ra một kế khác.
Vậy thì thay vì cho các nhãn vào báo cáo, ta đặt 2 textbox cạnh nhau, một cái là unbound và để controlsource của nó là: =iif(nz([MyText],””)=””,””,”Email”), trong đó MyText là Textbox dùng để in ra dữ liệu. Tức là nếu Textbox bên cạnh không chứa dữ liệu thì tôi cũng đưa giá trị hiển thị của textbox đóng vai trò nhãn là “” còn nếu chứa dữ liệu thì ta đưa tên nhãn của nó vào – đây là Email chẳng hạn. Cả 2 textbox này ta để thuộc tính CanGrow và CanShrink về Yes. Section chứa 2 textbox là Detail cũng có thuộc tính để ở chế độ tương tự.
Và kết quả: Mỹ mãn đúng như cái tôi cần chỉ có điều tôi chẳng phải viết một dòng mã nào thay vì phải viết 2 trang mã (khoảng 90 dòng lệnh).
Các bạn thấy không - thật dễ dàng - vậy có thể tóm lại, trước một vấn đề:
+ Hãy xem kỹ yêu cầu, và đoán xem ta cần làm việc với thuộc tính nào ở đây là co vào và nở ra đúng không, nếu các bạn quen rồi thì sẽ hiểu ngay thuộc tính này đại lại là liên quan đến cái gì.
+ Bấm F1 và tìm xem có từ khoá nào liên quan đến thuộc tính ta cần, rồi đọc xem nó có thể giúp chúng ta làm được gì.
+ Và sau cùng nếu không có cách nào khác thì mới phải dùng đến công cụ mã nguồn.
Để các bạn tiện theo dõi, tôi xin gửi theo đây tập tin ví dụ tại:
www.sfdp.net/Libs/gen/acc/AutoShrink.rar
Tiếp theo xin gửi các bạn một ví dụ sau liên quan đến Excel, sau đây là một đoạn trích buổi nói chuyện của tôi với một bạn:
[[Yeucau]: Chao em
DDN: Chao anh a
[Yeucau]: Cho a hỏi Mình có cách nào đổi từ số cột, ví dụ như số 4 thành Cột D không vậy? Ý anh là trong lập trình, thì anh biết được cột thứ mấy, ví dụ như cột số 10 tức là cột J chẳng hạn. Ví dụ anh lập trình biết được cột hiện tại là 100 thì tương ứng với?
DDN: Anh đợi em một chút]
Thế các bạn sẽ định làm thế nào?
Bài sau tôi sẽ đăng câu trả lời nhé!
Chúc các bạn một ngày làm việc vui vẻ.
 
Sửa lần cuối:
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
4
18
Khánh Hòa
Dear paulsteigel,
---------------
Đợi bác đã lâu mà sao "DDN: Anh đợi em một chút]" của bác lâu thế!
Em rút được ra qua ví dụ của bác một bài học là phải luôn ghi nhớ các kiến thức cơ bản trước khi nghĩ đến kiến thức cao xa.
Điều đó khiến em rất hăng hái phát biểu ý kiến trả lời câu hỏi:
Yeucau nói:
: Cho a hỏi Mình có cách nào đổi từ số cột, ví dụ như số 4 thành Cột D không vậy? Ý anh là trong lập trình, thì anh biết được cột thứ mấy, ví dụ như cột số 10 tức là cột J chẳng hạn. Ví dụ anh lập trình biết được cột hiện tại là 100 thì tương ứng với?
Mặc dù đây là vấn đề không liên quan đến chủ đề về MS Access, nhưng điều thú vị ở chỗ là phải biết vận dụng kiến thức cơ bản để giải quyết các yêu cầu tưởng như đơn giản.
Trong MS Excel bộ đồ nghề Workbook Functions cung cấp cho ta các hàm cơ bản như hàm: CELL, COLUMN, ROW, INDEX, CHAR ... Trong đó, để chi ra chỉ số cột ta sử dụng hàm COLUMN ([Reference]). Tương tự, hàm ROW([Reference]) trả về Index dòng của Reference, hàm CHAR(<Number>) để chuyển đổi ký tự Ascii thành một số trong theo thứ tự chữ cái trong bảng Ascii.
Việc vận dụng các nhóm hàm này kết hợp với các hàm tìm kiếm sẽ đem lại kết quả khả quan!
Đôi điều góp ý và tham khảo!
 

Xem nhiều

Webketoan Zalo OA