Синтаксическая ошибка INSERT INTO оператор - БД ДОСТУПА - PullRequest
0 голосов
/ 04 апреля 2020

Я прошел долгий путь со вчерашнего дня! Я сейчас тестирую свой проект базы данных, добавляя записи. У меня 58 полей, поэтому оператор INSERT INTO длинный. Независимо от того, что я пытаюсь (что все, что Google может предложить, насколько я знаю), я получаю синтаксическую ошибку во время выполнения, которая является синтаксической ошибкой INSERT INTO. Вот код, который я использую:

Private Sub AddRecord()
    'Add Parameters
    Access.AddParam("@v1", txtPrograms.Text)
    Access.AddParam("@v2", dtpQADate.Value.ToShortDateString)
    Access.AddParam("@v3", txtReviewer.Text)
    Access.AddParam("@v4", cmbAssessment.SelectedItem.ToString)
    Access.AddParam("@v5", dtpAssessment.Value.ToShortDateString)
    Access.AddParam("@v6", cmbScreening.SelectedItem.ToString)
    Access.AddParam("@v7", dtpScreening.Value.ToShortDateString)
    Access.AddParam("@v8", cmbStatusIndicators.SelectedItem.ToString)
    Access.AddParam("@v9", dtpStatusIndicators.Value.ToShortDateString)
    Access.AddParam("@v10", cmbHealthRecord.SelectedItem.ToString)
    Access.AddParam("@v11", dtpHealthRecord.Value.ToShortDateString)
    Access.AddParam("@v12", cmbSA.SelectedItem.ToString)
    Access.AddParam("@v13", dtpSA.Value.ToShortDateString)
    Access.AddParam("@v14", cmbFrail.SelectedItem.ToString)
    Access.AddParam("@v15", txtFrailExplain.Text)
    Access.AddParam("@v16", cmbDrAppt.SelectedItem.ToString)
    Access.AddParam("@v17", txtDrApptExplain.Text)
    Access.AddParam("@v18", cmbApptTracking.SelectedItem.ToString)
    Access.AddParam("@v19", cmbCurrent.SelectedItem.ToString)
    Access.AddParam("@v20", txtEFGuidelines.Text)
    Access.AddParam("@v21", cmbOrdersInPlace.SelectedItem.ToString)
    Access.AddParam("@v22", cmbOrdersCorrect.SelectedItem.ToString)
    Access.AddParam("@v23", txtAllergies.Text)
    Access.AddParam("@v24", cmbCertEntries.SelectedItem.ToString)
    Access.AddParam("@v25", cmbCertEntriesNo.SelectedItem.ToString)
    Access.AddParam("@v26", txtPC1.Text)
    Access.AddParam("@v27", dtpPC1.Value.ToShortDateString)
    Access.AddParam("@v28", txtPC2.Text)
    Access.AddParam("@v29", dtpPC2.Value.ToShortDateString)
    Access.AddParam("@v30", txtPC3.Text)
    Access.AddParam("@v31", dtpPC3.Value.ToShortDateString)
    Access.AddParam("@v32", txtPC4.Text)
    Access.AddParam("@v33", dtpPC4.Value.ToShortDateString)
    Access.AddParam("@v34", txtPC5.Text)
    Access.AddParam("@v35", dtpPC5.Value.ToShortDateString)
    Access.AddParam("@v36", txtPC6.Text)
    Access.AddParam("@v37", dtpPC6.Value.ToShortDateString)
    Access.AddParam("@v38", txtPC7.Text)
    Access.AddParam("@v39", dtpPC7.Value.ToShortDateString)
    Access.AddParam("@v40", txtPC8.Text)
    Access.AddParam("@v41", dtpPC8.Value.ToShortDateString)
    Access.AddParam("@v42", cmbLogComplete.SelectedItem.ToString)
    Access.AddParam("@v43", cmbLogCorrect.SelectedItem.ToString)
    Access.AddParam("@v44", cmbPRNComplete.SelectedItem.ToString)
    Access.AddParam("@v45", cmbPRNCorrect.SelectedItem.ToString)
    Access.AddParam("@v46", cmbNoProtocols.SelectedItem.ToString)
    Access.AddParam("@v47", txtControlled.Text)
    Access.AddParam("@v48", txtWasted.Text)
    Access.AddParam("@v49", cmbAccurate.SelectedItem.ToString)
    Access.AddParam("@v50", cmbCapable.SelectedItem.ToString)
    Access.AddParam("@v51", dtpSelfAdmin.Value.ToShortDateString)
    Access.AddParam("@v52", cmbLocked.SelectedItem.ToString)
    Access.AddParam("@v53", cmbOTC.SelectedItem.ToString)
    Access.AddParam("@v54", cmbOTCNo.SelectedItem.ToString)
    Access.AddParam("@v55", dtpPermit.Value.ToShortDateString)
    Access.AddParam("@v56", dtpWaiver.Value.ToShortDateString)
    Access.AddParam("@v57", cmbErrors.SelectedItem.ToString)
    Access.AddParam("@v58", txtNotesFinal.Text)

    'Execute Insert Command
    Access.ExecQuery("INSERT INTO tblQA ([Program],[assessdate],[Reviewer],[healthassess],[healthassessdate],[Screening],[screeningdate],[healthindicators],[healthindicatorsdate],[healthrecord],[healthrecorddate],[sareview],[sareviewdate],[Frail],[frailexplanation],[drappt],[drapptexplanation],[trackingform],[trackingformcorrect],[efguidelines],[ordersinplace],[orderscorrect],[Allergies],[certentries],[certentriesnum],[pc1],[pc1date],[pc2],[pc2date],[pc3],[pc3date],[pc4],[pc4date],[pc5],[pc5date],[pc6],[pc6date],[pc7],[pc7date],[pc8],[pc8date],[logdoccomplete],[logdoccorrect],[prnprotocolscomplete],[prnprotocolscorrect],[numprnprotocols],[cmedslist],[cmedslistwasted],[cmedslistaccurate],[selfadmincapable],[selfadminevaldate],[medslocked],[otcforms],[otcnum],[permitadmindate],[epwaiverdate],[numerrors],[Notes] ) _
                    VALUES (@v1,@v2,@v3,@v4,@v5,@v6,@v7,@v8,@v9,@v10,@v11,@v12,@v13,@v14,@v15,@v16,@v17,@v18,@v19,@v20,@v21,@v22,@v23,@v24, @v25,@v26,@v27,@v28,@v29,@v30,@v31,@v32,@v33,@v34,@v35,@v36,@v37,@v38,@v39,@v40,@v41,@v42,@v43,@v44,@v45,@v46,@v47,@v48,@v49,@v50,@v51,@v52,@v53,@v54,@v55,@v56,@v57,@v58);")

Я проверил похожие посты, но, похоже, ни один из них не решил мою проблему. Спасибо, что нашли время, чтобы направить меня еще раз!

1 Ответ

1 голос
/ 04 апреля 2020

Вы по ошибке поместили символ продолжения строки VB внутри литерала String.

Если вы хотите использовать символ продолжения строки, это:

Access.ExecQuery("INSERT INTO tblQA ([Program],[assessdate],[Reviewer],[healthassess],[healthassessdate],[Screening],[screeningdate],[healthindicators],[healthindicatorsdate],[healthrecord],[healthrecorddate],[sareview],[sareviewdate],[Frail],[frailexplanation],[drappt],[drapptexplanation],[trackingform],[trackingformcorrect],[efguidelines],[ordersinplace],[orderscorrect],[Allergies],[certentries],[certentriesnum],[pc1],[pc1date],[pc2],[pc2date],[pc3],[pc3date],[pc4],[pc4date],[pc5],[pc5date],[pc6],[pc6date],[pc7],[pc7date],[pc8],[pc8date],[logdoccomplete],[logdoccorrect],[prnprotocolscomplete],[prnprotocolscorrect],[numprnprotocols],[cmedslist],[cmedslistwasted],[cmedslistaccurate],[selfadmincapable],[selfadminevaldate],[medslocked],[otcforms],[otcnum],[permitadmindate],[epwaiverdate],[numerrors],[Notes] ) _
                VALUES (@v1,@v2,@v3,@v4,@v5,@v6,@v7,@v8,@v9,@v10,@v11,@v12,@v13,@v14,@v15,@v16,@v17,@v18,@v19,@v20,@v21,@v22,@v23,@v24, @v25,@v26,@v27,@v28,@v29,@v30,@v31,@v32,@v33,@v34,@v35,@v36,@v37,@v38,@v39,@v40,@v41,@v42,@v43,@v44,@v45,@v46,@v47,@v48,@v49,@v50,@v51,@v52,@v53,@v54,@v55,@v56,@v57,@v58);")

должно быть следующим:

Access.ExecQuery("INSERT INTO tblQA ([Program],[assessdate],[Reviewer],[healthassess],[healthassessdate],[Screening],[screeningdate],[healthindicators],[healthindicatorsdate],[healthrecord],[healthrecorddate],[sareview],[sareviewdate],[Frail],[frailexplanation],[drappt],[drapptexplanation],[trackingform],[trackingformcorrect],[efguidelines],[ordersinplace],[orderscorrect],[Allergies],[certentries],[certentriesnum],[pc1],[pc1date],[pc2],[pc2date],[pc3],[pc3date],[pc4],[pc4date],[pc5],[pc5date],[pc6],[pc6date],[pc7],[pc7date],[pc8],[pc8date],[logdoccomplete],[logdoccorrect],[prnprotocolscomplete],[prnprotocolscorrect],[numprnprotocols],[cmedslist],[cmedslistwasted],[cmedslistaccurate],[selfadmincapable],[selfadminevaldate],[medslocked],[otcforms],[otcnum],[permitadmindate],[epwaiverdate],[numerrors],[Notes])" & _
                 "VALUES (@v1,@v2,@v3,@v4,@v5,@v6,@v7,@v8,@v9,@v10,@v11,@v12,@v13,@v14,@v15,@v16,@v17,@v18,@v19,@v20,@v21,@v22,@v23,@v24,@v25,@v26,@v27,@v28,@v29,@v30,@v31,@v32,@v33,@v34,@v35,@v36,@v37,@v38,@v39,@v40,@v41,@v42,@v43,@v44,@v45,@v46,@v47,@v48,@v49,@v50,@v51,@v52,@v53,@v54,@v55,@v56,@v57,@v58);")

Примерно с 2008 года VB не требовал символов продолжения строки в большинстве ситуаций (хотя в тех случаях, когда строка не могла быть действительной сама по себе), поэтому вы можете сделать это:

Access.ExecQuery("INSERT INTO tblQA ([Program],[assessdate],[Reviewer],[healthassess],[healthassessdate],[Screening],[screeningdate],[healthindicators],[healthindicatorsdate],[healthrecord],[healthrecorddate],[sareview],[sareviewdate],[Frail],[frailexplanation],[drappt],[drapptexplanation],[trackingform],[trackingformcorrect],[efguidelines],[ordersinplace],[orderscorrect],[Allergies],[certentries],[certentriesnum],[pc1],[pc1date],[pc2],[pc2date],[pc3],[pc3date],[pc4],[pc4date],[pc5],[pc5date],[pc6],[pc6date],[pc7],[pc7date],[pc8],[pc8date],[logdoccomplete],[logdoccorrect],[prnprotocolscomplete],[prnprotocolscorrect],[numprnprotocols],[cmedslist],[cmedslistwasted],[cmedslistaccurate],[selfadmincapable],[selfadminevaldate],[medslocked],[otcforms],[otcnum],[permitadmindate],[epwaiverdate],[numerrors],[Notes])" &
                 "VALUES (@v1,@v2,@v3,@v4,@v5,@v6,@v7,@v8,@v9,@v10,@v11,@v12,@v13,@v14,@v15,@v16,@v17,@v18,@v19,@v20,@v21,@v22,@v23,@v24,@v25,@v26,@v27,@v28,@v29,@v30,@v31,@v32,@v33,@v34,@v35,@v36,@v37,@v38,@v39,@v40,@v41,@v42,@v43,@v44,@v45,@v46,@v47,@v48,@v49,@v50,@v51,@v52,@v53,@v54,@v55,@v56,@v57,@v58);")

В еще более поздних версиях VB (я думаю, что с 2017 года, но, возможно, до 2015 года) также поддерживаются многострочные литералы String, так что вы можете сделать это:

Access.ExecQuery("INSERT INTO tblQA ([Program],[assessdate],[Reviewer],[healthassess],[healthassessdate],[Screening],[screeningdate],[healthindicators],[healthindicatorsdate],[healthrecord],[healthrecorddate],[sareview],[sareviewdate],[Frail],[frailexplanation],[drappt],[drapptexplanation],[trackingform],[trackingformcorrect],[efguidelines],[ordersinplace],[orderscorrect],[Allergies],[certentries],[certentriesnum],[pc1],[pc1date],[pc2],[pc2date],[pc3],[pc3date],[pc4],[pc4date],[pc5],[pc5date],[pc6],[pc6date],[pc7],[pc7date],[pc8],[pc8date],[logdoccomplete],[logdoccorrect],[prnprotocolscomplete],[prnprotocolscorrect],[numprnprotocols],[cmedslist],[cmedslistwasted],[cmedslistaccurate],[selfadmincapable],[selfadminevaldate],[medslocked],[otcforms],[otcnum],[permitadmindate],[epwaiverdate],[numerrors],[Notes])
VALUES (@v1,@v2,@v3,@v4,@v5,@v6,@v7,@v8,@v9,@v10,@v11,@v12,@v13,@v14,@v15,@v16,@v17,@v18,@v19,@v20,@v21,@v22,@v23,@v24,@v25,@v26,@v27,@v28,@v29,@v30,@v31,@v32,@v33,@v34,@v35,@v36,@v37,@v38,@v39,@v40,@v41,@v42,@v43,@v44,@v45,@v46,@v47,@v48,@v49,@v50,@v51,@v52,@v53,@v54,@v55,@v56,@v57,@v58);")

SQL просто игнорирует разрывы строк и пробелы, поэтому, если вам нравится выравнивание, вы также можете сделать это:

Access.ExecQuery("INSERT INTO tblQA ([Program],[assessdate],[Reviewer],[healthassess],[healthassessdate],[Screening],[screeningdate],[healthindicators],[healthindicatorsdate],[healthrecord],[healthrecorddate],[sareview],[sareviewdate],[Frail],[frailexplanation],[drappt],[drapptexplanation],[trackingform],[trackingformcorrect],[efguidelines],[ordersinplace],[orderscorrect],[Allergies],[certentries],[certentriesnum],[pc1],[pc1date],[pc2],[pc2date],[pc3],[pc3date],[pc4],[pc4date],[pc5],[pc5date],[pc6],[pc6date],[pc7],[pc7date],[pc8],[pc8date],[logdoccomplete],[logdoccorrect],[prnprotocolscomplete],[prnprotocolscorrect],[numprnprotocols],[cmedslist],[cmedslistwasted],[cmedslistaccurate],[selfadmincapable],[selfadminevaldate],[medslocked],[otcforms],[otcnum],[permitadmindate],[epwaiverdate],[numerrors],[Notes])
                  VALUES (@v1,@v2,@v3,@v4,@v5,@v6,@v7,@v8,@v9,@v10,@v11,@v12,@v13,@v14,@v15,@v16,@v17,@v18,@v19,@v20,@v21,@v22,@v23,@v24,@v25,@v26,@v27,@v28,@v29,@v30,@v31,@v32,@v33,@v34,@v35,@v36,@v37,@v38,@v39,@v40,@v41,@v42,@v43,@v44,@v45,@v46,@v47,@v48,@v49,@v50,@v51,@v52,@v53,@v54,@v55,@v56,@v57,@v58);")
...