如何在VBScript中调试“未终止的字符串常量”?

时间:2018-02-11 18:25:06

标签: vbscript alm

我得到了:

  

第32行,第16行,未终止的字符串常量,代码:800A0409错误。

我该如何调试?我在ALM中为查询报告创建了一个VB脚本,我将在Windows Scheduler中安排它。

是否有其他优化的方法来实现目标?

参考http://eyeontesting.com/questions/2159/sql-queries-in-api.html

Sub Query()

Dim qcServer, qcDomain, qcProject, qcUser, qcPassword, sSql

     qcServer = "XXXXXXXXXXX"
     qcDomain = "XXXXXXXXXXX"
     qcProject = "XXXXXXX"
     qcUser = "XXXXXXXX"
     qcPassword = "XXXXXXX"


 Set tdc = CreateObject("tdapiole80.tdconnection")

 'Check to see that the tdc object exists
 If tdc Is Nothing Then
 MsgBox "The tdc object is empty"
 End If

 'Establish the connection and log in
 tdc.InitConnectionEx qcServer
 tdc.Login qcUser, qcPassword
 tdc.Connect qcDomain, qcProject


 'Create the tdc Command Object
 Set oCommand = tdc.Command

 'Build the query

 sSql = "SELECT
TEST.TS_NAME AS "Test Case Name",
TESTCYCL.TC_STATUS as "Test Case Status",
CYCL_FOLD.CF_ITEM_NAME as "Test Set Folder Name",
--CYCL_FOLD.CF_ITEM_ID as "Folder ID",
CYCL_FOLD.CF_ITEM_PATH AS "Folder Path",
TESTCYCL.TC_USER_01 as 'ExternalDefectID',
TESTCYCL.TC_EXEC_DATE  AS 'Execution Date',
TESTCYCL.TC_ACTUAL_TESTER AS   'Tester'


FROM
CYCL_FOLD LEFT OUTER JOIN CYCLE ON CYCL_FOLD.CF_ITEM_ID = CYCLE.CY_FOLDER_ID
LEFT OUTER JOIN TESTCYCL ON TESTCYCL.TC_CYCLE_ID = CYCLE.CY_CYCLE_ID
LEFT JOIN TEST ON TEST.TS_TEST_ID = TESTCYCL.TC_TEST_ID

WHERE
CYCL_FOLD.CF_ITEM_PATH LIKE 'AAAAASAAHAADAAAAAAA%' /*Folder Path ID*/

ORDER BY
CF_ITEM_NAME"

 'Set the SQL command to the Test Coverage query
 oCommand.CommandText = sSql

 'Execute the query and store in the SQLResults resultset.
  Set SQLResults = oCommand.Execute

 'Prepare the worksheet
 Worksheets("Sheet1").Range("A:G").ClearContents

 'Set the header row titles.
 Worksheets("Sheet1").Range("A1") = "Test Case Name"
 Worksheets("Sheet1").Range("B1") = "Test Case Status"
 Worksheets("Sheet1").Range("C1") = "Test Set Folder Name"
 Worksheets("Sheet1").Range("D1") = "Folder Path"
 Worksheets("Sheet1").Range("E1") = "ExternalDefectID"
 Worksheets("Sheet1").Range("F1") = "Execution Date"
 Worksheets("Sheet1").Range("G1") = "Tester"


 'Start populating data on row 2 (leaving the header information above).
 iExcelRow = 2

 'Iterate through the query results and populate the worksheet.
 For iRecord = 1 To SQLResults.RecordCount

     'Write the values to the worksheet
      Worksheets("Sheet1").Range("A" & iExcelRow) = SQLResults.FieldValue("Test Case Name")
      Worksheets("Sheet1").Range("B" & iExcelRow) = SQLResults.FieldValue("Test Case Status")
      Worksheets("Sheet1").Range("C" & iExcelRow) = SQLResults.FieldValue("Test Set Folder Name")
      Worksheets("Sheet1").Range("D" & iExcelRow) = SQLResults.FieldValue("Folder Path")
      Worksheets("Sheet1").Range("E" & iExcelRow) = SQLResults.FieldValue("ExternalDefectID")
      Worksheets("Sheet1").Range("F" & iExcelRow) = SQLResults.FieldValue("Execution Date")
      Worksheets("Sheet1").Range("G" & iExcelRow) = SQLResults.FieldValue("Tester")

     'Increment the iteration
      iExcelRow = iExcelRow + 1
      SQLResults.Next
 Next


 'Disconnect from Quality Center
 If tdc.Connected = True Then
 tdc.Disconnect
 End If

 'Log off the server
 If tdc.LoggedIn Then
 tdc.Logout
 End If

 'Release the TDConnection object.
 tdc.ReleaseConnection

 'Adjust the column width
 Worksheets("Sheet1").Columns("A1:G1").EntireColumn.AutoFit

 Set SQLResults = Nothing
 Set oCommand = Nothing
 Set tdc = Nothing

 MsgBox "Done"

 End Sub

