【问题标题】:Classic ASP inserting variable value into Access DB经典 ASP 将变量值插入 Access DB
【发布时间】:2015-03-03 11:52:04
【问题描述】:

我正在尝试将一个变量值插入到我的访问数据库中,我可以插入一个预先设置的值,例如

  <td width="125" nowrap="nowrap" ><div align="right">Lead From </div></td>
  <td><input name="lead" type="text" id="lead" value="" size="50" /></td>

如您所见,我们有一个“lead”的 id,我可以像这样将它插入到数据库中:

 MM_fieldsStr = "lead|value";
 MM_columnsStr = "Lead|',none,''";

' create the MM_fields and MM_columns arrays
MM_fields = Split(MM_fieldsStr, "|")
MM_columns = Split(MM_columnsStr, "|")


' set the form values
 For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2
   MM_fields(MM_i+1) = CStr(Request.Form(MM_fields(MM_i)))
 Next

现在我希望能够做这样的事情:

 Session("MM_JobNumber") = job_number
 MM_fieldsStr  = job_number & "|value"
 MM_columnsStr = "Job_Num|',none,''"

当我尝试通过它传递一个变量时,它返回 null,你看不到在我提供的代码中设置了作业编号,但它确实 100% 设置了。

计数器记录器::

Dim countrec
Dim countrec_numRows

Set countrec = Server.CreateObject("ADODB.Recordset")
countrec.ActiveConnection = MM_JobConn_STRING
countrec.Source = "SELECT *  FROM CounterTAB  WHERE Counter_ID = 1"
countrec.CursorType = 0
countrec.CursorLocation = 2
countrec.LockType = 1
countrec.Open()

countrec_numRows = 0

完整代码如下::

If (CStr(Request("MM_insert")) = "form2") Then

    Dim job_number


IF (Session("MM_JobNumber") <> "") OR (Session("MM_JobNumber") <> NULL)Then
    job_number = Session("MM_JobNumber")
Else



    Dim new_count_num
    new_count_num = countrec.Fields.Item("Counter_NUM").Value+1
    job_number = PadDigits(new_count_num, 4) + "-" + mid(DatePart("yyyy",now()),3,2)
    Session("MM_JobNumber") = job_number



END IF

    'UPDATE COUNTER
    set counterupdate = Server.CreateObject("ADODB.Command")
    counterupdate.ActiveConnection = MM_JobConn_STRING
    counterupdate.CommandText = "UPDATE CounterTAB  SET Counter_NUM = Counter_NUM + 1 WHERE Counter_ID = 1"
    counterupdate.CommandType = 1
    counterupdate.CommandTimeout = 0
    counterupdate.Prepared = true
    counterupdate.Execute()

  MM_editConnection = MM_JobConn_STRING
  MM_editTable = "Job_Details"
  MM_editRedirectUrl = "view_jobs_new.asp?offset=-1"
  MM_fieldsStr  = job_number & "|value|hiddenDateRaised|value|hiddenYearRaised|value|hiddenNewRaisedBYID|value|hiddenRaisedBYID|value|hiddenFieldCompanyID|value|hiddenFieldContact1|value|Job_Ref_Name|value|checkbox3_1|value|checkbox3_15|value|checkbox3_4|value|checkbox3_2|value|checkbox3_16|value|checkbox3_5|value|checkbox3_3|value|checkbox3_6|value|checkbox3_7|value|checkbox3_22|value|checkbox3_8|value|checkbox3_9|value|checkbox3_23|value|checkbox3_10|value|checkbox3_20|value|checkbox3_11|value|checkbox3_17|value|checkbox3_12|value|checkbox3_21|value|checkbox3_13|value|checkbox3_18|value|checkbox3_24|value|checkbox3_14|value|checkbox3_19|value|checkbox3_25|value|checkbox3_26|value|DescriptText|value|sitename|value|siteAdd1|value|siteAdd2|value|siteAdd3|value|siteAdd4|value|siteAdd5|value|sitePostCode|value|lead|value"
  MM_columnsStr = "Job_Num|',none,''|Job_Date|',none,''|Job_Year|none,none,NULL|New_Raised_By|none,none,NULL|Raised_By|none,none,NULL|Company|none,none,NULL|Contact|none,none,NULL|Job_Ref|',none,''|Scope_3_01_SiteDecom|none,-1,0|Scope_3_15_Spill|none,-1,0|Scope_3_04_TankClean|none,-1,0|Scope_3_02_SiteClosure|none,-1,0|Scope_3_16_EnviroAss|none,-1,0|Scope_3_05_OtherTankClean|none,-1,0|Scope_3_03_GroundRem|none,-1,0|Scope_3_06_TankLining|none,-1,0|Scope_3_07_TankPainting|none,-1,0|Scope_3_22_SaleFuel|none,-1,0|Scope_3_08_ShipTank|none,-1,0|Scope_3_09_VapourRec|none,-1,0|Scope_3_23_SaleRec|none,-1,0|Scope_3_10_Petroscope|none,-1,0|[Scope_3_20_IBC Testing]|none,-1,0|Scope_3_11_Vacutect|none,-1,0|Scope_3_17_FuelSys|none,-1,0|Scope_3_12_TankCalib|none,-1,0|Scope_3_21_FuelSampling|none,1,0|Scope_3_13_5stage|none,-1,0|Scope_3_18_Oftec|none,-1,0|Scope_3_24_SpillKit|none,-1,0|Scope_3_14_Rail|none,-1,0|Scope_3_19_TankerServices|none,-1,0|Scope_3_25_Training|none,-1,0|Scope_3_26_Other|none,-1,0|Job_Description|',none,'' | Site_Name|',none,''|Site_Add1|',none,''|Site_Add2|',none,''|Site_Add3|',none,''|Site_Add4|',none,''|Site_Add5|',none,''|Site_Postcode|',none,''|Lead_From|',none,''"

  ' create the MM_fields and MM_columns arrays
  MM_fields = Split(MM_fieldsStr, "|")
  MM_columns = Split(MM_columnsStr, "|")


  ' set the form values
  For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2
    MM_fields(MM_i+1) = CStr(Request.Form(MM_fields(MM_i)))
  Next

  ' append the query string to the redirect URL
  If (MM_editRedirectUrl <> "" And Request.QueryString <> "") Then
    If (InStr(1, MM_editRedirectUrl, "?", vbTextCompare) = 0 And Request.QueryString <> "") Then
      MM_editRedirectUrl = MM_editRedirectUrl & "?" & Request.QueryString
    Else
      MM_editRedirectUrl = MM_editRedirectUrl & "&" & Request.QueryString
    End If
  End If


