VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

SPT CURSOR 的 INDEX & RELATION
前往頁面 上一頁  1, 2, 3  下一頁
 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
ckp6250



註冊時間: 2004-07-30
文章: 1645


第 16 樓

發表發表於: 星期五 十二月 18, 2009 10:35 pm    文章主題: 引言回覆

goodnight 寫到:

謝謝, 改天三柱香跟您拜師


還要再加上鮮花和素果。
經濟若是許可,不妨加碼豬肉、雞、魚各一。
茶酒更是不可或缺。
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
chilin



註冊時間: 2003-10-01
文章: 79
來自: Taipei,Taiwan

第 17 樓

發表發表於: 星期六 十二月 19, 2009 12:48 am    文章主題: 引言回覆

ckp6250 說得好
引言回覆:
忘掉原有的 dbc , dbf ,cdx。


以SPT的方式,只要會使用基本的SQL語法即可
SELECT
INSERT
UPDATE
DELETE
即可完全使用SQL語法去操控後端資料庫。

INSERT & UPDATE 必較麻煩可寫成FUNCTION

Mysql 可參考下列FUCNTION
引言回覆:

PUBLIC MYSQL_IP,MYSQL_DB,SQL_LINK
MYSQL_IP="localhost"
MYSQL_DB="test"
SQL_LINK=sqlstringconnect([DRIVER=MySQL ODBC 3.51 Driver;SERVER=]+MYSQL_IP+[;UID=root;PWD=1234;DATABASE=]+MYSQL_DB)

SQL_STR=[CREATE TABLE T1 (ID int(5) NOT NULL auto_increment,F1 CHAR(10) NOT NULL default '',PRIMARY KEY (ID)) ENGINE=MyISAM]
SQLEXEC(SQL_LINK,SQL_STR)

SQL_USE([T1],[T1]) &&建立一個無資料的MYSQL資料表成為一個CURSOR
APPEND BLANK
REPLACE F1 WITH [INSERT1]
APPEND BLANK
REPLACE F1 WITH [INSERT2]
APPEND BLANK
REPLACE F1 WITH [INSERT3]
SQL_INSERT([T1],[T1])
USE IN T1

SQL_STR=[SELECT * FROM T1]
SQLEXEC(SQL_LINK,SQL_STR,[T1])
BROW

REPLACE ALL F1 WITH STRTRAN(F1,[INSERT],[UPDATE])
SQL_UPDATE([T1],[ID=?ID])

SQL_STR=[SELECT * FROM T1]
SQLEXEC(SQL_LINK,SQL_STR,[T1])
BROW
USE IN T1

SQL_DELETE([T1],[ID=2])
SQL_STR=[SELECT * FROM T1]
SQLEXEC(SQL_LINK,SQL_STR,[T1])
BROW
CLEAR ALL

*******************
FUNCTION SQL_USE
*******************
PARAMETER F_TABLE,F_ALIAS
LOCAL CREATE_STR
SQLCOLUMNS(SQL_LINK,F_TABLE,'NATIVE','T')
CREATE_STR='CREATE CURSOR '+F_ALIAS+' ('
SCAN
DO CASE
CASE INLIST(T.TYPE_NAME,'varchar','char')
CREATE_STR=CREATE_STR+T.COLUMN_NAME+' C('+ALLTRIM(STR(T.COLUMN_SIZE))+'),'
CASE INLIST(T.TYPE_NAME,'int','float','double')
CREATE_STR=CREATE_STR+T.COLUMN_NAME+' N('+ALLTRIM(STR(T.COLUMN_SIZE))+','+ALLTRIM(STR(DECIMAL_DIGITS))+'),'
CASE T.TYPE_NAME='date'
CREATE_STR=CREATE_STR+T.COLUMN_NAME+' D(Cool,'
CASE T.TYPE_NAME='text'
CREATE_STR=CREATE_STR+T.COLUMN_NAME+' M,'
ENDCASE
ENDSCAN
USE IN T
SELECT 0
CREATE_STR=LEFT(CREATE_STR,LEN(CREATE_STR)-1)+')'
&CREATE_STR
SELECT &F_ALIAS
ENDFUNC

