 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
elleryq

註冊時間: 2007-06-21 文章: 768
第 1 樓
|
發表於: 星期三 七月 02, 2003 9:10 am 文章主題: 請教 FireBird |
|
|
Ruey,看你的簽名檔
似乎你有架設過 FireBird ~~
請問在你使用以後,覺得好用嗎??
效率如何?? |
|
回頂端 |
|
 |
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 2 樓
|
發表於: 星期五 七月 04, 2003 4:40 pm 文章主題: |
|
|
1.可參考簡介
http://vfp.sunyear.com.tw/viewtopic.php?t=67
2.四大免費資料庫MySQL/PostgreSQL/InterBase(FireBird)/SAPDB
我覺得它在Windows上的比較 (不包含SAPDB,我沒用過)
使用簡便性而言 mySQL>FireBird>PostgreSQL
使用功能性而言 PostgreSQL>FireBird>mySQL
使用速度性而言 mySQL>FireBird>PostgreSQL
PostgreSQL在Win只有模擬器
mySQL沒有Trigger/SP/UDFs
3.原本我是VFP SPT+SQL Server
但是sql Server要錢又蠻貴的
最後我挑選FireBird
轉換過程中,並沒有想像中的困難
目前我有幾個客戶就正在使用
4.有人推薦我選擇mySQl
可是他沒有Trigger/SP/UDFs
數量在更新已進貨量/已出貨量
這樣的欄位上,恐怕會有數字上的錯誤 _________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
 |
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 3 樓
|
發表於: 星期五 七月 04, 2003 9:21 pm 文章主題: |
|
|
可以去http://www.ibphoenix.com/
下載FireBird1.5版+ODBC1.0版
對於後端資料存取,
建議採用VFP+SPT方式
會有比較好開發......(_^ _________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
 |
elleryq

註冊時間: 2007-06-21 文章: 768
第 4 樓
|
發表於: 星期一 七月 07, 2003 8:58 am 文章主題: |
|
|
我只是問問而已~~
我知道 FireBird 是 Interbase 的姐妹產品~
只是一直沒有認真去架設
你說的我大多都知道了
主要是問問你自己用過以後的感想~
謝謝你囉
 |
|
回頂端 |
|
 |
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 5 樓
|
發表於: 星期一 七月 07, 2003 10:07 am 文章主題: |
|
|
軟體簡單/易學易用/快速上手
像小型的SQL Server
很適合拿來開發用 _________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
 |
garfield Site Admin

註冊時間: 2003-01-30 文章: 2160
第 6 樓
|
發表於: 星期一 七月 07, 2003 2:24 pm 文章主題: |
|
|
不知到 FireBird 的 Trigger/SP/UDFs
是否是相容於SQL2000, 或者是只要寫法符合 SQL-92 語法就到處通用了.
另外是我早就已經買了寫 Trigger/SP/UDFs 的書了(還沒看), 就一直無法踏出第一步, 例如我想在新增出貨單時就去更新庫存量這個問題我就不了解它的流程是如何, 可否請教一二. _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
 |
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 7 樓
|
發表於: 星期一 七月 07, 2003 4:34 pm 文章主題: |
|
|
to garField
你如果想要學習的話
盡量發表在VFP區
我會盡量回答你的
FireBird--SQL語法相容於SQL92
要擔心的是 Trigger/SP/UDFs
因為SQL Server是那微軟自家的
若你在SQL Server上撰寫Trigger/SP/UDFs
恐怕只得重寫了,就算你重寫
不過只要觀念相通,要重寫不是件難事
要知道FireBird是免費的,SQL Server要錢的
如果想買的,可以買InterBase 7.1版本的 _________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
 |
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 8 樓
|
發表於: 星期一 七月 07, 2003 4:53 pm 文章主題: |
|
|
我舉一個進或更新庫存的例子
跟出貨道理相同,出貨不過是相反動作
0.VFP中下達SQL指令--->Table進貨單--->進貨單 Trigger
1.進貨時,會跟庫存有關的動作為新單/改單/刪除
VFP使用SPT下達新單/改單/刪除三個動作的指令,指令如下
新單--INSERT Import (Imp_No,Imp_Date,Pdt_No,Pdt_Qty) VALUE('920707001','2003/0703','滑鼠','5')
改單--UPDATE Import SET Pdt_Qty='15' WHERE Imp_No='920707001' AND Pdt_No='滑鼠'
刪除--DELETE Import WHERE Imp_No='920707001' AND Pdt_No='滑鼠'
2.在資料庫,進貨表格建立三個Trigger
新單--Trigger: IMPORT1_AI0
改單--Trigger: IMPORT1_AU0
刪除--Trigger: IMPORT1_AD0
在進貨單資料表格式,建立三個Trigger
NEW.PDT_NO在進貨單中代表新的產品代號
OLD.PDT_NO在進貨單中代表舊的產品代號
NEW. 和 OLD. 代表新舊值
/* Trigger: IMPORT1_AD0 */
CREATE TRIGGER IMPORT1_AD0 FOR IMPORT1
ACTIVE AFTER DELETE POSITION 0
AS
DECLARE VARIABLE NQTY1 INTEGER;
BEGIN
/* 商品更新 */
UPDATE PRODUCT SET PDT_QTY=PDT_QTY-OLD.IMP_QTY WHERE PDT_NO=OLD.PDT_NO;
END
^
/* Trigger: IMPORT1_AI0 */
CREATE TRIGGER IMPORT1_AI0 FOR IMPORT1
ACTIVE AFTER INSERT POSITION 0
AS
DECLARE VARIABLE NQTY1 INTEGER;
BEGIN
/* 商品更新 */
UPDATE PRODUCT SET PDT_QTY=PDT_QTY+NEW.IMP_QTY WHERE PDT_NO=NEW.PDT_NO;
END
^
/* Trigger: IMPORT1_AU0 */
CREATE TRIGGER IMPORT1_AU0 FOR IMPORT1
ACTIVE AFTER UPDATE POSITION 0
AS
DECLARE VARIABLE NQTY1 INTEGER;
BEGIN
/* 商品更新 */
UPDATE PRODUCT SET PDT_QTY=PDT_QTY-OLD.IMP_QTY WHERE PDT_NO=OLD.PDT_NO;
UPDATE PRODUCT SET PDT_QTY=PDT_QTY+NEW.IMP_QTY WHERE PDT_NO=NEW.PDT_NO;
END
跟SQL Server及DBC 用法還蠻項的 _________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
 |
garfield Site Admin

註冊時間: 2003-01-30 文章: 2160
第 9 樓
|
發表於: 星期一 七月 07, 2003 6:14 pm 文章主題: |
|
|
整體看起來還不算複雜, 但
> 跟SQL Server及DBC 用法還蠻項的
我在sql Server上要建立 trigger , 它的標準語法如下:
CREATE TRIGGER [TRIGGER NAME] ON [dbo]
FOR INSERT, UPDATE, DELETE
AS
是否跟 FireBird 不一樣?
> DECLARE VARIABLE NQTY1 INTEGER;
是做什麼用的, 是否又是 FireBird 語法 ?
**********以下是在sql7底下自行測試的, 算是我的處女作, 但跟你的語法有點出入, 是否在每一種不同的SQL後端資料庫就須重寫呢?
CREATE TRIGGER pi_add ON pi_dat
for INSERT AS
update product
set product.quantity=product.quantity+inserted.quantity from inserted
where product.pro_no=inserted.pro_no _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
 |
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 10 樓
|
發表於: 星期一 七月 07, 2003 7:52 pm 文章主題: |
|
|
0.跟SQL Server及DBC 用法還蠻項的
我是指程式邏輯而言
1.Trigger怎樣建立可以參可以下
觸發器的創建
【龍豪軟體工作室 (3ASoft Studio) / 唐輝】
------------------------------------------------------------
觸發器和我們前面講的執行型存儲過程非常類似,不同的是執行型存儲過程必需由客戶調用執行,而觸發器只是在某個事件發生才執行,它不必由客戶調用。觸發器主要在表被更新、插入、刪除時被觸發,因此,它可以用來跟蹤用戶對表的更新情況。先看看創建觸發器的語法:
CREATE TRIGGER name FOR table
[ACTIVE | INACTIVE]
{BEFORE | AFTER}
{DELETE | INSERT | UPDATE}
[POSITION number]
AS <trigger_body> terminator
<trigger_body> = [<variable_declaration_list>] <block>
<variable_declaration_list> =
DECLARE VARIABLE variable <datatype>;
[DECLARE VARIABLE variable <datatype>;
<block> =
BEGIN
<compound_statement>
[<compound_statement>
END
<datatype> = SMALLINT
| INTEGER
| FLOAT
| DOUBLE PRECISION
| {DECIMAL | NUMERIC} [(precision [, scale])]
| {DATE | TIME | TIMESTAMP)
| {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR}
[(int)] [CHARACTER SET charname]
| {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR} [VARYING] [(int)]
從上面的語法可以看出,Interbase 的觸發器可以跟蹤表的下列變化情況:
BEFORE DELETE 在表刪除一條記錄之前觸發
BEFORE INSERT 在表插入一條記錄之前觸發
BEFORE UPDATE 在表更新一條記錄之前觸發
AFTER DELETE 在表刪除一條記錄之後觸發
AFTER INSERT 在表插入一條記錄之後觸發
AFTER UPDATE 在表更新一條記錄之後觸發
舉例如下:
CREATE TRIGGER DELBM FOR FPCSIGNUP
ACTIVE BEFORE DELETE POSITION 0
AS /*
Author : TangHui
Date : 2000-06-28 20:36:22
Email : 3asoft@china.com
*/
BEGIN
/*將資料轉入回收站*/
INSERT INTO BM_WASTEBIN
select *
from FPCSIGNUP
where old.SUAUTO=SUAUTO;
update BM_WASTEBIN
SET SUMODIFY=USER,
/*刪除人員*/
SUMODIFY_DATE='NOW',
/*刪除日期*/
WHERE SUAUTO=old.SUAUTO;
END
上面的例子是在用戶刪除資料時,將刪除的資料放在一個所謂的回收站的表BM_WASTEBIN中。
【注意】在上面的觸發器中我們引用了old識別字,除此之外,Interbase還可引用new識別字,它們分別代表記錄的當前值和更新前的值。
因此,多邏輯上來判斷,在刪除記錄時,我們不能使用new識別字,而在插入記錄時,我們不能使用old識別字。
2.你所指的
CREATE TRIGGER [TRIGGER NAME] ON [dbo]
FOR INSERT, UPDATE, DELETE
AS
在FireBird已經分成6部分
BEFORE DELETE 在表刪除一條記錄之前觸發
BEFORE INSERT 在表插入一條記錄之前觸發
BEFORE UPDATE 在表更新一條記錄之前觸發
AFTER DELETE 在表刪除一條記錄之後觸發
AFTER INSERT 在表插入一條記錄之後觸發
AFTER UPDATE 在表更新一條記錄之後觸發
所以在Trigger才會有
new識別字代表記錄的當前值
old識別字代表更新前的值。
3.DECLARE VARIABLE NQTY1 INTEGER;
表示宣告區域整數變數NQTY1
4.CREATE TRIGGER pi_add ON pi_dat
for INSERT AS
update product
set product.quantity=product.quantity+inserted.quantity from inserted
where product.pro_no=inserted.pro_no
在FireBird要改成
/* Trigger: pi_add */
CREATE TRIGGER pi_add FOR pi_dat
ACTIVE AFTER INSERT POSITION 0
AS
BEGIN
/* 商品更新 */
UPDATE PRODUCT SET quantity=quantity+NEW.quantity WHERE PRO_NO=NEW.PRO_NO;
END
底下是上面程式的注解
------------------------------------------------------------
NEW.quantity --->新的進貨單數量
NEW.PRO_NO---->新的進貨單產品編號
------------------------------------------------------------
UPDATE PRODUCT SET quantity=quantity+NEW.quantity WHERE PRO_NO=NEW.PRO_NO;
可以翻成
UPDATE 產品 SET 目前庫存量=目前庫存量+新的.進貨量 WHERE
產品代號=新的.產品代號; _________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
 |
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 11 樓
|
發表於: 星期一 七月 07, 2003 7:56 pm 文章主題: |
|
|
不懂的話
請在發問 _________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
 |
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 12 樓
|
發表於: 星期一 七月 07, 2003 7:58 pm 文章主題: |
|
|
有時間我會寫個小範例
這樣比較明瞭的 _________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
 |
elleryq

註冊時間: 2007-06-21 文章: 768
第 13 樓
|
發表於: 星期一 七月 07, 2003 10:54 pm 文章主題: |
|
|
說到範例我就想到 Java 陣營跟 Microshit 陣營相互較勁的一個有名範例
PetShop
前一陣子忘記在哪個網站看到,居然還 turn 起版本來了~~
心裡不禁在想:外國人還真是有心啊~~
佩服~~佩服~~  |
|
回頂端 |
|
 |
garfield Site Admin

註冊時間: 2003-01-30 文章: 2160
第 14 樓
|
發表於: 星期一 七月 07, 2003 11:42 pm 文章主題: |
|
|
特地去查一下SQL2000的語法也支援AFTER,但BEFORE是看不到, 如果BEFORE是標準的SQL-92語法的話, 那麼SQL2000的相容性也太差了點.
FireBird 是個開放式免費的高性能、跨平臺SQL標準相容, 這是否表示用它來開發程式, 在程式移轉方面就比較方便?
想必你在從SQL轉到FireBird也花了不少時間來改寫程式吧! _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
 |
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 15 樓
|
發表於: 星期一 七月 07, 2003 11:56 pm 文章主題: |
|
|
這麼晚了,還回答我的問題
不過我回答完了你的就要回家睡覺
1.>SQL2000的語法也支援AFTER,但BEFORE是看不到, 如果BEFORE是標準的SQL-92語法的話, 那麼SQL2000的相容性也太差了點.
沒錯我在前面就有提到了
2.>FireBird 是個開放式免費的高性能、跨平臺SQL標準相容, 這是否表示用它來開發程式, 在程式移轉方面就比較方便?
那是指未使用到Trigger/SP/UDFs
3.>想必你在從SQL轉到FireBird也花了不少時間來改寫程式吧!
因為上一個程式未使用到Trigger/SP/UDFs
所以我只需要修改SQL Command符合FireBird即可
大約只需一個禮拜測試修改
4.有一點必須要注意的SQL Server不注重資料裡頭的英文大小寫
在FireBird可不這麼認為喔,'a'<>'A' _________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|