1 个答案:

答案 0 :(得分:2)

可能就是这个

 sSql = "SELECT
TEST.TS_NAME AS "Test Case Name",
TESTCYCL.TC_STATUS as "Test Case Status",
CYCL_FOLD.CF_ITEM_NAME as "Test Set Folder Name",
--CYCL_FOLD.CF_ITEM_ID as "Folder ID",
CYCL_FOLD.CF_ITEM_PATH AS "Folder Path",
TESTCYCL.TC_USER_01 as 'ExternalDefectID',
TESTCYCL.TC_EXEC_DATE  AS 'Execution Date',
TESTCYCL.TC_ACTUAL_TESTER AS   'Tester'


FROM
CYCL_FOLD LEFT OUTER JOIN CYCLE ON CYCL_FOLD.CF_ITEM_ID = CYCLE.CY_FOLDER_ID
LEFT OUTER JOIN TESTCYCL ON TESTCYCL.TC_CYCLE_ID = CYCLE.CY_CYCLE_ID
LEFT JOIN TEST ON TEST.TS_TEST_ID = TESTCYCL.TC_TEST_ID

WHERE
CYCL_FOLD.CF_ITEM_PATH LIKE 'AAAAASAAHAADAAAAAAA%' /*Folder Path ID*/

ORDER BY
CF_ITEM_NAME"

要执行多行字符串,您需要concatenate shorter strings并使用line continuation character _,并在字符串文字中嵌入双引号,您需要escape them by doubling them up

 sSql = "SELECT " & _
"TEST.TS_NAME AS ""Test Case Name""," & _
"TESTCYCL.TC_STATUS as ""Test Case Status""," & _
"CYCL_FOLD.CF_ITEM_NAME as ""Test Set Folder Name""," & _
"--CYCL_FOLD.CF_ITEM_ID as ""Folder ID""," & _
"CYCL_FOLD.CF_ITEM_PATH AS ""Folder Path""," & _
"TESTCYCL.TC_USER_01 as ""ExternalDefectID""," & _
"TESTCYCL.TC_EXEC_DATE  AS ""Execution Date"","  & _
"TESTCYCL.TC_ACTUAL_TESTER AS   ""Tester"""  & _
"FROM " & _
"CYCL_FOLD LEFT OUTER JOIN CYCLE ON CYCL_FOLD.CF_ITEM_ID = CYCLE.CY_FOLDER_ID " & _
"LEFT OUTER JOIN TESTCYCL ON TESTCYCL.TC_CYCLE_ID = CYCLE.CY_CYCLE_ID " & _
"LEFT JOIN TEST ON TEST.TS_TEST_ID = TESTCYCL.TC_TEST_ID " & _

"WHERE " & _
"CYCL_FOLD.CF_ITEM_PATH LIKE 'AAAAASAAHAADAAAAAAA%' /*Folder Path ID*/ " & _

"ORDER BY " & _
"CF_ITEM_NAME"