Giúp đỡ về code cho CT nhập xuất tồn kho

Liên hệ QC

NGOCTOAN

Thành viên hoạt động
Tham gia
1/8/06
Bài viết
104
Được thích
33
Chào cả gia đình GPE

em có 2 file : 1 file excel nhap_lieu dùng để nhập liệu phiếu nhập hoặc phiếu xuất kho, 1 file access kho.mdb dùng để chứa dữ liệu, xin các anh chị chỉ giúp code VBA, VB khi mỗi lần nhập 1 phiếu ở excel ấn vào nút "Nhap vao CSDL" thi toàn bộ dữ liệu trên Sheet excel được import vao CSDL của file access.Các trường của bảng trong file đều tương ứng với dòng số 6 của sheet bangkenhapxuat.
Tôi gui kèm file kho.zip trong đó có 2 fỉle : 1 la nhap_lieu.xls, 2 la kho.mdb access để các bác tiện tham khảo giúp đỡ cho.

Xin cảm ơn nhiều!

ngoctoan _ member GPE
 

File đính kèm

Xin chào bạn. không hiểu sao bạn lại phải sử dụng đến hai chương trình xử lý csdl để chỉ làm một công việc nhập liệu và lưu trữ cho một csdl thôi? Sao không sử dụng một chương trình thôi cho đơn giản. Theo tôi bạn nên sử dụng
1. Excel :
- Sheet thứ nhất dùng để nhập liệu
- Sheet thứ hai dùng để lưu trữ
2. Access : tạo thêm Form để nhập liệu.

Tuy nhiên với yêu cầu của bạn cũng có thể giải quyết được với cách như sau :
Tạo bảng trong Access link tới sheet Excel. nhưng dữ liệu thực vẫn được lưu trữ trên file Excel.
 
Lần chỉnh sửa cuối:
Upvote 0
Gửi Bạn minhdangdlk và các anh chi GPE

Sở dĩ vì em chọn cách này là vì bên em bán các mặt hàng bánh kẹo sữa.... nhập liệu giao dịch rất nhiều. Một điều đặc biệt là khi nhập liệu excel rất nhanh và kiểm tra đựoc sai sót. Trongkhi đó excel hạn chế về xử lý dữ liệu lớn, nên em mượn màn hình excel nhập liệu rồi cho nó vào access để xử lý = các query sau đó móc nó lại excel.
Việc link từ excel vào access thì rất dễ nhưng ở đây em nhập từng phiếu 1 rồi import no vào access để xử lý.
Em đã thấy 1 chương trình bán hàng no chạy như thế chỉ dùng excel và access thôi mà ra đủ loại báo cáo.

Mong các bác giúp cho em cái khó là từ màn hình excel mỗi lần ấn nút " Nhập vào CSDL" là nó chui vào bảng kho access.

Em xin cảm ơn!

Ngoctoan
 
Upvote 0
To NGOCTOAN
Bạn làm không hợp lý rồi, bạn làm như minhdangdlk hướng dẫn ấy (Link table bên dưới submenu import phiên bản cũ là Attach) thì mọi thay đổi trên Excel sẽ được cập nhật trên Access và ngược lại khỏi phải Import mỗi lần như vậy.Trước hết, bạn xuất table đó sang EXCEL để cho cùng cấu trúc sau đó thực hiện link Table. Tiếp theo bạn nhập liệu trên file Excel này là nó tự nhập dữ liệu cho Table Access, khỏi cần nút lệnh nào cả.
 
Lần chỉnh sửa cuối:
Upvote 0
Gửi bạn Sealand và các anh chị GPE

cảm ơn lời nhận xét và chia sẻ của bạn Sealand, nhưng em có lý do riêng để tổ chức như vậy :

1 là nếu link thì dữ liệu vẫn trên excel và nó hạn chế số dòng, vì cty em nhập liệu 1 tháng 10000dòng cơ.

2 là khi đó dữ liệu bảng tính rất lớn và link nó cũng bị nặng và treo máy, dữ liệu vẫn trên excel và khi lỡ tay đụng vào mất dữ liệu hoặc thay đôi nó'

3 là em muốn mượn lớp trên là excel vì nhập liệu nhanh và kiểm tra lỗi nhập cũng dễ và sau khi nhập mỗi phiếu là in ra ngay, sau đó đẩy dữ liệu xuống access để xử lý báo cáo = các bảng query rồi query ngược lên lên excel 1 cách tự động ( cái này em làm được mà ít phải viết code). Bên DNTN bánh kẹo Hoàng họ cũng có 1 chương trình như vậy vừa bán hàng + quản lý công nợ + tồn kho , 1 tháng lên 15000 dòng mà vẫn xử lý tốt (ko biết mua hay ai viết cho họ) nên em cũng bắt chước theo.

