• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
access
 

access

on

  • 1,473 views

 

Statistics

Views

Total Views
1,473
Views on SlideShare
1,473
Embed Views
0

Actions

Likes
2
Downloads
8
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as Microsoft Word

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    access access Document Transcript

    • 1. tao commandBạn có thể dùng phần tử “Command Button” trong cửa sổ Toolbox để tạo nút lệnh. Ngaysau khi bạn vẽ nút lệnh vào form xong, cửa sổ “Command Button Wizard” sẽ hiển thịlên, bạn chọn mục “Miscellaneous” trong danh sách “Categories” rồi nhấn nút Cancel đểhoàn thành việc tạo nút lệnh. Sau đó, bạn nhấn phải chuột trên nút lệnh vừa vẽ để hiển thịmenu pop-up kèm theo; bạn chọn mục “Build Events”, chọn mục “Code Builder” rồinhấn button OK để hoàn thành việc tạo thủ tục xử lý sự kiện Click chuột trên nút lệnhtương ứng. Bạn có thể viết code VBA vào thân của thủ tục này để giải quyết chức năngmà bạn muốn.Để mở file Word, cách tốt nhất là kích hoạt ứng dụng Word rồi nhờ nó mở file Word đểngười dùng xem/hiệu chỉnh nội dung. Tương tự, để mở file Excel, cách tốt nhất là kíchhoạt ứng dụng Excel rồi nhờ nó mở file Excel để người dùng xem/hiệu chỉnh nội dung.Để kích hoạt ứng dụng và yêu cầu nó mở file dữ liệu kèm theo, bạn có thể gọi hàm APIWindows tên là WinExec(). Sau đây là đoạn code VBA mẫu miêu tả thủ tục xử lý nútlệnh, nó kích hoạt Word (Excel) và yêu cầu ứng dụng này mở file dữ liệu kèm theo:‘khai báo hàm API cần gọiPrivate Declare Function WinExec Lib “kernel32” (ByVal lpCmdLine As String, ByValnCmdShow As Long) As Long‘định nghĩa hằng cần dùngConst SW_SHOWNORMAL = 1‘thủ tục đáp ứng Click chuột trên button chạy WordPrivate Sub btnWord_Click()WinExec “””c:Program FilesMicrosoft OfficeOffice10winword.exe””c:YourDatayourfile.doc”, SW_SHOWNORMALEnd Sub‘thù tục đáp ứng Click chuột trên button chạy ExcelPrivate Sub btnExcel_Click()WinExec “””c:Program FilesMicrosoft OfficeOffice10excel.exe””c:YourDatayourfile.xls”, SW_SHOWNORMALEnd SubLưu ý chuỗi miêu tả đường dẫn của file khả thi cần chạy được đặt trong cặp nháy kép nếuđường dẫn có chứa các ký tự trống. Khi ứng dụng đã được kích hoạt, nó sẽ chạy songsong và độc lập với ứng dụng kích hoạt nó.]PhamQuanNet • Trang chủHome page • Hình ảnhPhotos • Liên hệContact us
    • • Giới thiệuAbout us19. 12 .2008Cách tạo nút đơn giản từ macro trong AccessMacro là những hành động được ta tạo ra, được giao một nhiệm vụ ghi lại những hànhđộng ta làm, ví dụ như ta đặt font chữ font chữ gì cỡ bao nhiêu…ghi lại những hành độngđó ta sẽ sử dụng sau, ta sẽ không phải thực hiện nó lần nữa mà sẽ dùng chính những hànhđộng trước đó ta làm đó gán cho macro thực hiện nó, trong Access cũng gần như vậy, gáncho hình ảnh một lệnh đơn giản như mở một form khác, tạo các nút như First, Previous,Next, Last, New, Delete, Close , Exit… Hôm nay mình dành chút thời gian viết bài chocác bạn, về chức năng cơ bản về Macro trong access để thực hiện một trong những lệnhcơ bản nhất trong Project Q1 của các bạn nhé !Tạo một nút Next cơ bản bằng cô cụ Rectangle và Label.
    • Hành động khi nhấn vào đối tượng đều được nằm trong thẻ Event, hãy chỉ vào đối tượngđó và chọn On Click > Khi chỉ chuột vào đố, nó hiện lên dấu 3 chấm nhấn vào đóCửa sổ Choose Builder hiện ra có 3 lựa chọn: Ta hãy chọn Macro Builder nhé !(Chúng tađang đi tạo macro cho nó mà hì hì)Cửa sổ Macro hiện ra với bảng Save as hiện lên bắt đặt tên cho Macro sắp được đặt ra: gõNext nhé !Các bạn đang tạo macro rồi đấy 1, nhấn vào khung action chọn: GotoRecord;Bảng Action Argument với 4 ô hiện ra, lựa chọn khung Record là next để gán cho nútlệnh là next.
    • và tắt bảng macro đi, bây giờ khung label đã được gán với lệnh là Next.Tương tự như vậy tạo các nút khác rồi chọn các bước tương tự như trên, những nút lệnhtrên chờ các bạn mò tới chúng đấy hì hì.Khi không muốn hiện thị những thành phần của form, làm cho tập trung vào giao diệnchính của form,ta có thể loại bỏ những thành phần như sau:Record Selectors Yes > NONavigation Buttons Yes > NODividing Lines Yes > NOHiển thị giao diện không có nút của windown, và access tạo cho một cảm giác gì đó thậtthoải mái trong cách làm việc với chúng. Lên ta có thể loại bỏ nút Close của chươngtrình làm ra bằng cách chọn Border Style: Sizable > None
    • Trên đây là những cách hiểu và làm việc với Macro trong lúc làm project này. Còn rấtnhiều điều mình muốn chúng hoạt động nhưng do khả năng hạn chế, chưa thực hiệnnhững điều mong muốn, Chúng ta hãy cố gắng lên nhé !Tin học 365Recordset trong Access DataProjectThứ tư, 16 Tháng 1 2008 09:391. Chương trình phải là một ADP (Access Data Project), không phải là MDB.2. Dự án có thể tiếp tục kết nối sang cơ sở dữ liệu ‘config’ của SQL Server.3. Tất cả dữ liệu phải được lưu trữ trong các cơ sở dữ liệu ‘client’ SQL Server.4. Các form phải kết nối tới cơ sở dữ liệu client chính xác trong thời gian chạy.Bạn có thực hiện điều này? Tất cả cơ sở dữ liệu (CSDL) được đặt trên một SQL Serverđơn, nhưng ứng dụng có thể cần lấy dữ liệu từ bất kỳ một nguồn trong số đó. Ở một sốtrường hợp, người dùng yêu cầu trích lấy dữ liệu từ một CSDL cụ thể. Họ có thể khởi pháthoạt động sử dụng CSDL riêng và ứng dụng phải được trỏ động tới nơi lưu trữ dữ liệuchính xác.Ý nghĩ đầu tiên của tôi là phải thay đổi thuộc tính kết nối của ứng dụng ADP mỗi khingười dùng chọn một CSDL khác nhau. Nhưng điều này không đơn giản mà cũng chẳngdễ dàng gì. Thay đổi kết nối trong thời gian chạy cũng giống như bắt con ngựa đua phảiquay ngược lại giữa đường đua. Khi một thuộc tính kết nối của ADP bị đóng, tất cả formđều bị huỷ.Giải pháp cuối cùng rất dễ chịu và có thể dùng lại được. Trong một nutsell, nó gồm những
    • phần sau:• Kết nối ADP được gắn với CSDL config.• CSDL config quản lý đăng nhập người dùng.• Config bao gồm một danh sách CSDL client.• Nhiệm vụ cho tất cả client nằm trong CSDL Config.• ADP có hai thủ tục đơn giản hoá chuyển đổi.• Thủ tục con: LoadDbsConnectString(ClientID).• Hàm: GetRecordset(SQL) As Recordset.• Dữ liệu Form và Control được load qua thuộc tính Recordset.• Thuộc tính Form.RecordSource phải để trống.• Thuộc tính Form.RecordSet phải được thiết lập ở mã VBA.• Phải dùng toán tử Set.• Bảng, bảng ảo (view) hoặc thủ tục lưu trữ có thể được sử dụng.Ví dụ bên dưới (hình minh hoạ) là frmAddress ở mô hình thiết kế. Form này sẽ đòi hỏithiết lập bốn recordset: một cho dữ liệu của form và ba cho các hộp combo box. Chú ý làrecordset cho một trong ba hộp đó, cboStateCode sẽ phụ thuộc vào giá trị được chọn trongtuỳ chọn country (đất nước), cboCountryID. Chúng ta sẽ xem có thể load form này với dữliệu như thế nào.Chú ý: Hiện nay không có mã nguồn để download. Bởi để làm việc với các kết nối đòi hỏiphải có lượng rất lớn mã nguồn. Do người đọc thường có máy chủ và CSDL riêng nênđiều này trở thành một vấn đề không đơn giản để triển khai.Thiết lập kết nối ADPNhư đã đề cập tới ở trên, bước đầu tiên là thiết lập toàn diện kết nối cho ADP. Trongtrường hợp của chúng ta, đây là thiết lập cho CSDL Config chứa thông tin về các databaseclient khác nhau mà ứng dụng có thể trỏ tới.Thuộc tính Connection của ADP có thể được thiết lập dễ dàng trong thời gian thiết kế màkhông cần phải chỉnh sửa bởi người dùng. Đơn giản chỉ cần chọn Connection từ menuFile và điền đầy đủ giá trị yêu cầu trong hộp thoại.Hộp thoại này có một nút "Test Connection" (kiểm tra kết nối), nhưng nó là một placebo(hộp để giữ chỗ). Bạn chỉ có thể chọn một CSDL nếu nhập một server hợp lệ. Nếu bạn cócả tên server và database hợp lệ, sẽ chẳng có cái gì để phải kiểm tra cả. Nếu muốn yêntâm hơn, kích vào nút Test Connection để kiểm tra lại trước khi đóng hộp thoại.Tạo các thủ tụcTheo các yêu cầu ở trên, nguồn cho client data (dữ liệu cho máy khách) phải nằm ở dạngJIT (just in time, tức tạm thời). Những nguồn này có thể là khi người dùng lựa chọn tìmkiếm một CSDL cụ thể hoặc là kết quả sau khi thực hiện một nhiệm vụ gắn với một cơ sở
    • dữ liệu client cụ thể. Nhưng kết luận cuối cùng thì, bạn sẽ không biết CSDL nào được trỏtới trước khi form được mở.Để đáp ứng yêu cầu này, chúng tôi tạo một giá trị xâu tổng thể (g_ClientCnn), chia nhỏxâu kết nối đầy đủ vào CSDL client được yêu cầu. Do đó, khi một yêu cầu dữ liệu đượcthực hiện, chúng tôi sẽ xác định ClientID phù hợp và đưa nó vào thủ tục con thiết lập xâukết nối. (Xem đoạn mã bên dưới để hiểu chi tiết). Client connect string is saved in this public variable.Public g_ClientCnn As StringPublic Sub LoadDbsConnectString(ByVal lClientID As Long)On Error GoTo Err_HandlerDim rstTemp As New ADODB.RecordsetDim strSQL As StringDim strDatabase As StringDim strProjCnn As String You must hard-code the name of the config database. It will be used below to simplify the creation of the new connect string.Const strProjDBS As String = "RecreationConfigDB" The config database must include a table to manage client database names based on an identifier, such as ClientID.strSQL = "SELECT [DatabaseName] FROM tblClient " & _"WHERE [ClientID]=" & lClientIDrstTemp.Open strSQL, CurrentProject.Connection If the client record isnt found, throw an error. Otherwise, use the database name to update the connection string variable.If rstTemp.BOF And rstTemp.EOF ThenMsgBox "Couldnt locate the database.", vbCritical, "ERROR"Else The Replace function simplifies the connection string edit. We know that the format of CurrentProject.Connection is correct. Simply replace the database name (assuming the users login has permission to both databases.)strDatabase = rstTemp!DatabaseNamestrProjCnn = CurrentProject.Connectiong_ClientCnn = Replace(strProjCnn, strProjDBS, strDatabase)End IfExit_Here:Set rstTemp = NothingExit FunctionErr_Handler:Resume NextEnd SubNgoài ra còn cần một thủ tục con để thiết lập xâu kết nối, với một hoặc nhiều hàm tải dữ
    • liệu vào recordset. Bên dưới là một trong các hàm trả ra recordset ADO. Tôi sử dụng mộtsố thực thi khác cho thủ tục lưu trữ và chạy các lệnh INSERT, UPDATE DELETE. Tuynhiên, để thực hiện nhiệm vụ tiếp theo, chúng ta cần trả lại một recordset ADO, thực hiệnnhư sau:Public Function GetRecordset(ByVal sSQL As String) As ADODB.Recordset On Error GoTo Err_Handler Dim rstTemp As New ADODB.Recordset Dim cnnTemp As New ADODB.Connection First open a temporary connection, and then load the recordset. cnnTemp.Open g_ClientCnn rstTemp.Open sSQL, cnnTemp, adOpenDynamic, adLockOptimistic This doesnt include any error handling You will have to add that to meet your needs. Set GetRecordset = rstTempExit_Here: Set rstTemp = Nothing Set cnnTemp = Nothing Exit FunctionErr_Handler: Resume Exit_HereEnd FunctionĐặt tất cả lại với nhauBây giờ chúng ta đã có tất cả các thành phần (một kết nối dự án, một form và bốn thủtục). Vấn đề chỉ còn là làm sao ghép chúng lại với nhau trong sự kiện Form_Open(). Hãychắc chắn rằng form của bạn không có lệnh SELECT trong thuộc tính RecordSource, vìnó sẽ cạnh tranh với mã nguồn chúng ta sẽ chạy. Với mục đích đó, form này sẽ không cónguồn record khi thiết kế. Thực tế, nó không thể trỏ tới bất kỳ bảng nào vì các bảng clientchúng ta tìm kiếm thậm chí không nằm trong CSDL Config, CSDL hiện ADP đang đượckết nối. Dataset sẽ được gán tự động vào form và các điều khiển của nó nằm trong mãsau:Private Sub Form_Open(Cancel As Integer) On Error GoTo Err_Handler Dim strSQL As String Dim lngEmployeeID As Long Dim lngCountryID As Long Call a Property Get function to grab EmployeeID This will be used to filter the recordset. (You will need to adapt this part of the code to match your SQL requirements.) lngEmployeeID = GetEmployeeID()
    • Identify SQL to be passed, a stored proc in this case, and remember to use the SET command when assigning the recordset. strSQL = "spc_uclAddress @EmployeeID=" & EmployeeID Set Me.Recordset = GetRecordset(strSQL) Load record sources for all combo boxes strSQL = "spc_ddlAddressType" Set Me!cboAddressTypeID.Recordset = GetRecordset(strSQL, client) strSQL = "spc_ddlCountry" Set Me!cboCountryID.Recordset = GetRecordset(strSQL, client) The list of states depends upon the country. This param is passed to the stored proc. (our default is 1 for USA) lngCountryID = Nz(Me.Recordset!CountryID, 1) strSQL = "spc_ddlState @CountryID=" & lngCountryID Set Me!cboStateProvince.Recordset = GetRecordset(strSQL, client)Exit_Here: Exit SubErr_Handler: Resume NextEnd SubNhiều năm nay tôi biết rằng, bạn có thể đưa một dataset vào form hay control, nhưngchưa bao giờ hiểu tại sao lại như thế. Khi tiếp cận với phương thức này, đột nhiên tôi hiểura lý do. Nó cũng hữu ích một cách đặc biệt khi bạn muốn sử dụng SQL Server để lưu trữcác thủ tục trong Access Data Project. Chương trình này chắc chắn cũng hoạt động đượccho MDB mặc dù chưa có một kiểmt tra chính thức nào. Có một số quan điểm phản ứngmạnh về vấn đề này, phản đối ADP. Nhưng tôi phải nói rằng, với các phương thức đãđược mô tả ở trên, việc sử dụng ADO recordset thực sự trở nên đơn giản, đặc biệt là khitải dữ liệu vào form và control.