Mình có làm đoạn code VBA trong file access mà cứ báo lỗi nhờ mọi người hướng dẫn (2 người xem)

  • Thread starter Thread starter baybley
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

Tôi tuân thủ nội quy khi đăng bài

baybley

Thành viên mới
Tham gia
28/8/25
Bài viết
2
Được thích
0
Đây là đoạn code mình dùng trong file mà không có chạy, mọi người xem giúp với a.
Private Sub cmdTaoPhuTung_Click()
Dim MaLoaiTrangBi As Long
MaLoaiTrangBi = Me.cboTenLoaiTrangBi.Value

Dim db As DAO.Database
Dim qdf As DAO.QueryDef

Set db = CurrentDb
Set qdf = db.QueryDefs("TruyVanPhuTroPhuTung") ' Thay "TenTruyVanPhuTro" b?ng tên truy v?n b?n dã t?o ? B1

qdf.Parameters("MaLoaiTrangBi") = MaLoaiTrangBi

On Error GoTo ErrorHandler
qdf.Execute dbFailOnError

MsgBox "Ðã t?o ph? tùng thành công!", vbInformation
Exit Sub

ErrorHandler:
MsgBox "L?i: " & Err.Description, vbCritical
End Sub

file mình dùng code là frmTaoPhuTung
mình mới học nên có nhiều chỗ còn yếu mong mọi người chỉ bảo thêm
 

File đính kèm

Lần chỉnh sửa cuối:
Lỗi:
1. cboTenLoaiTrangBi là cái label. Cái combobox vừa chọn là Combo5
2. Access không hiểu Parameter
 
Set db = CurrentDb
Set qdf = db.QueryDefs("TruyVanPhuTroPhuTung") ' Thay "TenTruyVanPhuTro" b?ng tên truy v?n b?n dã t?o ? B1

qdf.Parameters("MaLoaiTrangBi") = MaLoaiTrangBi
Code này nhìn giống từ AI viết nhỉ.
- Bác @ptm0412 nói đúng câu 1.
- Câu 2: bạn muốn truyền tham số (parameter) từ code VBA thì bạn phải khai báo nó trong Query Design luôn. Xem hình bên dưới.

Screenshot at Aug 29 15-16-11.png

- Tuyệt đối không dùng tiếng Việt có dấu đặt tên cho các đối tượng (table, form, query,....textbox name, ...) trong Access. Nếu bạn dùng Office tiếng Việt và thiết lập Windows hỗ trợ tiếng Việt thì chỉ có máy bạn xài được thôi và máy khác không cài, không chạy được nhé.

Screenshot 2025-08-29 at 14.41.31.png

Và khi bạn cố xài tiếng Việt có dấu đặt tên cho các controls thì sẽ gặp báo lỗi này. Khi đó biết đường mà tìm các control có dấu mà sửa nhé.

activex access problem en.PNG
 
Code này nhìn giống từ AI viết nhỉ.
- Bác @ptm0412 nói đúng câu 1.
...
Vụ parameter nhất thời tôi chỉ ghi lại thông báo lỗi, chưa xem hết vì đến giờ trưa. Sau đó thì phát hiện nhiều thứ:
- Parameter chưa khai báo trong query insert
- Sửa vụ parameter thì code chạy không lỗi nhưng vẫn không insert được. Tôi sửa nhanh bằng cách thêm Where trong vế sau (Select) của query. Đây là cách tôi làm cách đây gần chục năm.
- Cấu trúc các table không chuẩn lắm, ngoài ra các trường liên kết (khóa ngoại) dạng text, trong khi bảng liên kết đến thì ID dạng number.
- Số lượng cũng Text, chu kỳ cũng text
- Mối quan hệ khá lằng nhằng. Dữ liệu mẫu trong bảng Phụ tùng mẫu thì ít quá lại còn sai ID phụ tùng hoặc bỏ trống ID phụ tùng. Bỏ trống hoặc sai cả cột ID mã loại trang bị
Đang định sửa nhưng khá tốn công.
 
Tôi sửa:
- Các quan hệ
- Kiểu dữ liệu (number / Text)
- Thêm cột
- Thêm dữ liệu mẫu
- Thêm parameter
- ...
Query Insert chỉ cần 3 table như sau:

1756479204742.png

1756479241240.png

Tuy nhiên nhờ @ongke0711 xem giúp dù cho combo5 chọn cái gì thì cũng lấy hết bảng mẫu. Lẽ ra chỉ lọc lấy 1 mã 1 hoặc 3

1756481187217.png
 

File đính kèm