vậy các anh chị GPE có giải pháp nào giúp em code cái đó thì tốt quá.

Em xin cảm ơn nhiều!

Ngoctoan
 
Upvote 0
Có 1 cách nữa là dùng ADODC chuyển dữ liệu từ Excel sang Access và ngược lại. Gán lệnh vào nút COMM chỉ nhấn là xong. Bạn tham khảo bài của anh Duyệt về ADODC ấy. Và đây là một đoạn Code mình sưu tầm chuyển từ Exc sang Fox (Bạn nghiên cứu thay Fox bằng Access nhé, không quá khó khăn đâu) Nói chung chỉ ở cách kết nối thôi còn chép gán thì dễ thôi phải không bạn nhất là bạn thạo SQL thì tạo SQL Insert into từ ExcRec vào AccRec quá đơn giản phải không:

Mã:
[FONT=Courier New]Private Sub Command1_Click() 
Dim cnFox As ADODB.Connection, cnExcel As ADODB.Connection 
Dim rsFox As ADODB.Recordset, rsExcel As ADODB.Recordset 
Dim i As Long 

Screen.MousePointer = 11 
Set cnExcel = New ADODB.Connection 
cnExcel.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Libro1.xls;Persist Security Info=False; Extended Properties=Excel 8.0;" 
cnExcel.Open 
Set rsExcel = New ADODB.Recordset 
rsExcel.Open "select * from [hoja1$]", cnExcel, adOpenForwardOnly, adLockReadOnly 

Set cnFox = New ADODB.Connection 
cnFox.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=Driver={Microsoft Visual FoxPro Driver};UID=;SourceDB=" & App.Path & "\;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;" 
cnFox.Open 

Set rsFox = New ADODB.Recordset 
rsFox.CursorLocation = adUseClient 
rsFox.Open "select * from mercbi where idsector = ''", cnFox, adOpenKeyset, adLockOptimistic 

While Not rsExcel.EOF 
rsFox.AddNew 
For i = 0 To rsExcel.Fields.Count - 1 
rsFox(rsExcel(i).Name) = rsExcel(i) 
Next i 
rsFox("Activo") = 1 
rsFox("feccreacio") = Now() 
rsFox("fecactuali") = Now() 
rsFox("tipobien") = 1 
rsFox.Update 
rsExcel.MoveNext 
Wend 

rsExcel.Close 
Set rsExcel = Nothing 

rsFox.Close 
Set rsFox = Nothing 

cnExcel.Close 
Set cnExcel = Nothing 

cnFox.Close 
Set cnFox = Nothing 

Screen.MousePointer = 0 
End Sub 

[/FONT]
Còn đây là chuỗi kết nối với Access (1 ví dụ thôi, còn nhiều kiểu nữa):
Mã:
Provider=Microsoft.Jet.OLEDB.4.0;Data  Source=C:\mydatabase.mdb;Jet OLEDB:Database Password=MyDbPassword;
Một lưu ý quan trọng là Table trong Access khi viết trong SQL thì viết nguyên tên, VD:

SQLStr="SELECT * FROM DATA"
Nhưng đối với Sheet của Excel phải kèm ký tự $ và bao bằng [....], VD:

SQLStr="SELECT * FROM [DATA$]"
Chúc bạn thành công.
 
Lần chỉnh sửa cuối:
Upvote 0
Gửi Bác Sealand

Cảm ơn sự giúp đỡ của Bác, em sẽ áp dung thử xem sao, nếu ok sẽ phát triển ứng dụng khác chỉ dựa trên office của Bác Bill thôi mà đưa ra kết quả nhanh chóng chính xác.

Một lần nữa xin cảm ơn !

Ngoctoan
 
Upvote 0
Bạn chú ý đoạn Code sau

Mã:
Set cnExcel = New ADODB.Connection 
cnExcel.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;[B][COLOR=Red]Data Source=" & App.Path & "\Libro1.xls;[/COLOR][/B]Persist Security Info=False; Extended Properties=Excel 8.0;"
cnExcel.Open
Bạn thay bằng:
Mã:
dim exc_file as string
[B][COLOR=Red]exc_file[/COLOR][/B]=ActiveWorkbook.Fullpath  'Hoac ThisWorkbook.Fullpath
Mã:
[FONT=Courier New]Set cnExcel = New ADODB.Connection 
cnExcel.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&[B][COLOR=Red]exc_file&";[/COLOR][/B]Persist Security Info=False; Extended Properties=Excel 8.0;" 
cnExcel.Open[/FONT]


Như vậy, bạn khỏi lo khi đổi tên File Excel thì Code không nhận ra mà nó kết nối trực tiếp với file đang mở gọi lệnh
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn chú ý đoạn Code sau

