inode 譯成中文就是索引節點。每個存儲設備或存儲設備的分區(存儲設備是硬盤、軟盤、U盤 ... ... )被格式化為文件系統后,應該有兩部份,一部份是inode,另一部份是Block,Block是用來存儲數據用的。而inode呢,就是用來存儲這些數據的信息,這些信息包括文件大小、屬主、歸屬的用戶組、讀寫權限等。inode為每個文件進行信息索引,所以就有了inode的數值。操作系統根據指令,能通過inode值最快的找到相對應的文件。
做個比喻,比如一本書,存儲設備或分區就相當于這本書,Block相當于書中的每一頁,inode 就相當于這本書前面的目錄,一本書有很多的內容,如果想查找某部份的內容,我們可以先查目錄,通過目錄能最快的找到我們想要看的內容。雖然不太恰當,但還是比較形象。
當我們用ls 查看某個目錄或文件時,如果加上-i 參數,就可以看到inode節點了;比如我們前面所說的例子;
[root@localhost ~]# ls -li lsfile.sh
2408949 -rwxr-xr-x 1 root root 7 04-21 12:47 lsfile.sh
lsfile.sh 的inode值是 2408949 ; 查看一個文件或目錄的inode,要通過ls 命令的的 -i參數。
2.10 inode 相同的文件是硬鏈接文件;
在Linux 文件系統中,inode值相同的文件是硬鏈接文件,也就是說,不同的文件名,inode可能是相同的,一個inode值可以對應多個文件。理解鏈接文件并不難,看看例子就會了。在Linux中,鏈接文件是通過ln工具來創建的。
2.11 創建硬鏈接,硬鏈接和源文件關系;
用ln 創建文件硬鏈接的語法:
# ln 源文件 目標文件
下面我們舉一個例子,在這個例子中,我們要為sun.txt 創建其硬鏈接sun002.txt。然后看一下sun.txt和sun002.txt的屬性的變化;
[root@localhost ~]# ls -li sun.txt 注:查看sun.txt的屬性;
2408263 -rw-r--r-- 1 root root 29 04-22 21:02 sun.txt 注:這是sun.txt的屬性;
[root@localhost ~]# ln sun.txt sun002.txt 注:我們通過ln 來創建sun.txt的硬鏈接文件sun002.txt
[root@localhost ~]# ls -li sun* 注:我們列一下sun.txt 和sun002.txt
2408263 -rw-r--r-- 2 root root 29 04-22 21:02 sun002.txt
2408263 -rw-r--r-- 2 root root 29 04-22 21:02 sun.txt
我們可以看到sun.txt在沒有創建硬鏈接文件sun002.txt的時候,其鏈接個數是1(也就是-rw-r--r--后的那個數值),創建了硬鏈接sun002.txt創建后,這個值變成了2。也就是說,我們每次為sun.txt創建一個新的硬鏈接文件后,其硬鏈接個數都會增加1。
inode值相同的文件,他們的關系是互為硬鏈接的關系。當我們修改其中一個文件的內容時,互為硬鏈接的文件的內容也會跟著變化。如果我們刪除互為硬鏈接關系的某個文件時,其它的文件并不受影響。比如我們把sun.txt刪除后,我們還是一樣能看到sun002.txt的內容,并且sun02.txt仍是存在的。
可以這么理解,互為硬鏈接關系的文件,他們好象是克隆體,他們的屬性幾乎是完全一樣;
下面的例子,我們把sun.txt刪除,然后我們看一下sun002.txt 是不是能看到其內容。
[root@localhost ~]# rm -rf sun.txt
[root@localhost ~]# more sun002.txt
注意:硬鏈接不能為目錄創建,只有文件才能創建硬鏈接。
2.12 軟鏈接的創建,及軟接與源文件的關系;
創建軟鏈接(也被稱為符號鏈接)的語法;
# ln -s 源文文件或目錄 目標文件或目錄
軟鏈接也叫符號鏈接,他和硬鏈接有所不同,軟鏈接文件只是其源文件的一個標記。當我們刪除了源文件后,鏈接文件不能獨立存在,雖然仍保留文件名,但我們卻不能查看軟鏈接文件的內容了。
[root@localhost ~]# ls -li linuxsir001.txt
2408274 -rw-r--r-- 1 root root 29 04-22 21:53 linuxsir001.txt
[root@localhost ~]# ln -s linuxsir001.txt linuxsir002.txt
[root@localhost ~]# ls -li linuxsir001.txt linuxsir002.txt
2408274 -rw-r--r-- 1 root root 29 04-22 21:53 linuxsir001.txt
2408795 lrwxrwxrwx 1 root root 15 04-22 21:54 linuxsir002.txt -> linuxsir001.txt
解釋
上面的例子,首先我們查看 linuxsir001.txt 的屬性,比如inode 、所屬文件種類、創建或修改時間等... ...我們來對比一下:
首先 對比一下節點:兩個文件的節點不同;
其次 兩個文件的歸屬的種類不同 linuxsir001.txt是-,也就是普通文件,而linuxsir002.txt 是l,它是一個鏈接文件;
第三 兩個文件的讀寫權限不同 linuxsir001.txt 是rw-r--r-- ,而linuxsir002.txt的讀寫權限是 rwxrwxrwx
第三 兩者的硬鏈接個數相同;都是1
第四 兩文件的屬主和所歸屬的用戶組相同;
第五 修改(或訪問、創建)時間不同;
我們還注意到了linuxsir002.txt 后面有一個標記 ->,這表示linuxsir002.txt 是linuxsir001.txt的軟鏈接文件。
值得我們注意的是:當我們修改鏈接文件的內容時,就意味著我們在修改源文件的內容。當然源文件的屬性也會發生改變,鏈接文件的屬性并不會發生變化。當我們把源文件刪除后,鏈接文件只存在一個文件名,因為失去了源文件,所以軟鏈接文件也就不存在了。這一點和硬鏈接是不同的;
[root@localhost ~]# rm -rf linuxsir001.txt 注:刪除linuxsir001.txt
[root@localhost ~]# ls -li linuxsir002.txt 注:查看linuxsir002 的屬性;
2408795 lrwxrwxrwx 1 root root 15 04-22 21:54 linuxsir002.txt -> linuxsir001.txt
[root@localhost ~]# more linuxsir002.txt 注:查看linuxsir002.txt的內容;
linuxsir002.txt: 沒有那個文件或目錄 注:得到提示,linuxsir002.txt不存在。
上面的例子告訴我們,如果一個鏈接文件失去了源,就意味著他已經不存在了;
我們可以看到軟鏈接文件,其實只是源文件的一個標記,當源文件失去時,他也就是存在了。軟鏈接文件只是占用了inode來存儲軟鏈接文件屬性等信息,但文件存儲是指向源文件的。
軟件鏈接,可以為文件或目錄都適用。無論是軟鏈接還是硬鏈接,都可以用rm來刪除。rm工具是通用的。
參考資料:http://techcenter.dicder.com/2006/0908/content_185.htm 寫一些關于PL/SQL的語法,免得等到用到的時候還要去亂翻。
1??刂屏鞒?if,while)
2。循環(for)
3。游標(cursor)
4。異常處理(exception)
1??刂屏鞒蹋ǎ?br />
A.條件語句
IF <statement> THEN
?? PL/SQL
END IF;
IF <statement> THEN
?? PL/SQL
ELSE
?? PL/SQL
END IF;
IF
<statement> THEN
?? PL/SQL
ELSIF <statement> THEN
?? PL/SQL
END IF;
2。循環
A.simple loop
LOOP
?? SQL
?? EXIT WHEN <statement>;
END LOOP;
LOOP
?? SQL
?? IF
<statement>
THEN
?? EXIT;
?? END IF;
END LOOP;
B.While loop
WHILE <statement> LOOP
?? SQL
END LOOP;
C.For loop
FOR $counter in $low .. $high LOOP
?? SQL
END LOOP
3。游標
在PL/SQL程序中定義的游標叫做顯式游標。
A.顯式游標的處理由四個部分組成:
cursor $cursorname is $Query; --定義游標
open $cursorname; --打開游標
fetch $cursorname into $othervariable --把游標中的東西取出
close $cursorname??? --關閉游標
B.游標屬性
%found?? ?? ?? 布爾型屬性,當最近一次讀紀錄成功
時
,為true.
%nofound 失敗時,為false.
%isopen
%rowcount?? ?? 返回已從游標中讀取的記錄數。
C.參數化游標
所有的SQL語句在上下文區內部都是可執行的,因此都有一個游標指向上下文區,此游標就是所謂的SQL游標。
與顯式游標不同,SQL游標不被程序打開和關閉。
4.異常處理概念
異常處理是用來處理正常執行過程中未預料的事件。如果PL/SQL程序塊一旦產生異常而又沒有指出如何處理時,程序會自動終止。
異常處理部分放在PL/SQL的后半部分,結構為:
EXCEPTION
?????? WHEN first_exception THEN <code to handle first exception>
?????? WHEN second_exception THEN <code to handle second exception>
?????? WHEN OTHERS THEN <
code to handle second exception
>? --OTHERS必須放在最后
異常分為預定義和用戶定義兩種。
用戶定義的異常是通過顯式使用RAISE語句來引發。如
DECLARE
? e_TooManyStudents EXCEPTION;? -- 類型為Exception,用于指示錯誤條件
? v_CurrentStudents NUMBER(3);? -- HIS-101學生注冊當前號
? v_MaxStudents NUMBER(3);????? -- HIS-101學生注冊允許的最大號
BEGIN
/* 找出注冊學生當前號和允許的最大號 */
? SELECT current_students, max_students
??? INTO v_CurrentStudents, v_MaxStudents
??? FROM classes
??? WHERE department = 'HIS' AND course = 101;
? /* 檢查學生的號 */
? IF v_CurrentStudents > v_MaxStudents THEN
/* 太多的學生注冊,則觸發例外處理 */
? RAISE e_TooManyStudents;
? END IF;
EXCEPTION
? WHEN e_TooManyStudents THEN
??? /* 當太多的學生注冊,就插入信息解釋發生過錯誤 */
??? INSERT INTO log_table (info) VALUES ('History 101 has ' || v_CurrentStudents ||
????? 'students: max allowed is ' || v_MaxStudents);
END;
END;
用戶定義的的異常處理
可以使用RAISE_APPLICATION_ERROR來創建自己的錯誤處理:
RAISE_APPLICATION_ERROR(error_number,error_message,[keep_errors]);
其中 error_number是從-20000到-20999之間的參數; error_message是相應的提示信息,小于512字節。如:
CREATE OR REPLACE PROCEDURE Register (
p_StudentID IN students.id%TYPE,
p_Department IN classes.department%TYPE,
p_Course IN classes.course%TYPE) AS
v_CurrentStudents NUMBER;? -- 班上學生的當前號
v_MaxStudents NUMBER;????? -- 班上學生的最大號
BEGIN
/* 找出學生的當前號和最大號 */
SELECT current_students, max_students
?INTO v_CurrentStudents, v_MaxStudents
FROM classes
WHERE course = p_Course
AND department = p_Department;
/*
確認另外的學生是否有足夠的教室
*/
IF v_CurrentStudents + 1 > v_MaxStudents THEN
RAISE_APPLICATION_ERROR(-20000, 'Can''t add more students to ' ||
p_Department || ' ' || p_Course);
END IF;
/*
加一個學生在本班
*/
ClassPackage.AddStudent(p_StudentID, p_Department, p_Course);
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20001, p_Department || ' ' || p_Course ||
??? ?? ?? ' doesn''t exist!');
END Register;
???????????? 在《外部數據庫的連接原理》一講中我們說過,ODBC提供對多種數據庫的支持,如dBase、Access、MS?SQL?
????????????Server及Oracle,也就是說運用ODBC數據源中所提供的連接代碼,我們可以實現對多種數據庫的連接。以連接Access數據庫為例,ODBC數據源連接文本的格式是:
???????????? “Driver={數據庫驅動程序};Dbq=數據庫文件;”
???????????? 在以上連接文本中,如果數據庫跟程序在同一目錄下,或者用變量DefaultDir指定了數據庫所在目錄,則數據庫文件可以不用全路徑名,如下即可:
???????????? “ODBC;DBQ=MSAccess.mdb;Driver={Microsoft?Access?Driver?(*.mdb)};”
???????????? 如下也可:
???????????? “ODBC;DBQ=MSAccess.mdb;DefaultDir=d:\Downloads\e21;Driver={Microsoft?
????????????Access?Driver?(*.mdb)};”
???????????? 如果數據庫跟程序不在同一目錄下,或者沒有用變量DefaultDir指定數據庫所在目錄,則數據庫文件需要用全路徑名,如下:
???????????? “ODBC;DBQ=E:\Quake?III?Arena\MSAccess.mdb;Driver={Microsoft?Access?
????????????Driver?(*.mdb)};”
???????????? 以上所說的是連接Access數據庫的格式,那么連接其他數據庫的ODBC數據源連接文本又是怎樣的?連接不同類型的數據庫要使用不同的對應驅動程序,沒忘記吧!不同的驅動程序當然它們的參數組合也就不同了,每一種不同驅動程序都有其特定的的參數形式:?
???????????? ?、拧S?Access?ODBC?DSNless?連接:
???????????? ☆、參數:Driver?設置值:{Microsoft?Access?Driver?(*.mdb)}
???????????? ☆、參數:Dbq?設置值:實際路徑文件名稱
???????????? ☆、例句:
???????????? “Driver={Microsoft?Access?Driver?
????????????(*.mdb)};Dbq=c:\somepath\dbname.mdb;Uid=Admin;Pwd=pass;?”
???????????? ?、?、dBase?ODBC?DSNless?連接:?
???????????? ☆、參數:Driver?設置值:{Microsoft?dBASE?Driver?(*.dbf)}
???????????? ☆、參數:Dbq?設置值:實際路徑文件名稱
???????????? ☆、例句:
???????????? “Driver={Microsoft?dBASE?Driver?
????????????(*.dbf)};DriverID=277;Dbq=c:\somepath\dbname.dbf;?”
???????????? ?、恰racle?ODBC?DSNless?連接:
???????????? ☆、參數:Driver?設置值:{Microsoft?ODBC?for?Oracle}
???????????? ☆、參數:Dbq?設置值:實際路徑文件名稱
???????????? ☆、例句:
???????????? “Driver={Microsoft?ODBC?for?
????????????Oracle};Server=OracleServer.world;Uid=admin;Pwd=pass;?”
???????????? ?、取S?SQL?Server?DSNless?連接:?
???????????? ☆、參數:Driver?設置值:{SQL?Server};
???????????? ☆、參數:Server?設置值:服務器名稱
???????????? ☆、參數:Database?設置值:數據表名稱
???????????? ☆、參數:Uid?設置值:用戶名稱
???????????? ☆、參數:Pwd?設置值:密碼
???????????? ☆、例句:
???????????? “Driver={SQL?
????????????Server};Server=servername;Database=dbname;Uid=sa;Pwd=pass;?”
???????????? ⑸、MS?Text?Driver?DSNless?連接:?
???????????? ☆、參數:Driver?設置值:{Microsoft?Text?Driver?(*.txt;?*.csv)}
???????????? ☆、參數:Dbq?設置值:實際路徑文件名稱
???????????? ☆、例句:
???????????? “Driver={Microsoft?Text?Driver?(*.txt;?
????????????*.csv)};Dbq=c:\somepath\;Extensions=asc,csv,tab,txt;Persist?Security?
????????????Info=False;?”
???????????? ?、省isual?Foxpro?DSNless?連接:
???????????? ☆、參數:Driver?設置值:{Microsoft?Visual?FoxPro?Driver}
???????????? ☆、參數:SourceType?設置值:DBC
???????????? ☆、參數:SourceDB?設置值:實際路徑文件名稱?
???????????? ☆、例句:
???????????? “Driver={Microsoft?Visual?FoxPro?
????????????Driver};SourceType=DBC;SourceDB=c:\somepath\dbname.dbc;Exclusive=No;”?
???????????? ⑺、MySQL?DSNless?連接:
???????????? ☆、參數:Driver?設置值:{mysql}
???????????? ☆、參數:database?設置值:數據表名稱
???????????? ☆、參數:uid?設置值:用戶名稱
???????????? ☆、參數:pwd?設置值:密碼
???????????? ☆、例句:?
???????????? “driver={mysql};?
????????????database=yourdatabase;uid=username;pwd=password;option=16386”
????????????*******************************************************************
????????????SQL語言簡介?
???????????? 在上一講中我們介紹了連接外部數據庫的方法,那么連接之后怎樣對外部數據庫進行讀取、顯示、增刪、更新、查詢等操作呢?這些操作需要通過外部數據庫等對象調用SQL指令才能完成。
???????????? ?、?、什么是SQL語言
???????????? SQL(Structure?Query?Languge,結構化查詢語言)是一種數據庫專用的計算機語言,不管是Oracle、MS?
????????????SQL?
????????????、Access、MySQL或其他公司的數據庫,也不管數據庫建立在大型主機或個人計算機上,都可以使用SQL語言來訪問和修改數據庫的內容。雖然不同公司的數據庫軟件多多少少會增加一些專屬的SQL語法,但大體上,它們還是遵循ASNI(美國國家標準協會)制定的SQL標準。因為SQL語言具有易學習及閱讀等特性,所以SQL逐漸被各種數據庫廠商采用,而成為一種共通的標準查詢語言。只要你學會SQL,即可操作各種數據庫如Visual?
????????????Foxpro、Access、dBase等等??傊琒QL語言是各種數據庫都可以使用的數據庫查詢語言。
???????????? SQL語言不僅僅具有查詢數據庫的功能,而且可以對數據庫完成選取、增刪、更新與跳轉等各種操作。
???????????? ?、?、SQL語言的組成
???????????? SQL語言是由命令(函數)、子句、運算符、加總函數及通配符等組成,分述如下:
???????????? 1、命令
???????????? SQL的命令可分成數據定義語言與數據操作語言,數據定義語言可用來建立新的數據庫、數據表、字段及索引等,本教程不予介紹;另一為數據操作語言,可用來建立查詢表、排序、篩選數據、修改、增刪等動作。數據定義語言命令常用的有選擇、添加、刪除和修改這四種:
???????????? ?、?、命令:SELECT
???????????? 中文意思:選擇
???????????? 說明:用于找出合乎條件的記錄
???????????? ⑵、命令:INSERT
???????????? 中文意思:插入
???????????? 說明:用于增加一筆記錄或合并兩個數據表
???????????? ?、恰⒚睿篣PDATE
???????????? 中文意思:更新
???????????? 說明:用于更正合乎條件的記錄
???????????? ?、?、命令:DELETE
???????????? 中文意思:刪除
???????????? 說明:用于刪除合乎條件的記錄
???????????? 2、子句
???????????? 子句是用于設定命令要操作的對象(即參數),SQL所用的子句如下:
???????????? ?、?、子句:FROM?
???????????? 中文意思:數據表
???????????? 說明:用于指定數據表
???????????? ⑵、子句:WHERE
???????????? 中文意思:條件
???????????? 說明:用于設定條件
???????????? ?、恰ROUP?BY
???????????? 中文意思:分組(合并)
???????????? 說明:用于設定分組
???????????? ?、?、ORDER?BY
???????????? 中文意思:排序
???????????? 說明:用于設定輸出的順序及字段
???????????? 3、運算符
???????????? 子句參數中的運算符使子句構成不同的語法格式,如“字段1='100'”、“字段1>'100'”等。運算符又分邏輯運算符與比較運算符。
???????????? ◇邏輯運算符如下:
???????????? ⑴、運算符:AND
???????????? 中文意思:并且
???????????? 說明:邏輯且
???????????? ⑵、運算符:OR?
???????????? 中文意思:或者
???????????? 說明:邏輯非
???????????? ?、?、運算符:NOT
???????????? 中文意思:取反
???????????? 說明:邏輯非或邏輯反
???????????? ◇比較運算符如下:
???????????? ?、?、運算符:<?說明:小于
???????????? ?、?、運算符:≤?說明:小于等于
???????????? ?、?、運算符:≥?說明:大于等于
???????????? ?、?、運算符:>?說明:大于
???????????? ⑸、運算符:=?說明:等于
???????????? ?、省⑦\算符:<>?說明:不等于
???????????? ?、恕⑦\算符:BETWEEN?說明:用于設定范圍?中文意思:在...之間
???????????? ?、?、運算符:LIKE?說明:用于通配設定?中文意思:如同
???????????? ?、汀⑦\算符:IN?說明:用于集合設定?中文意思:在...之內
???????????? 4、加總函數
???????????? 加總函數常常運用在命令的參數中,如:“SELECT?SUM(數學),AVG(數學)?FROM?成績單”。
???????????? ⑴、加總函數:AVG?
???????????? 中文意思:平均
???????????? 說明:用于求指定條件的平均?
???????????? ?、啤⒓涌偤瘮担篊OUNT
???????????? 中文意思:數量
???????????? 說明:用于求指定的數量
???????????? ⑶、加總函數:SUM
???????????? 中文意思:和
???????????? 說明:用于求指定條件的和
???????????? ?、?、加總函數:MAX
???????????? 中文意思:最大值
???????????? 說明:用于求指定條件的最大值
???????????? ⑸、加總函數:MIN
???????????? 中文意思:最小值
???????????? 說明:用于求指定條件的最小值
???????????? 5、通配符
???????????? ?、?、通配符:%?意義:任何長度的字符串(包括0)
???????????? ⑵、通配符:_?意義:下劃線表示任何一個字符
???????????? ?、?、通配符:[]?意義:中括號表示某個范圍內的一個字符
???????????? 在下一講將說明SQL語言是怎樣把命令(函數)、子句、運算符、及加總函數等組合在一起的。
????????????*************************************************************************
????????????嵌入式SQL的應用?
???????????? SQL語句可以單獨在數據庫系統本身中執行,但如果運用在其他編程工具所編制的程序中,一般不能單獨執行,而要把SQL語句嵌入到高級語言(如易語言)中使用,通過高級語言的命令和方法來調用之,此時SQL稱為嵌入式SQL。調用SQL語句的程序稱為宿主程序,在易語言中一般是把SQL語句作為宿主程序的唯一參數來直接處理。嵌入式SQL在使用上有一些規定,在易語言中目前的版本規定如下:
???????????? ?、拧⒃诔绦蛑幸獏^分SQL語句和宿主語言的語句。在易語言中好區分,因為SQL語句形式是英文的,而易語言是中文的,但在實際應用時仍然有可能會混亂,所以易語言要把SQL語句轉化為文本型才能調用,即嵌入式SQL語句兩邊要用雙引號來標示。
???????????? ?、?、允許SQL語句使用宿主程序的變量,但使用時要將宿主程序的變量跟外部數據庫中表格的字段名區別開來,區別方法如下:
???????????? ①、在易語言中要將變量類型轉化為文本型變量才能被SQL文本相加使用,比如下面的例子中有一個叫“數字1”的整數類型變量,插入到SQL文本中是這樣表達:
???????????? 外部數據庫1.查詢?(“select?*?from?chj?where?”?+?組合框1.內容?+?“=”?+?到文本?(數字1))
???????????? ②、包含字段名的SQL文本兩邊加雙引號,變量名不能在雙引號內,如上例。
???????????? ?、?、要將字段名跟字段值區別開來,區別方法如下:
???????????? ?、?、對于文本類型的字段,在其字段值兩邊要加上“'”號標示其文本值,代表語法是:字段名稱=‘文本值’。如下:
???????????? 外部數據庫1.查詢?(“select?*?from?chj?where?姓名='山大王'”)
???????????? 又如下面“查找編輯框.內容”中的字段值是文本型,嵌入式SQL語句如下:
???????????? 外部數據庫1.查詢?(“select?*?from?chj?where?姓名==”?+?“'”?+?查找編輯框.內容?+?
“'”)
???????????? ?、凇τ跀底诸愋偷淖侄危赟QL語句中表示其字段值,兩邊不加符號標示,代表語法是:字段名稱=數字值。如下兩例:
???????????? 外部數據庫1.查詢?(“select?*?from?chj?where?”?+?組合框1.內容?+?“=”?+?查找編輯框.內容)?
???????????? 外部數據庫1.查詢?(“select?*?from?chj?where?學號=17”)
???????????? ?、?、對于日期時間類型的字段,在其字段值兩邊要加上“#”號標示其時間值,代表語法是:字段名稱=#時間值#。如下兩例:
???????????? 外部數據庫1.查詢?(“select?*?from?chj?where?入學時間?BETWEEN?#2001-01-01#?and?
????????????#2002-01-01#”)
???????????? 外部數據庫1.查詢?(“select?*?from?chj?where?”?+?組合框1.內容?+?“=”?+?“#”?+?
????????????查找編輯框.內容?+?“#”)
???????????? ④、也可以將SQL語句中的字段名(尤其是中文名)可用中括號括住,如:[字段名]。
????????????
???????????? ?、?、SQL語句要用半角輸入法輸入,否則可能會出錯。
???????????? 那么在易語言中怎樣調用SQL語句呢?一般是在外部數據庫對象(控件)的方法中調用,試概括如下:
???????????? ⑴、對外部數據庫進行查詢的方法。
???????????? 對外部數據庫的查詢就是在對外部數據庫不加編輯改動的前提下,只通過記錄集來對數據庫進行顯示、查詢、篩選、排序和記錄集的合并等操作。
???????????? 所有查詢類的方法起源于下面這個語句,其他查詢類語句是對這個語句的調用(將此語句作為唯一的參數),該語句如下:
???????????? 外部數據庫.查詢?(查詢類SQL語句)
???????????? 也可這樣表達:
???????????? 外部數據庫.查詢?(“SELECT...FROM...[WHERE]...[GROUP?BY]...[ORDER?BY]...?”)
???????????? 該方法是對當前被打開數據庫進行數據查詢,返回的結果稱為“記錄集句柄”(即記錄集的標記)。注意當不再使用此記錄集時,必須使用“關閉記錄集”將其關閉,如果失敗,返回0。在易語言中,將以上語句等同于記錄集句柄以作為其他查詢類語句的參數。為了使該參數在所有子程序中都能應用,我們一般把它設置為整數型全局變量,并將其值設置如下:
???????????? 記錄集句柄=外部數據庫.查詢?(查詢類SQL語句)
???????????? 由于易語言要把SQL語句轉化為文本型才能調用,所以嵌入式SQL語句兩邊要有雙引號,例句:
???????????? 記錄集句柄?=?外部數據庫1.查詢?(“select?*?from?chj?”)
???????????? ※?“chj”是外部數據庫中一個表的名稱
???????????? 又如,欲得到排序的記錄集,應象下面這樣賦值:
???????????? 記錄集句柄?=?外部數據庫1.查詢?(“SELECT?*?FROM?chj?ORDER?BY?語文?DESC”)
???????????? 現將外部數據庫控件中其他的查詢類方法列舉如下:
???????????? ?、?、外部數據庫.重新查詢?(記錄集句柄)?即:
???????????? 外部數據庫.重新查詢?(外部數據庫.查詢?(查詢類SQL語句))
???????????? 例句:外部數據庫1.重新查詢?(外部數據庫1.查詢?(“select?*?from?chj?”))?
???????????? ?、凇⑼獠繑祿欤子涗浨?(記錄集句柄)?即:
???????????? 外部數據庫.首記錄前?(外部數據庫.查詢?(查詢類SQL語句))
???????????? 例句:外部數據庫1.首記錄前?(記錄集句柄)
???????????? ?、?、外部數據庫.尾記錄后?(記錄集句柄)
???????????? ?、堋⑼獠繑祿欤绞子涗?(記錄集句柄)
???????????? ⑤、外部數據庫.到尾記錄?(記錄集句柄)
???????????? ?、?、外部數據庫.到前一記錄?(記錄集句柄)
???????????? ?、摺⑼獠繑祿欤胶笠挥涗?(記錄集句柄)
???????????? ?、?、外部數據庫.讀?(記錄集句柄,字段名稱或位置)
???????????? 例句:語文編輯框.內容?=?到文本?(外部數據庫1.讀?(記錄集句柄,?“語文”))
???????????? ?、啤ν獠繑祿爝M行編輯的方法。
???????????? 所謂對外部數據庫的編輯,就是變更改動外部數據庫本身,包括添加、更新、刪除等,對數據庫進行編輯不必通過記錄集。所有非查詢類SQL語句都嵌入下面這個語句來執行:
???????????? 外部數據庫.執行?(非查詢類SQL語句)
???????????? ?、佟⑻砑佑涗洠湔Z法如下:
???????????? 外部數據庫.執行?(“insert?into?表名稱(字段1,字段2...)?values?(字段值1,字段值2...)?”)
???????????? 例句:
???????????? 外部數據庫1.執行?(“INSERT?INTO?chj?”?+?“(學號,姓名,語文,數學,英語)”?+?“?valueS?”?+?
????????????“(”?+?學號編輯框.內容?+?“,'”?+?姓名編輯框.內容?+?“','”?+?語文編輯框.內容?+?“','”?+?
????????????數學編輯框.內容?+?“','”?+?英語編輯框.內容?+?“')”)
???????????? ?、?、更新記錄,其語法如下:
???????????? 外部數據庫.執行?(“UPDATE?表名稱?SET?字段1=字段值1,字段2=字段值2...WHERE?條件式”)?
???????????? 例句:
???????????? 外部數據庫1.執行?(“UPDATE?chj?SET?學號=”?+?“'”?+?學號編輯框.內容?+?“',”?+?“姓名=”?
????????????+?“'”?+?姓名編輯框.內容?+?“',”?+?“語文=”?+?“'”?+?語文編輯框.內容?+?“',”?+?“數學=”?
????????????+?“'”?+?數學編輯框.內容?+?“',”?+?“英語=”?+?“'”?+?英語編輯框.內容?+?“'?”?+?“WHERE?
????????????姓名=”?+?“'”?+?姓名1?+?“'?”?+?“AND?語文=”?+?語文1?+?“AND?數學=”?+?數學1?+?“AND?
????????????英語=”?+?英語1?+?“AND?學號=”?+?學號1)
???????????? ?、?、刪除記錄,其語法如下:
???????????? 外部數據庫.執行?(“DELETE?*?FROM?表名稱?WHERE?條件式”)
???????????? 例句:
???????????? 外部數據庫.執行?(“外部數據庫1.執行?(“DELETE?*?FROM?chj?”?+?“WHERE?姓名=”?+?“'”?+?
????????????姓名1?+?“'?”?+?“AND?語文=”?+?語文1?+?“AND?數學=”?+?數學1?+?“AND?英語=”?+?英語1?+?
????????????“AND?學號=”?+?學號1)”)
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
31 | 1 | 2 | 3 | 4 | 5 | 6 | |||
7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
28 | 29 | 30 | 31 | 1 | 2 | 3 | |||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
歡迎探討,努力學習Java哈
常用鏈接
留言簿(3)
隨筆分類
- Java(11)
- JSP
- MyEclipse(1)
- Oracle 10g(3)
- Resin
- Spring
- SQL(4)
- Struts(1)
- Tomcat
- XML(2)
- 個人日志(1)
- 學習(5)
- 工作(1)
- 搜索引擎(7)
- 灌水(1)
- 貼圖
- 軟件工程
隨筆檔案
文章分類
文章檔案
Lansing's Download
Lansing's Link
我的博客
搜索
最新評論

- 1.?re: 關于ODBC數據源連接文本
- 評論內容較長,點擊標題查看
- --棱語明
- 2.?re: Oracle 10g TO_DATE() ora-01830 領悟共勉[未登錄]
- 評論內容較長,點擊標題查看
- --訪客
- 3.?re: Oracle 10g TO_DATE() ora-01830 領悟共勉
- 人才?。?
- --歲月無聲
- 4.?re: Struts框架技術在J2EE中的研究和應用[未登錄]
- dfetetgfgf
- --aa
- 5.?re: 關于ODBC數據源連接文本 [未登錄]
-
“坐在巷口的那對男女”呵呵 @blackbat
- --lansing