我希望有人可以帮助解决问题...我不参与任何与编程有关的事情,但我们需要一些资产跟踪非常糟糕,所以在我的业余时间(不是很多,我们平均10小时) )并使用手头的工具(600mhz堆运行winXP)我建立了一个经典的ASP站点来处理所有的跟踪和订单。
一切都很好,直到我决定我有更多的业余时间,并决定升级一点。整件事情非常混乱,但最糟糕的是它的上帝非常缓慢。所以我决定放弃我的访问数据库和JET驱动程序并使用MS SQL Server 2000 Express(不要忘记,600mhz和不多RAM)。我开始重建,一切似乎工作得很好(并且更快),直到我开始出错。我发现对于某些查询,只有几个列会返回任何数据。
例如:我有一个shopitems表,包含gID(uniqueID),iDesc(描述),iLength,iQty,colID(交叉引用)。我进行查询以获取某个类别中的所有内容:Select * from shopitems where catID=22 order by gID asc
。然后我开始逐步完成并全部显示。
问题是,只有gID和colID字段有数据,其他一切都没有。我打开了Web Data Administrator应用程序并在那里运行查询,它返回一切都很好。所以我决定某处有一个bug,所以我写了一个快速的测试页面和同样的问题(除了这次返回数据的gID和iLength)。它的数据类型混合,iDesc是nText,iLength是int。我已经完成了我能找到的所有内容,但我想到了我在SQL中缺少的东西......任何人都有任何想法?
另外,我在家里丢弃的电脑上复制了这个,它实际上有一个现代处理器和相当数量的RAM,所以它根本就不是机器。
感谢您的帮助...我听播客,好像它已经服务器/ sql一周了一段时间,我想在这里问别人......
---- ---- EDIT
改变了代码...这个代码的版本工作了一秒钟,现在没那么多......如果我注释掉了
gID=rs1("gID")
然后我得到iDesc的值,但不是。否则。
<%@ Language=vbscript %>
该死
Set db1 = Server.CreateObject("ADODB.Connection")
'db1.Open "Provider=MSDASQL;Driver={SQL Server};Server=Phsion;Database=master;"
db1.Open "Provider=MSDASQL;DSN=SHOPWEB;"
'sqltxt="select gID, iLength, iDesc from shopitems where catID=45 order by CAST(idesc as varchar)"
sqltxt="select iDesc, gID from ShopItems order by gID asc"
set rs1=db1.execute(sqltxt)
rs1.movefirst
do until rs1.eof
gID=rs1("gID")
'iLength=rs1("iLength")
iDesc=rs1("iDesc")
response.write("<br>gID: " & gid & "<br>")
response.write("<br>iLength: " & iLength & "<br>")
response.write("<br>iDesc: " & iDesc & "<br>")
rs1.movenext
loop
rs1.close
set rs1=nothing
db1.close
set db1=nothing
答案 0 :(得分:3)
在顶部添加Option Explicit
(在&lt;%和%&gt;内)以进行变量声明,然后使用Dim variable-name-goes-here
为所有变量声明变量,瞧,你会看到问题马上。
答案 1 :(得分:2)
如果你不是选择所有内容(*),而是选择所需的列 - 你还有同样的问题吗?即:
SELECT gID, iDesc, iLength, iQty
FROM shopitems
WHERE catID = 22
答案 2 :(得分:1)
这是一个令人困惑的问题。如上所述,请务必启用选项显式以帮助查找任何变量名称问题。如果您使用了 On Error Resume Next ,那么您可以使用 On Error Goto 0 来确保您没有压制错误
这是我的看法。如果可以进行调试,请将其分解为自己的文件。如果我的循环产生输出,我们可以追踪事情。
<%
Option Explicit
On Error Goto 0
Dim db1, sqltxt, rs1
Dim gID, iLength, iDesc, arrRS
Set db1 = Server.CreateObject("ADODB.Connection")
'db1.Open "Provider=MSDASQL;Driver={SQL Server};Server=Phsion;Database=master;"
db1.Open "Provider=MSDASQL;DSN=SHOPWEB;"
'sqltxt="select gID, iLength, iDesc from shopitems where catID=45 order by CAST(idesc as varchar)"
' sqltxt="select iDesc, gID from ShopItems order by gID asc"
' set rs1=db1.execute(sqltxt)
' rs1.movefirst
' do until rs1.eof
' gID = rs1("gID")
' 'iLength=rs1("iLength")
' iDesc = rs1("iDesc")
' response.write("gID: " & gid & "")
' response.write("iLength: " & iLength & "")
' response.write("iDesc: " & iDesc & "")
' rs1.movenext
' loop
' rs1.close : set rs1=nothing
sqltxt="select iDesc, gID from ShopItems order by gID asc"
set rs1=db1.execute(sqltxt)
'//Dump the recordset into an array
arrRS = rs1.GetRows()
'//We can close the rs now since we don't need it anymore
rs1.close : set rs1=nothing
'//We are going to basically dump a HTML table that should look like you SQL viewer
Response.Write("<table>")
'//Loop through all the rows
For i = 0 To UBound(arrRS,2)
Response.Write("<tr>")
'//Loop through all the columns
For j = 0 To UBound(arrRS,1)
'//write out each column in the row
Response.Write("<td>" & arrRS(j,i) & "</td>")
'//Look I will be honest, I can't test this so your might have to swap the i and the j to get a full output
Next
Response.Write("</tr>")
Next
Response.Write("</table>")
db1.close : set db1=nothing
%>
答案 3 :(得分:0)
我不知道您是否已修复此问题,但如果没有,则应尝试更改选择列的顺序,以便nText字段结束。这有一个技术解释(与记录的最大字节长度有关,iirc)。