Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Cách tạo nút combo box trong access project
#1
Tôi có đoạn code trong Access Project sử dụng cho nút combo box CbSO_HC để khi chọn 1 SO_HC(số hộ chiếu) trên mainform (nguồn T_Đanhsachoituong) thì chương trình sẽ cập nhật các fields NGHE_NGHIE, NGAY_XN, TEN_DBAY,MA_CBAY, TEN_MD, DC_VN,XUAT_NHAP , MATTP, TEN_TTP trên subform F_SubCapnhat(nguồn T_CapnhatXNC). Nhưng không hiểu lý do tại sao không chọn được SO_HC trên list của nút combo box CbSO_HC. Mong các anh/ chị có kinh nghiệm hướng dẫn giúp.
-------------------------------------------------------------------
Private Sub CbSO_HC_Click()
Dim rst As New ADODB.Recordset
rst.Open "select NGHE_NGHIE, NGAY_XN, TEN_DBAY,MA_CBAY, TEN_MD, DC_VN,XUAT_NHAP , MATTP, TEN_TTP from T_Danhsachdoituong inner join T_CapnhatXNC on T_Danhsachdoituong.SO_HC = T_CapnhatXNC.SO_HC where Trim(SO_HC) = '" + Trim(CbSO_HC), _
CurrentProject.Connection, adOpenStatic, adLockReadOnly
Set F_SubCapnhat.Form.Recordset = rst

F_SubCapnhat.Requery

'Exit Here:
rst.Close
End Sub
------------------------------------------------
Trân trọng./.
Chữ ký của dannynguyen1980 Xin chào, mình là dannynguyen1980, Tham gia http://thuthuataccess.com/forum từ ngày 14-09 -11.
Reply
Những người đã cảm ơn
#2
Sau 1 thời gian tìm hiểu, tôi tự mày mò ra đoạn mã sau:
______________________________________________________________________
Option Compare Database
Option Explicit

Private Sub CbSO_HC_Click()
Dim rst As ADODB.Recordset

rst.Open "select NGHE_NGHIE, NGAY_XN, TEN_DBAY,MA_CBAY, TEN_MD, DC_VN,XUAT_NHAP , MATTP, TEN_TTP from T_CapnhatXNC inner join T_Danhsachdoituong on T_Danhsachdoituong.SO_HC = T_CapnhatXNC.SO_HC where Trim(T_CapnhatXNC.SO_HC) = '" + Trim(CbSO_HC), _
CurrentProject.Connection, adOpenStatic, adLockOptimistic
End Sub
______________________________________________________
Private Sub CbSO_HC_AfterUpdate()

Dim rst As New ADODB.Recordset
Set F_SubChitietXNC.Form.Recordset = rst

F_SubChitietXNC.Requery

'Exit here:
rst.Close
Set rst = Nothing
End Sub
_____________________________________________________

Tuy nhiên, có một lỗi là khi thay đổi giá trị của combobox CbSO_HC (chọn số hộ chiếu khác) thì các giá trị trên subform thay đổi còn các giá trị khác của main form (NGAY_SINH, GIOI_TINH ...) không thay đổi. Có phải dủng hàm Dlookup trong trường hợp này không? Code của hàm Dlookup trong trường hợp này như thế nào? Rất mong các anh chị có kinh nghiệm chỉ giúp. Cảm ơn rất nhiều!!!
Chữ ký của dannynguyen1980 Xin chào, mình là dannynguyen1980, Tham gia http://thuthuataccess.com/forum từ ngày 14-09 -11.
Reply
Những người đã cảm ơn
#3
Đoạn code trên có chỗ nào set recordset cho main form đâu mà đòi nó thay đổi theo
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn dannynguyen1980
#4
Nghe gợi ý của bác Noname, tôi mày mò sưu tầm và sửa code lại như sau:
____________________________________
Private Sub CbSO_HC_AfterUpdate()
'Populate form with filtered results.

On Error GoTo ErrHandler

Dim strCriteria As String

strCriteria = "SO_HC = '" & Me!CbSO_HC.Value & "'"

Debug.Print strCriteria

With CustomerDisconnectedRS

If Not (.EOF) Then

.Find strCriteria

Me.txtSO_HC = !SO_HC
Me.txtHO_TEN = !Ho_Ten
Me.txtNGAY_SINH = !NGAY_SINH
Me.txtGIOI_TINH = !GIOI_TINH
Me.txtVIET_KIEU = !VIET_KIEU
Me.txtTEN_QGIA_V = !TEN_QGIA_V

