Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Lỗi] Bị lỗi "Runtime error 2074"
#1
Moi người xem giúp em lỗi này với 040
Link DownLoad File Access

Tình hình là em gặp phải lỗi này khi dùng chức năng Replace trong Access. Trong tool Replace nếu em chỉ Replace từng cái một thì ko sao, nhưng nối Replace All thì ngay lập tức bị treo ứng dụng. Và nó báo lỗi ở đoạn này ạ.

Mã:
Private Sub btnSearch_Click()
    
    ' Update the record source
     Me.fvsubhosoedit.Form.RecordSource = "SELECT * FROM qvhoso " & BuildFilter
    
    ' Requery the subform
    Me.fvsubhosoedit.Requery
End Sub

Đoạn code này em tham khảo sau đó chỉnh sửa lại cho phù hợp, vì thế xảy ra lỗi này em chết dở với nó luôn. Mọi người giúp với em giải quyết vấn đề với ạ.
Chữ ký của m.vuong2211 Xin chào, mình là m.vuong2211, Tham gia http://thuthuataccess.com/forum từ ngày 02-04 -15.
Reply
Những người đã cảm ơn
#2
Mình hiện xử dụng access 2003 nên không mở được file của bạn. Nhưng lỗi 2074 của access là: This operation is not supported within transactions.@@@1@@1. Có nghĩa là không hỗ trợ trong giao dịch. Bạn có thể đổi phương thức Me.fvsubhosoedit.Form.RecordSource = "SELECT * FROM qvhoso " & BuildFilter bằng 1 Query Update sau khi test Query này chay ổn bạn dùng mã:
docmd.RunSQL " SQL của query update" sẽ chắc ăn hơn
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#3
(06-04-15, 01:02 AM)tranthanhan1962 Đã viết: Mình hiện xử dụng access 2003 nên không mở được file của bạn. Nhưng lỗi 2074 của access là: This operation is not supported within transactions.@@@1@@1. Có nghĩa là không hỗ trợ trong giao dịch. Bạn có thể đổi phương thức Me.fvsubhosoedit.Form.RecordSource = "SELECT * FROM qvhoso " & BuildFilter bằng 1 Query Update sau khi test Query này chay ổn bạn dùng mã:
docmd.RunSQL " SQL của query update" sẽ chắc ăn hơn

Không dùng Query Update được bạn, vì mình dùng hàm trong VBA để tìm kiếm với các điều kiện lồng nhằm cho ra dữ liệu cần thiết ở SubForm, sau đó từ Subform mình dùng "Ctrl + F" để Replace những Record cần thay đổi, mình áp dùng Replace từng cái nó hoạt động bình thường, nhưng nếu dùng Replace All thì bị báo lỗi ngay. 040
Chữ ký của m.vuong2211 Xin chào, mình là m.vuong2211, Tham gia http://thuthuataccess.com/forum từ ngày 02-04 -15.
Reply
Những người đã cảm ơn
#4
post file Ac 2003 lên đi.
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#5
(06-04-15, 03:44 PM)maidinhdan Đã viết: post file Ac 2003 lên đi.

Mình chuyển qua 2003 nó báo lỗi, vì mình làm trên 2010 nên có nhìu cái không tương thích ngược. Mình post ảnh và code của form trong VBA cho bạn xem nhé.

Đây là Form mình bị lỗi:
[Hình: 1.png]

Dữ liệu sau khi tìm kiếm là như vầy:
[Hình: 2.png]

Sau đó click vào subform, mình dùng Replace của Access:
[Hình: 3.png]

Đây là code trong VBA của mình:
Mã:
Private Sub btnClear_Click()
    Dim intIndex As Integer
    
    ' Clear all search items
    Me.kttencb = ""
    Me.ktmahs = ""
    Me.ktdiaban = ""
    Me.ktnganh = ""
    Me.ktloaicoso = ""
    
End Sub

------------------------------------

Private Sub btnSearch_Click()
    ' Update the record source
    Me.fvsubhosoedit.Form.RecordSource = "SELECT * FROM qvhoso " & BuildFilter
    
    ' Requery the subform
    Me.fvsubhosoedit.Requery
End Sub

------------------------------------

Private Sub Form_Load()
        ' Clear the search form
    btnClear_Click
    Me.kttencb.SetFocus
