• Làm thế nào để dùng SQL trong lập trình?
  • RE: Làm thế nào để dùng SQL trong lập trình?

    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

    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.
  • RE: Làm thế nào để dùng SQL trong lập trình?

    Đì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.

    Đây chính là câu trả lời cho em sáng tỏ vấn đề lỗi của em ạ.
  • RE: Làm thế nào để dùng SQL trong lập trình?

    Đì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.LineNoa.Organizationa.Departmenta.AdvanceRequesta.DepartmentIsOrga.AccountDatea.DueDatea.DocumentRecorda.DocumentNoa.SubDocNoa.LocatorCredita.IsMappinga.Locatora.[Code Booking], a.DebitAccounta.CreditAccounta.Currencya.Ratea.Quantitya.UnitPricea.AccountedAmounta.SourceAmounta.BusinessPartnerDebita.BpartnerPartnerCredita.Descriptiona.DescriptionParenta.Producta.PostingTypea.Contracta.PaymentSchedulea.Invoicea.Asseta.Locationa.Constructiona.CIPPhasea.GroupCosta.GLDistributiona.AccountingFacta.Tablea.RecordIDa.BTSSitea.SalesRegiona.OriginalContracta.Servicesa.CashflowActivitiesa.TypeOfRevenueERPa.TypeOfRevenueBCCSa.CreatedBya.UpdatedBya.OriginalConstructiona.Projecta.UOMa.TypeOfCosta.AmountHaveTaxa.LicensePlatea.PeriodExpensea.Pricea.[Price/Liter], a.[Price/Month], a.[Price/GrPaper], a.[Price/Print], a.Product_Objecta.Quantity_Objecta.Quantity_Banderola.Quantity_Employeea.Quantity_Houra.Quantity_lnka.Quantity_Kma.Quantity_Kwa.Quantity_M3a.Quantity_MaxKwa.Quantity_Megabitea.Quantity_Messagea.Quantity_MinKwa.Quantity_Minutesa.[Quantity_Liter Oil], a.Quantity_Peoplea.Quantity_SIMa.Quantity_SRCTVa.Quantity_TRXa.Quantity_Litera.Rate_Percenta.Seta.[ShareForCo-operate], a.ShareRatioa.ShareRevenuea.Shift_Quantitya.LocationCodea.Service_Objecta.GroupAsseta.TaxBasea.TypeOfCollaboratora.LisencePlatea.Commissionsa.SalesAdvertisingSponsora.TypeOfCallCentera.Type_Taxa.SalesPolicya.MeansOfTransporta.TypeOfAdvertisinga.TypeofVasServicea.[Connection-inter-roaming], a.TOC_InterTypea.Codeof_IPTransit_IPLCa.TypeofOperationa.CodeofAPLcustomera.Maintenancea.TOC_BTSa.TOC_Unit1a.TOC_Unit2a.TOC_Qty1a.TOC_Qty2a.CostObjecta.TOCCategoryShowrooma.TOCContractElectrica.TOCContractTransita.TOCContractLoana.TOCContractSigna.TOCContractCapexa.DateInvoiceda.Perioda.DistributionToa.DepartmentSuba.DistributionFroma.BankAccounta.BranchRequesta.BankAccountCredita.CashBooka.CashbookCredita.Requestera.ExpenseGroupa.VATCodea.Suppliera.RequestTypea.TransferTypea.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.

    Đú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 ạ.
  • RE: Làm thế nào để dùng SQL trong lập trình?

    Đình Phán > 10-06-21, 04:55 PM

    Chào các anh


    Mã:
    '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

    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 đỡ
  • RE: Làm thế nào để dùng SQL trong lập trình?

    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 ạ.

    Không ổn rồi, bạn vừa muốn xử lý đươc vấn đề, vừa muốn không bị lỗi. cách đây 2 bài thì bạn nhờ mình giúp thực hiện thành công bài toán của bạn. Haiz!
    Access, SQL ...vv đều cần tôn trọng một niêm luật là tính chính xác, lô gic. Bạn đang vừa muốn thực hiện một bước tiến lớn nhưng lại chưa bước qua được một rào cản nhỏ. Giờ mình khuyến nghị bạn thế này. Tất nhiên trước khi khuyến nghị mình trả lời câu hỏi này cho bạn

    1. lấy tên tất cả các trường....: Rất dễ dàng, mình chỉ đơn giản dùng bộ công cụ thiết kế query của Access và lôi tất cả tên trường vào là có danh sách các trường. Không cần thiết phải đòi hỏi cao siêu quá, nhiều khi có thể code (tôi cũng có code lấy danh sách tất cả các trường của một bảng), nhưng vì mục tiêu hiệu quả, đôi khi không cần làm vậy. 
    Lời nhắc 1: Hãy sử dụng công cụ thiết kế một cách hiệu quả và tối ưu. Đừng lúc nào cũng nghĩ đến code.

    Bài toán trên của bạn sẽ làm được một cách rất đơn giản và ngắn gọn.
    Bước 1: Tạo danh sách các trường cần lấy để đưa vào bảng dữ liệu access
    Bước 2: đổi tên cột trên bảng Excel sao cho thật chuẩn theo danh sách này. Tất nhiên phải đảm bảo kiểu dữ liệu chuẩn mực của các trường với nhau không lỗi kiểu dữ liệu (data type mismatch) sẽ xảy ra khi chạy;
    + Trường hợp thực sự cần phải có tên khác trên biểu excel thì có thể phải làm một bước phụ trong query như sau (tôi nghĩ đâu có cần phải phức tạp hóa như vậy):
    Select Fieldexcel1 as FieldungAccess1, Fieldexcel2 as FieldungAccess2 ....
    Bước 3: Link bảng excel vào cơ sở dữ liệu (nếu phải thường xuyên dùng nó, còn không thì dùng câu lệnh kết nối ADODB với cơ sở dữ liệu Excel như thế này (tùy thuộc phiên bản Office của bạn nhé - cái này cho Ofice 2007 giở lên)
    Mã PHP:
    Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES"


    Lưu ý 2: Tránh dùng công cụ Transferdatabase vì nó không ổn, khó kiểm soát sự chuẩn hóa dữ liệu như đã phân tích.

    Về câu hỏi của bạn liên quan đến số 0.. xyz, bạn chỉ cần phải xử lý vấn đề này khi kiểu dữ liệu của bạn có vấn đề và cần phải xử trí điều này ở cấp từng dòng dữ liệu bằng các query riêng rẽ. 
    Bạn có thể sử dụng nz trong query như sau:
    Select a.A, a.B, nz(a.C, 0) as fieldC from LinkedExceltable
    Với bài toán hiện tại của bạn thì bạn chưa phải đến bước này mà hãy giải quyết vấn đề mà tôi đã chỉ ra ở phần trên (tên trường khác nhau).
    Chúc bạn thành công nhé!
  • RE: Làm thế nào để dùng SQL trong lập trình?

    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 đỡ

    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.
  • RE: Làm thế nào để dùng SQL trong lập trình?

    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 đỡ

    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ì
    Mã PHP:
    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); 

    Ở đoạn SQL dài ngoằng kia, bạn đang có 2 vấn đề:
    1. FROM tbl_temp as A; thừa dấu ";"
    2. Đoạn INsert into của bạn có 12 trường giở lên không có trong bảng  tblAccountInfo;
    Cách xử lý của tôi cho trường hợp này là:
    1. thiết kế 2 Select query riêng rẽ để kiểm tra sự chuẩn mực các trường trước;
    2. Sau đó thì dùng query designer để chuyển nó thành dạng Inser/ append / delet ...vv tùy theoo nhu cầu
    Tôi thành thật đề nghị bạn nên nghiên cứu kỹ kỹ năng sử dụng Query designer trước khi bàn đến một vài kỹ năng nâng cao (dùng môt bảng lưu ánh xạ các tên trường).
    3. nên sử dụng Alias trong query để tránh trường hợp tên trường trùng với từ khóa cấm của SQL. Tên trường sẽ có dạng alias.tentruong trong đó alias là bí danh của bảng.

    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
  • RE: Làm thế nào để dùng SQL trong lập trình?

    Đì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.

    Do 2 cột mà anh hướng dẫn, vậy em sẽ có 1 table mới gồm 2 cột
    Cột tên field tại bảng tbl_temp (Fx) và cột tên field tại bảng tblAccountInfo
    Em dùng vòng lặp để sửa tên Field của tbl_temp có được không ạ?

    Chứ em đọc đi đọc lại phần chuyển đổi tên field Excel vẫn khó hình dung quá (Em import không lấy tiêu đề của file excel rồi)
  • RE: Làm thế nào để dùng SQL trong lập trì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

    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 ạ.
  • RE: Làm thế nào để dùng SQL trong lập trình?

    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 ạ.

    Đó là những kỹ năng đầu đời khi tôi làm việc với Access 2000 những năm 2002. Thực sự thì bắt đầu làm về access từ 1999 nhưng đến 2002 mới bắt đầu kiếm tiền được từ nó (một cách ăn theo việc chính khác)
    Nói chung việc cần làm đầu tiên là: 
    + mày mò các công cụ và cố hiểu xem nó để làm gì, thao tác với nó
    + google 
    + Sáng tạo
    Theo tôi bạn nên học trước về cách định hình một bảng dữ liệu và quan hệ. Gợi ý đơn giản nhất là:
    1. Chia nhỏ các bảng dữ liệu lớn ra thành các bảng đơn nguyên theo tính chất biến động của nó. 
    Vi dụ Hồ sơ khách hàng >> ít biến động >> tblCustomer
    2. Giao dịch >> hay biến động thì chỉ lưu những cái rất hay thay đổi thôi, còn lại tách riêng ra bảng khác
    3. quan hệ: 1 khách có nhiều giao dịch, có nhiều tài khoản chẳng hạn...
    Học từ đó học đi >> bạn có thể tìm đọc chỗ này, đọc nhanh thôi, tài liệu tiếng Việt cũng không thiếu!
    Tôi định tạo một nhóm zalo riêng để tiện trao đổi và dán hình ảnh minh họa.
    Bạn thêm zalo của tôi 0913220994 và hỏi ông Kẹ, Mai Đình Dân, cụ tranthannhan1962 và hình thành nhóm AccessVBA trao đổi cho tiện! Có nhiều cái có thể nói trực tiếp, cắt dán hình ảnh luôn được! Tất nhiên có các bài cơ bản thì vẫn nên viết ra ở đây!