End If

插入代码::

' *** Insert Record: construct a sql insert statement and execute it

Dim MM_tableValues
Dim MM_dbValues

If (CStr(Request("MM_insert")) <> "") Then

'here goes counter update

  ' create the sql insert statement
  MM_tableValues = ""
  MM_dbValues = ""
  For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2
    MM_formVal = MM_fields(MM_i+1)
    MM_typeArray = Split(MM_columns(MM_i+1),",")
    MM_delim = MM_typeArray(0)
    If (MM_delim = "none") Then MM_delim = ""
    MM_altVal = MM_typeArray(1)
    If (MM_altVal = "none") Then MM_altVal = ""
    MM_emptyVal = MM_typeArray(2)
    If (MM_emptyVal = "none") Then MM_emptyVal = ""
    If (MM_formVal = "") Then
      MM_formVal = MM_emptyVal
    Else
      If (MM_altVal <> "") Then
        MM_formVal = MM_altVal
      ElseIf (MM_delim = "'") Then  ' escape quotes
        MM_formVal = "'" & Replace(MM_formVal,"'","''") & "'"
      Else
        MM_formVal = MM_delim + MM_formVal + MM_delim
      End If
    End If
    If (MM_i <> LBound(MM_fields)) Then
      MM_tableValues = MM_tableValues & ","
      MM_dbValues = MM_dbValues & ","
    End If
    MM_tableValues = MM_tableValues & MM_columns(MM_i)
    MM_dbValues = MM_dbValues & MM_formVal
  Next
  MM_editQuery = "insert into " & MM_editTable & " (" & MM_tableValues & ") values (" & MM_dbValues & ")"

  If (Not MM_abortEdit) Then
    ' execute the insert
    Set MM_editCmd = Server.CreateObject("ADODB.Command")
    MM_editCmd.ActiveConnection = MM_editConnection
    MM_editCmd.CommandText = MM_editQuery
    MM_editCmd.Execute
    MM_editCmd.ActiveConnection.Close
    Session("MM_JobNumber") = NULL

    If (MM_editRedirectUrl <> "") Then
      Response.Redirect(MM_editRedirectUrl)
    End If
  End If

End If

【问题讨论】:

    标签: html asp.net ms-access vbscript asp-classic


    【解决方案1】:

    Split() 处理分隔符,而不是分隔符。所以尾随的“|”在

    MM_columnsStr = "Job_Num|',none,''|"
    

    导致数组中出现虚假/空元素。证据:

    >> s = "Lead|',none,''"
    >> a = Split(s, "|")
    >> WScript.Echo UBound(a), a(UBound(a))
    >>
    1 ',none,''
    >> s = "Job_Num|',none,''|"
    >> a = Split(s, "|")
    >> WScript.Echo UBound(a), a(UBound(a))
    >>
    2
    

    转念一想:

    这个

    >> job_number = "JN"
    >> MM_fieldsStr = job_number & "|value"
    >> WScript.Echo MM_fieldsStr
    >>
    JN|value
    

    应该证明,字符串连接在 VBScript 中有效。如果你得到

    |value
    

    然后job_number 在&amp; 行之前为空。也许你的意思是

    job_number = Session("MM_JobNumber")
    

    而不是

    Session("MM_JobNumber") = job_number
    

    最后的想法:

    这个:

    IF (Session("MM_JobNumber") <> "") OR (Session("MM_JobNumber") <> NULL)Then
        job_number = Session("MM_JobNumber")
    

    仅当 非为空或 Null 时才会设置 job_number。

    【讨论】:

    • 谢谢指出,我不小心加了一个 |进入帖子但不在代码中,尝试这样做很长时间的习惯力量,我只是看不到如何传递变量。
    • 作业编号变量是之前设置的,实际上我把整个代码部分都贴出来了,这样你就可以清楚地看到我在做什么
    • 作业编号仍将在其下方的 else 语句中设置,我已删除 if 语句以使其一成不变,但我仍然得到:Microsoft Access 数据库引擎错误'80004005'字段'Job_Details.Job_Num' 不能是零长度字符串。
    • 我认为这里的语法 MM_fieldsStr = job_number & "|value 只是试图让它读取变量值(字符串)
    【解决方案2】:

    所需要的只是在job_number字符串的开头和结尾用''标记填充,希望这有助于其他尝试做类似事情的人

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多