FirebirdSQL/5/VFP

出自VFP Wiki

(修訂版本間差異)
跳轉到: 導航, 搜尋
(revert)
第304行: 第304行:
#[http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_download_documentation Firebird書籍]
#[http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_download_documentation Firebird書籍]
#[http://vfp.sunyear.com.tw/viewtopic.php?t=666&highlight=%B8%EA%AE%C6%AEw 主從式資料庫程式設計注意事項]
#[http://vfp.sunyear.com.tw/viewtopic.php?t=666&highlight=%B8%EA%AE%C6%AEw 主從式資料庫程式設計注意事項]
-
[http://www.hg-fix.com/ 数据恢复]
 
-
[http://www.hg-fix.com/ 硬盘数据恢复]
 
-
[http://www.hg-fix.com/ 磁带数据恢复]
 
-
[http://www.hg-fix.com/ raid数据恢复]
 
-
[http://www.hg-fix.com/ 磁盘阵列数据恢复]
 
-
[http://www.hg-fix.com/diskrecover.htm 数据恢复]
 
-
[http://www.hg-fix.com/taperecover.htm 数据恢复]
 
-
[http://www.hg-fix.com/raidrecover.htm 数据恢复]
 
-
[http://www.hg-fix.com/ 数据修复]
 
-
[http://www.hg-fix.com/ 硬盘数据修复]
 
-
[http://www.hg-fix.com/ 磁带数据修复]
 
-
[http://www.hg-fix.com/ raid数据修复]
 
-
[http://www.hg-fix.com/diskrecover.htm 数据修复]
 
-
[http://www.hg-fix.com/raidrecover.htm 数据修复]
 
-
[http://www.hg-fix.com/taperecover.htm 数据修复]
 
-
[http://www.hg-fix.com/ 磁盘阵列数据修复]
 

在2005年4月1日 (五) 11:34所做的修訂版本

  1. Firebird不支援由ODBC建立資料庫所以使用ISQL建立.
  2. 本篇文章中VFP8.0採用SPT方式存取資料庫.


目錄

VFP&Firebird (1)--動態產生資料庫

*!* By Ruey
LOCAL lc_SQLCommand
*!*====================================建立資料庫
TEXT to lc_SQLCommand TextMerge NoShow
	SET SQL DIALECT 3;	

	SET NAMES NONE;

	CREATE DATABASE 'd:\s1.fdb'
	USER 'SYSDBA' PASSWORD 'masterkey'
	PAGE_SIZE 4096
	DEFAULT CHARACTER SET NONE;
	
ENDTEXT

STRTOFILE(lc_SQLCommand,"d:\s1_create.sql")

strcommand=[ d:\isql.exe  -INPUT d:\s1_create.sql ]

RUN/n  &strcommand

*!*====================================修改資料庫
TEXT to lc_SQLCommand TextMerge NoShow
	CONNECT 'd:\s1.fdb' USER 'SYSDBA' PASSWORD 'masterkey';
	ALTER DATABASE
	ADD FILE 'd:\s1_1.fdb'
	STARTING AT PAGE 10001 LENGTH 10000
	ADD FILE 'd:\s1_2.fdb';
	
ENDTEXT
STRTOFILE(lc_SQLCommand,"d:\s1_alter.sql")

strcommand=[ isql.exe  -INPUT d:\s1_alter.sql ]

RUN/n  &strcommand

*!*====================================移除資料庫
TEXT to lc_SQLCommand TextMerge NoShow	
	CONNECT 'd:\s1.fdb' USER 'SYSDBA' PASSWORD 'masterkey';
	DROP DATABASE;
	
ENDTEXT

STRTOFILE(lc_SQLCommand,"d:\s1_drop.sql")

strcommand=[ isql.exe  -INPUT d:\s1_drop.sql ]

RUN/n  &strcommand

*!*====================================建立資料庫連線
LOCAL ln_Handle,lc_ConnectString,lc_SQLCommand,ln_OK

TEXT to lc_ConnectString TextMerge NoShow
	DRIVER=Firebird/InterBase(r) driver;
	DBNAME=d:\s1.fdb;
	UID=SYSDBA;
	PWD=masterkey;
ENDTEXT
ln_Handle=SQLSTRINGCONNECT(lc_ConnectString)

IF ln_Handle<=0
	? "連線錯誤"
ELSE
	? "連線成功"
ENDIF
SQLDISCONNECT(ln_Handle)


VFP&Firebird (2)--維護資料表

&&By Ruey
LOCAL ln_Handle,lc_ConnectString,lc_SQLCommand,ln_OK

TEXT to lc_ConnectString TextMerge NoShow
	DRIVER=Firebird/InterBase(r) driver;
	DBNAME=d:\s1.fdb;
	UID=SYSDBA;
	PWD=masterkey;
ENDTEXT
ln_Handle=SQLSTRINGCONNECT(lc_ConnectString)

IF ln_Handle<=0
	? "連線錯誤"
	*SQLDISCONNECT(ln_Handle)
	RETURN
ELSE
	? "連線成功"
ENDIF

=SQLSetProp(ln_Handle,'Transactions',2)


SQLTABLES(ln_Handle,"'TABLE'","mycursor") &&列出所有Table
= SQLCOLUMNS(ln_Handle, "CUSTOMER", "NATIVE", 'MyCursor')
BROWSE

*!*====================================建立Table
TEXT to lc_SQLCommand TextMerge NoShow
	CREATE TABLE Customer (
	     Cu_No CHAR(10),
	     Cu_Name CHAR(20),
	     Cu_Addr CHAR(60)
	);
ENDTEXT


IF SQLEXEC(ln_Handle,lc_SQLCommand) > 0
	? "建立資料表--執行成功!"
	SQLCOMMIT(ln_Handle)
ELSE
	? "建立資料表--執行失敗!"
	SQLROLLBACK(ln_Handle)
	SQLDISCONNECT(ln_Handle)
	RETURN
ENDIF

*!*====================================修改Table
*增加欄位
TEXT to lc_SQLCommand TextMerge NoShow
    ALTER TABLE CUSTOMER 
    ADD CU_TEL CHAR(20);
ENDTEXT


IF SQLEXEC(ln_Handle,lc_SQLCommand) > 0
	? "修改資料表--執行成功!"
	SQLCOMMIT(ln_Handle)
ELSE
	? "修改資料表--執行失敗!"
	SQLROLLBACK(ln_Handle)
	SQLDISCONNECT(ln_Handle)
	RETURN
ENDIF

*修改欄位大小
TEXT to lc_SQLCommand TextMerge NoShow
    ALTER TABLE CUSTOMER 
    ALTER CU_TEL TYPE CHAR(30);
ENDTEXT


IF SQLEXEC(ln_Handle,lc_SQLCommand) > 0
	? "修改資料表--執行成功!"
	SQLCOMMIT(ln_Handle)
ELSE
	? "修改資料表--執行失敗!"
	SQLROLLBACK(ln_Handle)
	SQLDISCONNECT(ln_Handle)
	RETURN
ENDIF

*更改欄位名稱
TEXT to lc_SQLCommand TextMerge NoShow
    ALTER TABLE CUSTOMER 
    ALTER CU_TEL TO CU_FAX;
ENDTEXT


IF SQLEXEC(ln_Handle,lc_SQLCommand) > 0
	? "修改資料表--執行成功!"
	SQLCOMMIT(ln_Handle)
ELSE
	? "修改資料表--執行失敗!"
	SQLROLLBACK(ln_Handle)
	SQLDISCONNECT(ln_Handle)
	RETURN
ENDIF

*移除欄位
TEXT to lc_SQLCommand TextMerge NoShow
    ALTER TABLE CUSTOMER 
    DROP CU_FAX;
ENDTEXT


IF SQLEXEC(ln_Handle,lc_SQLCommand) > 0
	? "修改資料表--執行成功!"
	SQLCOMMIT(ln_Handle)
ELSE
	? "修改資料表--執行失敗!"
	SQLROLLBACK(ln_Handle)
	SQLDISCONNECT(ln_Handle)
	RETURN
ENDIF


*!*====================================移除Table
TEXT to lc_SQLCommand TextMerge NoShow
     DROP TABLE Customer;
ENDTEXT


IF SQLEXEC(ln_Handle,lc_SQLCommand) > 0
	? "移除資料表--執行成功!"
	SQLCOMMIT(ln_Handle)
ELSE
	? "移除資料表--執行失敗!"
	SQLROLLBACK(ln_Handle)
	SQLDISCONNECT(ln_Handle)
	RETURN
ENDIF


SQLDISCONNECT(ln_Handle)


VFP&Firebird (3)--維護記錄

&&By Ruey
LOCAL ln_Handle,lc_ConnectString,lc_SQLCommand,ln_OK

TEXT to lc_ConnectString TextMerge NoShow
	DRIVER=Firebird/InterBase(r) driver;
	DBNAME=d:\s1.fdb;
	UID=SYSDBA;
	PWD=masterkey;
ENDTEXT
ln_Handle=SQLSTRINGCONNECT(lc_ConnectString)

IF ln_Handle<=0
	? "連線錯誤"
	*SQLDISCONNECT(ln_Handle)
	RETURN
ELSE
	? "連線成功"
ENDIF

=SQLSetProp(ln_Handle,'Transactions',2)

*!*====================================新增Record
TEXT to lc_SQLCommand TextMerge NoShow
    INSERT INTO Customer
    (Cu_No,Cu_Name,Cu_Addr)
    VALUES
    ('001','001','xxxx')
ENDTEXT


IF SQLEXEC(ln_Handle,lc_SQLCommand) > 0
	? "新增資料--執行成功!"
	SQLCOMMIT(ln_Handle)
ELSE
	? "新增資料--執行失敗!"
	SQLROLLBACK(ln_Handle)
	SQLDISCONNECT(ln_Handle)
	RETURN
ENDIF

*!*====================================修改Record
TEXT to lc_SQLCommand TextMerge NoShow
    UPDATE CUSTOMER
    SET CU_NAME='AAA'
    WHERE CU_NO='001'
ENDTEXT


IF SQLEXEC(ln_Handle,lc_SQLCommand) > 0
	? "修改資料--執行成功!"
	SQLCOMMIT(ln_Handle)
ELSE
	? "修改資料--執行失敗!"
	SQLROLLBACK(ln_Handle)
	SQLDISCONNECT(ln_Handle)
	RETURN
ENDIF

*!*====================================刪除Record
TEXT to lc_SQLCommand TextMerge NoShow
   DELETE FROM CUSTOMER
   WHERE CU_NO='001'
ENDTEXT


IF SQLEXEC(ln_Handle,lc_SQLCommand) > 0
	? "刪除資料--執行成功!"
	SQLCOMMIT(ln_Handle)
ELSE
	? "刪除資料--執行失敗!"
	SQLROLLBACK(ln_Handle)
	SQLDISCONNECT(ln_Handle)
	RETURN
ENDIF

SQLDISCONNECT(ln_Handle)



參考文章

  1. VFP書籍整理
  2. SPT指令集
  3. 童心未泯的VFP+SQL編程
  4. Firebird書籍
  5. 主從式資料庫程式設計注意事項