摘要: 本部分內(nèi)容
n SQL基礎(chǔ)
n 中級SQL
 ...
閱讀全文
SQL是Structured Quevy Language(結(jié)構(gòu)化查詢語言)的縮寫。SQL是專為數(shù)據(jù)庫而建立的操作命令集,是一種功能齊全的數(shù)據(jù)庫語言。在使用它時,只需要發(fā)出“做什么”的命令,“怎么做”是不用使用者考慮的。SQL功能強大、簡單易學(xué)、使用方便,已經(jīng)成為了數(shù)據(jù)庫操作的基礎(chǔ),并且現(xiàn)在幾乎所有的數(shù)據(jù)庫均支持SQL。
##1 二、SQL數(shù)據(jù)庫數(shù)據(jù)體系結(jié)構(gòu)
SQL數(shù)據(jù)庫的數(shù)據(jù)體系結(jié)構(gòu)基本上是三級結(jié)構(gòu),但使用術(shù)語與傳統(tǒng)關(guān)系模型術(shù)語不同。在SQL中,關(guān)系模式(模式)稱為“基本表”(base table);存儲模式(內(nèi)模式)稱為“存儲文件”(stored file);子模式(外模式)稱為“視圖”(view);元組稱為“行”(row);屬性稱為“列”(column)。名稱對稱如^00100009a^:
##1 三、SQL語言的組成
在正式學(xué)習(xí)SQL語言之前,首先讓我們對SQL語言有一個基本認(rèn)識,介紹一下SQL語言的組成:
1.一個SQL數(shù)據(jù)庫是表(Table)的集合,它由一個或多個SQL模式定義。
2.一個SQL表由行集構(gòu)成,一行是列的序列(集合),每列與行對應(yīng)一個數(shù)據(jù)項。
3.一個表或者是一個基本表或者是一個視圖。基本表是實際存儲在數(shù)據(jù)庫的表,而視圖是由若干基本表或其他視圖構(gòu)成的表的定義。
4.一個基本表可以跨一個或多個存儲文件,一個存儲文件也可存放一個或多個基本表。每個存儲文件與外部存儲上一個物理文件對應(yīng)。
5.用戶可以用SQL語句對視圖和基本表進行查詢等操作。在用戶角度來看,視圖和基本表是一樣的,沒有區(qū)別,都是關(guān)系(表格)。
6.SQL用戶可以是應(yīng)用程序,也可以是終端用戶。SQL語句可嵌入在宿主語言的程序中使用,宿主語言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada語言等。SQL用戶也能作為獨立的用戶接口,供交互環(huán)境下的終端用戶使用。
##1 四、對數(shù)據(jù)庫進行操作
SQL包括了所有對數(shù)據(jù)庫的操作,主要是由4個部分組成:
1.數(shù)據(jù)定義:這一部分又稱為“SQL DDL”,定義數(shù)據(jù)庫的邏輯結(jié)構(gòu),包括定義數(shù)據(jù)庫、基本表、視圖和索引4部分。
2.數(shù)據(jù)操縱:這一部分又稱為“SQL DML”,其中包括數(shù)據(jù)查詢和數(shù)據(jù)更新兩大類操作,其中數(shù)據(jù)更新又包括插入、刪除和更新三種操作。
3.數(shù)據(jù)控制:對用戶訪問數(shù)據(jù)的控制有基本表和視圖的授權(quán)、完整性規(guī)則的描述,事務(wù)控制語句等。
4.嵌入式SQL語言的使用規(guī)定:規(guī)定SQL語句在宿主語言的程序中使用的規(guī)則。
下面我們將分別介紹:
##2 (一)數(shù)據(jù)定義
SQL數(shù)據(jù)定義功能包括定義數(shù)據(jù)庫、基本表、索引和視圖。
首先,讓我們了解一下SQL所提供的基本數(shù)據(jù)類型:(如^00100009b^)
1.數(shù)據(jù)庫的建立與刪除
(1)建立數(shù)據(jù)庫:數(shù)據(jù)庫是一個包括了多個基本表的數(shù)據(jù)集,其語句格式為:
CREATE DATABASE <數(shù)據(jù)庫名> [其它參數(shù)]
其中,<數(shù)據(jù)庫名>在系統(tǒng)中必須是唯一的,不能重復(fù),不然將導(dǎo)致數(shù)據(jù)存取失誤。[其它參數(shù)]因具體數(shù)據(jù)庫實現(xiàn)系統(tǒng)不同而異。
例:要建立項目管理數(shù)據(jù)庫(xmmanage),其語句應(yīng)為:
CREATE DATABASE xmmanage
(2) 數(shù)據(jù)庫的刪除:將數(shù)據(jù)庫及其全部內(nèi)容從系統(tǒng)中刪除。
其語句格式為:DROP DATABASE <數(shù)據(jù)庫名>
例:刪除項目管理數(shù)據(jù)庫(xmmanage),其語句應(yīng)為:
DROP DATABASE xmmanage
2.基本表的定義及變更
本身獨立存在的表稱為基本表,在SQL語言中一個關(guān)系唯一對應(yīng)一個基本表。基本表的定義指建立基本關(guān)系模式,而變更則是指對數(shù)據(jù)庫中已存在的基本表進行刪除與修改。
(1)基本表的定義:基本表是非導(dǎo)出關(guān)系,其定義涉及表名、列名及數(shù)據(jù)類型等,其語句格式為:
CREATE TABLE[<數(shù)據(jù)庫名>.]<表名>
(<列名> 數(shù)據(jù)類型 [缺省值] [NOT NULL / NULL]
[,<列名> 數(shù)據(jù)類型 [缺省值] [NOT NULL / NULL]]......
[,UNIQUE (列名[,列名]......)]
[,PRIMARY KEY(列名)]
[,F(xiàn)OREIGN KEY(列名[,列名]......)REFERENCE <表名>(列名[,列名]......)]
[,CHECK(條件)] [其它參數(shù)])
其中,〈數(shù)據(jù)庫名〉.]指出將新建立的表存放于該數(shù)據(jù)庫中;
新建的表由兩部分組成:其一為表和一組列名,其二是實際存放的數(shù)據(jù)(即可在定義表的同時,直接存放數(shù)據(jù)到表中);
列名為用戶自定義的易于理解的名稱,列名中不能使用空格;
數(shù)據(jù)類型為上面所介紹的幾種標(biāo)準(zhǔn)數(shù)據(jù)類型;
[NOT NULL/NULL]指出該列是否允許存放空值,SQL語言支持空值的概念,所謂空值是“不知道”或“無意義”的值,值得注意的是數(shù)據(jù)“0”和空格都不是空值,系統(tǒng)一般默認(rèn)允許為空值,所以當(dāng)不允許為空值時,必須明確使用NOT NULL;
[,UNIQUE]將列按照其規(guī)定的順序進行排列,如不指定排列順序,則按列的定義順序排列;
[PRIMARY KEY]用于指定表的主鍵(即關(guān)系中的主屬性),實體完整性約束條件規(guī)定:主鍵必須是唯一的,非空的;
[,F(xiàn)OREIGN KEY (列名[,列名]......) REFERENCE<表名>(列名[,列名]......)]是用于指定外鍵參照完整性約束條件,F(xiàn)OREIGN KEY指定相關(guān)列為外鍵,其參照對象為另外一個表的指定列,即使用REFERENCE引入的外表中的列,當(dāng)不指定外表列名時,系統(tǒng)將默認(rèn)其列名與參照鍵的列名相同,要注意的是:使用外鍵時必須使用參照,另外數(shù)據(jù)的外鍵參照完整性約束條件規(guī)定:外鍵的值要么與相對應(yīng)的主鍵相同,要么為空值(具體由實現(xiàn)系統(tǒng)不同而異)
[,CHECK]用于使用指定條件對存入表中的數(shù)據(jù)進行檢查,以確定其合法性,提高數(shù)據(jù)的安全性。
例:要建立一個學(xué)生情況表(student)
CREATE TABLE student //創(chuàng)建基本表student
(st_class CHAR(8),// 定義列st_class班級,數(shù)據(jù)類型為8位定長字符串
st_no CHAR(10) NOT NULL,//定義列st_no學(xué)號,類型為10位定長字符串,非空
st_name CHAR(8) NOT NULL,//定義列st_name姓名,類型為8位定長字符串,非空
st_sex CHAR(2),//定義列st_sex性別,類型為2位定長字符串
st_age SMALLINT,//定義列st_age年齡,類型為短整型
PRIMARY KEY (st_no))//定義st_no學(xué)號為主鍵。
例:要建立課程設(shè)置表(subject)
CREATE TABLE subject//創(chuàng)建基本表subject
(su_no CHAR(4) NOT NULL,// 定義列su_no課號,類型為4位定長字符串,非空
su_subject CHAR(20) NOT NULL,// 定義列su_subject課程名,類型為20位定長字符串,非空
su_credit INTEGER,// 定義列su_credit學(xué)分,類型為長整數(shù)
su_period INTEGER,//定義列su_period學(xué)時,類型為長整數(shù)
su_preno CHAR(4),//定義列su_preno先修課號,類型為4位定長字符串
PRIMARY KEY(su_no))//定義su_no課號為主鍵。
例:要建立學(xué)生選課表(score)
CREATE TABLE score //創(chuàng)建基本表score
(st_no CHAR(10),//定義列st_no學(xué)號,類型為10位定長字符串
su_no CHAR(4),//定義列su_no課號,類型為4位定長字符串
sc_score INTEGER NULL,//定義列sc_score,類型為長整形,可以為空值
FOREIGN KEY (st_no) REFERENCE student,//從表student中引入?yún)⒄胀怄Ist_no,以確保本表與表student的關(guān)聯(lián)與同步
FOREIGN KEY (suno) REFERENCE subject)//從表subject中引入?yún)⒄胀怄Isu_no,以確保本表與表subject的關(guān)聯(lián)與同步
(2)基本表的刪除:用以從數(shù)據(jù)庫中刪除一個基本表及其全部內(nèi)容,其語句格式為:
DROP TABLE[<數(shù)據(jù)庫名>.]表名
例如:將上面建立的表都刪除
DROP TABLE student,subject,score
(3)基本表的修改:在基本表建立并使用一段時間后,可能需要根據(jù)實際要求對基本表的結(jié)構(gòu)進行修改,即增加新的屬性或刪除屬性。
增加屬性的語句格式為:
ALTER TABLE [<數(shù)據(jù)庫名>.]表名 ADD
(<列名> 數(shù)據(jù)類型 [缺省值] [NOT NULL / NULL]
[,<列名> 數(shù)據(jù)類型[缺省值][NOT NULL / NULL]]......
[,UNIQUE (列名[,列名]......)]
[,PRIMARY KEY(列名)]
[,F(xiàn)OREIGN KEY(列名[,列名]......) REFERENCE <表名>(列名[,列名]......)]
[,CHECK(條件)][其它參數(shù)])
例如:在基本表student中加入列stborn出生日期,數(shù)據(jù)類型為DATE,且不能為空值
ALTER TABLE student ADD (stborn DATE NOT NULL)
刪除屬性的語句格式為:
ALTER TABLE [<數(shù)據(jù)庫名>.]表名 DROP
( <列名> 數(shù)據(jù)類型 [缺省值][NOT NULL / NULL]
[,<列名> 數(shù)據(jù)類型 [缺省值][NOT NULL / NULL]]......)
例如:將基本表student中的列st_age刪除
ALTER TABLE student DROP (st_age)
3.視圖定義與刪除
在SQL中,視圖是外模式一級數(shù)據(jù)結(jié)構(gòu)的基本單位。它是從一個或幾個基本表中導(dǎo)出的表,是從現(xiàn)有基本表中抽取若干子集組成用戶的“專用表”。這種構(gòu)造方式必須使用SQL中的SELECT語句來實現(xiàn)。在定義一個視圖時,只是把其定義存放在系統(tǒng)的數(shù)據(jù)中,而并不直接存儲視圖對應(yīng)的數(shù)據(jù),直到用戶使用視圖時才去求得對應(yīng)的數(shù)據(jù)。
(1)視圖的定義:定義視圖可以使用CREATE VIEW語句實現(xiàn),其語句格式為:
CREATE VIEW 視圖名 AS SELECT語句
從一個基本表中導(dǎo)出視圖:
例:從基本表student中導(dǎo)出只包括女學(xué)生情況的視圖
CREATE VIEW WOMANVIEW AS //創(chuàng)建一個視圖WOMANVIEW
SELECT st_class,st_no,st_name,st_age //選擇列st_class,st_no,st_name,st_age顯示
FROM student //從基本表student引入
WHERE st_sex=‘女’//引入條件為性別為“女”,注意字符變量都使用單引號引用
從多個基本表中導(dǎo)出視圖:
例如:從基本表student和score中導(dǎo)出只包括女學(xué)生且分?jǐn)?shù)在60分以上的視圖
CREATEVIEW WOMAN_SCORE AS //定義視圖WOMANSCORE
SELECT student.st_class,student.st_no,student.st_name,student.st_age,score.sc_score //有選擇性顯示相關(guān)列
FROM student.score //從基本表student和score中引入
WHERE student.st_sex=‘女’AND score.sc_score>=60 AND student.st_no=score.st_no //選擇條件:性別為“女” 且分?jǐn)?shù)在60分以上。并使用st_no將兩表聯(lián)系起來。
以后如果進行這一視圖的應(yīng)用,則只需使用語句
SELECT * FROM WOMAN_SCORE //其中“*”為通配符,代表所有元素
(2)視圖的刪除:用于刪除已不再使用的視圖,其語句格式如下:
DROP VIEW 視圖名
例:將上面建立的WOMAN_SCORE視圖刪除
DROP VIEW WOMAN_SCORE
4.索引的定義與刪除
索引屬于物理存儲概念,而不是邏輯的概念。在SQL中拋棄了索引概念,直接使用主鍵概念。值得一提的是,有些關(guān)系DBMS同時包括索引機制和主鍵機制,這里我們推薦使用主鍵機制,因為它對系統(tǒng)資源占用較低且效率較高。
(1)索引的定義:索引是建立在基本表之上的,其語句格式為:
CREATE [UNIQUE] INDEX 索引名 ON
[<數(shù)據(jù)庫名>.]表名(列名 [ASC/DESC][,列名 [ASC/DESC]]......)
這里,保留字UNIQUE表示基本表中的索引值不允許重復(fù),若缺省則表示索引值在表中允許重復(fù);DESC表示按索引鍵降序排列,若缺省或ASC表示升序排列。
例:對基本表student中的st_no和st_age建立索引,分別為升序與降序,且索引值不允許重復(fù)
CREATE UNIQUE INDEX STINDEX ON//創(chuàng)建索引STINDEX
student(st_no ASC,st_age DESC)//對student中的st_no和st_age建立索引
(2)索引的刪除:
DROP INDEX 索引名
例:刪除上面建立的索引STINDEX
DROP INDEX STINDEX
##2 (二)數(shù)據(jù)查詢
SQL是一種查詢功能很強的語言,只要是數(shù)據(jù)庫存在的數(shù)據(jù),總能通過適當(dāng)?shù)姆椒▽⑺鼜臄?shù)據(jù)庫中查找出來。SQL中的查詢語句只有一個:SELECT,它可與其它語句配合完成所有的查詢功能。SELECT語句的完整語法,可以有6個子句。完整的語法如下:
SELECT 目標(biāo)表的列名或列表達式集合
FROM 基本表或(和)視圖集合
[WHERE條件表達式]
[GROUP BY列名集合
[HAVING組條件表達式]]
[ORDER BY列名[集合]…]
整個語句的語義如下:從FROM子句中列出的表中,選擇滿足WHERE子句中給出的條件表達式的元組,然后按GROUPBY子句(分組子句)中指定列的值分組,再提取滿足HAVING子句中組條件表達式的那些組,按SELECT子句給出的列名或列表達式求值輸出。ORDER子句(排序子句)是對輸出的目標(biāo)表進行重新排序,并可附加說明ASC(升序)或DESC(降序)排列。
在WHERE子句中的條件表達式F中可出現(xiàn)下列操作符和運算函數(shù):
算術(shù)比較運算符:<,<=,>,>=,=,<>。
邏輯運算符:AND,OR,NOT。
集合運算符:UNION(并),INTERSECT(交),EXCEPT(差)。
集合成員資格運算符:IN,NOT IN
謂詞:EXISTS(存在量詞),ALL,SOME,UNIQUE。
聚合函數(shù):AVG(平均值),MIN(最小值),MAX(最大值),SUM(和),COUNT(計數(shù))。
F中運算對象還可以是另一個SELECT語句,即SELECT語句可以嵌套。
上面只是列出了WHERE子句中可出現(xiàn)的幾種主要操作,由于WHERE子句中的條件表達式可以很復(fù)雜,因此SELECT句型能表達的語義遠比其數(shù)學(xué)原形要復(fù)雜得多。
下面,我們以上面所建立的三個基本表為例,演示一下SELECT的應(yīng)用:
1.無條件查詢
例:找出所有學(xué)生的的選課情況
SELECT st_no,su_no
FROM score
例:找出所有學(xué)生的情況
SELECT*
FROM student
“*”為通配符,表示查找FROM中所指出關(guān)系的所有屬性的值。
2.條件查詢
條件查詢即帶有WHERE子句的查詢,所要查詢的對象必須滿足WHERE子句給出的條件。
例:找出任何一門課成績在70以上的學(xué)生情況、課號及分?jǐn)?shù)
SELECT UNIQUE student.st_class,student.st_no,student.st_name,student.st_sex,student.st_age,score.su_no,score.score
FROM student,score
WHERE score.score>=70 AND score.stno=student.st_no
這里使用UNIQUE是不從查詢結(jié)果集中去掉重復(fù)行,如果使用DISTINCT則會去掉重復(fù)行。另外邏輯運算符的優(yōu)先順序為NOT→AND→OR。
例:找出課程號為c02的,考試成績不及格的學(xué)生
SELECT st_no
FROM score
WHERE su_no=‘c02’AND score<60
3.排序查詢
排序查詢是指將查詢結(jié)果按指定屬性的升序(ASC)或降序(DESC)排列,由ORDER BY子句指明。
例:查找不及格的課程,并將結(jié)果按課程號從大到小排列
SELECT UNIQUE su_no
FROM score
WHERE score<60
ORDER BY su_no DESC
4.嵌套查詢
嵌套查詢是指WHERE子句中又包含SELECT子句,它用于較復(fù)雜的跨多個基本表查詢的情況。
例:查找課程編號為c03且課程成績在80分以上的學(xué)生的學(xué)號、姓名
SELECT st_no,st_name
FROM student
WHERE stno IN (SELECT st_no
FROM score
WHERE su_no=‘c03’ AND score>80 )
這里需要明確的是:當(dāng)查詢涉及多個基本表時用嵌套查詢逐次求解層次分明,具有結(jié)構(gòu)程序設(shè)計特點。在嵌套查詢中,IN是常用到的謂詞。若用戶能確切知道內(nèi)層查詢返回的是單值,那么也可用算術(shù)比較運算符表示用戶的要求。
5.計算查詢
計算查詢是指通過系統(tǒng)提供的特定函數(shù)(聚合函數(shù))在語句中的直接使用而獲得某些只有經(jīng)過計算才能得到的結(jié)果。常用的函數(shù)有:
COUNT(*) 計算元組的個數(shù)
COUNT(列名) 對某一列中的值計算個數(shù)
SUM(列名) 求某一列值的總和(此列值是數(shù)值型)
AVG(列名) 求某一列值的平均值(此列值是數(shù)值型)
MAX(列名) 求某一列值中的最大值
MIN(列名) 求某一列值中的最小值
例:求男學(xué)生的總?cè)藬?shù)和平均年齡
SELECT COUNT(*),AVG(st_age)
FROM student
WHERE st_sex=‘男’
例:統(tǒng)計選修了課程的學(xué)生的人數(shù)
SELECT COUNT(DISTINCT st_no)
FROM score
注意:這里一定要加入DISTINCT,因為有的學(xué)生可能選修了多門課程,但統(tǒng)計時只能按1人統(tǒng)計,所以要使用DISTINCT進行過濾。
##2 (三) 數(shù)據(jù)更新
數(shù)據(jù)更新包括數(shù)據(jù)插入、刪除和修改操作。它們分別由INSERT語句,DELETE語句及UPDATE語句完成。這些操作都可在任何基本表上進行,但在視圖上有所限制。其中,當(dāng)視圖是由單個基本表導(dǎo)出時,可進行插入和修改操作,但不能進行刪除操作;當(dāng)視圖是從多個基本表中導(dǎo)出時,上述三種操作都不能進行。
1.數(shù)據(jù)插入
將數(shù)據(jù)插入SQL的基本表有兩種方式:一種是單元組的插入,另一種是多元組的插入。
單元組的插入:向基本表score中插入一個成績元組(100002,c02,95),可使用以下語句:
INSERT INTO score(st_no,su_no,score) VALUES(‘100002’,‘c02’,95)
由此,可以給出單元組的插入語句格式:
INSERT INTO表名(列名1[,列名2]…) VALUES(列值1[,列值2]…)
其中,列名序列為要插入值的列名集合,列值序列為要插入的對應(yīng)值。若插入的是一個表的全部列值,則列名可以省略不寫如上面的(st_no,su_no,score)可以省去;若插入的是表的部分列值,則必須列出相應(yīng)列名,此時,該關(guān)系中未列出的列名取空值。
多元組的插入:這是一種把SELECT語句查詢結(jié)果插入到某個已知的基本表中的方法。
例如:需要在表score中求出每個學(xué)生的平均成績,并保留在某個表中。此時可以先創(chuàng)建一個新的基本表stu_avggrade,再用INSERT語句把表score中求得的每一個學(xué)生的平均成績(用SELECT求得)插入至stu_avggrade中。
CREATE TABLE stu_avggrade
(st_no CHAR(10) NOT NULL,//定義列st_no學(xué)號,類型為10位定長字符串,非空
age_grade SMALLINT NOT NULL )// 定義列age_grade平均分,類型為短整形,非空
INSERT INTO stu_avggrade(st_no,age_grade)
SELECT st_no,AVG(score)
FROM score
GROUP BY st_no //因為要求每一個學(xué)生所有課程的平均成績,必須按學(xué)號分組進行計算。
2.數(shù)據(jù)刪除
SQL的刪除操作是指從基本表中刪除滿足WHERE<條件表達式>的記錄。如果沒有WHERE子句,則刪除表中全部記錄,但表結(jié)構(gòu)依然存在。其語句格式為:
DELETE FROM表名[WHERE 條件表達式]
下面舉例說明:
單元組的刪除:把學(xué)號為100002的學(xué)生從表student中刪除,可用以下語句:
DELETE FROM student
WHERE st_no=‘100002’//因為學(xué)號為100002的學(xué)生在表student中只有一個,所以為單元組的刪除
多元組的刪除:學(xué)號為100002的成績從表score中刪除,可用以下語句:
DELETE FROM score
WHERE st_no=‘100002’//由于學(xué)號為100002的元組在表score中可能有多個,所以為多元組刪除
帶有子查詢的刪除操作:刪除所有不及格的學(xué)生記錄,可用以下語句
DELETE FROM student
WHERE st_no IN
(SELETE st_no
FROM score
WHERE score<60)
3.數(shù)據(jù)修改
修改語句是按SET子句中的表達式,在指定表中修改滿足條件表達式的記錄的相應(yīng)列值。其語句格式如下:
UPDATE 表名 SET 列名=列改變值[WHERE 條件表達式]
例:把c02的課程名改為英語,可以用下列語句:
UPDATE subject
SET su_subject=‘英語’
WHERE su_no=‘c02’
例:將課程成績達到70分的學(xué)生成績,再提高10%
UPDATE score
SET score=1.1*score
WHERE score>=70
SQL的刪除語句和修改語句中的WHERE子句用法與SELECT中WHERE子句用法相同。數(shù)據(jù)的刪除和修改操作,實際上要先做SELECT查詢操作,然后再把找到的元組刪除或修改。
##2 (四) 數(shù)據(jù)控制
由于數(shù)據(jù)庫管理系統(tǒng)是一個多用戶系統(tǒng),為了控制用戶對數(shù)據(jù)的存取權(quán)利,保持?jǐn)?shù)據(jù)的共享及完全性,SQL語言提供了一系列的數(shù)據(jù)控制功能。其中,主要包括安全性控制、完整性控制、事務(wù)控制和并發(fā)控制。
1.安全性控制
數(shù)據(jù)的安全性是指保護數(shù)據(jù)庫,以防非法使用造成數(shù)據(jù)泄露和破壞。保證數(shù)據(jù)安全性的主要方法是通過對數(shù)據(jù)庫存取權(quán)力的控制來防止非法使用數(shù)據(jù)庫中的數(shù)據(jù)。即限定不同用戶操作不同的數(shù)據(jù)對象的權(quán)限。
存取權(quán)控制包括權(quán)力的授與、檢查和撤消。權(quán)力授與和撤消命令由數(shù)據(jù)庫管理員或特定應(yīng)用人員使用。系統(tǒng)在對數(shù)據(jù)庫操作前,先核實相應(yīng)用戶是否有權(quán)在相應(yīng)數(shù)據(jù)上進行所要求的操作。
(1)權(quán)力授與:權(quán)力授與有數(shù)據(jù)庫管理員專用的授權(quán)和用戶可用的授權(quán)兩種形式。數(shù)據(jù)庫管理員專用授權(quán)命令格式如下:
|CONNECT |
GRANT|RESOURCE|TO 用戶名[IDENTIFED BY 口令]
|DBA |
其中,CONNECT表示數(shù)據(jù)庫管理員允許指定的用戶具有連接到數(shù)據(jù)庫的權(quán)力,這種授權(quán)是針對新用戶;RESOURCE表示允許用戶建立自己的新關(guān)系模式,用戶獲得CONNECT權(quán)力后,必須獲得RESOURCE權(quán)力才能創(chuàng)建自己的新表;DBA表示數(shù)據(jù)庫管理員將自己的特權(quán)授與指定的用戶。若要同時授與某用戶上述三種授權(quán)中的多種權(quán)力,則必須通過三個相應(yīng)的GRANT命令指定。
另外,具有CONNECT和RESOURCE授權(quán)的用戶可以建立自己的表,并在自己建立的表和視圖上具有查詢、插入、修改和刪除的權(quán)力。但通常不能使用其他用戶的關(guān)系,除非能獲得其他用戶轉(zhuǎn)授給他的相應(yīng)權(quán)力。
例:若允許用戶SSE連接到數(shù)據(jù)庫并可以建立他自己的關(guān)系,則可通過如下命令授與權(quán)力:
GRANT CONNECT TO SSE INENTIFIED BY BD1928
GRANT RESOURCE TO SSE
用戶可用的授權(quán)是指用戶將自己擁有的部分或全部權(quán)力轉(zhuǎn)授給其他用戶的命令形式,其命令格式如下:
|SELECT |
|INSERT |
|DELETE |
GRANT|UPDATE(列名1[,列名2]…)|ON|表名 |TO|用戶名|[WITH GRANT OPTION]
|ALTER | |視圖名| |PUBLIC|
|NDEX |
|ALL |
若對某一用戶同時授與多種操作權(quán)力,則操作命令符號可用“,”相隔。
PUBLIC 表示將權(quán)力授與數(shù)據(jù)庫的所有用戶,使用時要注意:
任選項WITH GRANT OPTION表示接到授權(quán)的用戶,具有將其所得到的同時權(quán)力再轉(zhuǎn)授給其他用戶權(quán)力。
例:如果將表student的查詢權(quán)授與所有用戶,可使用以下命令:
GRANT SELECT ON student TO PUBLIC
例:若將表subject的插入及修改權(quán)力授與用戶SSE并使得他具有將這種權(quán)力轉(zhuǎn)授他人的權(quán)力,則可使用以下命令:
GRANT INSERT,UPDATE(su_subject) ON subject TO SSE WITH GRANT OPTION
這里,UPDATE后面跟su_subject是指出其所能修改的列。
(2)權(quán)力回收:權(quán)力回收是指回收指定用戶原已授與的某些權(quán)力。與權(quán)力授與命令相匹配,權(quán)力回收也有數(shù)據(jù)庫管理員專用和用戶可用的兩種形式。
DBA專用的權(quán)力回收命令格式為:
|CONNECT |
REVOKE|RESOURCE|FROM用戶名
|DBA |
用戶可用的權(quán)力回收命令格式為:
|SELECT |
|INSERT |
|DELETE |
REVOKE|UPDATE(列名1[,列名2]…) |ON|表名 |FROM |用戶名|
|ALTER | |視圖名| |PUBLIC|
|INDEX |
|ALL |
例:回收用戶SSE的DBA權(quán)力:
REVOKE DBA FROM SSE
2.完整性控制
數(shù)據(jù)庫的完整性是指數(shù)據(jù)的正確性和相容性,這是數(shù)據(jù)庫理論中的重要概念。完整性控制的主要目的是防止語義上不正確的數(shù)據(jù)進入數(shù)據(jù)庫。關(guān)系系統(tǒng)中的完整性約束條件包括實體完整性、參照完整性和用戶定義完整性。而完整性約束條件的定義主要是通過CREATE TABLE語句中的[CHECK]子句來完成。另外,還有一些輔助命令可以進行數(shù)據(jù)完整性保護。如UNIQUE和NOT NULL,前者用于防止重復(fù)值進入數(shù)據(jù)庫,后者用于防止空值。
3.事務(wù)控制
事務(wù)是并發(fā)控制的基本單位,也是恢復(fù)的基本單位。在SQL中支持事務(wù)的概念。所謂事務(wù),是用戶定義的一個操作序列(集合),這些操作要么都做,要么一個都不做,是一個不可分割的整體。一個事務(wù)通常以BEGIN TRANSACTION開始,以COMMIT或ROLLBACK結(jié)束。
SQL提供了事務(wù)提交和事務(wù)撤消兩種命令:
(1)事務(wù)提交:事務(wù)提交的命令為:
COMMIT [WORK]
事務(wù)提交標(biāo)志著對數(shù)據(jù)庫的某種應(yīng)用操作成功地完成,所有對數(shù)據(jù)庫的操作都必須作為事務(wù)提交給系統(tǒng)時才有效。事務(wù)一經(jīng)提交就不能撤消。
(2)事務(wù)撤消:事務(wù)撤消的命令是:
ROLLBACK [WORK]
事務(wù)撤消標(biāo)志著相應(yīng)事務(wù)對數(shù)據(jù)庫操作失敗,因而要撤消對數(shù)據(jù)庫的改變,即要“回滾”到相應(yīng)事務(wù)開始時的狀態(tài)。
當(dāng)系統(tǒng)非正常結(jié)束時(如掉電、系統(tǒng)死機),將自動執(zhí)行ROLLBACK命令
SQL還提供了自動提交事務(wù)的機制,其命令為:
SET AUTO COMMIT ON
其對應(yīng)的人工工作方式命令為:
SET AUTO COMMIT OFF
一旦規(guī)定了自動提交事務(wù)方式,則系統(tǒng)將每條SQL命令視為一個事務(wù),并在命令成功執(zhí)行完成時自動地完成事務(wù)提交。
4.并發(fā)控制
數(shù)據(jù)庫作為共享資源,允許多個用戶程序并行地存取數(shù)據(jù)。當(dāng)多個用戶并行地操作數(shù)據(jù)庫時,需要通過并發(fā)控制對它們加以協(xié)調(diào)、控制,以保證并發(fā)操作的正確執(zhí)行,并保證數(shù)據(jù)庫的一致性。
在SQL中,并發(fā)控制采用封鎖技術(shù)實現(xiàn),當(dāng)一個事務(wù)欲對某個數(shù)據(jù)對象操作時,可申請對該對象加鎖,取得對數(shù)據(jù)對象的一定控制,以限制其他事務(wù)對該對象的操作。其語句格式為:
|SHARE |
LOCK TABLE 表名(或表名集合)IN |EXCLUSVE |MODE [NOWAIT]
|SHARE UPDATE|
其中,表名(或表名集合)中指出封鎖對象,若為多個表名,則各個表名間以“,”相隔;任選項NOWAIT表示多個用戶要求封鎖相同的關(guān)系時,后來提出的要求會被立即退回去,否則會等待該資源釋放。
SHARE表示共享封鎖方式;EXCLUSIVE表示獨占封鎖方式;SHARE UPDAE表示共享更新封鎖方式。其中共享封鎖方式允許其他事務(wù)讀同一數(shù)據(jù),但防止其他事務(wù)對已封鎖的表進行更新,該鎖主要防止在表的兩次查詢之間對該表的改動;共享更新封鎖SHARE UPDATE是一個行封鎖機制,它可改善表級封鎖的并行性,它能允許并發(fā)事務(wù)讀和修改一個表中的不同的行;獨占封鎖方式EXCLUSIVE禁止其他事務(wù)獲得一個共享鎖且禁止其他事務(wù)執(zhí)行任何數(shù)據(jù)操作語句,即一旦某個運行事務(wù)對某個數(shù)據(jù)對象施加了排它鎖,則其他任何事務(wù)都不能再對該數(shù)據(jù)對象施加任何方式的鎖,只有處于等待狀態(tài)。如果不想無限等待,則選擇NOWAIT。
PHP(Hypertext Preprocessor,超文本預(yù)處理器)是一個遞歸的縮寫名稱,它是一種內(nèi)嵌在HTML頁面內(nèi)的腳本語言。它的功能強大,使用方便,開發(fā)難度不大,而且可以免費使用。
SQL語法參考手冊
日期:2000-9-14 15:41:00
出處:未知
作者:未知
DB2 提供了關(guān)連式資料庫的查詢語言 SQL (Structured Query Language),是一種非常口語化、既易學(xué)又易懂的語法。 此一語言幾乎是每個資料庫系統(tǒng)都必須提供的,用以表示關(guān)連式的操作,包含了資料的定義(DDL)以及資料的處理(DML)。SQL原來拼成SEQUEL,這語言的原型以“系統(tǒng) R“的名字在 IBM 圣荷西實驗室完成,經(jīng)過IBM內(nèi)部及其他的許多使用性及效率測試,其結(jié)果相當(dāng)令人滿意,并決定在系統(tǒng)R 的技術(shù)基礎(chǔ)發(fā)展出來 IBM 的產(chǎn)品。而且美國國家標(biāo)準(zhǔn)學(xué)會(ANSI)及國際標(biāo)準(zhǔn)化組織(ISO)在1987遵循一個幾乎是以 IBM SQL 為基礎(chǔ)的標(biāo)準(zhǔn)關(guān)連式資料語言定義。
一、資料定義 DDL(Data Definition Language)
資料定語言是指對資料的格式和形態(tài)下定義的語言,他是每個資料庫要建立時候時首先要面對的,舉凡資料分哪些表格關(guān)系、表格內(nèi)的有什麼欄位主鍵、表格和表格之間互相參考的關(guān)系等等,都是在開始的時候所必須規(guī)劃好的。
1、建表格:
CREATE TABLE table_name(
column1 DATATYPE [NOT NULL] [NOT NULL PRIMARY KEY],
column2 DATATYPE [NOT NULL],
...)
說明:
DATATYPE --是資料的格式,詳見表。
NUT NULL --可不可以允許資料有空的(尚未有資料填入)。
PRIMARY KEY --是本表的主鍵。
2、更改表格
ALTER TABLE table_name
ADD COLUMN column_name DATATYPE
說明:增加一個欄位(沒有刪除某個欄位的語法。
ALTER TABLE table_name
ADD PRIMARY KEY (column_name)
說明:更改表得的定義把某個欄位設(shè)為主鍵。
ALTER TABLE table_name
DROP PRIMARY KEY (column_name)
說明:把主鍵的定義刪除。
3、建立索引
CREATE INDEX index_name ON table_name (column_name)
說明:對某個表格的欄位建立索引以增加查詢時的速度。
4、刪除
DROP table_name
DROP index_name
二、的資料形態(tài) DATATYPEs
smallint
16 位元的整數(shù)。
interger
32 位元的整數(shù)。
decimal(p,s)
p 精確值和 s 大小的十進位整數(shù),精確值p是指全部有幾個數(shù)(digits)大小值,s是指小數(shù)
點後有幾位數(shù)。如果沒有特別指定,則系統(tǒng)會設(shè)為 p=5; s=0 。
float
32位元的實數(shù)。
double
64位元的實數(shù)。
char(n)
n 長度的字串,n不能超過 254。
varchar(n)
長度不固定且其最大長度為 n 的字串,n不能超過 4000。
graphic(n)
和 char(n) 一樣,不過其單位是兩個字元 double-bytes, n不能超過127。這個形態(tài)是為
了支援兩個字元長度的字體,例如中文字。
vargraphic(n)
可變長度且其最大長度為 n 的雙字元字串,n不能超過 2000。
date
包含了 年份、月份、日期。
time
包含了 小時、分鐘、秒。
timestamp
包含了 年、月、日、時、分、秒、千分之一秒。
三、資料操作 DML (Data Manipulation Language)
資料定義好之後接下來的就是資料的操作。資料的操作不外乎增加資料(insert)、查詢資料(query)、更改資料(update) 、刪除資料(delete)四種模式,以下分 別介紹他們的語法:
1、增加資料:
INSERT INTO table_name (column1,column2,...)
VALUES ( value1,value2, ...)
說明:
1.若沒有指定column 系統(tǒng)則會按表格內(nèi)的欄位順序填入資料。
2.欄位的資料形態(tài)和所填入的資料必須吻合。
3.table_name 也可以是景觀 view_name。
INSERT INTO table_name (column1,column2,...)
SELECT columnx,columny,... FROM another_table
說明:也可以經(jīng)過一個子查詢(subquery)把別的表格的資料填入。
2、查詢資料:
基本查詢
SELECT column1,columns2,...
FROM table_name
說明:把table_name 的特定欄位資料全部列出來
SELECT *
FROM table_name
WHERE column1 = xxx
[AND column2 > yyy] [OR column3 <> zzz]
說明:
1.'*'表示全部的欄位都列出來。
2.WHERE 之後是接條件式,把符合條件的資料列出來。
SELECT column1,column2
FROM table_name
ORDER BY column2 [DESC]
說明:ORDER BY 是指定以某個欄位做排序,[DESC]是指從大到小排列,若沒有指明,則是從小到大
排列
組合查詢
組合查詢是指所查詢得資料來源并不只有單一的表格,而是聯(lián)合一個以上的
表格才能夠得到結(jié)果的。
SELECT *
FROM table1,table2
WHERE table1.colum1=table2.column1
說明:
1.查詢兩個表格中其中 column1 值相同的資料。
2.當(dāng)然兩個表格相互比較的欄位,其資料形態(tài)必須相同。
3.一個復(fù)雜的查詢其動用到的表格可能會很多個。
整合性的查詢:
SELECT COUNT (*)
FROM table_name
WHERE column_name = xxx
說明:
查詢符合條件的資料共有幾筆。
SELECT SUM(column1)
FROM table_name
說明:
1.計算出總和,所選的欄位必須是可數(shù)的數(shù)字形態(tài)。
2.除此以外還有 AVG() 是計算平均、MAX()、MIN()計算最大最小值的整合性查詢。
SELECT column1,AVG(column2)
FROM table_name
GROUP BY column1
HAVING AVG(column2) > xxx
說明:
1.GROUP BY: 以column1 為一組計算 column2 的平均值必須和 AVG、SUM等整合性查詢的關(guān)鍵字
一起使用。
2.HAVING : 必須和 GROUP BY 一起使用作為整合性的限制。
復(fù)合性的查詢
SELECT *
FROM table_name1
WHERE EXISTS (
SELECT *
FROM table_name2
WHERE conditions )
說明:
1.WHERE 的 conditions 可以是另外一個的 query。
2.EXISTS 在此是指存在與否。
SELECT *
FROM table_name1
WHERE column1 IN (
SELECT column1
FROM table_name2
WHERE conditions )
說明:
1. IN 後面接的是一個集合,表示column1 存在集合里面。
2. SELECT 出來的資料形態(tài)必須符合 column1。
其他查詢
SELECT *
FROM table_name1
WHERE column1 LIKE 'x%'
說明:LIKE 必須和後面的'x%' 相呼應(yīng)表示以 x為開頭的字串。
SELECT *
FROM table_name1
WHERE column1 IN ('xxx','yyy',..)
說明:IN 後面接的是一個集合,表示column1 存在集合里面。
SELECT *
FROM table_name1
WHERE column1 BETWEEN xx AND yy
說明:BETWEEN 表示 column1 的值介於 xx 和 yy 之間。
3、更改資料:
UPDATE table_name
SET column1='xxx'
WHERE conditoins
說明:
1.更改某個欄位設(shè)定其值為'xxx'。
2.conditions 是所要符合的條件、若沒有 WHERE 則整個 table 的那個欄位都會全部被更改。
4、刪除資料:
DELETE FROM table_name
WHERE conditions
說明:刪除符合條件的資料。
說明:關(guān)于WHERE條件后面如果包含有日期的比較,不同數(shù)據(jù)庫有不同的表達式。具體如下:
(1)如果是ACCESS數(shù)據(jù)庫,則為:WHERE mydate>#2000-01-01#
(2)如果是ORACLE數(shù)據(jù)庫,則為:WHERE mydate>cast('2000-01-01' as date)
或:WHERE mydate>to_date('2000-01-01','yyyy-mm-dd')
在Delphi中寫成:
thedate= '2000-01-01';
query1.SQL.add('select * from abc where mydate>cast('+''+thedate+''+' as date)');
如果比較日期時間型,則為:
WHERE mydatetime>to_date('2000-01-01 10:00:01','yyyy-mm-dd hh24:mi:ss')
1.oncontextmenu="window.event.returnvalue=false"將徹底屏蔽鼠標(biāo)右鍵
oncontextmenu=self.event.returnValue=false
oncontextmenu="return false"
<tableborderoncontextmenu=return(false)><td>no</table>可用于Table
2.<bodyonselectstart="returnfalse">取消選取、防止復(fù)制
3.onpaste="returnfalse"不準(zhǔn)粘貼
4.oncopy="returnfalse;"oncut="returnfalse;"防止復(fù)制
5.<linkrel="ShortcutIcon"href="favicon.ico">IE地址欄前換成自己的圖標(biāo)
6.<linkrel="Bookmark"href="favicon.ico">可以在收藏夾中顯示出你的圖標(biāo)
7.<inputstyle="ime-mode:disabled">關(guān)閉輸入法
8.永遠都會帶著框架
<scriptlanguage="javascript"><!--
if(window==top)top.location.href="frames.htm";//frames.htm為框架網(wǎng)頁
//--></script>
9.防止被人frame
<SCRIPTLANGUAGE=javascript><!--
if(top.location!=self.location)top.location=self.location;
//--></SCRIPT>
10.<noscript><iframesrc=*.html></iframe></noscript>網(wǎng)頁將不能被另存為
11.<inputtype=buttonvalue=查看網(wǎng)頁源代碼
onclick="window.location='view-source:'+'<IMG src="pic/url.gif" align=absMiddle border=0>http://www.csdn.net/">
12.怎樣通過asp的手段來檢查來訪者是否用了代理
<%ifRequest.ServerVariables("HTTP_X_FORWARDED_FOR")<>""then
response.write"<fontcolor=#FF0000>您通過了代理服務(wù)器,"&_
"真實的IP為"&Request.ServerVariables("HTTP_X_FORWARDED_FOR")
endif
%>
13.取得控件的絕對位置
//javascript
<scriptlanguage="javascript">
functiongetIE(e){
vart=e.offsetTop;
varl=e.offsetLeft;
while(e=e.offsetParent){
t+=e.offsetTop;
l+=e.offsetLeft;
}
alert("top="+t+"\nleft="+l);
}
</script>
//VBScript
<scriptlanguage="VBScript"><!--
functiongetIE()
dimt,l,a,b
seta=document.all.img1
t=document.all.img1.offsetTop
l=document.all.img1.offsetLeft
whilea.tagName<>"BODY"
seta=a.offsetParent
t=t+a.offsetTop
l=l+a.offsetLeft
wend
msgbox"top="&t&chr(13)&"left="&l,64,"得到控件的位置"
endfunction
--></script>
14.光標(biāo)是停在文本框文字的最后
<scriptlanguage="javascript">
functioncc()
{
vare=event.srcElement;
varr=e.createTextRange();
r.moveStart('character',e.value.length);
r.collapse(true);
r.select();
}
</script>
<inputtype=textname=text1value="123"onfocus="cc()">
15.判斷上一頁的來源
asp:
request.servervariables("HTTP_REFERER")
javascript:
document.referrer
16.最小化、最大化、關(guān)閉窗口
<objectid=hh1classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<paramname="Command"value="Minimize"></object>
<objectid=hh2classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<paramname="Command"value="Maximize"></object>
<OBJECTid=hh3classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<PARAMNAME="Command"value="Close"></OBJECT>
<inputtype=buttonvalue=最小化onclick=hh1.Click()>
<inputtype=buttonvalue=最大化onclick=hh2.Click()>
<inputtype=buttonvalue=關(guān)閉onclick=hh3.Click()>
本例適用于IE
17.
<%
'定義數(shù)據(jù)庫連接的一些常量
ConstadOpenForwardOnly=0'游標(biāo)只向前瀏覽記錄,不支持分頁、Recordset、BookMark
ConstadOpenKeyset=1'鍵集游標(biāo),其他用戶對記錄說做的修改將反映到記錄集中,但其他用戶增加或刪除記錄不會反映到記錄集中。支持分頁、Recordset、BookMark
ConstadOpenDynamic=2'動態(tài)游標(biāo)功能最強,但耗資源也最多。用戶對記錄說做的修改,增加或刪除記錄都將反映到記錄集中。支持全功能瀏覽(ACCESS不支持)。
ConstadOpenStatic=3'靜態(tài)游標(biāo),只是數(shù)據(jù)的一個快照,用戶對記錄說做的修改,增加或刪除記錄都不會反映到記錄集中。支持向前或向后移動
ConstadLockReadOnly=1'鎖定類型,默認(rèn)的,只讀,不能作任何修改
ConstadLockPessimistic=2'當(dāng)編輯時立即鎖定記錄,最安全的方式
ConstadLockOptimistic=3'只有在調(diào)用Update方法時才鎖定記錄集,而在此前的其他操作仍可對當(dāng)前記錄進行更改、插入和刪除等
ConstadLockBatchOptimistic=4'當(dāng)編輯時記錄不會被鎖定,而更改、插入和刪除是在批處理方式下完成的
ConstadCmdText=&H0001
ConstadCmdTable=&H0002
%>
18.網(wǎng)頁不會被緩存
HTM網(wǎng)頁
<METAHTTP-EQUIV="pragma"CONTENT="no-cache">
<METAHTTP-EQUIV="Cache-Control"CONTENT="no-cache,must-revalidate">
<METAHTTP-EQUIV="expires"CONTENT="Wed,26Feb199708:21:57GMT">
或者<METAHTTP-EQUIV="expires"CONTENT="0">
ASP網(wǎng)頁
Response.Expires=-1
Response.ExpiresAbsolute=Now()-1
Response.cachecontrol="no-cache"
PHP網(wǎng)頁
header("Expires:Mon,26Jul199705:00:00GMT");
header("Cache-Control:no-cache,must-revalidate");
header("Pragma:no-cache");
19.檢查一段字符串是否全由數(shù)字組成
<scriptlanguage="javascript"><!--
functioncheckNum(str){returnstr.match(/\D/)==null}
alert(checkNum("1232142141"))
alert(checkNum("123214214a1"))
//--></script>
20.獲得一個窗口的大小
document.body.clientWidth,document.body.clientHeight
21.怎么判斷是否是字符
if(/[^\x00-\xff]/g.test(s))alert("含有漢字");
elsealert("全是字符");
22.TEXTAREA自適應(yīng)文字行數(shù)的多少
<textarearows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight">
</textarea>
23.日期減去天數(shù)等于第二個日期
<scriptlanguage=javascript>
functioncc(dd,dadd)
{
//可以加上錯誤處理
vara=newDate(dd)
a=a.valueOf()
a=a-dadd*24*60*60*1000
a=newDate(a)
alert(a.getFullYear()+"年"+(a.getMonth()+1)+"月"+a.getDate()+"日")
}
cc("12/23/2002",2)
</script>
24.選擇了哪一個Radio
<HTML><scriptlanguage="vbscript">
functioncheckme()
foreachobinradio1
ifob.checkedthenwindow.alertob.value
next
endfunction
</script><BODY>
<INPUT name="radio1" type="radio" value="style" checked>Style
<INPUT name="radio1" type="radio" value="barcode">Barcode
<INPUT type="button" value="check"onclick="checkme()">
</BODY></HTML>
25.獲得本頁url的request.servervariables("")集合
Response.Write"<TABLEborder=1><!--TableHeader--><TR><TD><B>Variables</B></TD><TD><B>value</B></TD></TR>"
foreachobinRequest.ServerVariables
Response.Write"<TR><TD>"&ob&"</TD><TD>"&Request.ServerVariables(ob)&"</TD></TR>"
next
Response.Write"</TABLE>"
26.
本機ip<%=request.servervariables("remote_addr")%>
服務(wù)器名<%=Request.ServerVariables("SERVER_NAME")%>
服務(wù)器IP<%=Request.ServerVariables("LOCAL_ADDR")%>
服務(wù)器端口<%=Request.ServerVariables("SERVER_PORT")%>
服務(wù)器時間<%=now%>
IIS版本<%=Request.ServerVariables"SERVER_SOFTWARE")%>
腳本超時時間<%=Server.ScriptTimeout%>
本文件路徑<%=server.mappath(Request.ServerVariables("SCRIPT_NAME"))%>
服務(wù)器CPU數(shù)量<%=Request.ServerVariables("NUMBER_OF_PROCESSORS")%>
服務(wù)器解譯引擎<%=ScriptEngine&"/" & ScriptEngineMajorVersion &"." & ScriptEngineMinorVersion & "." & ScriptEngineBuildVersion%>
服務(wù)器操作系統(tǒng)<%=Request.ServerVariables("OS")%>
27.ENTER鍵可以讓光標(biāo)移到下一個輸入框
<input onkeydown="if(event.keyCode==13)event.keyCode=9">
28.檢測某個網(wǎng)站的鏈接速度:
把如下代碼加入<body>區(qū)域中:
<scriptlanguage=javascript>
tim=1
setInterval("tim++",100)
b=1
varautourl=newArray()
autourl[1]="< src="pic/url.gif" align=absMiddle border=0>www.njcatv.net"
autourl[2]="javacool.3322.net"
autourl[3]="< src="pic/url.gif" align=absMiddle border=0>www.sina.com.cn"
autourl[4]="www.nuaa.edu.cn"
autourl[5]="< src="pic/url.gif" align=absMiddle border=0>www.cctv.com"
functionbutt(){
document.write("<formname=autof>")
for(vari=1;i<autourl.length;i++)
document.write("<inputtype=textname=txt"+i+"size=10value=測試中……>=》<inputtype=textname=url"+i+"size=40>=》<inputtype=buttonvalue=GOonclick=window.open(this.form.url"+i+".value)><br/>")
document.write("<inputtype=submitvalue=刷新></form>")
}
butt()
functionauto(url){
document.forms[0]["url"+b].value=url
if(tim>200)
{document.forms[0]["txt"+b].value="鏈接超時"}
else
{document.forms[0]["txt"+b].value="時間"+tim/10+"秒"}
b++
}
functionrun(){for(vari=1;i<autourl.length;i++)document.write("<imgsrc=http://"+autourl[i]+"/"+Math.random()+"width=1height=1onerror=auto('< src="pic/url.gif" align=absMiddle border=0>http://";+autourl[i]+"')>")}
run()</script>
29.各種樣式的光標(biāo)
auto:標(biāo)準(zhǔn)光標(biāo)
default:標(biāo)準(zhǔn)箭頭
hand:手形光標(biāo)
wait:等待光標(biāo)
text:I形光標(biāo)
vertical-text:水平I形光標(biāo)
no-drop:不可拖動光標(biāo)
not-allowed:無效光標(biāo)
help:?幫助光標(biāo)
all-scroll:三角方向標(biāo)
move:移動標(biāo)
crosshair:十字標(biāo)
e-resize
n-resize
nw-resize
w-resize
s-resize
se-resize
sw-resize
-------------------------------------------------
Kafree另外收集增加的:
1,屏蔽鼠標(biāo)右鍵、Ctrl+n、shift+F10、F5刷新、退格鍵
<body onkeydown="KeyDown()"
oncontextmenu="event.returnValue=false">
<script language="Javascript"><!--
//屏蔽鼠標(biāo)右鍵、Ctrl+n、shift+F10、F5刷新、退格鍵
//Author: meizz(梅花雨) 2002-6-18
function KeyDown(){
if ((window.event.altKey)&&
((window.event.keyCode==37)|| //屏蔽 Alt+ 方向鍵 ←
(window.event.keyCode==39))){ //屏蔽 Alt+ 方向鍵 →
alert("不準(zhǔn)你使用ALT+方向鍵前進或后退網(wǎng)頁!");
event.returnValue=false;
}
/* 注:這還不是真正地屏蔽 Alt+ 方向鍵,
因為 Alt+ 方向鍵彈出警告框時,按住 Alt 鍵不放,
用鼠標(biāo)點掉警告框,這種屏蔽方法就失效了。以后若
有哪位高手有真正屏蔽 Alt 鍵的方法,請告知。*/
if ((event.keyCode==8) || //屏蔽退格刪除鍵
(event.keyCode==116)|| //屏蔽 F5 刷新鍵
(event.ctrlKey && event.keyCode==82)){ //Ctrl + R
event.keyCode=0;
event.returnValue=false;
}
if ((event.ctrlKey)&&(event.keyCode==78)) //屏蔽 Ctrl+n
event.returnValue=false;
if ((event.shiftKey)&&(event.keyCode==121)) //屏蔽 shift+F10
event.returnValue=false;
if (window.event.srcElement.tagName == "A" && window.event.shiftKey)
window.event.returnValue = false; //屏蔽 shift 加鼠標(biāo)左鍵新開一網(wǎng)頁
if ((window.event.altKey)&&(window.event.keyCode==115)){ //屏蔽Alt+F4
window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px");
return false;}
}
/* 另外可以用 window.open 的方法屏蔽 IE 的所有菜單
第一種方法:
window.open("你的.htm", "","toolbar=no,location=no,directories=no,menubar=no,scrollbars=no,resizable=yes,status=no,top=0,left=0")
第二種方法是打開一個全屏的頁面:
window.open("你的.asp", "", "fullscreen=yes")
*/
// --></script>
<h2 align=center>屏蔽鼠標(biāo)右鍵、Ctrl+n、shift+F10、F5刷新、退格鍵</h2>
</body>
</html>
2,RecordSet屬性和方法
為了更精確地跟蹤數(shù)據(jù),要用RecordSet組件創(chuàng)建包含數(shù)據(jù)的游標(biāo),游標(biāo)就是儲存在內(nèi)存中的數(shù)據(jù)。
rs = Server.CreateObject("ADODB.RecordSet")
rs.Open(sqlStr,conn,1,A)
注:A=1讀取
A=3 新增、修改、刪除
在RecordSet組件中,常用的屬性和方法有:
rs.Fields.Count: RecordSet對象的字段數(shù)。
rs(i).Name: 第i個字段的名稱,i為0至rs.Fields.Count-1
rs(i): 第i個字段的數(shù)據(jù),i為0至rs.Fields.Count-1
rs("字段名"): 指定字段的數(shù)據(jù)。
rs.Record.Count:游標(biāo)中的數(shù)據(jù)記錄總數(shù)。
rs.EOF: 是否最后一條記錄。
rs.MoveFirst: 指向第一條記錄。
rs.MoveLast: 指向最后一條記錄。
rs.MovePrev: 指向上一條記錄。
rs.MoveNext: 指向下一條記錄。
rs.GetRows: 將數(shù)據(jù)放入數(shù)組中。
rs.Properties.Count:ADO的ResultSet或Connection的屬性個數(shù)。
rs.Properties(item).Name:ADO的ResultSet或Connection的名稱。
rs.Properties: ADO的ResultSet或Connection的值。
rs.close(): 關(guān)閉連接。
3,本地?zé)o緩存,每次自動刷新
response.expires=0
response.addHeader"pragma","no-cache"
response.addHeader"cache-control","private"
4,修改contentType并下載gif等格式
<%
function dl(f,n)
onerrorresumenext
sets=CreateObject("Adodb.Stream")
S.Mode=3
S.Type=1
S.Open
s.LoadFromFile(server.mappath(f))
iferr.number>0then
response.writeerr.number&":"&err.description
else
response.contentType="application/x-gzip"
response.addheader"Content-Disposition:","attachment;filename="&n
response.binarywrite(s.Read(s.size))
endif
endfunction
call dl("012922501.gif","t1.gif") %>
5,常用的幾種數(shù)據(jù)庫連接代碼
1) MS Access數(shù)據(jù)庫連接
用DSN連接并且沒有用戶名和密碼:
<%
set conn = Server.CreateObject("ADODB.Connection")
conn.open "YourDSNName"
%>
2) 用DSN連接并且有用戶名和密碼:
<%
set conn = Server.CreateObject("ADODB.Connection")
conn.open "YourDSNName","username","password"
%>
3) 用實際的數(shù)據(jù)庫絕對路徑連接:
<%
Set conn = Server.CreateObject("ADODB.Connection")
Strconn="DRIVER={Microsoft Access Driver (*.mdb)}; "
Strconn=Strconn & "DBQ=e:\yanhang\database.mdb"
conn.Open Strconn
%>
4) 用實際的數(shù)據(jù)庫相對路徑連接:
<%
Set conn = Server.CreateObject("ADODB.Connection")
Strconn="DRIVER={Microsoft Access Driver (*.mdb)}; "
Strconn=Strconn & "DBQ=" & Server.MapPath("/database/yanhang.mdb")
conn.Open Strconn
%>
5) MS SQL Server數(shù)據(jù)庫連接
用DSN連接:
<%
set conn = Server.CreateObject("ADODB.Connection")
conn.open "DSN=MyDSN;UID=user;PWD=password;DATABASE=databasename"
%>
6) 不用DSN連接:
<%
Set conn = Server.CreateObject("ADODB.Connection")
DSNtemp="DRIVER={SQL Server};SERVER=ServerName;UID=USER;PWD=password;DATABASE=databasename"
conn.open DSNtemp
%>
7) FoxPro數(shù)據(jù)庫連接
<%
Set Conn = Server.CreateObject("ADODB.connection")
ConnStr= "Driver=Microsoft Visual Foxpro Driver; UID=userID;SourceType=DBC;SourceDB=C:\yanhang\database.dbc"
Conn.Open ConnStr
%>
8) Oracle數(shù)據(jù)庫連接:
<%
set conn=server.createobject("adodb.connection")
conn.cursorlocation=adUseClient
DSNTemp="Provider=MSDAORA.1;Password=xxxxx;User ID=yanhang;Data Source=xxx.world"
conn.open DSNtemp
%>
9) Paradox數(shù)據(jù)庫連接:
<%
set conn=server.createobject("adodb.connection")
conn.cursorlocation=adUseClient
DSNTemp="driver={Microsoft Paradox Driver (*.db)};DriverID=538;Fil=Paradox 5.X;DefaultDir=c:\dbpath\;Dbq=c:\dbpath\;CollatingSequence=ASCII;"
conn.open DSNtemp
%>
10) Sybase數(shù)據(jù)庫連接:
<%
set conn=server.createobject("adodb.connection")
conn.cursorlocation=adUseClient
DSNTemp="Driver={SYBASE SYSTEM 11};Srvr=myServerName;Uid=myUsername;Pwd=myPassword;"
conn.open DSNtemp
%>
11) Text數(shù)據(jù)庫連接:
<%
set conn=server.createobject("adodb.connection")
conn.cursorlocation=adUseClient
DSNTemp="Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=c:\somepath\;Extensions=asc,csv,tab,txt;Persist Security Info=False"
conn.open DSNtemp
'調(diào)用 test.csv 的文件
Set rs=server.createobject("adodb.recordset")
rs.open "select * from test.csv",conn,1,3
%>
6,使用 XML 靜態(tài)讀取網(wǎng)頁
代碼如下:
<script>
var oDiv //添加用的節(jié)點
var nP //DIV的 padding-left
var xh //xmlhttp
function getXML()
{
oDiv = document.all.m
oDiv.innerHTML = "正在裝載欄目數(shù)據(jù),請稍侯......."
oDiv.style.display= ""
xh = new ActiveXObject("Microsoft.XMLHTTP")
xh.onreadystatechange = getReady
xh.open("GET",a.value,true)
xh.send()
}
function getReady()
{
if(xh.readyState==4)
{
if(xh.status==200)
{
oDiv.innerHTML = "完成"
}
else
{
oDiv.innerHTML = "抱歉,裝載數(shù)據(jù)失敗。原因:" + xh.statusText
}
}
}
</script>
URL:<input name=a value="http://www.microsoft.com">
<input onclick="getXML()" type="button" value="get HTML">
<input onclick="if(xh && xh.responseText) oDiv.innerHTML=xh.responseText" type="button" value="output">
<div id=m></div>
7,SQL SERVER 和EXCEL的數(shù)據(jù)導(dǎo)入導(dǎo)出
1)、在SQL SERVER里查詢Excel數(shù)據(jù):
SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
下面是個查詢的示例,它通過用于 Jet 的 OLE DB 提供程序查詢 Excel 電子表格。
SELECT * FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
2)、將Excel的數(shù)據(jù)導(dǎo)入SQL server :
SELECT * into newtable FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
實例分析:
SELECT * into newtable FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
3)、將SQL SERVER中查詢到的數(shù)據(jù)導(dǎo)成一個Excel文件
T-SQL代碼:
EXEC master..xp_cmdshell 'bcp 庫名.dbo.表名out c:\Temp.xls -c -q -S"servername" -U"sa" -P""'
參數(shù):S 是SQL服務(wù)器名;U是用戶;P是密碼
說明:還可以導(dǎo)出文本文件等多種格式
實例:EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:\temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"'
EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:\ authors.xls -c -Sservername -Usa -Ppassword'
在VB6中應(yīng)用ADO導(dǎo)出EXCEL文件代碼:
Dim cn As New ADODB.Connection
cn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"
cn.execute "master..xp_cmdshell 'bcp "SELECT col1, col2 FROM 庫名.dbo.表名" queryout E:\DT.xls -c -Sservername -Usa -Ppassword'"
4)、在SQL SERVER里往Excel插入數(shù)據(jù):
insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3)
T-SQL代碼:
INSERT INTO OPENDATASOURCE('Microsoft.JET.OLEDB.4.0', 'Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$] (bestand, produkt) VALUES (20, 'Test')
總結(jié):利用以上語句,我們可以方便地將SQL SERVER、ACCESS和EXCEL電子表格軟件中的數(shù)據(jù)進行轉(zhuǎn)換,為我們提供了極大方便!
不同瀏覽器所支持的“事件”
1。onabort(ns3,ns4,ie4):當(dāng)用戶終止正在打開的網(wǎng)頁時產(chǎn)生該事件。
2。onblur(ns3,ns4,ie3,ie4):某元素失去活動焦點時產(chǎn)生該事件。例如鼠標(biāo)在文本框中點擊后又在文本框外點擊時就會產(chǎn)生。
3。onchange(ns3,ns4,ie3,ie4):當(dāng)網(wǎng)頁上某元素的內(nèi)容發(fā)生改變時產(chǎn)生。例如在文本框中輸入文本后又在文本框外點擊時就會產(chǎn)生。
4。onclick(ns3,ns4,ie3,ie4)單擊網(wǎng)頁上的某元素時產(chǎn)生
5。ondblclick(ns4,ie4):雙擊網(wǎng)頁上的元素時產(chǎn)生
6。onerror(ns3,ns4,ie4):瀏覽器在打開網(wǎng)頁的過程中發(fā)生錯誤時產(chǎn)生該事件
7。onfinish(ie4):滾動文本條中的文本完成一次滾動時產(chǎn)生的事件
8。onfocus(ns3,ns4,ie3,ie4)網(wǎng)頁上的元素獲得焦點時產(chǎn)生該事件
9。onkeydown(ns4,ie4)按下任意鍵時產(chǎn)生該事件
10。onkeypress(ns4,ie4)按下任意鍵時并釋放該鍵產(chǎn)生的事件
11。onkeyup(ns4,ie4)釋放按下的按鍵產(chǎn)生該事件
12。onload(ns3、4,ie3、4)網(wǎng)頁或圖象調(diào)入完成后產(chǎn)生該事件
13。onmousedown(ns4,ie4)在網(wǎng)頁的某元素上按下鼠標(biāo)時產(chǎn)生該事件
14。onmousemove(ie3、4)在網(wǎng)頁的某元素上移動鼠標(biāo)時產(chǎn)生該事件
15。onmouseout(ns3、4,ie4)從網(wǎng)頁的某元素移出鼠標(biāo)時產(chǎn)生該事件
16。onmouseover(ns3、4,ie3、4)鼠標(biāo)移入網(wǎng)頁的某元素時產(chǎn)生該事件
17。onmouseup(ns4,ie4)釋放按下的鼠標(biāo)時產(chǎn)生該事件
18。onreset(ns3、4,ie3、4)復(fù)位表格時產(chǎn)生該事件
19。onresize(ns4,ie4)改變?yōu)g覽器時產(chǎn)生該事件
20。onselect(ns3、4,ie3、4)選擇文本框中的文本時產(chǎn)生該事件
21。onstart(ie4)滾動文本條中的文本開始滾動時產(chǎn)生該事件
22。onsubmit(ns3、4,ie3、4)提交表單時產(chǎn)生該事件
23。onunload(ns3、4,ie3、4)從當(dāng)前的網(wǎng)頁退出時產(chǎn)生該事件
馬上出現(xiàn)的alt
<style>div {filter: Alpha(Opacity=70, FinishOpacity=70, Style=2, StartX=0, StartY=0, FinishX=100, FinishY=100);}</style>
<img src="icon/popoever.jpg" hint="泡泡哥">
<img src="icon/poorfish.gif" hint="高僧一個,當(dāng)和尚太可惜了">
<img src="icon/admin.gif" hint="my哥哥">
<div style="visibility:hidden;border:1px solid #000000;background-color:#FFFFCC;font-size:12px;position:absolute;" id=altlayer></div>
測試完畢...
<script>
document.body.onmousemove=quickalt;
function quickalt() {
if(event.srcElement.hint && event.srcElement.hint!='') {
altlayer.style.visibility='visible';
altlayer.style.left=event.x+10;
altlayer.style.top=event.y+10;
altlayer.innerHTML=event.srcElement.hint}
else altlayer.style.visibility='hidden';}
</script>
只能輸入數(shù)字(方法一)
<script language=javascript>
function onlyNum()
{
if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)))
event.returnValue=false;
}
</script>
<input onkeydown="onlyNum();">
只能輸入數(shù)字(方法二)
<input onkeypress="return event.keyCode>=48&&event.keyCode<=57" onpaste="return !clipboardData.getData('text').match(/\D/)" style="ime-mode:Disabled" ondragenter="return false">
只能輸入數(shù)字(方法三)
<script>
function check(){
if (isNaN(tt.value))
{alert("非法字符!");
tt.value="";}
}
</script>
<input type="text" name="tt" onkeyup="check();">
限制textarea多行輸入框的字?jǐn)?shù)
<textarea name="b" onkeydown="if(this.value.length>=8) this.value=this.value.substring(0, 8)" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').substring(0, 8))">
驗證表單——不能超過設(shè)置字?jǐn)?shù)
<script>
function test()
{
if(document.a.b.value.length>50)
{
alert("不能超過50個字符!");
document.a.b.focus();
return false;
}
}
</script>
<form name=a onsubmit="return test()">
<textarea name="b" cols="40" wrap="VIRTUAL" rows="6"></textarea>
<input type="submit" name="Submit" value="check">
</form>
驗證表單——只能是漢字
<input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')">
驗證表單——只能是英文字符
<script language=javascript>
function onlyEng()
{
if(!(event.keyCode>=65&&event.keyCode<=90))
event.returnValue=false;
}
</script>
<input onkeydown="onlyEng();">
驗證表單——屏蔽關(guān)鍵字(sex , fuck)
<script language="JavaScript1.2">
function test() {
if((a.b.value.indexOf ("sex") == 0)||(a.b.value.indexOf ("fuck") == 0)){
alert("五講四美三熱愛");
a.b.focus();
return false;}
}
</script>
<form name=a onsubmit="return test()">
<input type=text name=b>
<input type="submit" name="Submit" value="check">
</form>
驗證表單——驗證為email格式
<SCRIPT LANGUAGE=Javascript RUNAT=Server>
function isEmail(strEmail) {
if (strEmail.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)
return true;
else
alert("oh");
}
</SCRIPT>
<input type=text onblur=isEmail(this.value)>
css控制checkbox、select的邊框不顯示
一、<input type=checkbox style="position:absolute;clip: rect(5 16 16 5)">
二、<input type=checkbox style="position:absolute;clip: rect(6 17 17 6)">
三、<select name="menu1" style="position:absolute;clip: rect(2 50 30 2)">
<option>111111</option>
<option>222222</option>
<option>333333</option>
<option>444444</option>
</select>
復(fù)選框通常都不需要直接點選,點旁邊的文字就行
<label for="box">點這里的文字看看!<input type=checkbox style="position:absolute;clip: rect(6 15 15 6)" id=box></label>
用Label標(biāo)簽還可以讓像軟件一樣使用熱鍵
<label for="box" accesskey="D"><u><b>D</b></u>issplay Username 顯示用戶名<input type=checkbox style="position:absolute;clip: rect(6 17 17 6)" id=box>
在標(biāo)題欄上顯示版權(quán)tm
<title>LEGENDRY_________™</title>
隨機播放背景音樂
<script language="JavaScript">
<!--
var sound=new Array();
sound[0]="1.mid";
sound[1]="2.mid";
sound[2]="3.mid";
sound[3]="4.mid";
sound[4]="5.mid";
sound[5]="6.mid";
sound[6]="7.mid";
var x=Math.round(Math.random()*6);
if(navigator.appName=="Microsoft Internet Explorer") {
document.write("<BGSOUND src='" + sound[x] + "' loop='-1'><br>") ;
document.write("現(xiàn)在正在播放第"+(x+1)+"首樂曲");
}
//-->
</script>
網(wǎng)頁背景顏色漸變
<body style="FILTER: progid:DXImageTransform.Microsoft.Alpha( style=1,opacity=25,finishOpacity=100,startX=50,finishX=100,startY=50,finishY=100); BACKGROUND-COLOR: skyblue">
點擊圖片鏈接時不顯示虛線框
<a href=# onfocus="blur()"><img src=XXX.gif border=0></a>
<a href=#### hidefocus=true><img src=XXX.gif border=0></img></a>
驗證兩次輸入密碼不同的JS
<FORM METHOD=POST ACTION="">
<input type="password" id="input1">
<input type="password" id="input2">
<input type="button" value="test" onclick="check()">
</FORM>
<script>
function check()
{
with(document.all){
if(input1.value!=input2.value)
{
alert("false")
input1.value = "";
input2.value = "";
}
else document.forms[0].submit();
}
}
</script>
標(biāo)題欄文字打字效果
<SCRIPT language=JavaScript>
var arr=["█ 歡","■ 歡迎","█ 歡迎光","■ 歡迎光臨"],i=0
setInterval("if(i>=arr.length)i=0;document.title=arr[i++]",300);
</SCRIPT>
數(shù)字轉(zhuǎn)換為大寫
<script language="JScript">
arr=["零","壹","貳","叁","肆","伍","陸","柒","捌","玖"];
function go(){
tmp=cinput.value;
for(i=0;i<arr.length;i++)tmp=tmp.replace(new RegExp(i,"gi"),arr[i]);
oinput.value=tmp;
}
</script>
輸入:<input id="cinput" onkeypress="return (event.keyCode>=48&&event.keyCode<=57)" value=31415926>
<br>
輸出:<input id="oinput">
<br>
<input type="button" value="確定" onclick="go()">
[推薦]經(jīng)典網(wǎng)頁代碼25例 希望加精
01.下載flash我的三種方法:
--查看源文件,找出flash的絕對路徑,復(fù)制,在flashget(或螞蟻)中點任務(wù)
,然后點新建下載任務(wù)即可。
--在IE的臨時文件夾Temporary Internet Files里把所有的東西都刪掉,然后
刷新你想要下載flash的網(wǎng)頁,即可得到你所要的flash
--使用外部軟件,推薦使用Flash Catcher,安裝后只需在你所要下載的flash上右鍵,save即可。
02.讓你的網(wǎng)頁無法另存為
<noscript><iframe src=*></iframe></noscript>
03.讓IFRAME框架內(nèi)的文檔的背景透明
<iframe src="about:<body style='background:transparent'>"
allowtransparency></iframe>
04.禁止右鍵:
<body oncontextmenu="return false" ondragstart="return false"
onselectstart ="return false" onselect="document.selection.empty()"
oncopy="document.selection.empty()" onbeforecopy="return
false"onmouseup="document.selection.empty()">
05.進入頁面后立即自動刷新?
<meta http-equiv="refresh"
content="120;url=http://www.wodutom.com/cn083">
http://www.wodutom.com/cn083,這是你自己的網(wǎng)址。
06.打開窗口即最大化
<script language="javascript">
<!-- Begin
self.moveTo(0,0)
self.resizeTo(screen.availWidth,screen.availHeight)
// End -->
</script>
防止外部遞交:
server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
if mid(server_v1,8,len(server_v2))<>server_v2 then
response.write "<br><br><center><table border=1 cellpadding=20 bordercolor=black bgcolor=#EEEEEE width=300>"
response.write "<tr><td style='font:9pt Verdana'>"
response.write "請不要從站點外部提交數(shù)據(jù)!"
response.write"<input type=submit onclick=""javascript:history.back(1)"" name=Submit class=""button"" value=""返 回"">"
response.write "</td></tr></table>"
response.write"</center>"
response.end
end if
07.能隱藏IFRAME的滾動條嗎?我知道的三種方法:
1. 設(shè)置iframe scrolling="no"
2. 被包含頁body應(yīng)用overflow:hidden
3. 被包含頁的body標(biāo)簽加scroll="no"
08.加入背景音樂
<bgsound src="mid/windblue[1].mid" loop="-1"> 只適用于IE
<embed src="music.mid" autostart="true" loop="true" hidden="true">
對Netscape ,IE 都適用
09.嵌入網(wǎng)頁
<iframe name="tt" src="01a.html" width="450" height="287"
scrolling="Auto" frameborder="0"></iframe>
10.跳轉(zhuǎn)
<meta http-equiv="refresh" content="3;URL=list.htm">
11.滾動
<MARQUEE direction=up height=146 onmouseout=start()
onmouseover=stop()
scrollAmount=4></marquee>
12.細(xì)線分隔線
<hr noshade size=0 color=#C0C0C0>
13.過度方式
<meta http-equiv="Page-Exit"
content="revealTrans(Duration=3,Transition=5)">
Duration的值為網(wǎng)頁動態(tài)過渡的時間,單位為秒。
Transition是過渡方式,它的值為0到23,分別對應(yīng)24種過渡方式。如下表:
0 盒狀收縮 1 盒狀放射
2 圓形收縮 3 圓形放射
4 由下往上 5 由上往下
6 從左至右 7 從右至左
8 垂直百葉窗 9 水平百葉窗
10 水平格狀百葉窗 11垂直格狀百葉窗
12 隨意溶解 13從左右兩端向中間展開
14從中間向左右兩端展開 15從上下兩端向中間展開
16從中間向上下兩端展開 17 從右上角向左下角展開
18 從右下角向左上角展開 19 從左上角向右下角展開
20 從左下角向右上角展開 21 水平線狀展開
22 垂直線狀展開 23 隨機產(chǎn)生一種過渡方式
15.如何控制橫向和縱向滾動條的顯隱?
<body style="overflow-y:hidden"> 去掉x軸
<body style="overflow-x:hidden"> 去掉y軸
<body scroll="no">不顯
16.怎樣在 FrontPage2000 中加入 Flash 動畫?
在 FrontPage2000 中,點擊[插入]->[高級]->[插件],在彈出的窗口中,設(shè)置
一下 Flash 文件的大小及其它信息,確定即可。
17.加入注釋的格式是:
〈!-[注釋內(nèi)容…]--〉
18.怎樣在網(wǎng)頁中加入 E-mail 鏈接并顯示預(yù)定的主題?
〈A href="mailto:Emailhost@263.net?subject=主題"〉……〈/a〉
19.定義本網(wǎng)頁關(guān)鍵字,可以在〈Head〉〈/Head〉中加入如下代碼:
〈meta name="Keywords" content="china,enterprise,business,net"〉
Content 中所包含的就是關(guān)鍵字,你可以自行設(shè)置。
這里有個技巧,你可以重復(fù)某一個單詞,這樣可以提高自己網(wǎng)站的排行位置,如:
〈meta name="Keywords" content="china,china,china,china"〉
20.IE5.0 的部分快捷鍵:
A:打開查找功能:Ctrl+F
關(guān)閉瀏覽器窗口:Ctrl+W
打開地址欄下拉列表框:F4
刷 新:F5
將當(dāng)前Web頁保存到收藏夾列表:Ctrl+D
打開當(dāng)前 IE 窗口的一個拷貝:Ctrl+N
停止下載當(dāng)前網(wǎng)頁:Esc
光標(biāo)迅速移動到網(wǎng)頁的開頭:Home
光標(biāo)迅速移動到網(wǎng)頁的尾部:End
打開新的地址鍵入窗口:Ctrl+O
打開收藏夾:Ctrl+I
打開歷史記錄文件夾:Ctrl+H
打開瀏覽器設(shè)定的默認(rèn)主頁:Alt+HOME
21.添加到收藏夾:
〈a href="javascript:window.external.addFavorite('http://鏈接','說明
');"〉添加到收藏夾〈/a〉
22.設(shè)為首頁:
〈a href=#
onclick=this.style.behavior='url(#default#homepage)';this.setHomePage
('
23.定制瀏覽器地址欄前的小圖標(biāo):
A:在網(wǎng)頁的〈head〉〈/head〉間加入以下語句:〈link rel="shortcuticon"
href="http://…/icon.ico"〉即可。其中 icon.ico 為 16x16 的圖標(biāo)文件,
顏色不要超過 16 色。
24.把滾動條放在瀏覽器窗口的左邊
A:在 <body> 中加 dir=RTL,即 <body dir=RTL>。
25.讓背景圖不滾動
IE瀏覽器支持一個 Body 屬性 bgproperties,它可以讓背景不滾動:
〈Body Background="圖片文件" bgproperties="fixed"〉
最全的表格代碼應(yīng)用[精華]
1.表格的分隔線可以隱藏
<table border rules=cols cellspacing=0 align=left> 可以隱藏橫向的分隔線
<table border rules=rows cellspacing=0 align=right>可以隱藏縱向的分隔線
<table border rules=none cellspacing=0 align=center>可以隱藏橫向和縱向的分隔線
2.表格的邊框不斷在閃
以下方法可以令表格的邊框不斷在閃,很實用的
在BODY區(qū)加上
<table border="0" width="280" id="myexample"
style="border:5px solid yellow">
<tr>
<td>加入任意的物件.加入任意的物件.
<br>加入任意的物件.加入任意的物件.
<br>加入任意的物件.加入任意的物件.</td>
</tr>
</table>
<script language="JavaScript1.2">
<!--
function flashit(){
if (!document.all)
return
if (myexample.style.borderColor=="yellow")
myexample.style.borderColor="lime"
else
myexample.style.borderColor="yellow"
}
setInterval("flashit()", 500)
//-->
</script>
3.表格分行下載
這個對表格內(nèi)容很大比較實用
在需要分行下載處加上 <tbody >
比如:
<table >
<tbody >
<tr >
<td >flsdjfsdjfkdsjf</td >
</tr >
<tr >
<td >skdjfsdjfksd</td >
</tr >
</tbody >
<tbody >
<tr >
<td >flsdjfsdjfkdsjf</td >
</tr >
<tr >
<td>skdjfsdjfksd</td >
</tr >
</tbody >
</table >
4.幾種樣式不同的表格
<table border="1" width="220" style="position: absolute; left:
11; top: 11" height="26" >
<tr>
<td width="100%">普通表格</td>
</tr>
</table>
5.正立方表格
<table border="1" width="220" bordercolorlight="#eeeeee"
bordercolordark="#000000" style="position: absolute; left: 10; top:
49" height="26">
<tr>
<td width="100%">正立方表格</td>
</tr>
</table>
6.細(xì)表格
<table border="0" frame=vsides width="219"
bgcolor="#000000" cellspacing="1" cellpadding="0"
height="22" style="position: absolute; left: 11; top: 86">
<tr bgcolor="#FFFFFF">
<td width="100%" height="2">細(xì)表格</td>
</tr>
</table>
7.立體表格
<table border="1" width="220" bordercolorlight="#ffffff"
bordercolordark="#ffffff" style="position: absolute; left: 10; top:
112" height="34">
<tr>
<td width="100%" bgcolor="#B7B7B7"
bordercolorlight="#000000" bordercolordark="#eeeeee" >立體表格</td>
</tr>
</table>
8.無名表格
<table width="220" align="center" style="position: absolute;
left: 246; top: 12" height="51">
<tr>
<td><fieldset style="width:220" align="center">
<legend> 無名表格 </legend> <p align="right"> </fieldset>
<br>
</td>
</tr>
</table>
9.表中表效果Ⅱ
<table width="220" align="center" style="position:
absolute; left: 245; top: 89" height="110">
<tr>
<td height="75"><fieldset style="width:220"
align="center"> <legend> 表中表效果Ⅱ </legend> <table
frame="hsides" border="1"
bordercolorlight="#000000" bordercolordark="#ffffff"
width="100%" cellspacing="1" cellpadding="0" height="78">
<tr bgcolor="#ffffff">
<td width="100%" height="76"></fieldset></td>
</tr>
</table>
10.表中表效果Ⅰ
<table width="220" align="center" style="position: absolute;
left: 10; top: 120" height="138" cellspacing="1"
cellpadding="0">
<tr>
<td height="126"><fieldset style="width: 220; color: #B7B7B7;
border-style: groove" align="center"> <legend style="color:
#FFFFFF; border: 1 solid #808080" > <font color="#000000">表中表效果Ⅰ</font>
</legend> <p align="right"> </fieldset>
</td>
</tr>
</table>
11.表格中邊框的顯示
只顯示上邊框 <table frame=above>
只顯示下邊框 <table frame=below>
只顯示左、右邊框 <table frame=vsides>
只顯示上、下邊框 <table frame=hsides>
只顯示左邊框 <table frame=lhs>
只顯示右邊框 <table frame=rhs>
不顯示任何邊框 <table frame=void>
1.如何用Asp判斷你的網(wǎng)站的虛擬物理路徑
答:使用Mappath方法
< p align="center" >< font size="4" face="Arial" >< b >
The Physical path to this virtual website is:
< /b >< /font >
< font color="#FF0000" size="6" face="Arial" >
< %= Server.MapPath("\")% >
< /font >< /p >
2.我如何知道使用者所用的瀏覽器?
答:使用the Request object方法
strBrowser=Request.ServerVariables("HTTP_USER_AGENT")
If Instr(strBrowser,"MSIE") < > 0 Then
Response.redirect("ForMSIEOnly.htm")
Else
Response.redirect("ForAll.htm")
End If
3.如何計算每天的平均反復(fù)訪問人數(shù)
答:解決方法
< % startdate=DateDiff("d",Now,"01/01/1990")
if strdate< 0 then startdate=startdate*-1
avgvpd=Int((usercnt)/startdate) % >
顯示結(jié)果
< % response.write(avgvpd) % >
that is it.this page have been viewed since November 10,1998
4.如何顯示隨機圖象
< % dim p,ppic,dpic
ppic=12
randomize
p=Int((ppic*rnd)+1)
dpic="graphix/randompics/"&p&".gif"
% >
顯示
< img src="< %=dpic% >" >
5.如何回到先前的頁面
答:< a href="< %=request.serverVariables("Http_REFERER")% >" >preivous page< /a >
或用圖片如:< img src="arrowback.gif" alt="< %=request.serverVariables("HTTP_REFERER")% >" >
6.如何確定對方的IP地址
答:< %=Request.serverVariables("REMOTE_ADDR)% >
7.如何鏈結(jié)到一副圖片上
答:< % @Languages=vbs cript % >
< % response.expires=0
strimagename="graphix/errors/erroriamge.gif"
response.redirect(strimagename)
% >
8.強迫輸入密碼對話框
答:把這句話放載頁面的開頭
< % response.status="401 not Authorized"
response.end
% >
9.如何傳遞變量從一頁到另一頁
答:用 HIDDEN 類型來傳遞變量
< % form method="post" action="mynextpage.asp" >
< % for each item in request.form % >
< input namee="< %=item% >" type="HIDDEN"
value="< %=server.HTMLEncode(Request.form(item)) % >" >
< % next % >
< /form >
10.為何我在 asp 程序內(nèi)使用 msgbox,程序出錯說沒有權(quán)限
答:由于 asp 是服務(wù)器運行的,如果可以在服務(wù)器顯示一個對話框,那么你只好等有人按了確定之后,你的程序才能繼續(xù)執(zhí)行,而一般服務(wù)器不會有人守著,所以微軟不得不禁止這個函數(shù),并胡亂告訴你 (:) 呵呵) 沒有權(quán)限。但是ASP和客戶端腳本結(jié)合倒可以顯示一個對話框,as follows:
< % yourVar="測試對話框"% >
< % s cript language='javas cript' >
alert("< %=yourvar% >")
< /s cript >
11.有沒有辦法保護自己的源代碼,不給人看到
答:可以去下載一個微軟的Windows s cript Encoder,它可以對asp的腳本和客戶端javas cript/vbs cript腳本進行加密。。。不過客戶端加密后,只有ie5才能執(zhí)行,服務(wù)器端腳本加密后,只有服務(wù)器上安裝有s cript engine 5(裝一個ie5就有了)才能執(zhí)行。
12.怎樣才能將 query string 從一個 asp 文件傳送到另一個?
答:前者文件加入下句: Response.Redirect("second.asp?" & Request.ServerVariables("QUERY_STRING"))
13.global.asa文件總是不起作用?
答:只有web目錄設(shè)置為web application, global.asa才有效,并且一個web application的根目錄下 global.asa才有效。IIS4可以使用Internet Service Manager設(shè)置application setting 怎樣才能使得htm文件如同asp文件一樣可以執(zhí)行腳本代碼?
14.怎樣才能使得htm文件如同asp文件一樣可以執(zhí)行腳本代碼?
答:Internet Sevices Manager - > 選擇default web site - >右鼠鍵- >菜單屬性-〉主目錄- > 應(yīng)用程序設(shè)置(Application Setting)- > 點擊按鈕 "配置"- > app mapping - >點擊按鈕"Add" - > executable browse選擇 \WINNT\SYSTEM32\INETSRV\ASP.DLL EXTENSION 輸入 htm method exclusions 輸入PUT.DELETE 全部確定即可。但是值得注意的是這樣對htm也要由asp.dll處理,效率將降低。
15.如何注冊組件
答:有兩種方法。
第一種方法:手工注冊 DLL 這種方法從IIs 3.0一直使用到IIs 4.0和其它的Web Server。它需要你在命令行方式下來執(zhí)行,進入到包含有DLL的目錄,并輸入:regsvr32 component_name.dll 例如 c:\temp\regsvr32 AspEmail.dll 它會把dll的特定信息注冊入服務(wù)器中的注冊表中。然后這個組件就可以在服務(wù)器上使用了,但是這個方法有一個缺陷。當(dāng)使用這種方法注冊完畢組件后,該組件必須要相應(yīng)的設(shè)置NT的匿名帳號有權(quán)限執(zhí)行這個dll。特別是一些組件需要讀取注冊表,所以,這個注冊組件的方法僅僅是使用在服務(wù)器上沒有MTS的情況下,要取消注冊這個dll,使用:regsvr32 /u aspobject.dll example c:\temp\regsvr32 /u aneiodbc.dll
第二種方法:使用MTS(Microsoft Transaction Server) MTS是IIS 4新增特色,但是它提供了巨大的改進。MTS允許你指定只有有特權(quán)的用戶才能夠訪問組件,大大提高了網(wǎng)站服務(wù)器上的安全性設(shè)置。在MTS上注冊組件的步驟如下:
1) 打開IIS管理控制臺。
2) 展開transaction server,右鍵單擊"pkgs installed"然后選擇"new package"。
3) 單擊"create an empty package"。
4) 給該包命名。
5) 指定administrator帳號或則使用"interactive"(如果服務(wù)器經(jīng)常是使用administrator 登陸的話)。
6) 現(xiàn)在使用右鍵單擊你剛建立的那個包下面展開后的"components"。選擇 "new then component"。
7) 選擇 "install new component" 。
8) 找到你的.dll文件然后選擇next到完成。
要刪除這個對象,只要選擇它的圖標(biāo),然后選擇delete。
附注:特別要注意第二種方法,它是用來調(diào)試自己編寫組件的最好方法,而不必每次都需要重新啟動機器了。
16. ASP與Access數(shù)據(jù)庫連接:
<%@ language=VBs cript%>
<%
dim conn,mdbfile
mdbfile=server.mappath("數(shù)據(jù)庫名稱.mdb")
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=數(shù)據(jù)庫密碼;dbq="&mdbfile
%>
17. ASP與SQL數(shù)據(jù)庫連接:
<%@ language=VBs cript%>
<%
dim conn
set conn=server.createobject("ADODB.connection")
con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服務(wù)器名稱或IP地址;UID=sa;PWD=數(shù)據(jù)庫密碼;DATABASE=數(shù)據(jù)庫名稱
%>
寫到數(shù)據(jù)庫的內(nèi)容,讀出來時沒有了空格和換行 ,該怎么解決?
或與此類似問題
問題的解答就是在寫入數(shù)據(jù)庫做Replace替換
拿出我用的一個函數(shù)供大家參考
<%
'----------Html轉(zhuǎn)換為文本:編輯時拿來做轉(zhuǎn)換
Function Html2Text(Str1)
If isNULL(Str1) Then
Html2Text=""
Exit Function
End If
Str1=Replace(Str1,"<","<")
Str1=Replace(Str1,">",">")
Str1=Replace(Str1,"<br>",VBcrlf)
Str1=Replace(Str1,""",chr(34))
Str1=Replace(Str1," "," ")
Str1=Replace(Str1,"&","&")
Html2Text=Str1
End Function
'-------------------文本轉(zhuǎn)換為Html:寫入數(shù)據(jù)庫時使用---------------
Function Text2Html(Str1)
If isNULL(Str1) Then
Text2Html=""
Exit Function
End If
Str1=Replace(Str1,"&","&")
Str1=Replace(Str1,"<","<")
Str1=Replace(Str1,">",">")
Str1=Replace(Str1,VBcrlf,"<br>")
Str1=Replace(Str1,chr(34),""")
Str1=Replace(Str1,chr(9)," ")
Str1=Replace(Str1," "," ")
Text2Html=Str1
End Function
%>
二.關(guān)于小數(shù)點前0的顯示問題
1.如果小數(shù)點后位數(shù)是固定的,那么可以使用函數(shù)FormatNumber()
示例:
<%
MyNumber=0.323
Response.Write FormatNumber(MyNumber,2,-1) '保留小數(shù)點后兩位
%>
2.如果小數(shù)點后位數(shù)不固定,那么可以如下
示例:
<%
MyNumber=0.323
If Left(Cstr(MyNumber),1)="." Then Response.Write "0"&MyNumber Else Response.Write MyNumber
%>
也可以寫一個函數(shù)
<%
Function FormatNum(Num)
If Left(Cstr(Num),1)="." Then FormatNum="0"&Num Else FormatNum=Num
End Function
%>
建立記錄集對象:
set rs=server.createobject("adodb.recordset")
rs.open SQL語句,conn,3,2
18. SQL常用命令使用方法:
(1) 數(shù)據(jù)記錄篩選:
sql="select * from 數(shù)據(jù)表 where 字段名=字段值 order by 字段名 [desc]"
sql="select * from 數(shù)據(jù)表 where 字段名 like '%字段值%' order by 字段名 [desc]"
sql="select top 10 * from 數(shù)據(jù)表 where 字段名 order by 字段名 [desc]"
sql="select * from 數(shù)據(jù)表 where 字段名 in ('值1','值2','值3')"
sql="select * from 數(shù)據(jù)表 where 字段名 between 值1 and 值2"
(2) 更新數(shù)據(jù)記錄:
sql="update 數(shù)據(jù)表 set 字段名=字段值 where 條件表達式"
sql="update 數(shù)據(jù)表 set 字段1=值1,字段2=值2 …… 字段n=值n where 條件表達式"
(3) 刪除數(shù)據(jù)記錄:
sql="delete from 數(shù)據(jù)表 where 條件表達式"
sql="delete from 數(shù)據(jù)表" (將數(shù)據(jù)表所有記錄刪除)
(4) 添加數(shù)據(jù)記錄:
sql="insert into 數(shù)據(jù)表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)"
sql="insert into 目標(biāo)數(shù)據(jù)表 select * from 源數(shù)據(jù)表" (把源數(shù)據(jù)表的記錄添加到目標(biāo)數(shù)據(jù)表)
(5) 數(shù)據(jù)記錄統(tǒng)計函數(shù):
AVG(字段名) 得出一個表格欄平均值
COUNT(*|字段名) 對數(shù)據(jù)行數(shù)的統(tǒng)計或?qū)δ骋粰谟兄档臄?shù)據(jù)行數(shù)統(tǒng)計
MAX(字段名) 取得一個表格欄最大的值
MIN(字段名) 取得一個表格欄最小的值
SUM(字段名) 把數(shù)據(jù)欄的值相加
引用以上函數(shù)的方法:
sql="select sum(字段名) as 別名 from 數(shù)據(jù)表 where 條件表達式"
set rs=conn.excute(sql)
用 rs("別名") 獲取統(tǒng)的計值,其它函數(shù)運用同上。
(5) 數(shù)據(jù)表的建立和刪除:
CREATE TABLE 數(shù)據(jù)表名稱(字段1 類型1(長度),字段2 類型2(長度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())
DROP TABLE 數(shù)據(jù)表名稱 (永久性刪除一個數(shù)據(jù)表)
19. 記錄集對象的方法:
rs.movenext 將記錄指針從當(dāng)前的位置向下移一行
rs.moveprevious 將記錄指針從當(dāng)前的位置向上移一行
rs.movefirst 將記錄指針移到數(shù)據(jù)表第一行
rs.movelast 將記錄指針移到數(shù)據(jù)表最后一行
rs.absoluteposition=N 將記錄指針移到數(shù)據(jù)表第N行
rs.absolutepage=N 將記錄指針移到第N頁的第一行
rs.pagesize=N 設(shè)置每頁為N條記錄
rs.pagecount 根據(jù) pagesize 的設(shè)置返回總頁數(shù)
rs.recordcount 返回記錄總數(shù)
rs.bof 返回記錄指針是否超出數(shù)據(jù)表首端,true表示是,false為否
rs.eof 返回記錄指針是否超出數(shù)據(jù)表末端,true表示是,false為否
rs.delete 刪除當(dāng)前記錄,但記錄指針不會向下移動
rs.addnew 添加記錄到數(shù)據(jù)表末端
rs.update 更新數(shù)據(jù)表記錄
---------------------------------------
20 Recordset對象方法
Open方法
recordset.Open Source,ActiveConnection,CursorType,LockType,Options
Source
Recordset對象可以通過Source屬性來連接Command對象。Source參數(shù)可以是一個Command對象名稱、一段SQL命令、一個指定的數(shù)據(jù)表名稱或是一個Stored Procedure。假如省略這個參數(shù),系統(tǒng)則采用Recordset對象的Source屬性。
ActiveConnection
Recordset對象可以通過ActiveConnection屬性來連接Connection對象。這里的ActiveConnection可以是一個Connection對象或是一串包含數(shù)據(jù)庫連接信息(ConnectionString)的字符串參數(shù)。
CursorType
Recordset對象Open方法的CursorType參數(shù)表示將以什么樣的游標(biāo)類型啟動數(shù)據(jù),包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下:
--------------------------------------------------------------
常數(shù) 常數(shù)值 說明
-------------------------------------------------------------
adOpenForwardOnly 0 缺省值,啟動一個只能向前移動的游標(biāo)(Forward Only)。
adOpenKeyset 1 啟動一個Keyset類型的游標(biāo)。
adOpenDynamic 2 啟動一個Dynamic類型的游標(biāo)。
adOpenStatic 3 啟動一個Static類型的游標(biāo)。
-------------------------------------------------------------
以上幾個游標(biāo)類型將直接影響到Recordset對象所有的屬性和方法,以下列表說明他們之間的區(qū)別。
-------------------------------------------------------------
Recordset屬性 adOpenForwardOnly adOpenKeyset adOpenDynamic adOpenStatic
-------------------------------------------------------------
ADO Recordset的屬性和方法的有效性
ADO Recordset的屬性和方法在不同的光標(biāo)類型下,有不同的表現(xiàn),這里列出了其詳細(xì)情況列表
ADO Recordset屬性的有效性列表
屬性 ForwardOnly Dynamic Keyset Static
AbsolutePage 無效 無效 讀/寫 讀/寫
AbsolutePosition 無效 無效 讀/寫 讀/寫
ActiveConnection 讀/寫 讀/寫 讀/寫 讀/寫
BOF 只讀 只讀 只讀 只讀
Bookmark 無效 無效 讀/寫 讀/寫
CacheSize 讀/寫 讀/寫 讀/寫 讀/寫
CursorLocation 讀/寫 讀/寫 讀/寫 讀/寫
CursorType 讀/寫 讀/寫 讀/寫 讀/寫
EditMode 只讀 只讀 只讀 只讀
EOF 只讀 只讀 只讀 只讀
Filter 讀/寫 讀/寫 讀/寫 讀/寫
LockType 讀/寫 讀/寫 讀/寫 讀/寫
MarshalOptions 讀/寫 讀/寫 讀/寫 讀/寫
MaxRecords 讀/寫 讀/寫 讀/寫 讀/寫
PageCount 無效 無效 只讀 只讀
PageSize 讀/寫 讀/寫 讀/寫 讀/寫
RecordCount 無效 無效 只讀 只讀
Source 讀/寫 讀/寫 讀/寫 讀/寫
State 只讀 只讀 只讀 只讀
Status 只讀 只讀 只讀 只讀
在使用Microsoft OLE DB Provider for ODBC.1.0時候,屬性AbsolutePosition
和AbsolutePage是只寫的
ADO Recordse方法的有效性列表
方法 ForwardOnly Dynamic Keyset Static
AddNew 是 是 是 是
CancelBatch 是 是 是 是
CancelUpdate 是 是 是 是
Clone 否 否 是 是
Close 是 是 是 是
Delete 是 是 是 是
GetRows 是 是 是 是
Move 是 是 是 是
MoveFirst 是 是 是 是
MoveLast 否 是 是 是
MoveNext 是 是 是 是
MovePrevious 否 是 是 是
NextRecordset * 是 是 是 是
Open 是 是 是 是
Requery 是 是 是 是
Resync 否 否 是 是
Supports 是 是 是 是
Update 是 是 是 是
UpdateBatch 是 是 是 是
* Microsoft Access databases.不支持
--------------------------------------------------------------
其中NextRecordset方法并不適用于Microsoft Access數(shù)據(jù)庫。
LockType
Recordset對象Open方法的LockType參數(shù)表示要采用的Lock類型,如果忽略這個參數(shù),那么系統(tǒng)會以Recordset對象的LockType屬性為預(yù)設(shè)值。LockType參數(shù)包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下:
-------------------------------------------------------------
常數(shù) 常數(shù)值 說明
--------------------------------------------------------------
adLockReadOnly 1 缺省值,Recordset對象以只讀方式啟動,無法運行AddNew、Update及Delete等方法
adLockPrssimistic 2 當(dāng)數(shù)據(jù)源正在更新時,系統(tǒng)會暫時鎖住其他用戶的動作,以保持?jǐn)?shù)據(jù)一致性。
adLockOptimistic 3 當(dāng)數(shù)據(jù)源正在更新時,系統(tǒng)并不會鎖住其他用戶的動作,其他用戶可以對數(shù)據(jù)進行增、刪、改的操作。
adLockBatchOptimistic 4 當(dāng)數(shù)據(jù)源正在更新時,其他用戶必須將CursorLocation屬性改為adUdeClientBatch才能對數(shù)據(jù)進行增、
刪、改的操作。
------------------------------------------------------
RS.OPEN SQL,CONN,A,B
A:
ADOPENFORWARDONLY(=0)
只讀,且當(dāng)前數(shù)據(jù)記錄只能向下移動
ADOPENKEYSET(=1)
只讀,當(dāng)前數(shù)據(jù)記錄可自由移動
ADOPENDYNAMIC(=2)
可讀寫,當(dāng)前數(shù)據(jù)記錄可自由移動
ADOPENSTATIC(=3)
可讀寫,當(dāng)前數(shù)據(jù)記錄可自由移動,可看到新增記錄
B:
ADLOCKREADONLY(=1)
缺省鎖定類型,記錄集是只讀的,不能修改記錄
ADLOCKPESSIMISTIC(=2)
悲觀鎖定,當(dāng)修改記錄時,數(shù)據(jù)提供者將嘗試鎖定記錄以確保成功地編輯記錄。只要編輯一開始,則立即鎖住記錄。
ADLOCKOPTIMISTIC(=3)
樂觀鎖定 ,直到用Update方法提交更新記錄時才鎖定記錄。 ADLOCKBATCHOPTIMISTIC(=4)
批量樂觀鎖定,允許修改多個記錄,只有調(diào)用UpdateBatch方法后才鎖定記錄。
當(dāng)不需要改動任何記錄時,應(yīng)該使用只讀的記錄集,這樣提供者不用做任何檢測。
對于一般的使用,樂觀的鎖定可能是最好的選擇,因為記錄只被鎖定一小段時間,
數(shù)據(jù)在這段時間被更新。這減少了資源的使用。
成員表
下面的表格列出了 document 對象引出的成員。請單擊左側(cè)的標(biāo)簽來選擇你想要查看的成員類型。
|
屬性 |
|
| |
|