002001000 发表于 2006-7-3 23:04:36

【求助】关于cs成绩排行榜的问题

我应大家的要求把cs服务器的成绩发到网上,便于查询,这点已经没问题了,但要把1号服务器和2号服务器的成绩合并,难度很大啊,主要是大家服务器中的ID都乱取名的,什么特殊符号都有,有些与程序命令冲突啊,谁能解决,我这里深表感谢。

我先有70000多条数据啊,转了300多条出错了,谁有办法啊,源代码如下

<!--#include file="conn.asp"-->
<%
dim tablename,x,i,rs,rs1,rs2,sql,rsSchema

set rsSchema=Conn.openSchema(20)
rsSchema.movefirst
tablename="s"
x=0
Do Until rsSchema.EOF
   if rsSchema("TABLE_TYPE")="TABLE" then
    ifrsSchema("TABLE_NAME")=tablename then
      x=1
      exit do
    end if
   end if
   rsSchema.movenext
Loop
if x=0 then response.write"没有找到总排行表!"
if x=1 then response.write"找到了总排行表!"
conn.close
set Conn=nothing

if x=1 then
sql="drop table s"
Set RS = Conn.Execute(SQL)
'rs.close
set rs=nothing
response.write"已经删除了总排行表!"
response.write"正在重建总排行表!"
end if


'创建表
sql= "CREATE TABLE s (id autoincrement(1,1) PRIMARY KEY NOT NULL, name char (50) NOT NULL,kills number ,deaths number ,shots number ,hits number ,hs number ,damage number)"

set rs=conn.execute (sql)
'rs.close
set rs=nothing
'显示创建成功信息。
Response.Write "总排行榜表创建成功!"


Response.Write "正在进行1号服务器数据库合并,请稍后……"
i=1
do while i<100000
set rs1=server.CreateObject("Adodb.recordset")
rs1.Open "select * from s1 where id="&i,conn,1,3
if rs1.EOFthen
exit do
end if
set rs=server.CreateObject("Adodb.recordset")
rs.Open "select * from s where name='"&rs1("name")&"'",conn,1,3
if not rs.eof then
rs("kills")=rs("kills")+rs1("kills")
rs("deaths")=rs("deaths")+rs1("deaths")
rs("shots")=rs("shots")+rs1("shots")
rs("hits")=rs("hits")+rs1("hits")
rs("hs")=rs("hs")+rs1("hs")
rs("damage")=rs("damage")+rs1("damage")
rs("eff")=rs("kills")/(rs("kills")+rs("deaths"))*100
rs("acc")=rs("hits")/rs("shots")*100
rs.update
rs.close
set rs=nothing
else
set rs=server.CreateObject("Adodb.recordset")
rs.open "s",conn,1,3
rs.addnew
rs("kills")=rs1("kills")
rs("deaths")=rs1("deaths")
rs("shots")=rs1("shots")
rs("hits")=rs1("hits")
rs("hs")=rs1("hs")
rs("damage")=rs1("damage")
rs("eff")=rs("kills")/(rs("kills")+rs("deaths"))*100
rs("acc")=rs("hits")/rs("shots")*100
rs.update
rs.close
set rs=nothing
end if
rs1.movenext
i=i+1
loop
rs1.close
set rs1=nothing
Response.Write "1号服务器数据库合并成功!"

