Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Hỏi] Navigation Form
#1
Các anh chị giúp em với !!!!
Em có làm cái ứng dụng quản lý công văn, form Main là một Navigation Form. Trên form Main này em tạo một listbox để hiển thị các công văn đã có trong tbl_CVDEN thông qua một Select Queries. Vấn đề em muốn hỏi ở đây là làm cách nào để khi chọn một công văn trên list box và nhấn nút xóa thì có thể xóa được cái công văn đó ở trong tbl_DEN. Navigation form nên nó hơi khác một tý ah.Mong được anh em giúp đỡ...!!!
Chữ ký của tieuphung88 tieuphung88, proud to be a member of Thủ Thuật Access since 18-06 -15.
Reply
Những người đã cảm ơn
#2
không ai giúp em cả sao  040 040 040
Chữ ký của tieuphung88 tieuphung88, proud to be a member of Thủ Thuật Access since 18-06 -15.
Reply
Những người đã cảm ơn
#3
(10-07-15, 09:14 AM)tieuphung88 Đã viết: không ai giúp em cả sao  040 040 040
Nội dung bài đây
Bạn cứ từ từ, đừng vội...
Nhân tiện chưa có ai trả lời, tôi xin gợi ý cho bạn nhé.
Để làm việc này, tôi giúp bạn phân tích kiểu tuần tự như sau:
1. Nhấn một công văn (bỏ qua việc nạp danh mục vào listbox - vì bạn làm được rồi) trong danh sách.
2. Nhấn nút xóa. Thủ tục xóa sẽ cần làm việc này
+ Kiểm tra xem hiện bạn có đang nhấn một công văn không. Nói nôm na hộp listbox công văn có giá trị đang chọn bị rỗng không
+ Nếu có thì bỏ qua
+ Nếu không thì thực hiện tiếp
>> Lập một truy vấn dạng
Xóa từ bảng [xx] với [Số hiệu công văn] = [zz];
Viết lại
Mã:
SqlStr="D ELETE * FROM [Tên bảng] WHERE [Tên công văn]= '[Giá trị đang chọn trong list box]';"

Ở đây cần chú ý: Nếu trường tên công văn là dữ liệu cần tìm và kiểu dữ liệu là kiểu ký tự thì cần 2 dấu nháy đơn. Nếu bạn dùng listbox với 2 cột trong đó cột một là trường khóa ví dụ CongvanID - kiểu số thì không cần dấu nháy.
    
và chỉ cần gọi
Mã:
Currentdb.Execute SqlStr
là xong

Sau đó - bạn cần thêm lệnh
ListboxCongvan.Requery
việc này giúp cho listbox hiển thị danh sách công văn mới một cách nhanh nhất.

Đấy là cách tư duy đơn giản nhất và bạn có thể sửa đổi, bổ sung tính năng ví dụ - bạn có chắc muốn xóa công văn xx... không...

Chân thành
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn maidinhdan , tieuphung88
#4
Cảm ơn bạn rất nhiều, tuy nhiên nó chưa chạy đc và có thông báo sau"

The expression on click you entered as the event property setting produced the following error: A problem occucrred while Microsoft office access was communicating with the OLE server or ActiveX Control.
* the expression may not result in the name of a macro, the name of a user-defined function, or [Event Procedure].
*There may have been an errorr evaaluatin the function, event, or macro.
027
Chữ ký của tieuphung88 tieuphung88, proud to be a member of Thủ Thuật Access since 18-06 -15.
Reply
Những người đã cảm ơn
#5
(10-07-15, 09:56 PM)tieuphung88 Đã viết: Cảm ơn bạn rất nhiều, tuy nhiên nó chưa chạy đc và có thông báo sau"

The expression on click you entered as the event property setting produced the following error: A problem occucrred while Microsoft office access was communicating with the OLE server or ActiveX Control.
* the expression may not result in the name of a macro, the name of a user-defined function, or [Event Procedure].
*There may have been an errorr evaaluatin the function, event, or macro.
027


