對于程序員來說,出錯不可怕,可怕的是明明該一切正常的程序,運行著就出錯了,有些時候,你永遠相不通到底出了什么問題。
最近在用asp做網(wǎng)站,數(shù)據(jù)庫是access,然后寫了個conn.asp文件,內(nèi)容如下:
dim conn,connstr,startime,db,rs,sql
startime=timer()
db="db/Data.mdb"
Set conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
conn.Open connstr
然后在調(diào)用的那個test.asp文件里面這樣寫:
set rs=server.CreateObject("adodb.recordset")
sql="select * from global"
rs.open sql,conn,1,1
結(jié)果出錯了,如下:
錯誤類型:
(0x80004005)
未指定的錯誤
/web/inc/conn.asp, 第 27 行
在網(wǎng)上找出錯的原因,有人說是因為權(quán)限的問題,還有很多什么別的原因,一個一個的試了,全都不管用!程序還是在出錯,還是不知道錯在哪里,哭都哭不出來!最后實在沒法,就在access里面新建了一個對global表的查詢,查看里面的sql視圖,發(fā)現(xiàn)里面的查詢是這么寫的:select * from [global] ,然后我覺得問題是出現(xiàn)在這里了,果然,將sql變量賦值為"select * from [global]"然后再執(zhí)行,沒問題了!
最后查了下原因,發(fā)現(xiàn)“global”的access的系統(tǒng)變量!用系統(tǒng)變量來命名一個表,在寫查詢的時候要加上"[]",同樣的,如果是用保留字命名的表也要加上"[]",被打敗了,怎么想都想不到會是這個問題!我想這個問題應(yīng)該是讓很多玩程序的童鞋欲哭無淚,因此在建表的時候一定要注意那些系統(tǒng)預(yù)設(shè)的關(guān)鍵字,盡量避免使用這些關(guān)鍵字。不僅如此,在定義別的什么變量的時候也最好不要用那些保留字段。
最后,在這里給出access里面的保留字以供參考:
-A
ADD
ALL
Alphanumeric
ALTER
AND
ANY
Application
AS
ASC
Assistant
AUTOINCREMENT
Avg
-B
BETWEEN
BINARY
BIT
BOOLEAN
BY
BYTE
-C
CHAR, CHARACTER
COLUMN
CompactDatabase
CONSTRAINT
Container
Count
COUNTER
CREATE
CreateDatabase
CreateField
CreateGroup
CreateIndex
CreateObject
CreateProperty
CreateRelation
CreateTableDef
CreateUser
CreateWorkspace
CURRENCY
CurrentUser
-D
DATABASE
DATE
DATETIME
DELETE
DESC
Description
DISALLOW
DISTINCT
DISTINCTROW
Document
DOUBLE
DROP
-E
Echo
Else
End
Eqv
Error
EXISTS
Exit
-F
FALSE
Field, Fields
FillCache
FLOAT, FLOAT4, FLOAT8
FOREIGN
Form, Forms
FROM
Full
FUNCTION
-G
GENERAL
GetObject
GetOption
GotoPage
GROUP
GROUP BY
GUID
-H
HAVING
-I
Idle
IEEEDOUBLE, IEEESINGLE
If
IGNORE
Imp
IN
INDEX
Index, Indexes
INNER
INSERT
InsertText
INT, INTEGER, INTEGER1, INTEGER2, INTEGER4
INTO
IS
-J
JOIN
-K
KEY
-L
LastModified
LEFT
Level
Like
LOGICAL, LOGICAL1
LONG, LONGBINARY, LONGTEXT
-M
Macro
Match
Max, Min, Mod
MEMO
Module
MONEY
Move
-N
NAME
NewPassword
NO
Not
Note
NULL
NUMBER, NUMERIC
-O
Object
OLEOBJECT
OFF
ON
OpenRecordset
OPTION
OR
ORDER
Orientation
Outer
OWNERACCESS
-P
Parameter
PARAMETERS
Partial
PERCENT
PIVOT
PRIMARY
PROCEDURE
Property
-Q
Queries
Query
Quit
-R
REAL
Recalc
Recordset
REFERENCES
Refresh
RefreshLink
RegisterDatabase
Relation
Repaint
RepairDatabase
Report
Reports
Requery
RIGHT
-S
SCREEN
SECTION
SELECT
SET
SetFocus
SetOption
SHORT
SINGLE
SMALLINT
SOME
SQL
StDev, StDevP
STRING
Sum
-T
TABLE
TableDef, TableDefs
TableID
TEXT
TIME, TIMESTAMP
TOP
TRANSFORM
TRUE
Type
-U
UNION
UNIQUE
UPDATE
USER
-V
VALUE
VALUES
Var, VarP
VARBINARY, VARCHAR
-W
WHERE
WITH
Workspace
-X
Xor
-Y
Year
YES
YESNO
以及以下標點符號
.
/
*
;
:
!
#
&
-
"
'
$