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

Copy Oracle table 去 VFP的問題

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
smithjoe



註冊時間: 2015-06-30
文章: 27


第 1 樓

發表發表於: 星期二 六月 30, 2015 2:48 pm    文章主題: Copy Oracle table 去 VFP的問題 引言回覆

我想由oracle抄30個table到vfp, 做法如下:
1. 連接 oracle by ODBC
2. selcet * from (oracle table name)
3. 暫時儲存到cursor
4. 由cursor儲存到vfp table (.dbf)(.dbf data and data structure經存在)

問題如下:
1. 要CREATE CURSOR嗎?
2. 怎樣抄到vfp table (.dbf)? COPY TO or APPEND FORM??
3. 可以用LOOPING 做到? 如可以,CURSOR要次次清理?
4. 有更好方法嗎?

以下是vfp code, v_table_fun record 次次都增加....
====================================
SET SAFETY OFF
SET TALK OFF

CLOSE DATABASES
OPEN DATABASE db1

CREATE CURSOR v_table_cur (fun_class_ C(4), f_cd C(4), ;
mod_time T(Cool, mod_by C(Cool)

SELECT * FROM v_table_cur WHERE .F. INTO CURSOR v_table_cur && clear cursor

STORE SQLCONNECT('Oracle_repo', 'ora_user1', 'ora_user1') TO gnConnHandle


SQLEXEC(gnConnHandle, 'SELECT * FROM v_table_fun', 'v_table_cur')
SELECT * FROM v_table_cur
&& WHERE .F. INTO CURSOR v_table_cur
&& BROWSE
USE v_table_fun ALIAS v_table_fun
&& BROWSE
select v_table_fun
append from dbf("v_table_cur")
====================================

謝賜教
回頂端
檢視會員個人資料 發送私人訊息
bx1166



註冊時間: 2011-12-06
文章: 273


第 2 樓

發表發表於: 星期二 六月 30, 2015 4:33 pm    文章主題: 引言回覆

既然是要另外存成dbf那何必多一道手續,直接產生dbf不就是了?
回頂端
檢視會員個人資料 發送私人訊息
smithjoe



註冊時間: 2015-06-30
文章: 27


第 3 樓

發表發表於: 星期二 六月 30, 2015 4:59 pm    文章主題: 引言回覆

謝bx1166兄賜教.

因我是新手, 可教導要收改那裡CODE??

謝賜教
回頂端
檢視會員個人資料 發送私人訊息
syntech



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

第 4 樓

發表發表於: 星期二 六月 30, 2015 5:09 pm    文章主題: 引言回覆

其實 (2),(3) 是同一個步驟.

代碼:

====================================
SET SAFETY OFF
SET TALK OFF

CLOSE DATABASES
OPEN DATABASE db1

STORE SQLCONNECT('Oracle_repo', 'ora_user1', 'ora_user1') TO gnConnHandle

SQLEXEC(gnConnHandle, 'SELECT * FROM v_table_fun', 'v_table_cur')

select v_table_cur
COPY TO C:\v_table_fun.DBF  &&   <= 就這一句就好
 
====================================



30個TABLE 就重複 SQLEXEC及COPY TO 30次.

但轉成 TABLE 有欄位名稱長度,資料型態不完全一致及筆數的限制.
其它自己試看看.

差不多就是:
代碼:

SQLEXEC(gnConnHandle, 'XXXXXXXXXXX', 'TBLNAME')
select TBLNAME
SCAN
SQLEXEC(gnConnHandle, 'select * from '+,TBLNAME.TABLE, TBLNAME.TABLE+'T')
SELECT (TBLNAME.TABLE+'T')
COPY TO (TBLNAME.TABLE)
USE (TBLNAME.TABLE+'T')
ENDSCAN


當然上面是亂寫的.


如果你很堅持一定要與你原先準備好的DBF一致,
那就要用 APPEND FROM,
代碼:

SQLEXEC(gnConnHandle, 'SELECT * FROM v_table_fun', 'v_table_cur')

USE v_table_fun ALIAS v_table_fun in 0
select v_table_fun
append from dbf("v_table_cur")


否則用COPY TO 就可以.
上面提到了,欄位型態及名稱長度可能不完全一樣.
不幸的情況可能還要在 SQLEXEC 時調整欄位名稱長度及型態

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

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



註冊時間: 2015-06-30
文章: 27


第 5 樓

發表發表於: 星期二 六月 30, 2015 5:30 pm    文章主題: 引言回覆

謝賜教....

但我想抄完畢後即時用這些dbf做processing, 用copy to是要再add入dbc, 我可zap vfp 裹30個TABLE再append??

回頂端
檢視會員個人資料 發送私人訊息
ckp6250



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


第 6 樓

發表發表於: 星期二 六月 30, 2015 5:44 pm    文章主題: 引言回覆

append from 比較安全...(安全很多)
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
syntech



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

第 7 樓

發表發表於: 星期二 六月 30, 2015 11:25 pm    文章主題: 引言回覆

會用的人,每一種方法都好,適用在不同的地方.
不會用的人,固執在非用所謂"最好"的方法不可,反而通通搞不定.

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

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



註冊時間: 2015-06-30
文章: 27


第 8 樓

發表發表於: 星期二 六月 30, 2015 11:36 pm    文章主題: 引言回覆

謝syntech賜教......
回頂端
檢視會員個人資料 發送私人訊息
syntech



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

第 9 樓

發表發表於: 星期三 七月 01, 2015 10:02 am    文章主題: 引言回覆

網友只能提示解答,
但最終還是得靠自己實驗出答案來.

大家都不會知道樓主後面會做什麼處理,
又為什麼需要放到DBC管制的TABLE.

如果沒有必要倒到哪個TABLE中,
EXECSQL 取回的CURSOR直接拿來運算就可以,
如果是內容值比格式重要,COPY TO 就很好用,
如果格式更重要,APPEND FROM 比COPY TO 更適用.


對同一個問題可不可以找出多種解法,
這些解法的使用時機及方式差異,
功夫淺深就是在這裡了.

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

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



註冊時間: 2015-06-30
文章: 27


第 10 樓

發表發表於: 星期二 七月 07, 2015 4:58 pm    文章主題: 引言回覆

我用第4樓的code, 當我執行大量data從oracle去vfp時 (append from), 產生了APPCRASH (如下), 請問怎可以防止呢?? (我用Windows 2008 64 bit 運行, copy完成的size約1.5GB)

(是我次次apppend後沒有close table all 所產生, 還是cusor沒有close所產生呢??)
=================================
Problem signature:
Problem Event Name: APPCRASH
Application Name: vfp9.exe
Application Version: 9.0.0.2412
Application Timestamp: 41be02c9
Fault Module Name: ntdll.dll
Fault Module Version: 6.1.7601.17514
Fault Module Timestamp: 4ce7ba58
Exception Code: c0000005
Exception Offset: 000332ff
OS Version: 6.1.7601.2.1.0.274.10
Locale ID: 1033

Read our privacy statement online:
http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0409

If the online privacy statement is not available, please read our privacy statement offline:
C:\Windows\system32\en-US\erofflps.txt

=================================

回頂端
檢視會員個人資料 發送私人訊息
syntech



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

第 11 樓

發表發表於: 星期三 七月 08, 2015 5:14 pm    文章主題: 引言回覆

可以先查查 DBF 的極限在哪裡.

既然你有懷疑,那就試試看,再把結果PO上來

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

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



註冊時間: 2015-06-30
文章: 27


第 12 樓

發表發表於: 星期三 七月 08, 2015 6:04 pm    文章主題: 引言回覆

謝syntech,

所知的是DBF table size 要在2GB下,正試試次次COPY後關閉TABLE (CLOSE TABLES ALL)
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

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


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