***********************
FUNCTION SQL_INSERT
***********************
PARAMETER F_TABLE,F_CURSOR
LOCAL VARALL,VAR1,VAR2,I,J,F_VAL,FTYPE,OK
SELECT (F_CURSOR)
VAR1=""
FOR I=1 TO FCOUNT()
VAR2=FIELD(I)
IF EMPTY(VAR1)
VAR1=ALLTRIM(VAR2)
ELSE
VAR1=VAR1+","+ALLTRIM(VAR2)
ENDIF
ENDFOR

VARALL="INSERT INTO "+F_TABLE+"("+VAR1+") VALUES "
GOTO TOP
SQL_STR=[]
SCAN
SQL_STR=VARALL
SQL_STR=SQL_STR+[(]
FOR J=1 TO FCOUNT()
F_VAL=F_CURSOR+[.]+FIELD(J)
FTYPE=TYPE(FIELD(J))
DO CASE
CASE INLIST(FTYPE,"C","M")
SQL_STR=SQL_STR+[?ALLTRIM(&F_VAL),]
CASE FTYPE="L"
IF &F_VAL=.T.
SQL_STR=SQL_STR+['1',]
ELSE
SQL_STR=SQL_STR+['0',]
ENDIF
CASE FTYPE="D"
TD1=DTOS(&F_VAL)
IF EMPTY(TD1)
TD1="00000000"
ENDIF
SQL_STR=SQL_STR+TD1+[,]
OTHERWISE
SQL_STR=SQL_STR+[?&F_VAL,]
ENDCASE
ENDFOR
SQL_STR=LEFT(SQL_STR,LEN(SQL_STR)-1)
SQL_STR=SQL_STR+[)]
OK=SQLEXEC(SQL_LINK,SQL_STR)
ENDSCAN
GOTO TOP
RETURN OK
ENDFUNC

***********************
FUNCTION SQL_UPDATE
***********************
PARAMETER F_TABLE,F_WHERE
LOCAL VARALL,J,F_VAL,FTYPE,OK
SELECT (F_TABLE)
VARALL=[UPDATE ]+F_TABLE+[ SET ]
GOTO TOP
SCAN
SQL_STR=VARALL
FOR J=1 TO FCOUNT()
F_VAL=F_TABLE+[.]+FIELD(J)
FTYPE=TYPE(FIELD(J))
DO CASE
CASE INLIST(FTYPE,"C","M")
SQL_STR=SQL_STR+ALLTRIM(FIELD(J))+[=?ALLTRIM(&F_VAL),]
CASE FTYPE="L"
IF &F_VAL=.T.
SQL_STR=SQL_STR+ALLTRIM(FIELD(J))+[='1',]
ELSE
SQL_STR=SQL_STR+ALLTRIM(FIELD(J))+[='0',]
ENDIF
CASE FTYPE="D"
TD1=DTOS(&F_VAL)
IF EMPTY(TD1)
TD1="00000000"
ENDIF
SQL_STR=SQL_STR+ALLTRIM(FIELD(J))+[=]+TD1+[,]
OTHERWISE
SQL_STR=SQL_STR+ALLTRIM(FIELD(J))+[=?&F_VAL,]
ENDCASE
ENDFOR
SQL_STR=LEFT(SQL_STR,LEN(SQL_STR)-1)
SQL_STR=SQL_STR+[ WHERE ]+F_WHERE
OK=SQLEXEC(SQL_LINK,SQL_STR)
ENDSCAN
GOTO TOP
RETURN OK
ENDFUNC

************************
FUNCTION SQL_DELETE
************************
PARAMETER F_TABLE,F_WHERE
LOCAL OK
OK=SQLEXEC(SQL_LINK,[DELETE FROM ]+F_TABLE+[ WHERE ]+F_WHERE)
RETURN OK
ENDFUNC

_________________
一個喜愛Latte的男人
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
tinwhang



註冊時間: 2009-11-08
文章: 104


