#主要是想制作一个影院的座位预定系统,目前遇到的问题主要就是无法提交表单将记录插入到数据库中,一提交就会报错。
报错提示是这个:
Microsoft OLE DB Provider for ODBC Drivers error '80040e57'
[Microsoft][ODBC Microsoft Access 驱动程序]非法的字符串或缓冲区长度
<%
Dim MM_editAction
MM_editAction = CStr(Request.ServerVariables("SCRIPT_NAME"))
If (Request.QueryString <> "") Then
MM_editAction = MM_editAction & "?" & Server.HTMLEncode(Request.QueryString)
End If
' boolean to abort record edit
Dim MM_abortEdit
MM_abortEdit = false
%>
<%
If (CStr(Request("MM_insert")) = "bookform") Then
If (Not MM_abortEdit) Then
' execute the insert
Dim MM_editCmd
Set MM_editCmd = Server.CreateObject ("ADODB.Command")
MM_editCmd.ActiveConnection = MM_sfa_STRING
MM_editCmd.CommandText = "INSERT INTO SeatReservation (film) VALUES (?)"
MM_editCmd.Prepared = true
MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param1", 202, 1, 255, Request.Form("dymc")) ' adVarWChar
MM_editCmd.Execute
MM_editCmd.ActiveConnection.Close
' append the query string to the redirect URL
Dim MM_editRedirectUrl
MM_editRedirectUrl = "BookSuccessful.asp"
If (Request.QueryString <> "") Then
If (InStr(1, MM_editRedirectUrl, "?", vbTextCompare) = 0) Then
MM_editRedirectUrl = MM_editRedirectUrl & "?" & Request.QueryString
Else
MM_editRedirectUrl = MM_editRedirectUrl & "&" & Request.QueryString
End If
End If
Response.Redirect(MM_editRedirectUrl)
End If
End If
%>
报错提示的是:MM_editCmd.Execute
提交的表单类型是
<form name="bookform" class="hideinput" method="POST" id="bookform" action="<%=MM_editAction%>">
<!--利用 session 和 application 里面保存的默认值,作为新插入记录的默认值-->
<input id="xh" name="stuid" type="text" value="<%response.write session.Contents("MM_Username")%>"/>
<input id="dymc"name="filmname" type="text" value="<%response.Write application.Contents("fname")%>"/>
<input id="zwh" name="seatnum" type="text" value="" />
<input id="xz" name="xaxis" type="text" value="" />
<input id="yz" name="yaxis" type="text" value="" />
<input type="submit" />
<input type="hidden" name="MM_insert" value="bookform" />
</form>
使用的是access搭建的一个数据库,用一张表来记录预约座位的记录
测试了各种数据,都无法插入
先检查Access数据长度够不够,如果不够的话就会报这个错。或者检查一下表单里面的标签有没有问题,比如input之类的。如果你有其他表的话,可以尝试输入一下,找一找具体是哪个地方的问题。
建议检查以下几点来解决该错误:
1、确认表单中的输入是否正确,特别是dymc字段是否超出了数据库定义的长度。
2、检查数据库定义的字段长度是否足够容纳表单提交的数据。
3、确认数据库连接是否正确并已打开。
4、尝试使用调试语句输出相关变量的值,以确定具体引起错误的变量和值。
来自NewBing和LP的编写:
这个问题看起来可能是由于你的数据库字段和插入的参数类型不匹配导致的。根据你提供的代码和数据库信息,你尝试将一个字符串类型的值插入到一个名为"film"的文本字段中,这应该没有问题。但是你的表单数据看起来还包含其他的字段,例如"stuid","seatnum","xaxis"和"yaxis",它们都是数字类型的。你在插入这些字段时是否也正确地处理了类型?
下面是一个示例,展示了如何插入多个字段:
MM_editCmd.CommandText = "INSERT INTO SeatReservation (film, stuid, seatnum, status, xaxis, yaxis) VALUES (?, ?, ?, ?, ?, ?)"
MM_editCmd.Prepared = true
MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param1", 202, 1, 255, Request.Form("dymc")) ' adVarWChar
MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param2", 3, 1, 255, Request.Form("stuid")) ' adInteger
MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param3", 3, 1, 255, Request.Form("seatnum")) ' adInteger
MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param4", 3, 1, 255, 1) ' adInteger, assuming status is always 1 when booking
MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param5", 3, 1, 255, Request.Form("xaxis")) ' adInteger
MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param6", 3, 1, 255, Request.Form("yaxis")) ' adInteger
这里我为每个字段都创建了一个参数,并且根据每个字段的数据类型设置了相应的参数类型。对于"status"字段,我假设当预订时,它的值总是1。
另外,你可能需要确保你的表单字段的名称和你在参数中使用的名称是一致的。例如,你的表单中的"filmname"字段在参数中被引用为"dymc",这可能会导致问题。你需要确保这两个名称是一致的。
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据你提供的代码和报错信息,可以看出是参数传递或数据类型的问题导致的执行SQL语句失败。具体来说,错误信息中提到“非法的字符串或缓冲区长度”,这可能意味着您正在尝试将一个超过数据库列长度限制的字符串插入到该列中。您可以检查数据库列的长度限制并确保插入的数据不会超过该限制。
此外,你的代码中的 SQL 语句中插入的值只有一个,而 SQL 语句中需要插入的列有两个(film 和 seatnum),建议你在 SQL 语句中添加相应的列名。请尝试以下步骤来解决问题:
1. 确认数据库列的长度限制是否允许插入您正在尝试插入的数据。
2. 确认 SQL 语句中插入的列名和值是否匹配。
3. 将您的代码中 SQL 语句的参数与表单中的参数进行匹配,确保它们是一致的。
4. 尝试使用调试工具(例如 Response.Write 或 Response.End)来确定在执行 SQL 语句之前表单中的所有参数是正确的。
5. 尝试使用其他的数据库连接方式,例如 ADO.NET 或 PDO,以确保问题不是由于数据库连接方式的限制引起的。
希望以上建议能够帮助您解决问题。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