Mã:
Set cnExcel = New ADODB.Connection 
cnExcel.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;[B][COLOR=Red]Data Source=" & App.Path & "\Libro1.xls;[/COLOR][/B]Persist Security Info=False; Extended Properties=Excel 8.0;"
cnExcel.Open
Bạn thay bằng:
Mã:
dim exc_file as string
[B][COLOR=Red]exc_file[/COLOR][/B]=ActiveWorkbook.Fullpath  'Hoac ThisWorkbook.Fullpath
Mã:
[FONT=Courier New]Set cnExcel = New ADODB.Connection 
cnExcel.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[B][COLOR=Red]exc_file;[/COLOR][/B]Persist Security Info=False; Extended Properties=Excel 8.0;" 
cnExcel.Open[/FONT]


Như vậy, bạn khỏi lo khi đổi tên File Excel thì Code không nhận ra mà nó kết nối trực tiếp với file đang mở gọi lệnh
Bác Sealand ới, cám ơn bác nhiều. Cái này có thấy EBook của Bác Duyệt mà chưa hình tượng mô tê gì. Bác làm hộ 1 ví dụ nhỏ về cái code Bác đưa lên hộ em với. Chân thành. Em cũng muốn Access lưu hộ data.
 
Upvote 0
Mình viết tạm một ví dụ lọc chép từ Sheet của Excel sang Table của Eccess.
Bận quá chưa tối ưu code thông cảm nhé.
 

File đính kèm

Upvote 0
Em cảm ơn các Bác nhiều lắm, giải pháp các bác đã cho em hình dung cần làm như thế nào rồi. Sau khi lam xong mà SP ok xin cảm tạ các bác chầu bia nhé.

Em thấy nhập liệu trên form vừa lâu vừa khó , ttrong khi nhập liệu trên excel nhanh và vừa kiểm tra được ssố liệu mình nhập 1 cách nhanh chóng.

Còn khi đã có dữ liệu vào access thì xử lý vô cùng thú vị với các tính năng và công cụ của nó qua các query rồi từ đo cũng query ngược trở lại excel làm báo cáo.

Nếu làm được vụ này em định làm 1 chương trình kế toán nhập bằng excel rồi xử lý qua access rồi đưa lên cho các bác xem thử nhé.

Một lần nữa xin cảm ơn!

Ngoc toan
 
Upvote 0
Đây mới là ví dụ thôi, khi vào thực hiện phải nghiên cứu đưa SQL vào thì tốc độ sử lý mới tốt được. Thậm chí không cần mở Record set để rông bộ nhớ sử lý.
 
Upvote 0
OK!Thu Nghi thêm giùm lệnh
Dim tb, tepAc as string
Vì trong Option-->Editor (VBA) của Thu Nghi có đánh dấu vào mục Require Variable Declaration (Biến phải khai báo rõ ràng trước khi sử dụng) nó sẽ có dòng đầu trong Module là dòng Option Explicit (Mình bỏ cái này)
 
Lần chỉnh sửa cuối:
Upvote 0
OK!Thu Nghi thêm giùm lệnh
Dim tb, tepAc as string
Vì trong Option-->Editor (VBA) của Thu Nghi có đánh dấu vào mục Require Variable Declaration (Biến phải khai báo rõ ràng trước khi sử dụng) nó sẽ có dòng đầu trong Module là dòng Option Explicit (Mình bỏ cái này)
Cám ơn Bác, giờ mới biết ADO lợi hại.
Nếu em muốn chuyển tòan bộ dữ liệu sang thì câu lệnh sau phải viết như thế nào.
PHP:
recEx.Open "select * from [HDNC$] where LOAIHD like 'GTGT01-3LL'and KHHD like 'DN/00B'", cnEx, adOpenKeyset, adLockOptimistic
Và Bác cho em 1 ví dụ lấy lại từ mdb về Excel vào sh Tmp nhé. Có điều kiện ngày > 01/01/2004 và lấy tất (hiển nhiên Excel cho).
Cám ơn Bác nhiều.
 
Upvote 0
To Thu Nghi:
Nếu em muốn chuyển tòan bộ dữ liệu sang thì câu lệnh sau phải viết như thế nào.
Thì bạn xóa đoạn where đi là lấy toàn bộ. "*" thay từ All mà
To thoikhongvaodau:
Bạn phải cho biết lỗi ra sao chứ, thì mới tham gia với bạn được.

To Thu Nghi:
Mình gủi ví dụ chuỷen Access-->Excel qua ADO (Mình dùng lệnh gán lần lươt dễ hiểu ngoài ra còn lệnh Execute (SLQ) theo hướng dẫn của TUAN VNU nhanh gọn hơn nhiều)
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Web KT

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

Back
Top Bottom