-
RE: Làm thế nào để dùng SQL trong lập trình?
Đình Phán > 08-06-21, 04:09 PM
Em đã đọc hết các bài viết của chủ đề này, nhưng tác giả muốn nói đến là dùng ADO hoặc DAO để kết nối giữa Access và Excel hoặc ngược lại là nhiều.
Em đang tìm hiểu sử dụng VBA kết hợp SQL để thay thế các thao tác từ Ribbon của Access, bởi như bác chủ thớt đã nói là SQL là công cụ mạnh, thay vì phải qua nhiều bước thì mình sẽ thực hiện lồng ghép các câu lệnh truy vấn để ra kết quả mong muốn.
Bác nào có các ví dụ điển hình không ạ? -
RE: Làm thế nào để dùng SQL trong lập trình?
paulsteigel > 09-06-21, 11:06 PM
(08-06-21, 04:09 PM)Đình Phán Đã viết: Em đã đọc hết các bài viết của chủ đề này, nhưng tác giả muốn nói đến là dùng ADO hoặc DAO để kết nối giữa Access và Excel hoặc ngược lại là nhiều.
Em đang tìm hiểu sử dụng VBA kết hợp SQL để thay thế các thao tác từ Ribbon của Access, bởi như bác chủ thớt đã nói là SQL là công cụ mạnh, thay vì phải qua nhiều bước thì mình sẽ thực hiện lồng ghép các câu lệnh truy vấn để ra kết quả mong muốn.
Bác nào có các ví dụ điển hình không ạ?
Đợt này bị khủng hoảng tuổi trung niên các cụ ợ. Đâm ra chán mọi thứ, nay mở mail thấy có thư báo có người hỏi ở một chủ đề mà mình bỏ đã lâu. Xin phép lại quay lại cùng anh em! Xin phép được cảm ơn cụ Dân, cụ ông Kẹ, cụ Minh Tiên và các cụ khác đã theo đuổi cùng Ngọc ở loạt bài này!
Quay lại câu hỏi của cụ Phán, cái cụ nói nó khác và xin được xếp nó là [Hành động]. Các thao tác trên Ribbon của Access là hành động và nó là các chi thị chương trình để kích hoạt tính năng của Access chứ không phải là Tính năng của SQL. SQL là ngôn ngữ truy vấn có cấu trúc được sử dụng để thao túng (manipulate) dữ liệu lưu trữ trên ổ cứng/ bộ nhớ theo cấu trúc nào đó. SQL không thể dùng để thay thế cho các hành động trên ribbon được ợ!
Với câu hỏi này mình nghĩ tác giả nên làm rõ
Đặt vấn đề: cụ muốn làm gì? như nào? (để người đọc hiểu mục tiêu của cụ);
Yêu cầu xử lý: Cần nó xử lý cái gì?
Kết quả: Kết quar đạt được là gì.
500 anh em ở đây sẽ cùng cụ giải quyết vấn đề ngay ợ.
Thân chào các đồng sự.
Riêng ông Che_Guevara thì phải cố gắng thêm nhiều. Tôi mở bài này ra là vì Ông đó. Đến lúc làm với tập dữ liệu lớn thì bỏ Excel ra khỏi tư duy ngay. nó có thể làm giao diện tốt nhưng không phải là nơi tổ chức dữ liệu có cấu trúc tốt nhá -
RE: Làm thế nào để dùng SQL trong lập trình?
tranthanhan1962 > 10-06-21, 01:22 AM
Tiếp tay với paulsteigel trả lời thêm với bạn Đình Phán:
1/ SQL là gì: Nó viết tắt của Structured Query Language => dịch là Ngôn ngữ truy vấn mang tính cấu trúc có khả năng xử lý dữ liệu từ 1 hoặc nhiều bảng cơ sở, bảng ở đây có thể là table của Oracle, DBase, Foxpro, Access,... có nghĩa là nghĩa là những gì không phải là table thì không liên quan đến nó và access sử dụng nó để làm xử lý table và gọi nó là Access SQL.
2/ Làm việc với SQL thì phải biết cú pháp của nó và tất nhiên cũng như ngoại ngữ các bạn newbie cũng rất khó nuốt trôi. Để dễ bán phần mềm access, Microsoft sáng chế một cái lưới gọi là QBE viết tắt từ Query By Example => Dịch là Truy vấn theo ví dụ chuyển cú pháp từ ngữ SQL access sang dạng kéo thả. Giống như hồi học cấp 1 phân biệt truyện hình với truyện chữ. Ai không biết đọc thì coi hình . Sau khi bạn thiết kế xong 1 query trên lưới QBE cũng có thể xem cú pháp SQL của nó bằng chuột phải / SQL View, hay ngược lại bạn cũng có thể tạo query bằng cú pháp SQL trong giao diện SQL view rồi xem lưới QBE bằng chuột phải / Design View.
3/ VBA có nhiệm vụ thực hiện lệnh thực hiện SQL hay query mà không phải mở giao diện QBE và bấm run query. Ví dụ bạn có 1 query có nhiệm vụ thực hiện 1 tính toán trên table A. Bạn có thể tạo 1 QueryC rồi run query này trên giao diện query. Hoặc copy SQL của nó rồi ̣đưa vào VBA bằng lệnh DoCmd.RunSQL "đoạn SQL". Tất nhiên Query (hay SQL) sẽ thực hiện tất cả các record bằng 1 dòng lệnh còn dùng DAO hay ADO sẽ phải dùng vòng lặp vì m̀́ỗi lệnh chỉ chạy được 1 record.
4/ Ribbon chứa những nút lệnh để xử lý công việc nào đó ̣(tất cả những nút này đều chứa những lệnh có thể gọi từ VBA hay Macro). Cái mà bạn thấy khi thiết kế là lệnh hệ thống của access. Muốn sử dụng lệnh riêng của mình thì phải tạo user ribbon -
RE: Làm thế nào để dùng SQL trong lập trình?
Đình Phán > 10-06-21, 12:25 PM
(09-06-21, 11:06 PM)paulsteigel Đã viết: Đợt này bị khủng hoảng tuổi trung niên các cụ ợ. Đâm ra chán mọi thứ, nay mở mail thấy có thư báo có người hỏi ở một chủ đề mà mình bỏ đã lâu. Xin phép lại quay lại cùng anh em! Xin phép được cảm ơn cụ Dân, cụ ông Kẹ, cụ Minh Tiên và các cụ khác đã theo đuổi cùng Ngọc ở loạt bài này!
Quay lại câu hỏi của cụ Phán, cái cụ nói nó khác và xin được xếp nó là [Hành động]. Các thao tác trên Ribbon của Access là hành động và nó là các chi thị chương trình để kích hoạt tính năng của Access chứ không phải là Tính năng của SQL. SQL là ngôn ngữ truy vấn có cấu trúc được sử dụng để thao túng (manipulate) dữ liệu lưu trữ trên ổ cứng/ bộ nhớ theo cấu trúc nào đó. SQL không thể dùng để thay thế cho các hành động trên ribbon được ợ!
Với câu hỏi này mình nghĩ tác giả nên làm rõ
Đặt vấn đề: cụ muốn làm gì? như nào? (để người đọc hiểu mục tiêu của cụ);
Yêu cầu xử lý: Cần nó xử lý cái gì?
Kết quả: Kết quar đạt được là gì.
500 anh em ở đây sẽ cùng cụ giải quyết vấn đề ngay ợ.
Thân chào các đồng sự.
Riêng ông Che_Guevara thì phải cố gắng thêm nhiều. Tôi mở bài này ra là vì Ông đó. Đến lúc làm với tập dữ liệu lớn thì bỏ Excel ra khỏi tư duy ngay. nó có thể làm giao diện tốt nhưng không phải là nơi tổ chức dữ liệu có cấu trúc tốt nhá
https://drive.google.com/file/d/1Xih4aiv...sp=sharing
Đây là trường hợp em dùng SQL để truy vấn và bị vướng ạ. Có 2 vấn đề phát sinh mà em không hiểu.
1. Khi lấy dữ liệu từ Folder GL vào table tbl_temp và copy dữ liệu từ tbl_temp vào tblAccountInfo thì cứ bị báo lỗi field F1 không thỏa mãn.
Em đã thử 2 cách.
- Import thẳng từ file tại Folder GL vào tblAccountInfo --> Lỗi Name Field không tồn tại
- Trung giam qua tbl_temp cũng báo lỗi
2. File excel tại folder CDPS, nhiều cột bị gộp, và 1 cột vừa gộp vừa ẩn.
- Nếu em để nguyên định dạng này khi xuất từ Hệ thống ra để import vào tbl_temp thì báo lỗi field F12
- Nếu em thực hiện kéo dãn cột tại cột J thì không báo lỗi.
Có cách nào xử lý được không ạ, em muốn xuất từ hệ thống ra, lưu vào folder, còn lại để Access xử lý.
Cảm ơn các anh. -
RE: Làm thế nào để dùng SQL trong lập trình?
paulsteigel > 10-06-21, 01:31 PM
(10-06-21, 12:25 PM)Đình Phán Đã viết:
(09-06-21, 11:06 PM)paulsteigel Đã viết: Đợt này bị khủng hoảng tuổi trung niên các cụ ợ. Đâm ra chán mọi thứ, nay mở mail thấy có thư báo có người hỏi ở một chủ đề mà mình bỏ đã lâu. Xin phép lại quay lại cùng anh em! Xin phép được cảm ơn cụ Dân, cụ ông Kẹ, cụ Minh Tiên và các cụ khác đã theo đuổi cùng Ngọc ở loạt bài này!
Quay lại câu hỏi của cụ Phán, cái cụ nói nó khác và xin được xếp nó là [Hành động]. Các thao tác trên Ribbon của Access là hành động và nó là các chi thị chương trình để kích hoạt tính năng của Access chứ không phải là Tính năng của SQL. SQL là ngôn ngữ truy vấn có cấu trúc được sử dụng để thao túng (manipulate) dữ liệu lưu trữ trên ổ cứng/ bộ nhớ theo cấu trúc nào đó. SQL không thể dùng để thay thế cho các hành động trên ribbon được ợ!
Với câu hỏi này mình nghĩ tác giả nên làm rõ
Đặt vấn đề: cụ muốn làm gì? như nào? (để người đọc hiểu mục tiêu của cụ);
Yêu cầu xử lý: Cần nó xử lý cái gì?
Kết quả: Kết quar đạt được là gì.
500 anh em ở đây sẽ cùng cụ giải quyết vấn đề ngay ợ.
Thân chào các đồng sự.
Riêng ông Che_Guevara thì phải cố gắng thêm nhiều. Tôi mở bài này ra là vì Ông đó. Đến lúc làm với tập dữ liệu lớn thì bỏ Excel ra khỏi tư duy ngay. nó có thể làm giao diện tốt nhưng không phải là nơi tổ chức dữ liệu có cấu trúc tốt nhá
https://drive.google.com/file/d/1Xih4aiv...sp=sharing
Đây là trường hợp em dùng SQL để truy vấn và bị vướng ạ. Có 2 vấn đề phát sinh mà em không hiểu.
1. Khi lấy dữ liệu từ Folder GL vào table tbl_temp và copy dữ liệu từ tbl_temp vào tblAccountInfo thì cứ bị báo lỗi field F1 không thỏa mãn.
Em đã thử 2 cách.
- Import thẳng từ file tại Folder GL vào tblAccountInfo --> Lỗi Name Field không tồn tại
- Trung giam qua tbl_temp cũng báo lỗi
2. File excel tại folder CDPS, nhiều cột bị gộp, và 1 cột vừa gộp vừa ẩn.
- Nếu em để nguyên định dạng này khi xuất từ Hệ thống ra để import vào tbl_temp thì báo lỗi field F12
- Nếu em thực hiện kéo dãn cột tại cột J thì không báo lỗi.
Có cách nào xử lý được không ạ, em muốn xuất từ hệ thống ra, lưu vào folder, còn lại để Access xử lý.
Cảm ơn các anh.
Cảm ơn bạn đã phản hồi, giờ như này nhé. Vì các lỗi của bạn xuất hiện liên quan đến thao tác trên form vì thế bạn giúp mình cụ thể ra:
1. Thực hiện hành động nào trên form nào bị lỗi (để dễ cho mình và mọi người theo vết).
2. Nếu lỗi không liên quan đến thao tác form thì bạn cần cung cấp rõ hành động, mình sẽ tìm hiểu và góp ý.
Trân trọng!
Xem nhanh qua thủ tục Update trên form mình có mấy ý kiến như sau:
1. Lỗi khi thao tác nhập liệu từ excel là do bảng tblAccountInfo không có trường nào tên F1 để nó đưa số liệu vào. Và lỗi này thường phát sinh khi file Excel có trường F1 lỗi (mặc dù không thấy có dữ liệu nhưng vô tình nó chứa một ký tự trẳng chẳng hạn). Access khi nhập liệu dạng import sẽ tự động coi đó là một trường cần nhập liệu vào và khi bảng đích không có thì nó báo lỗi.
2. Bạn có 5 cách để xử lý vấn đề
+ Cách 1: Tạo thêm một trường F1 trong bảng tblAccountInfo: tôi đoán bạn không muốn làm điều này vì đó không phải là trường cần nhập.
+ Cách 2: Sửa dữ liệu trên file Excel bằng cách,
>> Chỉ chọn những cột có dữ liệu cần nhập, chọn đến dòng cuối cùng
>> copy sang 1 file excel mới và khi copy thì dán giá trị
>> nhập dữ liệu từ file excel mới này.
+ Cách 3: Kết nối trực tiếp với File Excel và quẳng dữ liệu trực tiếp vào bảng tblAccountInfo
>> Lựa chọn 1: Kết nối từ access với file excel thông quan ADODB hoặc DAO và thao tác nhập liệu sử dụng SQL như bình thường;
>> Lựa chọn 2: Liên kết OLE đến file excel thông qua đối tượng Excel.Appllication như tôi từng đề cập về Liên kết Sớm/ muộn rồi duyệt qua từng dòng vùng chọn và thực hiện SQL thêm từng dòng vào bảng tblAccountInfo (dạng Insert into tblAccountInfo(Truong1, trương2...) Values [value1, value2,... ]
Lựa chọn 2 này thì hơi lâu nhưng dễ kiểm soát lỗi dữ liệu.
+ Cách 4: là kết hợp của 3 cách trên
>> Nhập bảng excel vào một bảng mới trên csdl access
>> chạy SQL để chọn dữ liệu từ bảng mới này vào bảng tblAccountInfo
+ Cách 5: gần giống cách 1 nhưng thay vì bạn nhập vào, bạn dùng tính năng LinkExcel table rồi làm như bình thường
Thế đó -
RE: Làm thế nào để dùng SQL trong lập trình?
ongke0711 > 10-06-21, 01:59 PM
(10-06-21, 12:25 PM)Đình Phán Đã viết: Đây là trường hợp em dùng SQL để truy vấn và bị vướng ạ. Có 2 vấn đề phát sinh mà em không hiểu.
1. Khi lấy dữ liệu từ Folder GL vào table tbl_temp và copy dữ liệu từ tbl_temp vào tblAccountInfo thì cứ bị báo lỗi field F1 không thỏa mãn.
Em đã thử 2 cách.
- Import thẳng từ file tại Folder GL vào tblAccountInfo --> Lỗi Name Field không tồn tại
- Trung giam qua tbl_temp cũng báo lỗi
2. File excel tại folder CDPS, nhiều cột bị gộp, và 1 cột vừa gộp vừa ẩn.
- Nếu em để nguyên định dạng này khi xuất từ Hệ thống ra để import vào tbl_temp thì báo lỗi field F12
- Nếu em thực hiện kéo dãn cột tại cột J thì không báo lỗi.
Có cách nào xử lý được không ạ, em muốn xuất từ hệ thống ra, lưu vào folder, còn lại để Access xử lý.
Trường hợp này nó không có gì phức tạp và liên quan đến câu lệnh SQL gì đâu anh Paulsteigel.
Xem qua dữ liệu của bạn Đình Phán thì lỗi là do các tên Field nó không nhất quán giữa file Excel và Table Access, mà muốn Import tự động thì Access nó nhảy dựng lên báo lỗi liền thôi.
- Đối với folder GL: Tên Field Excel có khoảng cách, tên Field Access viết liền: [Line No] - [LineNo]
- Đối với CDPS: Table là thuần tuý tên cột và dòng dữ liệu, không có các dòng dư thừa, merger cell... Do đó muốn import bảng CDPS bạn chỉ có cách tự chuẩn hoá lại cái bảng dữ liệu trên Excel, bỏ hết Merge, cột nào cũng có tên, bỏ các dòng dữ liệu linh tinh phía trên để nó thành 1 Table, rồi mới import. -
RE: Làm thế nào để dùng SQL trong lập trình?
paulsteigel > 10-06-21, 02:04 PM
(10-06-21, 01:59 PM)ongke0711 Đã viết:
(10-06-21, 12:25 PM)Đình Phán Đã viết: Đây là trường hợp em dùng SQL để truy vấn và bị vướng ạ. Có 2 vấn đề phát sinh mà em không hiểu.
1. Khi lấy dữ liệu từ Folder GL vào table tbl_temp và copy dữ liệu từ tbl_temp vào tblAccountInfo thì cứ bị báo lỗi field F1 không thỏa mãn.
Em đã thử 2 cách.
- Import thẳng từ file tại Folder GL vào tblAccountInfo --> Lỗi Name Field không tồn tại
- Trung giam qua tbl_temp cũng báo lỗi
2. File excel tại folder CDPS, nhiều cột bị gộp, và 1 cột vừa gộp vừa ẩn.
- Nếu em để nguyên định dạng này khi xuất từ Hệ thống ra để import vào tbl_temp thì báo lỗi field F12
- Nếu em thực hiện kéo dãn cột tại cột J thì không báo lỗi.
Có cách nào xử lý được không ạ, em muốn xuất từ hệ thống ra, lưu vào folder, còn lại để Access xử lý.
Trường hợp này nó không có gì phức tạp và liên quan đến câu lệnh SQL gì đâu anh Paulsteigel.
Xem qua dữ liệu của bạn Đình Phán thì lỗi là do các tên Field nó không nhất quán giữa file Excel và Table Access, mà muốn Import tự động thì Access nó nhảy dựng lên báo lỗi liền thôi.
- Đối với folder GL: Tên Field Excel có khoảng cách, tên Field Access viết liền: [Line No] - [LineNo]
- Đối với CDPS: Table là thuần tuý tên cột và dòng dữ liệu, không có các dòng dư thừa, merger cell... Do đó muốn import bảng CDPS bạn chỉ có cách tự chuẩn hoá lại cái bảng dữ liệu trên Excel, bỏ hết Merge, cột nào cũng có tên, bỏ các dòng dữ liệu linh tinh phía trên để nó thành 1 Table, rồi mới import.
Đúng thế mờ Ông Kẹ ơi, Mình phân tích và đưa ra cho bạn ý 5 giải pháp xử lý cũng kiểu kiểu vậy thôi. Thông thường khi phải lấy số liệu từ Excel vào thì mình không chọn cách dùng transfertable vì file Excel rất hay có những lỗi dữ liệu dị dạng. Mình hay chọn cách 3,4,5 như nói ở bài trên!
Tks ông Kẹ nhá! Đợt này có khi tham gia nhiều hơn để dựng lại đam mê đã ngã xuống từ 2017.. há há! -
RE: Làm thế nào để dùng SQL trong lập trình?
Đình Phán > 10-06-21, 02:13 PM
(10-06-21, 01:31 PM)paulsteigel Đã viết:
(10-06-21, 12:25 PM)Đình Phán Đã viết:
(09-06-21, 11:06 PM)paulsteigel Đã viết: Đợt này bị khủng hoảng tuổi trung niên các cụ ợ. Đâm ra chán mọi thứ, nay mở mail thấy có thư báo có người hỏi ở một chủ đề mà mình bỏ đã lâu. Xin phép lại quay lại cùng anh em! Xin phép được cảm ơn cụ Dân, cụ ông Kẹ, cụ Minh Tiên và các cụ khác đã theo đuổi cùng Ngọc ở loạt bài này!
Quay lại câu hỏi của cụ Phán, cái cụ nói nó khác và xin được xếp nó là [Hành động]. Các thao tác trên Ribbon của Access là hành động và nó là các chi thị chương trình để kích hoạt tính năng của Access chứ không phải là Tính năng của SQL. SQL là ngôn ngữ truy vấn có cấu trúc được sử dụng để thao túng (manipulate) dữ liệu lưu trữ trên ổ cứng/ bộ nhớ theo cấu trúc nào đó. SQL không thể dùng để thay thế cho các hành động trên ribbon được ợ!
Với câu hỏi này mình nghĩ tác giả nên làm rõ
Đặt vấn đề: cụ muốn làm gì? như nào? (để người đọc hiểu mục tiêu của cụ);
Yêu cầu xử lý: Cần nó xử lý cái gì?
Kết quả: Kết quar đạt được là gì.
500 anh em ở đây sẽ cùng cụ giải quyết vấn đề ngay ợ.
Thân chào các đồng sự.
Riêng ông Che_Guevara thì phải cố gắng thêm nhiều. Tôi mở bài này ra là vì Ông đó. Đến lúc làm với tập dữ liệu lớn thì bỏ Excel ra khỏi tư duy ngay. nó có thể làm giao diện tốt nhưng không phải là nơi tổ chức dữ liệu có cấu trúc tốt nhá
https://drive.google.com/file/d/1Xih4aiv...sp=sharing
Đây là trường hợp em dùng SQL để truy vấn và bị vướng ạ. Có 2 vấn đề phát sinh mà em không hiểu.
1. Khi lấy dữ liệu từ Folder GL vào table tbl_temp và copy dữ liệu từ tbl_temp vào tblAccountInfo thì cứ bị báo lỗi field F1 không thỏa mãn.
Em đã thử 2 cách.
- Import thẳng từ file tại Folder GL vào tblAccountInfo --> Lỗi Name Field không tồn tại
- Trung giam qua tbl_temp cũng báo lỗi
2. File excel tại folder CDPS, nhiều cột bị gộp, và 1 cột vừa gộp vừa ẩn.
- Nếu em để nguyên định dạng này khi xuất từ Hệ thống ra để import vào tbl_temp thì báo lỗi field F12
- Nếu em thực hiện kéo dãn cột tại cột J thì không báo lỗi.
Có cách nào xử lý được không ạ, em muốn xuất từ hệ thống ra, lưu vào folder, còn lại để Access xử lý.
Cảm ơn các anh.
Cảm ơn bạn đã phản hồi, giờ như này nhé. Vì các lỗi của bạn xuất hiện liên quan đến thao tác trên form vì thế bạn giúp mình cụ thể ra:
1. Thực hiện hành động nào trên form nào bị lỗi (để dễ cho mình và mọi người theo vết).
2. Nếu lỗi không liên quan đến thao tác form thì bạn cần cung cấp rõ hành động, mình sẽ tìm hiểu và góp ý.
Trân trọng!
Xem nhanh qua thủ tục Update trên form mình có mấy ý kiến như sau:
1. Lỗi khi thao tác nhập liệu từ excel là do bảng tblAccountInfo không có trường nào tên F1 để nó đưa số liệu vào. Và lỗi này thường phát sinh khi file Excel có trường F1 lỗi (mặc dù không thấy có dữ liệu nhưng vô tình nó chứa một ký tự trẳng chẳng hạn). Access khi nhập liệu dạng import sẽ tự động coi đó là một trường cần nhập liệu vào và khi bảng đích không có thì nó báo lỗi.
2. Bạn có 5 cách để xử lý vấn đề
+ Cách 1: Tạo thêm một trường F1 trong bảng tblAccountInfo: tôi đoán bạn không muốn làm điều này vì đó không phải là trường cần nhập.
+ Cách 2: Sửa dữ liệu trên file Excel bằng cách,
>> Chỉ chọn những cột có dữ liệu cần nhập, chọn đến dòng cuối cùng
>> copy sang 1 file excel mới và khi copy thì dán giá trị
>> nhập dữ liệu từ file excel mới này.
+ Cách 3: Kết nối trực tiếp với File Excel và quẳng dữ liệu trực tiếp vào bảng tblAccountInfo
>> Lựa chọn 1: Kết nối từ access với file excel thông quan ADODB hoặc DAO và thao tác nhập liệu sử dụng SQL như bình thường;
>> Lựa chọn 2: Liên kết OLE đến file excel thông qua đối tượng Excel.Appllication như tôi từng đề cập về Liên kết Sớm/ muộn rồi duyệt qua từng dòng vùng chọn và thực hiện SQL thêm từng dòng vào bảng tblAccountInfo (dạng Insert into tblAccountInfo(Truong1, trương2...) Values [value1, value2,... ]
Lựa chọn 2 này thì hơi lâu nhưng dễ kiểm soát lỗi dữ liệu.
+ Cách 4: là kết hợp của 3 cách trên
>> Nhập bảng excel vào một bảng mới trên csdl access
>> chạy SQL để chọn dữ liệu từ bảng mới này vào bảng tblAccountInfo
+ Cách 5: gần giống cách 1 nhưng thay vì bạn nhập vào, bạn dùng tính năng LinkExcel table rồi làm như bình thường
Thế đó
Cách 4 mà anh hướng dẫn chính là thao tác em nhập dữ liệu vào tbl_temp trước, sau đó InsertInto tblAccountInfo đó ạ.
Mấy dòng lệnh đó em đang bỏ đi, anh có thể cho nó hiện lại và xem giúp em được ko ạ? (cách hoạt động tương tự như lấy dữ liệu ở Folder CDPS)
Cách này em làm rồi mà vẫn bị lỗi. Cảm ơn anh. -
RE: Làm thế nào để dùng SQL trong lập trình?
Đình Phán > 10-06-21, 02:22 PM
(10-06-21, 01:59 PM)ongke0711 Đã viết:
(10-06-21, 12:25 PM)Đình Phán Đã viết: Đây là trường hợp em dùng SQL để truy vấn và bị vướng ạ. Có 2 vấn đề phát sinh mà em không hiểu.
1. Khi lấy dữ liệu từ Folder GL vào table tbl_temp và copy dữ liệu từ tbl_temp vào tblAccountInfo thì cứ bị báo lỗi field F1 không thỏa mãn.
Em đã thử 2 cách.
- Import thẳng từ file tại Folder GL vào tblAccountInfo --> Lỗi Name Field không tồn tại
- Trung giam qua tbl_temp cũng báo lỗi
2. File excel tại folder CDPS, nhiều cột bị gộp, và 1 cột vừa gộp vừa ẩn.
- Nếu em để nguyên định dạng này khi xuất từ Hệ thống ra để import vào tbl_temp thì báo lỗi field F12
- Nếu em thực hiện kéo dãn cột tại cột J thì không báo lỗi.
Có cách nào xử lý được không ạ, em muốn xuất từ hệ thống ra, lưu vào folder, còn lại để Access xử lý.
Trường hợp này nó không có gì phức tạp và liên quan đến câu lệnh SQL gì đâu anh Paulsteigel.
Xem qua dữ liệu của bạn Đình Phán thì lỗi là do các tên Field nó không nhất quán giữa file Excel và Table Access, mà muốn Import tự động thì Access nó nhảy dựng lên báo lỗi liền thôi.
- Đối với folder GL: Tên Field Excel có khoảng cách, tên Field Access viết liền: [Line No] - [LineNo]
- Đối với CDPS: Table là thuần tuý tên cột và dòng dữ liệu, không có các dòng dư thừa, merger cell... Do đó muốn import bảng CDPS bạn chỉ có cách tự chuẩn hoá lại cái bảng dữ liệu trên Excel, bỏ hết Merge, cột nào cũng có tên, bỏ các dòng dữ liệu linh tinh phía trên để nó thành 1 Table, rồi mới import.
Cảm ơn anh.
1. Đối với lỗi của CDPS em đã khắc phục được, em hỏi thêm là tại file gốc, có các ô không hẳn là rỗng mà có thể là 1 ký tự đặc biệt nào đó. Em muốn khi nhập vào tblTrialBalance mà cho các ô trong field đó là 0 thì kết hợp như thế nào ạ? Có dùng IIf kết hợp với Nz được không ạ?
2. Đối với lỗi của folder GL, dữ liệu này của em mới là 1 tháng thôi. 12 tháng thì sẽ có số lượng dòng rất lớn, và cố định 136 cột.
Em cũng đã làm cách là nhập vào table tạm rồi sau đó mới nhặt qua tblAccountInfo nhưng vẫn lỗi.
Mã:Do While Len(strFile) > 0
strPathFile = strPath & strFile
If Exist_Table("tbl_temp") Then
DoCmd.DeleteObject acTable, "tbl_temp"
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "tbl_temp", strPathFile, 0, "A2:EF1000000"
Else
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "tbl_temp", strPathFile, 0, "A2:EF1000000"
End If
strFile = Dir()
'Call Delete_Err_Table
Call Delete_Table
DoCmd.SetWarnings False
'Lay du lieu tu bang tam vao bang AccountInfo
mySQL = "INSERT INTO tblAccountInfo"
mySQL = mySQL + " SELECT tbl_temp.* FROM tbl_temp;"
mySQL = mySQL + " WHERE ((tbl_temp.[F1]) > 0);"
DoCmd.RunSQL mySQL
Loop -
RE: Làm thế nào để dùng SQL trong lập trình?
paulsteigel > 10-06-21, 02:36 PM
(10-06-21, 02:13 PM)Đình Phán Đã viết:
(10-06-21, 01:31 PM)paulsteigel Đã viết:
(10-06-21, 12:25 PM)Đình Phán Đã viết:
(09-06-21, 11:06 PM)paulsteigel Đã viết: Đợt này bị khủng hoảng tuổi trung niên các cụ ợ. Đâm ra chán mọi thứ, nay mở mail thấy có thư báo có người hỏi ở một chủ đề mà mình bỏ đã lâu. Xin phép lại quay lại cùng anh em! Xin phép được cảm ơn cụ Dân, cụ ông Kẹ, cụ Minh Tiên và các cụ khác đã theo đuổi cùng Ngọc ở loạt bài này!
Quay lại câu hỏi của cụ Phán, cái cụ nói nó khác và xin được xếp nó là [Hành động]. Các thao tác trên Ribbon của Access là hành động và nó là các chi thị chương trình để kích hoạt tính năng của Access chứ không phải là Tính năng của SQL. SQL là ngôn ngữ truy vấn có cấu trúc được sử dụng để thao túng (manipulate) dữ liệu lưu trữ trên ổ cứng/ bộ nhớ theo cấu trúc nào đó. SQL không thể dùng để thay thế cho các hành động trên ribbon được ợ!
Với câu hỏi này mình nghĩ tác giả nên làm rõ
Đặt vấn đề: cụ muốn làm gì? như nào? (để người đọc hiểu mục tiêu của cụ);
Yêu cầu xử lý: Cần nó xử lý cái gì?
Kết quả: Kết quar đạt được là gì.
500 anh em ở đây sẽ cùng cụ giải quyết vấn đề ngay ợ.
Thân chào các đồng sự.
Riêng ông Che_Guevara thì phải cố gắng thêm nhiều. Tôi mở bài này ra là vì Ông đó. Đến lúc làm với tập dữ liệu lớn thì bỏ Excel ra khỏi tư duy ngay. nó có thể làm giao diện tốt nhưng không phải là nơi tổ chức dữ liệu có cấu trúc tốt nhá
https://drive.google.com/file/d/1Xih4aiv...sp=sharing
Đây là trường hợp em dùng SQL để truy vấn và bị vướng ạ. Có 2 vấn đề phát sinh mà em không hiểu.
1. Khi lấy dữ liệu từ Folder GL vào table tbl_temp và copy dữ liệu từ tbl_temp vào tblAccountInfo thì cứ bị báo lỗi field F1 không thỏa mãn.
Em đã thử 2 cách.
- Import thẳng từ file tại Folder GL vào tblAccountInfo --> Lỗi Name Field không tồn tại
- Trung giam qua tbl_temp cũng báo lỗi
2. File excel tại folder CDPS, nhiều cột bị gộp, và 1 cột vừa gộp vừa ẩn.
- Nếu em để nguyên định dạng này khi xuất từ Hệ thống ra để import vào tbl_temp thì báo lỗi field F12
- Nếu em thực hiện kéo dãn cột tại cột J thì không báo lỗi.
Có cách nào xử lý được không ạ, em muốn xuất từ hệ thống ra, lưu vào folder, còn lại để Access xử lý.
Cảm ơn các anh.
Cảm ơn bạn đã phản hồi, giờ như này nhé. Vì các lỗi của bạn xuất hiện liên quan đến thao tác trên form vì thế bạn giúp mình cụ thể ra:
1. Thực hiện hành động nào trên form nào bị lỗi (để dễ cho mình và mọi người theo vết).
2. Nếu lỗi không liên quan đến thao tác form thì bạn cần cung cấp rõ hành động, mình sẽ tìm hiểu và góp ý.
Trân trọng!
Xem nhanh qua thủ tục Update trên form mình có mấy ý kiến như sau:
1. Lỗi khi thao tác nhập liệu từ excel là do bảng tblAccountInfo không có trường nào tên F1 để nó đưa số liệu vào. Và lỗi này thường phát sinh khi file Excel có trường F1 lỗi (mặc dù không thấy có dữ liệu nhưng vô tình nó chứa một ký tự trẳng chẳng hạn). Access khi nhập liệu dạng import sẽ tự động coi đó là một trường cần nhập liệu vào và khi bảng đích không có thì nó báo lỗi.
2. Bạn có 5 cách để xử lý vấn đề
+ Cách 1: Tạo thêm một trường F1 trong bảng tblAccountInfo: tôi đoán bạn không muốn làm điều này vì đó không phải là trường cần nhập.
+ Cách 2: Sửa dữ liệu trên file Excel bằng cách,
>> Chỉ chọn những cột có dữ liệu cần nhập, chọn đến dòng cuối cùng
>> copy sang 1 file excel mới và khi copy thì dán giá trị
>> nhập dữ liệu từ file excel mới này.
+ Cách 3: Kết nối trực tiếp với File Excel và quẳng dữ liệu trực tiếp vào bảng tblAccountInfo
>> Lựa chọn 1: Kết nối từ access với file excel thông quan ADODB hoặc DAO và thao tác nhập liệu sử dụng SQL như bình thường;
>> Lựa chọn 2: Liên kết OLE đến file excel thông qua đối tượng Excel.Appllication như tôi từng đề cập về Liên kết Sớm/ muộn rồi duyệt qua từng dòng vùng chọn và thực hiện SQL thêm từng dòng vào bảng tblAccountInfo (dạng Insert into tblAccountInfo(Truong1, trương2...) Values [value1, value2,... ]
Lựa chọn 2 này thì hơi lâu nhưng dễ kiểm soát lỗi dữ liệu.
+ Cách 4: là kết hợp của 3 cách trên
>> Nhập bảng excel vào một bảng mới trên csdl access
>> chạy SQL để chọn dữ liệu từ bảng mới này vào bảng tblAccountInfo
+ Cách 5: gần giống cách 1 nhưng thay vì bạn nhập vào, bạn dùng tính năng LinkExcel table rồi làm như bình thường
Thế đó
Cách 4 mà anh hướng dẫn chính là thao tác em nhập dữ liệu vào tbl_temp trước, sau đó InsertInto tblAccountInfo đó ạ.
Mấy dòng lệnh đó em đang bỏ đi, anh có thể cho nó hiện lại và xem giúp em được ko ạ? (cách hoạt động tương tự như lấy dữ liệu ở Folder CDPS)
Cách này em làm rồi mà vẫn bị lỗi. Cảm ơn anh.
Okie bạn.
Mình làm như này:L
1. Link (chọn cách 5 cho tiện) bảng excel Export_Accounts_DuLieuHachToan_20210609204601.xlsx
2. Tạo một querry dựa trên các cột của tblAccountInfo
Mã PHP:SELECT a.LineNo, a.Organization, a.Department, a.AdvanceRequest, a.DepartmentIsOrg, a.AccountDate, a.DueDate, a.DocumentRecord, a.DocumentNo, a.SubDocNo, a.LocatorCredit, a.IsMapping, a.Locator, a.[Code Booking], a.DebitAccount, a.CreditAccount, a.Currency, a.Rate, a.Quantity, a.UnitPrice, a.AccountedAmount, a.SourceAmount, a.BusinessPartnerDebit, a.BpartnerPartnerCredit, a.Description, a.DescriptionParent, a.Product, a.PostingType, a.Contract, a.PaymentSchedule, a.Invoice, a.Asset, a.Location, a.Construction, a.CIPPhase, a.GroupCost, a.GLDistribution, a.AccountingFact, a.Table, a.RecordID, a.BTSSite, a.SalesRegion, a.OriginalContract, a.Services, a.CashflowActivities, a.TypeOfRevenueERP, a.TypeOfRevenueBCCS, a.CreatedBy, a.UpdatedBy, a.OriginalConstruction, a.Project, a.UOM, a.TypeOfCost, a.AmountHaveTax, a.LicensePlate, a.PeriodExpense, a.Price, a.[Price/Liter], a.[Price/Month], a.[Price/GrPaper], a.[Price/Print], a.Product_Object, a.Quantity_Object, a.Quantity_Banderol, a.Quantity_Employee, a.Quantity_Hour, a.Quantity_lnk, a.Quantity_Km, a.Quantity_Kw, a.Quantity_M3, a.Quantity_MaxKw, a.Quantity_Megabite, a.Quantity_Message, a.Quantity_MinKw, a.Quantity_Minutes, a.[Quantity_Liter Oil], a.Quantity_People, a.Quantity_SIM, a.Quantity_SRCTV, a.Quantity_TRX, a.Quantity_Liter, a.Rate_Percent, a.Set, a.[ShareForCo-operate], a.ShareRatio, a.ShareRevenue, a.Shift_Quantity, a.LocationCode, a.Service_Object, a.GroupAsset, a.TaxBase, a.TypeOfCollaborator, a.LisencePlate, a.Commissions, a.SalesAdvertisingSponsor, a.TypeOfCallCenter, a.Type_Tax, a.SalesPolicy, a.MeansOfTransport, a.TypeOfAdvertising, a.TypeofVasService, a.[Connection-inter-roaming], a.TOC_InterType, a.Codeof_IPTransit_IPLC, a.TypeofOperation, a.CodeofAPLcustomer, a.Maintenance, a.TOC_BTS, a.TOC_Unit1, a.TOC_Unit2, a.TOC_Qty1, a.TOC_Qty2, a.CostObject, a.TOCCategoryShowroom, a.TOCContractElectric, a.TOCContractTransit, a.TOCContractLoan, a.TOCContractSign, a.TOCContractCapex, a.DateInvoiced, a.Period, a.DistributionTo, a.DepartmentSub, a.DistributionFrom, a.BankAccount, a.BranchRequest, a.BankAccountCredit, a.CashBook, a.CashbookCredit, a.Requester, a.ExpenseGroup, a.VATCode, a.Supplier, a.RequestType, a.TransferType, a.RateToVND
FROM tblAccountInfo AS a;
Sửa đoạn này FROM tblAccountInfo AS a; thành FROM Export_Accounts_DuLieuHachToan AS a. Đây cũng chính là tên bảng Excel link. Mới sơ sơ thì thấy bạn có rất nhiều trường (khoảng 80 trường) không có trong danh sách trường của bảng tblAccountInfo
Mã PHP:LineNo
AdvanceRequest
DepartmentIsOrg
AccountDate
DueDate
DocumentRecord
DocumentNo
LocatorCredit
DebitAccount
CreditAccount
UnitPrice
AccountedAmount
SourceAmount
BusinessPartnerDebit
BPartnerPatnerCredit
PaymentSchedule
CIPPhase
GroupCost
GLDistribution
AccountingFact
RecordId
BTSSite
SaleRegion
OriginalContract
CashFlowActivities
TypeOfRevenueERP
TypeOfRevenueBCCS
CreatedBy
UpdatedBy
OriginalConstruction
TypeOfCost
AmountHaveTax
LicensePlate
PeriodExpense
Price/GrPaper
Product_Object
Quantity_Object
Quantity_Banderoll
....
Như vậy thì có thể chốt lại như sau: bảng excel nhập vào và bảng đích chả tương đồng gì thì bạn nhập làm sao.
Muốn nhập được thành công, hãy chỉnh sửa bảng excel sao cho ít ra nó tương đồng về tên cột với bảng đích rồi làm mới được.
Lời góp ý: bạn cũng có thể liệt kê tên các trường cần nhập vào từ file excel đó rồi chỉ cần dùng Insert into... Select From dựa vào bảng excel đã link ý.
Hãy cố lên nào
Thân.