|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
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(, mod_by C()
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. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
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. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
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. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
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. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
smithjoe
註冊時間: 2015-06-30 文章: 27
第 12 樓
|
發表於: 星期三 七月 08, 2015 6:04 pm 文章主題: |
|
|
謝syntech,
所知的是DBF table size 要在2GB下,正試試次次COPY後關閉TABLE (CLOSE TABLES ALL) |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|