第 18 樓

發表發表於: 星期六 十二月 19, 2009 5:07 pm    文章主題: 引言回覆

非常感激您,雖然我不是看的很懂,但 相信一定是很好用的FUNCTION
回頂端
檢視會員個人資料 發送私人訊息
LiuRambo



註冊時間: 2007-11-27
文章: 481


第 19 樓

發表發表於: 星期六 十二月 19, 2009 11:01 pm    文章主題: 引言回覆

我們公司也是建議我們把sql的幾個常用指令寫成function
這樣省得每次都得重寫一串
回頂端
檢視會員個人資料 發送私人訊息 MSN Messenger
syntech



註冊時間: 2003-05-16
文章: 4249
來自: Taipei,Taiwan

第 20 樓

發表發表於: 星期日 十二月 20, 2009 12:19 am    文章主題: 引言回覆

令狐沖在學會吸星大法之後,
短時間之內的確是功力大增,
不過實際上卻是功力越高反噬越大.
如果沒有學會易筋經,
下場如何看看任我行知道了.




給那些覺得去社群求救就好的人做個參考. ^_^b

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
ckp6250



註冊時間: 2004-07-30
文章: 1645


第 21 樓

發表發表於: 星期日 十二月 20, 2009 6:47 am    文章主題: 引言回覆

LiuRambo 寫到:
我們公司也是建議我們把sql的幾個常用指令寫成function
這樣省得每次都得重寫一串


同意這個看法。

不過,我傾向建議把這些 Function 寫在 SQL Servre 的 Stored Procedure 中,而非寫在 VFP 的 prg 中。

不知怎麼搞的,近幾年來對於『可攜性』的問題,變得關注起來。
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
tinwhang



註冊時間: 2009-11-08
文章: 104


第 22 樓

發表發表於: 星期日 十二月 20, 2009 9:44 am    文章主題: 引言回覆

syntech 寫到:
沒得接.
各玩各的


其實經我測試以後是可以接的,謝謝大家
回頂端
檢視會員個人資料 發送私人訊息
tinwhang



註冊時間: 2009-11-08
文章: 104


第 23 樓

發表發表於: 星期日 十二月 20, 2009 10:13 am    文章主題: 引言回覆

ckp6250 寫到:
LiuRambo 寫到:
我們公司也是建議我們把sql的幾個常用指令寫成function
這樣省得每次都得重寫一串


同意這個看法。

不過,我傾向建議把這些 Function 寫在 SQL Servre 的 Stored Procedure 中,而非寫在 VFP 的 prg 中。

不知怎麼搞的,近幾年來對於『可攜性』的問題,變得關注起來。

呵呵師兄您真的好厲害 ,一語驚醒夢中人 ,

不過我的SPT 整合方案,整個快測試完了,真是謝謝您的幫助,下次如果有寫小程式的地方,小弟願為代勞Smile

其實 可攜性真的很重要 ,因為您寫完的程式以後,下次要再整合的時候就不用那麼累了, 比如說這一次我們的公司的VFP .DBF 本來是要做廢的,但後來 經我的測試以後不但效能可以增加,並而且可以與我們的網站連結資料 , 那何樂不為呢?
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 4249
來自: Taipei,Taiwan

第 24 樓

發表發表於: 星期一 十二月 21, 2009 9:32 am    文章主題: 引言回覆

tinwhang 寫到:
syntech 寫到:
沒得接.
各玩各的


其實經我測試以後是可以接的,謝謝大家


你可能得說一下什麼叫"可以接".
話說,接不接,也沒關係,
可以動作就好.

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
tinwhang



註冊時間: 2009-11-08
文章: 104


第 25 樓

發表發表於: 星期一 十二月 21, 2009 6:10 pm    文章主題: 引言回覆

tinwhang 寫到:
syntech 寫到:
SQLEXEC() 取回的資料為 LOCAL CURSOR,
地位與 TABLE 相當,資料操作也幾乎等於一般的TABLE,
只是你如果沒有作適當處理,
LOCAL CURSOR的資料異動不會更新到後端資料庫
才會查對你的資料操作方式.