Mình làm dạng ví dụ cho bạn thôi mà. Bạn cần thay thế những thứ sau: Tên bảng bằng tên đúng, Tên trường bằng tên trường đúng, dùng y nguyên mấy cái đó thì sao được!
Có vẻ tôi chưa tính đến việc bạn mới bắt đầu dùng Access và chưa biết viết mã chương trình. Nếu như vậy thì e rằng cần phải viết kỹ hơn.
1. Bạn vào chế độ thiết kế form
2. Chọn nút xóa, đặt tên là cmdDelete, nhấn phải chuột, chọn property và vào trang - sự kiện Event, chọn On Click>>[Event Procedure] và nhấn nút ... bên cạnh [Event Procedure] để vào phần soạn thảo code.
3. Bạn sẽ được dẫn đến một đoạn mã dạng như sau (chưa có mã chương trình gì cả):
Chú ý: Code này chỉ làm việc nếu listbox công văn của bạn có tên là lstDsCongvan và bảng chứa công văn là tblCongvan, trường tên công văn là fldSoCongvan, kiểu ký tự,


Mã:
Private Sub cmdDelete_Click()

End Sub


Bây giờ bạn chep đoạn mã sau vào thay thế và thử xem nhé

Mã:
Private Sub cmdDelete_Click()
    'Kiem tra xem Listbox Cong van co dang chon mot cong van nào khong?
    if nz(lstDsCongvan,"")="" then Exit Sub
    On Error GoTo Err_cmdDelete_Click    
    Dim StrSql as String
    If MsgBox("Ban muon xoa ho so nay?", vbYesNo + vbQuestion) = vbYes Then
StrSql="D ELETE * FROM [tblCongvan] Where [fldSoCongvan]='" & lstDsCongvan & "';"
' Cau lenh thuc hien truy van Xoa
Currentdb.Execute SqlStr
' Nap lai danh sach cong van
lstDsCongvan.Requery
    End If
Exit_cmdDelete_Click:
    Exit Sub

Err_cmdDelete_Click:
    Resume Exit_cmdDelete_Click
End Sub

Còn một điều, do diễn đàn không cho phép ghi chữ DELETE nên bạn phải xóa dấu trắng trong chữ DELETE truy vấn ở trên nhé!
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn maidinhdan , tieuphung88 , Noname
#6
Cảm ơn bạn đã hướng dẫn chi tiết. Mình có các đối tượng sau:
Bảng tbl_CVDEN trong đó khóa chính là trường soden kiểu number
trên Navigation Form frm_DEN mình có một listbox lst_DEN lấy nguồn từ bảng tbl_CVDEN luôn 
Dựa vào bài viết của bạn mình đã viết lại Code OnClick của nút lệnh xóa như sau
Mã:
Private Sub cmd_XOA_Click()
   If Nz(lst_DEN, "") = "" Then
       MsgBoxUni "Ch?n công v?n c?n xóa", , "Thông báo"
   Else
       Dim StrSql As String
       If MsgBoxUni("Ban muon xoa ho so nay?", vbYesNo + vbQuestion) = vbYes Then
           StrSql = "D ELETE * FROM [tbl_CVDEN] Where [soden]= '" & lst_DEN & "';"
           CurrentDb.Execute SqlStr
           lst_DEN.Requery
       End If
   End If
End Sub



Nhưng vẫn bị lỗi đó và không chạy được. Trên form thường thì chỉ cần tạo một queries xóa là xong, nhưng mình muốn làm trên Navigation form cho tiện
Mình đang nghĩ đến việc thiếu một thư viện hoặc trình điều khiển nào đó..
Chữ ký của tieuphung88 tieuphung88, proud to be a member of Thủ Thuật Access since 18-06 -15.
Reply
Những người đã cảm ơn
#7
Bạn đọc kỹ các câu này:

(10-07-15, 11:39 PM)paulsteigel Đã viết: Ở đây cần chú ý: Nếu trường tên công văn là dữ liệu cần tìm và kiểu dữ liệu là kiểu ký tự thì cần 2 dấu nháy đơn. Nếu bạn dùng listbox với 2 cột trong đó cột một là trường khóa ví dụ CongvanID - kiểu số thì không cần dấu nháy.
...
Còn một điều, do diễn đàn không cho phép ghi chữ DELETE nên bạn phải xóa dấu trắng trong chữ DELETE truy vấn ở trên nhé!

