任何對sql類數據庫操作的語言必學的:),下面的是PB版本,有一些PB的特性.
SQL語句
sql語句以;結束,可寫成多行形式而不用&
1、SELECT
注意:變量前加:
一個例子:
SELECT Employee.Emp_id,Employee.Emp_name,
Employee.Emp_salary,Dept.Dept_name
FROM Employee,Dept
WHERE (Emp_name like ''''''''張%'''''''')AND (Emp_sex=''''''''男'''''''')
AND Employee.Dept_id=Dept.Dept_id
ORDER BY Employee.Emp_id;
給變量的例子:
Dec Emp_salary
SELECT max(Emp_salary)
INTO :Emp_salary
FROM Employee;
2、INSERT
一個例子:
Int Emp_nbr
String Emp_name
Emp_nbr=Integer(sle_number.Text)
Emp_name=sle_name.Text
INSERT INTO Employee(employee.Emp_nbr,employee.Emp_name)
VALUES(:Emp_nbr,:Emp_name)
USING Emp_tran;
3、UPDATE
一個例子:
UPDATE Employee//表名
SET emp_name=:sle_Name.Text //修改
WHERE Employee.emp_nbr=:Emp_nbr;//修改條件
4、DELETE
一個例子:
DELETE FROM Employee //從表Employee
WHERE Emp_nbr <100;刪除條件滿足的記錄
5、CONNECT和DISCONNECT
執行DISCONNECT前自動執行COMMIT
6、COMMIT和ROLLBACK
7、使用游標(用來保存多條記錄操作)
DECLARE,OPEN,FECTH...INTO...:NAME,CLOSE,DELETE(刪除游標指向的記錄),UPDATE(修改游標指向的記錄)利用游標打開多個記錄的例子
//聲明powerscript變量,存放讀出的雇員姓名
String emp_cur CURSOR FOR
SELECT emp_name FROM EMPLOYEE
WHERE emp_state=:sle_1.text;
//打開游標,
執行SELECT語句
OPEN emp_cur;
//從結果集中取第一條記錄
FETCH emp_cur INTO "emp_name_var;
//判斷FETCH語句執行情況
IF SQLCA.SQLCode<0 THEN
MessageBox("Datebase Error",&//顯示錯誤信息
SQLCA.SQLErrText,Exclamation!)
RETURN
END IF
//如果FETCH語句執行正確,用循環語句逐條取結果集中的記錄,到取完
DO WHILE SQLCA.SQLCode=0 //是否取完數據
//把取出的雇員姓名加入下拉列表框中
dlbl_1.additem(emp_name_var)
//繼續從結果集中取下一符合條件的數據
FETCH emp_cur INTO :emp_name_var;
//關閉游標
CLOSE emp_cur;
8、處理BLOB型數據(大部分語句只能對一條記錄進行操作,多余則出錯)
SELECTBLOB,
一個例子:
//聲明BLOB型變量Emp_id_pic,用語存放Emp_pic列的數據
Blob Emp_pic
SELECTBLOB Emp_pic
INTO :Emp_id_pic
FROM Employee
WHERE Employee.Emp_Id="001"
USING Emp_tran;
//如果執行正確,在pb_1中顯示照片
IF Emp_tran.SQLCode=0 THEN
pb1.SetPicture(Emp_id_pic)
END IF
UPDATEBLOB
一個例子:
Integer fh
Blob Emp_id_pic
//以讀方式打開一個流模式文件>fh=FileOpen("c:\emp_100.bmp",StreamMode!)
//判斷打開文件是否成功
IF fh<>-1 THEN
//從文件中讀取圖形數據存於Blob型變量
FileRead(fh,emp_id_pic)
//關閉文件
FileClose(fh)
//修改表的emp_pic列
UPDATEBLOB Employee
SET emp_pic=:Emp_id_pic
WHERE EMp-Id="001";
END IF
IF SQLCA.SQLNRows>0 THEN//判斷是否返回結果
COMMIT;/提交事務
ELSE
ROLLBACK;//回滾事務
END IF
9、動態SQL語句
事務對象,動態描述區(SQLSA),動態描述區(SQLCA)
示例1:
String MySQL
MySQL ="CREAT TABLE Employee"&
+"(emp_id char(6)not null,"&
+"emp_hbr integer not null,"&
+"dept_id integer not null,"&
+"emp_fname char(10) not null,"&
+"emp_lname char(20) not null)"
EXCUTE IMMEDIATE :MySQL;
實例2:
EXCUTE IMMEDIATE "DROP TABLE Employee" USING My_trans;
等價於:
String MySQL
MySQL+"DROP TABLE Employee"
EXCUTE IMMEDIATE :MySQL USING My_trans
實例3:
//在表中插入記錄
Int Dept_id_var=156
String Dept_name_var
SetNull(Dept_name_var)
CONNECT;//
PREPARE SQLCA //prepare的作用???
FROM "INSERT INTO dept VALUES(?,?)";
EXCUTE SQLCA USING :Dept_id_var,:Dept_name_var