End Sub

-------------------------------------

Private Function BuildFilter() As Variant
    Dim varWhere As Variant

    varWhere = Null  ' Main filter
    
    ' Check for LIKE TenCB
    If Me.kttencb > "" Then
        varWhere = varWhere & "[Ten] LIKE """ & Me.kttencb & "*"" AND "
    End If
    
    ' Check for MaHS
    If Me.ktmahs > "" Then
        varWhere = varWhere & "[MaHoSo] LIKE """ & Me.ktmahs & "*"" AND "
    End If
    
    ' Check for DiaBan
    If Me.ktdiaban > "" Then
        varWhere = varWhere & "[DiaBan] LIKE """ & Me.ktdiaban & "*"" AND "
    End If
    
     ' Check for Nganh
    If Me.ktnganh > "" Then
        varWhere = varWhere & "[TenNganh] LIKE """ & Me.ktnganh & "*"" AND "
    End If
    
    ' Check for LoaiCoSo
    If Me.ktloaicoso > "" Then
        varWhere = varWhere & "[LoaiCoSo] LIKE """ & Me.ktloaicoso & "*"" AND "
    End If
    
    
    ' Check if there is a filter to return...
    If IsNull(varWhere) Then
        varWhere = ""
    Else
        varWhere = "WHERE " & varWhere
        
        ' strip off last "AND" in the filter
        If Right(varWhere, 5) = " AND " Then
            varWhere = Left(varWhere, Len(varWhere) - 5)
        End If
    End If
    
    BuildFilter = varWhere
    
End Function

Ở đây mình chỉ bị lỗi khi Replace All, nếu Replace từng cái thì không sao bạn à. 040
Chữ ký của m.vuong2211 Xin chào, mình là m.vuong2211, Tham gia http://thuthuataccess.com/forum từ ngày 02-04 -15.
Reply
Những người đã cảm ơn
#6
Bạn tạo file Access 2003, rồi Import Table liên quan + 1 Cái form tìm của bạn...Nếu không tôi hướng dẫn bạn như thế này..

1. Câu lệnh chả lỗi đâu: Lý do lỗi là Cái tên bạn tìm ra không những có tên ở mặt hàng xăng mà còn những mặt hàng khác...Vì thế không bao giờ bạn Replace All được.

- Cách khắc phục (không sử dụng nút Replace của hệ thống nửa nhé): Tạo 1 nút command đổi tên, tạm gọi là cmddoiten; ta sử dụng luôn trường tên cán bộ mà bạn tìm đó, tạm đặt là txttimten, và text thứ 3 chỗ xăn dầu tạm gọi là txtmathang. Cuối cùng cái sub của bạn thì tham chiếu đến table nào đó tạm gọi là t1
=> ta có 3 cái:
+ cmddoiten
+ txttimten
+ txtmathang

