ongke0711 > 10-06-21, 02:49 PM
(10-06-21, 02:22 PM)Đình Phán Đã viết:Mã:
'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
Đình Phán > 10-06-21, 03:35 PM
(10-06-21, 02:49 PM)ongke0711 Đã viết:(10-06-21, 02:22 PM)Đình Phán Đã viết:Mã:
'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
Nói thêm để bạn hiểu vì sao sai ở đoạn code này.
- Đối với "INSERT INTO..." bạn dùng "SELECT * FROM..." thì bắt buộc phải trùng tên Field ở cả 2 Table. Đó là lý do nó báo lỗi không tìm thấy field [F1] trong tblAccountInfo ...
- Để không báo lỗi thì buộc phải liệt kê tên Field ở cả 2 Table.
Vd: INSERT INTO tblAccountInfo (LineNo, Department, ...) SELECT F1, F2,... FROM TBL_temp ....
Đây là cú pháp qui định của Access SQL.
Đình Phán > 10-06-21, 03:39 PM
(10-06-21, 02:36 PM)paulsteigel Đã viết: 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.
Đình Phán > 10-06-21, 04:55 PM
'Lay du lieu tu bang tam vao bang AccountInfo
mySQL = "INSERT INTO tblAccountInfo (LineNo, Organization, Department, AdvanceRequest, DepartmentIsOrg, AccountDate, DueDate, DocumentRecord, DocumentNo, SubDocNo, LocatorCredit, IsMapping, " & _
"Locator, CodeBooking, DebitAccount, CreditAccount, Currency, Rate, Quantity, UnitPrice, AccountedAmount, SourceAmount, BusinessPartnerDebit, BpartnerPartnerCredit, Description, DescriptionParent, Product, PostingType, Contract, PaymentSchedule, Invoice, Asset,Location, Construction, CIPPhase, GroupCost, GLDistribution, AccountingFact, Table, RecordID, BTSSite, SalesRegion, OriginalContract, Services, CashflowActivities, TypeOfRevenueERP, TypeOfRevenueBCCS, CreatedBy, UpdatedBy, OriginalConstruction, Project, UOM, TypeOfCost, AmountHaveTax, LicensePlate, PeriodExpense, Price, Price_Liter, Price_Month, Price_GrPaper, Price_Print, Product_Object, Quantity_Object, Quantity_Banderol, Quantity_Employee, Quantity_Hour, Quantity_lnk, Quantity_Km, Quantity_Kw, Quantity_M3, Quantity_MaxKw, Quantity_Megabite, Quantity_Message, Quantity_MinKw, Quantity_Minutes," & _
"Quantity_LiterOil, Quantity_People, Quantity_SIM, Quantity_SRCTV, Quantity_TRX,Quantity_Liter, Rate_Percent, Set, ShareForCoOperate, ShareRatio, ShareRevenue, Shift_Quantity, LocationCode, Service_Object, GroupAsset, TaxBase, TypeOfCollaborator, LisencePlate, Commissions, SalesAdvertisingSponsor, TypeOfCallCenter, Type_Tax, SalesPolicy, MeansOfTransport, TypeOfAdvertising, TypeofVasService, Connection-inter-roaming, TOC_InterType, Codeof_IPTransit_IPLC, TypeofOperation, CodeofAPLcustomer, Maintenance, TOC_BTS, TOC_Unit1, TOC_Unit2, TOC_Qty1, TOC_Qty2, CostObject, TOCCategoryShowroom, TOCContractElectric, TOCContractTransit, TOCContractLoan, TOCContractSign, TOCContractCapex, DateInvoiced, Period, DistributionTo, DepartmentSub, DistributionFrom, BankAccount, BranchRequest, BankAccountCredit, CashBook, CashbookCredit, Requester, ExpenseGroup, VATCode, Supplier, RequestType, TransferType, RateToVND)"
mySQL = mySQL + " SELECT A.F1, A.F2, A.F3, A.F4, A.F5, A.F6, A.F7, A.F8, A.F9, A.F10, A.F11, A.F12, A.F13, A.F14, A.F15, A.F16, A.F17, A.F18, A.F19, A.F20, A.F21, A.F22, A.F23, A.F24, A.F25, A.F26, A.F27, A.F28, A.F29, A.F30, A.F31, A.F32, A.F33, A.F34, A.F35, A.F36, A.F37, A.F38, A.F39, A.F40, A.F41, A.F42, A.F43, A.F44, A.F45, A.F46, A.F47, A.F48, A.F49, A.F50, A.F51, A.F52, A.F53, A.F54, A.F55, A.F56, A.F57, A.F58, A.F59, A.F60, A.F61, A.F62, A.F63, A.F64, A.F65, A.F66, A.F67, A.F68, A.F69, A.F70, A.F71, A.F72, A.F73, A.F74, A.F75, A.F76, A.F77, A.F78, A.F79, A.F80, A.F81, A.F82, A.F83, A.F84, A.F85, A.F86, A.F87, A.F88, A.F89, A.F90, A.F91, A.F92, A.F93, A.F94, A.F95, A.F96, A.F97, A.F98, A.F99, A.F100, A.F101, A.F102, A.F103, A.F104, A.F105, A.F106, A.F107, A.F108, A.F109, A.F110, A.F111, A.F112, A.F113, A.F114, A.F115, A.F116, A.F117, A.F118, A.F119, A.F120, A.F121, A.F122, A.F123, A.F124, A.F125, A.F126, A.F127, A.F128, A.F129, A.F130, A.F131, A.F132, A.F133," & _
"A.F134, A.F135, A.F136 FROM tbl_temp as A"
mySQL = mySQL + " WHERE ((tbl_temp.[F1]) > 0);"
DoCmd.RunSQL mySQL
paulsteigel > 10-06-21, 05:09 PM
(10-06-21, 03:39 PM)Đình Phán Đã viết: ....
Đúng là em có thay đổi tên field để thuận tiện cho việc xử lý các báo cáo khác, tblAccountInfo là data, em sẽ xào nấu trên bảng này.
Em thấy anh có câu lệnh tìm ra tất cả các tên trường, anh gợi ý giúp em với ạ.
Ngoài ra còn 1 câu về xử lý ô trống thành giá trị 0 (format Number), anh cho em xin giải pháp ạ.
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES";
ongke0711 > 10-06-21, 05:23 PM
(10-06-21, 04:55 PM)Đình Phán Đã viết: Chào các anh
Mã:'
mySQL = mySQL + " SELECT A.F1, A.F2, A.F3, A.F4, A.F5, A.F6, A.F7, A.F8, A.F9, A.F10, A.F11, A.F12, A.F13, A.F14, A.F15, A.F16, A.F17, A.F18, A.F19, A.F20, A.F21, A.F22, A.F23, A.F24, A.F25, A.F26, A.F27, A.F28, A.F29, A.F30, A.F31, A.F32, A.F33, A.F34, A.F35, A.F36, A.F37, A.F38, A.F39, A.F40, A.F41, A.F42, A.F43, A.F44, A.F45, A.F46, A.F47, A.F48, A.F49, A.F50, A.F51, A.F52, A.F53, A.F54, A.F55, A.F56, A.F57, A.F58, A.F59, A.F60, A.F61, A.F62, A.F63, A.F64, A.F65, A.F66, A.F67, A.F68, A.F69, A.F70, A.F71, A.F72, A.F73, A.F74, A.F75, A.F76, A.F77, A.F78, A.F79, A.F80, A.F81, A.F82, A.F83, A.F84, A.F85, A.F86, A.F87, A.F88, A.F89, A.F90, A.F91, A.F92, A.F93, A.F94, A.F95, A.F96, A.F97, A.F98, A.F99, A.F100, A.F101, A.F102, A.F103, A.F104, A.F105, A.F106, A.F107, A.F108, A.F109, A.F110, A.F111, A.F112, A.F113, A.F114, A.F115, A.F116, A.F117, A.F118, A.F119, A.F120, A.F121, A.F122, A.F123, A.F124, A.F125, A.F126, A.F127, A.F128, A.F129, A.F130, A.F131, A.F132, A.F133,"
mySQL = mySQL + "A.F134, A.F135, A.F136 FROM tbl_temp as A;"
mySQL = mySQL + " WHERE ((tbl_temp.[F1]) > 0);"
DoCmd.RunSQL mySQL
Do không thể viết quá dài nên em có ngắt trang xuống dưới, nhưng bị báo lỗi cú pháp INSERT INTO ạ.
Mong các anh giúp đỡ
paulsteigel > 10-06-21, 05:25 PM
(10-06-21, 04:55 PM)Đình Phán Đã viết: Chào các anh
Mã:'Lay du lieu tu bang tam vao bang AccountInfo
.....
Do không thể viết quá dài nên em có ngắt trang xuống dưới, nhưng bị báo lỗi cú pháp INSERT INTO ạ.
Mong các anh giúp đỡ
mySQL = "INSERT INTO tblAccountInfo (LineNo, Organization, Department, AdvanceRequest, DepartmentIsOrg, AccountDate, DueDate, DocumentRecord, DocumentNo, SubDocNo, LocatorCredit, IsMapping, Locator, CodeBooking, DebitAccount, CreditAccount, Currency, Rate, Quantity, UnitPrice, AccountedAmount, SourceAmount, BusinessPartnerDebit, BpartnerPartnerCredit, Description, DescriptionParent, Product, PostingType, Contract, PaymentSchedule, Invoice, Asset,Location, Construction, CIPPhase, GroupCost, GLDistribution, AccountingFact, Table, RecordID, BTSSite, SalesRegion, OriginalContract, Services, CashflowActivities, TypeOfRevenueERP, TypeOfRevenueBCCS, CreatedBy, UpdatedBy, OriginalConstruction, Project, UOM, TypeOfCost, AmountHaveTax, LicensePlate, PeriodExpense, Price, Price_Liter, Price_Month, Price_GrPaper, Price_Print, Product_Object, Quantity_Object, Quantity_Banderol, Quantity_Employee, Quantity_Hour, Quantity_lnk, Quantity_Km, Quantity_Kw, Quantity_M3, Quantity_MaxKw, Quantity_Megabite, Quantity_Message, Quantity_MinKw, Quantity_Minutes, Quantity_LiterOil, Quantity_People, Quantity_SIM, Quantity_SRCTV, Quantity_TRX,Quantity_Liter, Rate_Percent, Set, ShareForCoOperate, ShareRatio, ShareRevenue, Shift_Quantity, LocationCode, Service_Object, GroupAsset, TaxBase, TypeOfCollaborator, LisencePlate, Commissions, SalesAdvertisingSponsor, TypeOfCallCenter, Type_Tax, SalesPolicy, MeansOfTransport, TypeOfAdvertising, TypeofVasService, Connection-inter-roaming, TOC_InterType, Codeof_IPTransit_IPLC, TypeofOperation, CodeofAPLcustomer, Maintenance, TOC_BTS, TOC_Unit1, TOC_Unit2, TOC_Qty1, TOC_Qty2, CostObject, TOCCategoryShowroom, TOCContractElectric, TOCContractTransit, TOCContractLoan, TOCContractSign, TOCContractCapex, DateInvoiced, Period, DistributionTo, DepartmentSub, DistributionFrom, BankAccount, BranchRequest, BankAccountCredit, CashBook, CashbookCredit, Requester, ExpenseGroup, VATCode, Supplier, RequestType, TransferType, RateToVND)
SELECT A.F1, A.F2, A.F3, A.F4, A.F5, A.F6, A.F7, A.F8, A.F9, A.F10, A.F11, A.F12, A.F13, A.F14, A.F15, A.F16, A.F17, A.F18, A.F19, A.F20, A.F21, A.F22, A.F23, A.F24, A.F25, A.F26, A.F27, A.F28, A.F29, A.F30, A.F31, A.F32, A.F33, A.F34, A.F35, A.F36, A.F37, A.F38, A.F39, A.F40, A.F41, A.F42, A.F43, A.F44, A.F45, A.F46, A.F47, A.F48, A.F49, A.F50, A.F51, A.F52, A.F53, A.F54, A.F55, A.F56, A.F57, A.F58, A.F59, A.F60, A.F61, A.F62, A.F63, A.F64, A.F65, A.F66, A.F67, A.F68, A.F69, A.F70, A.F71, A.F72, A.F73, A.F74, A.F75, A.F76, A.F77, A.F78, A.F79, A.F80, A.F81, A.F82, A.F83, A.F84, A.F85, A.F86, A.F87, A.F88, A.F89, A.F90, A.F91, A.F92, A.F93, A.F94, A.F95, A.F96, A.F97, A.F98, A.F99, A.F100, A.F101, A.F102, A.F103, A.F104, A.F105, A.F106, A.F107, A.F108, A.F109, A.F110, A.F111, A.F112, A.F113, A.F114, A.F115, A.F116, A.F117, A.F118, A.F119, A.F120, A.F121, A.F122, A.F123, A.F124, A.F125, A.F126, A.F127, A.F128, A.F129, A.F130, A.F131, A.F132, A.F133, A.F134, A.F135, A.F136 FROM tbl_temp as A; WHERE ((tbl_temp.[F1]) > 0);
Đình Phán > 10-06-21, 05:50 PM
(10-06-21, 05:23 PM)ongke0711 Đã viết: Nhìn kinh thật.
Tôi sẽ xử lý theo kiểu khác chứ không dùng các tên field F1,F2... mà chẳng biết Field đó là gì. Nếu file Excel của bạn lỡ xui bị thay đổi thứ tự các cột thì Insert vô sẽ sai dữ liệu tùm lum.
Có 2 cách: Dùng Insert Into và dùng vòng lặp Recordset để ghi dữ liệu. Cả 2 cách đều phải thêm một thao tác là chuyển đổi tên field Excel thành tên Field Access rồi mới xử lý tiếp.
Sau khi xử lý đổi tên Field xong thì câu lệnh "INSERT INTO ....SELECT * FROM.." chạy ngon lành, ngắn gon.
Để đổi tên Field, tôi dùng bảng tra. Tạo 1 table có 1 cột tên Field Excel và tên Field Access --> gõ thủ công vô (hoặc chạy code lấy tên Field cho nhanh). Sau khi import file Excel vào table tạm -> đổi tên field -> Insert into vào table chính.
Đình Phán > 10-06-21, 06:05 PM
(10-06-21, 05:25 PM)paulsteigel Đã viết: Một trong những biện pháp tốt để tìm lỗi cú pháp SQL là, dùng màn hình thiết kế SQL.
1. Tạo SQL (ở chế độ SQL design)
2. Chuyển sang màn hình soạn code SQL View (bấm phải chuột ngoài khu vực bản bạn vừa chèn vào SQL
3. Dán đầy đủ đoạn code query của bạn vào rồi view query, Access sẽ bảo bạn lỗi gì
Trước đây tôi còn dùng chế độ ghi màn hình để làm video nhưng giờ bỏ hết, tôi tìm tạm cho bạn một video về sử dụng SQL designer nhé
https://www.youtube.com/watch?v=WxGKLfWIJTU
paulsteigel > 10-06-21, 06:15 PM
(10-06-21, 06:05 PM)Đình Phán Đã viết:(10-06-21, 05:25 PM)paulsteigel Đã viết: Một trong những biện pháp tốt để tìm lỗi cú pháp SQL là, dùng màn hình thiết kế SQL.
1. Tạo SQL (ở chế độ SQL design)
2. Chuyển sang màn hình soạn code SQL View (bấm phải chuột ngoài khu vực bản bạn vừa chèn vào SQL
3. Dán đầy đủ đoạn code query của bạn vào rồi view query, Access sẽ bảo bạn lỗi gì
Trước đây tôi còn dùng chế độ ghi màn hình để làm video nhưng giờ bỏ hết, tôi tìm tạm cho bạn một video về sử dụng SQL designer nhé
https://www.youtube.com/watch?v=WxGKLfWIJTU
Thủ thuật này của anh hay quá, em tay ngang sang Access nên còn nhiều bỡ ngỡ, hôm trước anh ongke0711 cũng có khuyến nghị nên tìm hiểu Access cơ bản trước. Hic
Khi nào em mới giỏi được như các anh ạ.