非常感謝您的解說,
但這套系統原本就已經有設 .cdx ,那我應該下什麼指令,才可以讓
cursor來承接原本的 .cdx ?

謝謝


CURSOR 可以來承接原本的 .CDX
回頂端
檢視會員個人資料 發送私人訊息
ckp6250



註冊時間: 2004-07-30
文章: 1645


第 26 樓

發表發表於: 星期一 十二月 21, 2009 8:30 pm    文章主題: 引言回覆

tinwhang 寫到:

CURSOR 可以來承接原本的 .CDX


寒流來了,
好冷哦!
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
tinwhang



註冊時間: 2009-11-08
文章: 104


第 27 樓

發表發表於: 星期一 十二月 21, 2009 11:13 pm    文章主題: 引言回覆

ckp6250 寫到:
tinwhang 寫到:

CURSOR 可以來承接原本的 .CDX


寒流來了,
好冷哦!


師兄,那就請您多穿衣服吧 !!! 多保重丫,免得看到美女一直流鼻涕,那就不好了
哇哈哈
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 4249
來自: Taipei,Taiwan

第 28 樓

發表發表於: 星期二 十二月 22, 2009 8:57 am    文章主題: 引言回覆

用"承接",還不如說"沿用".
但是其實還是差很多.


使用了原先的CDX,
這個說法不太通,
大多是直接對取回來的CURSOR重新下INDEX ON 的命令,產生新的CDX,
不太會拿原先的CDX再作REINDEX的動作.
此時下的INDEX ON 命令就純粹只為了加速本地端CURSOR的存取速度而已,
索引鍵值不必與原先的相同.

在本地端不管怎麼下INDEX,REINDEX,
對遠端DB主機上的原始TABLE一點作用都沒有,
在遠端DB主機執行CREATE INDEX,ALTER TABLE命令,也不會對本地端CURSOR有任何作用,


所以稱為"沒得接,各玩各的".

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
tinwhang



註冊時間: 2009-11-08
文章: 104


第 29 樓

發表發表於: 星期二 十二月 22, 2009 6:08 pm    文章主題: 引言回覆

syntech 寫到:
用"承接",還不如說"沿用".
但是其實還是差很多.


使用了原先的CDX,
這個說法不太通,
大多是直接對取回來的CURSOR重新下INDEX ON 的命令,產生新的CDX,
不太會拿原先的CDX再作REINDEX的動作.
此時下的INDEX ON 命令就純粹只為了加速本地端CURSOR的存取速度而已,
索引鍵值不必與原先的相同.

在本地端不管怎麼下INDEX,REINDEX,
對遠端DB主機上的原始TABLE一點作用都沒有,
在遠端DB主機執行CREATE INDEX,ALTER TABLE命令,也不會對本地端CURSOR有任何作用,
所以稱為"沒得接,各玩各的".

嗯了解, 那真的是我的語意不明,我的前題是CURSOR 可否接原本的 .CDX


雖然這樣處理對別人來說可能無意義,但我這套系統卻起了不小的作用 ...
因為原本的 .CDX 有好幾百個 ,那我就不用再一一下去下 INDEX ON 的指令
也不用下去測試每一個.CDX , 那我是不是可以享受一下 短暫的快樂 .... 呵呵
真是感激您們 ....
回頂端
檢視會員個人資料 發送私人訊息
ckp6250



註冊時間: 2004-07-30
文章: 1645


第 30 樓

發表發表於: 星期二 十二月 22, 2009 7:21 pm    文章主題: 引言回覆

tinwhang 寫到:

雖然這樣處理對別人來說可能無意義,但我這套系統卻起了不小的作用 ...
因為原本的 .CDX 有好幾百個 ,那我就不用再一一下去下 INDEX ON 的指令
也不用下去測試每一個.CDX , 那我是不是可以享受一下 短暫的快樂 .... 呵呵


怎麼越聽腳底越冷?
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
前往頁面 上一頁  1, 2, 3  下一頁
2頁(共3頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作