Tuy nhiên nhờ @ongke0711 xem giúp dù cho combo5 chọn cái gì thì cũng lấy hết bảng mẫu. Lẽ ra chỉ lọc lấy 1 mã 1 hoặc 3

- Phải sửa cái Parameter lại như hình thì Query mới lọc được anh.

Screenshot 2025-08-30 at 00.59.58.png

- Query: vẫn phải sửa kiểu dữ liệu của trường [ChuKyThayThe] Short text thành Long integer nó mới cho Append.
SQL:
PARAMETERS Forms![frmTaoPhuTung]![cboLoaiTrangBi] Long;
INSERT INTO PhuTungChiTiet ( MaTrangBiChiTiet, MaPhuTung, TenPhuTung, NhaCungCap, DonViTinh, SoLuongCan, ChuKyThayThe, DonGia, ChiPhiUocTinh )
SELECT [Phụ Tùng Cho Loại Trang Bị].MaLoaiTrangBi, [Phụ Tùng Cho Loại Trang Bị].MaPhuTung, [Danh Mục Phụ Tùng].TenPhuTung, [Danh Mục Phụ Tùng].NhaCungCapChinh, [Danh Mục Phụ Tùng].DonViTinh, [Phụ Tùng Cho Loại Trang Bị].SoLuongCan, [Phụ Tùng Cho Loại Trang Bị].ChuKyThayThe, [Danh Mục Phụ Tùng].GiaThamKhao, Nz([soluongcan])*Nz([giathamkhao])*Nz([chukythaythe]) AS ChiPhiUocTinh
FROM [Danh Mục Phụ Tùng] INNER JOIN [Phụ Tùng Cho Loại Trang Bị] ON [Danh Mục Phụ Tùng].MaPhuTung = [Phụ Tùng Cho Loại Trang Bị].MaPhuTung
WHERE ((([Phụ Tùng Cho Loại Trang Bị].MaLoaiTrangBi)=[Forms]![frmTaoPhuTung]![cboLoaiTrangBi]));
 

File đính kèm

- Phải sửa cái Parameter lại như hình thì Query mới lọc được anh.

View attachment 309469

- Query: vẫn phải sửa kiểu dữ liệu của trường [ChuKyThayThe] Short text thành Long integer nó mới cho Append.
Cám ơn bạn. Cái parameter tôi chưa xài bao giờ nên chưa biết. Ngoài ra tôi thấy tác giả lấy trong bảng PhuTungChiTiet_Mau nên tôi sửa field type cho bảng này và lấy theo. Bảng "Phụ tùng cho loại trang bị" thì tôi thấy thừa nên bỏ qua. Vả lại theo logic tôi suy luận thì:
- Bảng kết quả "PhuTungChiTiet" liệt kê từng lần sửa chữa thay thế nối nhau chứ không xóa cũ. Mỗi một thiết bị có thể sửa nhiều lần. Như vậy vẫn còn thiếu một cột ngày và một cột ID cho lần sửa chữa.
- Nếu chỉ tạo 1 lần (xóa cũ) thì chẳng thà làm 1 query đơn giản, không cần query append hay insert.
- Chi phí = số lượng * đơn giá chứ không nhân chu kỳ, vì theo logic 1 lần sửa chữa thì sẽ dùng những gì. Nếu chu kỳ có đơn vị là năm, chia chu kỳ thì ra chi phí cho 1 năm đúng hơn là nhân chu kỳ. 5 năm thay 1 lần thì chi phí 1 năm là 1/5 chứ đâu có thay 5 cái đâu mà nhân 5.
 
Chỉ làm áng áng chừng thôi anh chứ em cũng không biết chủ thớt xây dựng CSDL như thế nào :). Mà đụng tới việc phân tích, xây dựng CSDL cho nó cũng mất thời gian nên thôi, chỉ làm cái sườn bài thôi.
Còn cái query thì gọi thẳng thực thi cái query đó luôn khỏi thông qua khai báo QueryDef làm gì cho mất công cũng được, tại chủ thớt muốn làm thì làm thôi :D
 
Lần chỉnh sửa cuối:
Nói chung CSDL còn nhiều vấn đề lắm:
- Thiếu ràng buộc nhập liệu: muốn nhập gì cũng được, nhập sai cũng được.
- Sai field type
- Relation lằng nhằng và thiếu be bét.
- Dư bảng, bảng thiếu cột
- Các query chưa đáp ứng yêu cầu quản lý
 
em xin chân thành cảm ơn các bác đã hỗ trợ, chia sẻ và chỉ ra những thiếu sót cho em. Em sẽ cố gắng thực hiện và khắc phục. Cảm ơn các bác rất nhiều
 

Bài viết mới nhất

Back
Top Bottom