1-Trong mã của bạn chữ DELETE có khoảng trắng?

2- "...soden kiểu number" --> bỏ đi 2 nháy đơnsadWhere [soden]= '" & lst_DEN & "';")

Mã:
Where [soden]= " & lst_DEN & ";"

3- Lỗi trên cũng có thể do hàm MsgBoxUni hay các thủ tục, macro,.. khác . nếu vẫn bị lỗi bạn phải đưa cái form đó lên đây
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn tieuphung88
#8
Mình cho rằng bạn có một điều khiển nào đó đặt tên tiếng Việt trong form của bạn! Nếu bạn không chê - hãy teamview - tôi sẽ xem giùm! Tel 091 322 0994
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn tieuphung88 , Noname
#9
Mình có xài hàm MsgBoxUni rồi, đoạn code trên là mình chưa chỉnh lại để hiển thị tiếng việt thôi.
Mình cũng đã bỏ hai dấu nháy đơn rồi nhưng vẫn không được
Cảm ơn các anh em nhiều lắm
Chữ ký của tieuphung88 tieuphung88, proud to be a member of Thủ Thuật Access since 18-06 -15.
Reply
Những người đã cảm ơn
#10
(11-07-15, 02:14 PM)tieuphung88 Đã viết: Mình có xài hàm MsgBoxUni rồi, đoạn code trên là mình chưa chỉnh lại để hiển thị tiếng việt thôi.
Mình cũng đã bỏ hai dấu nháy đơn rồi nhưng vẫn không được
Cảm ơn các anh em nhiều lắm

-MTNQ cũng từng bị lỗi này : 

1/ Như bác Ngọc đã nói: Bạn có sử dụng Tiếng Việt (có dấu) hay ký tự đặc biệt  để đặt tên cho các đối tượng (form, điều khiển trên form,tên bảng, tên các trường trong bảng hay trong query...  )

2/ Các biến trong các thủ tục không được khai báo một cách tường minh

-Cách giải quyết:

1-TeamViewer cho bác Ngọc là cách nhàn nhã và nhanh nhất  022

2- Rà soát lại tên của tất cả các đối tượng

3- Đè Shift ngay khi khởi động ứng dụng:
 -Thêm dòng này vào tất cả các Module, đầu trang code của các form: Option Explicit (ngay bên dưới dòng Option Compare Database )
-Ở cửa sổ VBA chọn Debug > Compile ... > Sửa tất cả các lỗi (nếu có)
-Khởi động lại ứng dụng.

Mình từng bị lỗi như bạn, nhưng chỉ xảy ra khi có sự thay đổi giữa các phiên bản của Office (như câu hỏi của một số bạn là khi đổi sang máy khác thì bị lỗi như trên)
MTNQ áp dụng cách thứ 3 và phát hiện một số lỗi về khai báo và sử dụng biến (ví dụ như gõ sai tên biến...) sau khi sửa lại thì không bị lỗi nữa

Vài dòng chia sẻ cùng bạn!
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn tieu_ngao , Noname


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Hỏi] Refresh Form và tiếp tục hoạt động Godspear 2 85 08-12-16, 12:48 PM
Bài mới nhất: Godspear
  [Hỏi] Cách thêm dữ liệu vào form Main_Sub NganNguyen 1 39 06-12-16, 02:23 AM
Bài mới nhất: maidinhdan
  Tự động hiện Form khi loading hết thời gian ChiMai 1 49 02-12-16, 08:59 PM
Bài mới nhất: ongke0711
Photo [Hỏi] Mở Form trên access 2007 báo lỗi jason 5 195 22-11-16, 09:23 AM
Bài mới nhất: jason
  Query hiện lên trên form? feeling 4 167 09-11-16, 09:49 PM
Bài mới nhất: toancvp

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