Response.Write "正在进行2号服务器数据库合并,请稍后……"
i=1
do while i<100000
set rs1=server.CreateObject("Adodb.recordset")
rs1.Open "select * from s2 where id="&i,conn,1,3
if rs1.EOFthen
exit do
end if
set rs=server.CreateObject("Adodb.recordset")
rs.Open "select * from s where name='"&rs1("name")&"'",conn,1,3
if not rs.eof then
rs("kills")=rs("kills")+rs1("kills")
rs("deaths")=rs("deaths")+rs1("deaths")
rs("shots")=rs("shots")+rs1("shots")
rs("hits")=rs("hits")+rs1("hits")
rs("hs")=rs("hs")+rs1("hs")
rs("damage")=rs("damage")+rs1("damage")
rs("eff")=rs("kills")/(rs("kills")+rs("deaths"))*100
rs("acc")=rs("hits")/rs("shots")*100
rs.update
rs.close
set rs=nothing
else
set rs=server.CreateObject("Adodb.recordset")
rs.open "s",conn,1,3
rs.addnew
rs("kills")=rs1("kills")
rs("deaths")=rs1("deaths")
rs("shots")=rs1("shots")
rs("hits")=rs1("hits")
rs("hs")=rs1("hs")
rs("damage")=rs1("damage")
rs("eff")=rs("kills")/(rs("kills")+rs("deaths"))*100
rs("acc")=rs("hits")/rs("shots")*100
rs.update
rs.close
set rs=nothing
end if
rs1.movenext
i=i+1
loop
rs1.close
set rs1=nothing
Response.Write "2号服务器数据库合并成功!"
%>
我已经改进了程序,现在能导到3890条记录,错误代码如下:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
语法错误 (操作符丢失) 在查询表达式 'name='K41;;;;;’’’’'````~'' 中。

就是这个鸟人啊K41;;;;;’’’’'````~,名字这么古怪,他用的都是asp里的不能使用的特殊符号啊,mmd,还全角半角符号都用上了,谁有办法解决啊

002001000 发表于 2006-7-3 23:06:35

回复: 关于cs成绩排行榜的问题

现在我把

rs.Open "select * from s where name='"&rs1("name")&"'",conn,1,3
改成

rs.Open "select * from s where name='"&CStr(rs1("name"))&"'",conn,1,3

能够成功导入一些比如ka'ka'这种名字,头上有个’啊,这是asp中不能乱用的符号啊,但是那个K41;;;;;’’’’'````~还不行啊,谁有办法啊

002001000 发表于 2006-7-3 23:08:23

回复: 关于cs成绩排行榜的问题

希望能看到,有好心人相助,
我先给你们下跪了………………

yanexp 发表于 2006-7-4 00:41:15

回复: 关于cs成绩排行榜的问题

Post by 002001000
现在我把

rs.Open "select * from s where name='"&rs1("name")&"'",conn,1,3
改成

rs.Open "select * from s where name='"&CStr(rs1("name"))&"'",conn,1,3

能够成功导入一些比如ka'ka'这种名字,头上有个’啊,这是asp中不能乱用的符号啊,但是那个K41;;;;;’’’’'````~还不行啊,谁...


Names=replace(rs1("name"),"'","''")
rs.Open "select * from s where name='"& Names &"',conn,1,3

002001000 发表于 2006-7-4 08:13:43

回复: 关于cs成绩排行榜的问题

太谢谢了,不知道说什么好~~~~~你太好了…………

AE86 发表于 2006-7-4 09:00:21

回复: 关于cs成绩排行榜的问题

Post by 002001000
太谢谢了,不知道说什么好~~~~~你太好了…………
你的网页排名有他的漂亮吗。:cool:

rachis 发表于 2006-7-4 13:26:23

回复: 关于cs成绩排行榜的问题

Post by yanexp
Names=replace(rs1("name"),"'","''")
rs.Open "select * from s where name='"& Names &"',conn,1,3


这样已经改了人家的ID的,可以用HTMLCode来将引号等等修改

002001000 发表于 2006-7-4 16:16:42

回复: 关于cs成绩排行榜的问题

太谢谢各位了,谢谢大家的帮助!!

yanexp 发表于 2006-7-4 16:48:07

回复: 关于cs成绩排行榜的问题

Post by rachis
这样已经改了人家的ID的,可以用HTMLCode来将引号等等修改


实际上并不会改变原名,Vbscrit对边界符就是要这样处理。

cfans 发表于 2006-7-8 16:58:51

回复: 【求助】关于cs成绩排行榜的问题

高手阿
搞不懂ASP
还是搞个现成的Psychostats好
我看Yanexp的排名系统里显示Hitbox的的Flash就是借用Psychostats的吧
页: [1]
查看完整版本: 【求助】关于cs成绩排行榜的问题