End If

End With

Exit Sub

ErrHandler:

MsgBox Err.Number & ": " & Err.Description, vbOKOnly, "Error"

End Sub

Private Sub CbSO_HC_BeforeUpdate(Cancel As Integer)

If (Not IsNull(DLookup("SO_HC", "T_Danhsachdoituong", "SO_HC ='" & Me!CbSO_HC & "'"))) Then

Me!CbSO_HC.Undo
End If
End Sub

Private Sub CbSO_HC_Click()
Dim cnn As New ADODB.Connection

On Error GoTo ErrHandler

'----------

'Example connection is to active connection.

'Set connection here for foreign or networked data.

'----------

Set cnn = Application.CurrentProject.Connection

With CustomerDisconnectedRS

.ActiveConnection = cnn

.UpdateBatch

End With

CbSO_HC.Enabled = True

Exit Sub

ErrHandler:

MsgBox Err.Number & ": " & Err.Description, vbOKOnly, "Error"

End Sub

Private Sub Form_Close()

'Disconnect.
Set CustomerDisconnectedRS = Nothing

End Sub

Private Sub Form_Open(Cancel As Integer)

'Populate disconnected recordset object with customer information.
'Populate cboCompanyName with CustomerID and CompanyName.

Dim strSQL As String

On Error GoTo ErrHandler

Set CustomerDisconnectedRS = New ADODB.Recordset

'----------

'Example connection is to active connection.

'Set connection here for foreign or networked data.

'----------

Set cnn = Application.CurrentProject.Connection

strSQL = "SELECT So_HC, HO_Ten, Ngay_sinh, Gioi_tinh, Viet_kieu, Ten_Qgia_V FROM T_Danhsachdoituong"

With CustomerDisconnectedRS

.CursorLocation = adUseServer

.Open strSQL, cnn, adOpenStatic, adLockBatchOptimistic

'Disconnect.
Set cnn = Nothing
End With

'Populate combo box.
Set CbSO_HC.Recordset = CustomerDisconnectedRS

Exit Sub

ErrHandler:

MsgBox Err.Number & ": " & Err.Description, vbOKOnly, "Error"

End Sub
________________________________________
Tuy nhiên, vẫn lỗi một chỗ là combobox CbSO_HC chỉ cho tìm tới (số hộ chiếu sắp theo thứ tự tăng dần), khi tìm ngược lại thì báo lỗi: "The value you entered isn't valid for this field". Nhờ các bác chì giúp cho.
Trân trọng cảm ơn!
Chữ ký của dannynguyen1980 Xin chào, mình là dannynguyen1980, Tham gia http://thuthuataccess.com/forum từ ngày 14-09 -11.
Reply
Những người đã cảm ơn
#5
Thật ra, việc tạo combo box trong trường hợp này rất đơn giản. Chỉ cần thực hiện theo các bước sau:
1. Tạo main form có chứa combo box
2. Sau đó dùng nút Sub form/Sub report trên thanh công cụ để gắn sub form vào main form.

Trong sự kiện after update Access tự tạo đoạn code sau:
----------------------------------------------------
Private Sub CboSO_HC_AfterUpdate()
' Find the record that matches the control.
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.Find "[SO_HC] = '" & Me![CboSO_HC] & "'"
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub
----------------------------------------------------
Tìm ra câu trả lời nhẹ cả người các bác ạ. Tongue_smile
Cảm ơn các bác đã quan tâm đến chủ đề này!
Chữ ký của dannynguyen1980 Xin chào, mình là dannynguyen1980, Tham gia http://thuthuataccess.com/forum từ ngày 14-09 -11.
Reply
Những người đã cảm ơn vocsiit


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
Question [Help] Link tất các table trong một file.mdb bằng VBA MinhnHang 9 205 1 Giờ trước
Bài mới nhất: maidinhdan
  [Thủ Thuật] Tìm số thứ tự bị thiếu trong dãy toanle 8 204 07-12-16, 02:25 PM
Bài mới nhất: toanle
  Tránh xung đột dữ liệu trong access quocdung9999 16 1,693 23-11-16, 11:13 AM
Bài mới nhất: quocdung9999
  [Hỏi] Kết nối nhiều lần hay kết nối 1 lần trong ADO ưu điểm hơn Minh Tiên 1 123 10-11-16, 10:41 AM
Bài mới nhất: maidinhdan
  Summary bằng VBA trong MS Access. MinhnHang 6 319 08-11-16, 08:36 AM
Bài mới nhất: MinhnHang

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ơ