Dán đoạn code này vào cmddoiten: rồi từ từ ngâm cứu sẽ ra thôi...làm biến làm Demo
Mã PHP:
UPDATE t1 SET t1.Hoten = [Nhap ten moi can doiWHERE (((t1.HotenLike "*" & [Forms]![Tenform]![txttimten] & "*") AND ((t1.TenhangLike "*" & [Forms]![Tenform]![txtmathang] & "*")); 

Ghi chú:
- t1.Hoten : là cột tên trong table
- t1.Tenhang : là cột Tên hàng trong table

Bạn cần code đúng bài bạn thì Import như mình hướng dẫn trên rồi post lên đây. làm biến làm Demo..
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn m.vuong2211
#7
Bạn m.vuong2211 làm theo cách của bạn maidinhdan rồi thêm vào code
subForm.Requery là ổn.
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn m.vuong2211
#8
(06-04-15, 05:46 PM)maidinhdan Đã viết: Bạn tạo file Access 2003, rồi Import Table liên quan + 1 Cái form tìm của bạn...Nếu không tôi hướng dẫn bạn như thế này..

1. Câu lệnh chả lỗi đâu: Lý do lỗi là Cái tên bạn tìm ra không những có tên ở mặt hàng xăng mà còn những mặt hàng khác...Vì thế không bao giờ bạn Replace All được.

- Cách khắc phục (không sử dụng nút Replace của hệ thống nửa nhé): Tạo 1 nút command đổi tên, tạm gọi là cmddoiten; ta sử dụng luôn trường tên cán bộ mà bạn tìm đó, tạm đặt là txttimten, và text thứ 3 chỗ xăn dầu tạm gọi là txtmathang. Cuối cùng cái sub của bạn thì tham chiếu đến table nào đó tạm gọi là t1
=> ta có 3 cái:
+ cmddoiten
+ txttimten
+ txtmathang

Dán đoạn code này vào cmddoiten: rồi từ từ ngâm cứu sẽ ra thôi...làm biến làm Demo
Mã PHP:
UPDATE t1 SET t1.Hoten = [Nhap ten moi can doiWHERE (((t1.HotenLike "*" & [Forms]![Tenform]![txttimten] & "*") AND ((t1.TenhangLike "*" & [Forms]![Tenform]![txtmathang] & "*")); 

Ghi chú:
- t1.Hoten : là cột tên trong table
- t1.Tenhang : là cột Tên hàng trong table

Bạn cần code đúng bài bạn thì Import như mình hướng dẫn trên rồi post lên đây. làm biến làm Demo..

Tuyệt vời ^^. mình sẽ thử. Cảm ơn bạn rất nhiều.
Mình vẫn gửi link file cho bạn xem nhé 007:

Link Down File Demo
Chữ ký của m.vuong2211 Xin chào, mình là m.vuong2211, Tham gia http://thuthuataccess.com/forum từ ngày 02-04 -15.
Reply
Những người đã cảm ơn
#9
Code của bạn nè

Mã PHP:
UPDATE tvhoso SET tvhoso.NguoiDungDauCoSo = [Nhap ten moi]
WHERE (((tvhoso.NguoiDungDauCoSoLike "*" & [Forms]![fvMainReplace]![kttencb] & "*") AND ((tvhoso.TenNganhLike "*" & [Forms]![fvMainReplace]![ktnganh] & "*")); 

Hoặc

Mã PHP:
UPDATE tvhoso SET tvhoso.NguoiDungDauCoSo = [Nhap ten moi]
WHERE (((tvhoso.NguoiDungDauCoSo)=[Forms]![fvMainReplace]![kttencb]) AND ((tvhoso.TenNganh)=[Forms]![fvMainReplace]![ktnganh])); 

Chú ý: Code thứ nhất rất nguy hiểm...Cần cân nhắc khi sử dụng.
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#10
(07-04-15, 09:28 AM)maidinhdan Đã viết: Code của bạn nè

Mã PHP:
UPDATE tvhoso SET tvhoso.NguoiDungDauCoSo = [Nhap ten moi]
WHERE (((tvhoso.NguoiDungDauCoSoLike "*" & [Forms]![fvMainReplace]![kttencb] & "*") AND ((tvhoso.TenNganhLike "*" & [Forms]![fvMainReplace]![ktnganh] & "*")); 

Ở đây mình chỉ thay thế TenCB bằng một Cán bộ khác, không phải NguoiDungDauCoSo đâu bạn.
Khi mình dán code vào như thế này:
Mã:
Private Sub btnReplace_Click()
    UPDATE tvhoso SET tvhoso.TenCB = Me.ktreplace
    WHERE (((tvhoso.TenCB) Like "*" & [Forms]![fvMainReplace]![kttencb] & "*") And ((tvhoso.TenNganh) Like "*" & [Forms]![fvMainReplace]![ktnganh] & "*"))
End Sub

Thì nó báo lỗi ở dòng UPDATE tvhoso SET tvhoso.TenCB = Me.ktreplace.
Me.ktreplace là một Ô mình để cho người dùng nhập tên cần thay thế vào đó bạn, không phải một giá trị cố định mà nó do người dùng nhập. Bạn có thể xem lại giúp mình nhé. Như sau:

[Hình: 4.png]

Và nếu như mình muốn thêm điều kiện, không riêng gì TenNganh mà còn có cả LoaiCoSo, DiaBan nữa thì chỉ cần dùng AND thôi đúng không bạn.
Chữ ký của m.vuong2211 Xin chào, mình là m.vuong2211, Tham gia http://thuthuataccess.com/forum từ ngày 02-04 -15.
Reply
Những người đã cảm ơn


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ơ