|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
whh
註冊時間: 2010-04-16 文章: 166
第 1 樓
|
發表於: 星期四 四月 28, 2011 8:52 am 文章主題: vfp odbc 新增資料問題? |
|
|
有三個問題請教
1.組字串問題
MySQL = "INSERT INTO (....."
如果一口氣打完所有sql 超過1~200字,會讀不出來
我後來發現用
MySQL = ""
MySQL = MySQL + ""
這樣去組可以組......設計上怎麼感覺怪怪的啊=.=
我今天發現不知道是不是因為真的太長連
MySQL = ""
MySQL = MySQL + ""
也都不行,我用_CLIPTEXT = MySQL 看了一下後面的指令都被截掉><"....
請問有解嗎?? 因為我要INSERT 的欄位實在太多了.....
=================================================
2. .net c# 可以在一個物件上面一次作 INSERT 10筆資料,
如果反觀vfp我只知道odbc寫資料到不同資料庫
只能寫迴圈然後一筆一筆跑
SQLEXEC(gnConnHandle, MySQL, "MyCursor")
這樣速度是不是筆整批的慢><?
怎麼樣會比較快呢?
=================================================
3.這個實在困擾很久....
有時候我對vfp的table前面要做一個簡單的【流水號】
每次我都這樣
SELECT '' 順序, A,B,C
FROM TEST
INTO CURSOR T_TEST
SELECT T_TEST
COPY TO T_TEXT
CLOSE ALL
USE T_TEXT
N_NUM = 1
SCAN
REPLACE 順序 WITH N_NUM
N_NUM = N_NUM + 1
ENDSACN
COPY TO T_TEXT XLS
我只是要加個流水號而已......動作有點複雜,有內建的SQL順序指令嗎=.=;
因為我是用6.0有1萬6千筆的問題,必須先弄出流水號再去轉出excle
看到數字我自己或是請同仁,人工合併的時候會比較安心xd
whh 在 星期四 四月 28, 2011 9:25 am 作了第 2 次修改 |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4212 來自: Taipei,Taiwan
第 2 樓
|
發表於: 星期四 四月 28, 2011 9:19 am 文章主題: |
|
|
加油 _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
pilipala
註冊時間: 2009-05-13 文章: 75
第 3 樓
|
發表於: 星期四 四月 28, 2011 10:18 am 文章主題: |
|
|
Help 內查詢 TEXT ENDTEXT
Help 內查詢 RECNO()
以上給你參考,看看有沒有幫助 ~~ |
|
回頂端 |
|
|
whh
註冊時間: 2010-04-16 文章: 166
第 4 樓
|
發表於: 星期四 四月 28, 2011 11:31 am 文章主題: |
|
|
pilipala 寫到: |
Help 內查詢 TEXT ENDTEXT
Help 內查詢 RECNO()
以上給你參考,看看有沒有幫助 ~~ |
RECNO我試過了沒有用捏,不知道是不是有join的問題 |
|
回頂端 |
|
|
aizz
註冊時間: 2007-01-29 文章: 171
第 5 樓
|
發表於: 星期四 四月 28, 2011 2:46 pm 文章主題: 加油!加油!加油! |
|
|
躺長灘島沙灘上等妳來
加油!
加油!
加油!
|
|
回頂端 |
|
|
LiuRambo
註冊時間: 2007-11-27 文章: 481
第 6 樓
|
發表於: 星期四 四月 28, 2011 4:00 pm 文章主題: |
|
|
1.
字串過長本來就應該要分次處理
建議可以將SELECT 到 FROM組成字串1
WHERE組成字串2
GROUP組成字串3
最後再來個大合體
2.
可能可以考慮用SPT或是REMOVE VIEW
這部分我不常用 請高手回答
3.
SELECT '' 順序, A,B,C
FROM TEST
INTO CURSOR T_TEST
改成
SELECT '' 順序, A,B,C ,RECNO()
FROM TEST
INTO CURSOR T_TEST
這樣應該可以達成你要的 |
|
回頂端 |
|
|
ckp6250
註冊時間: 2004-07-30 文章: 1644
第 7 樓
|
發表於: 星期四 四月 28, 2011 9:14 pm 文章主題: |
|
|
Mysql 一次作 INSERT 數十百筆資料並沒有問題, 加上 『;』即可,例如
Mysql = "insert into abc ( ...);insert into abc ( ...);insert into abc ( ...);insert into abc ( ...);"
SQLEXEC(gnConnHandle, MySQL, "MyCursor")
如果,您要一次 insert 數千或數萬筆資料時 , 那就應改用外部指令方式匯入,
先把指令做成文字檔,再呼叫 mysql.exe 去執行 , 效率很高,一次幾萬筆都很快
流水號有可能關係到排序問題或者僅取部份資料或者join其他資料 , 直接用 recno() 會有問題 , 比較好的方法是用子查詢
Select RecNo() As 順序 , a.* from (SELECT A,B,C FROM TEST where xxx order by xxx ) a INTO CURSOR T_TEXT |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4212 來自: Taipei,Taiwan
第 8 樓
|
發表於: 星期五 四月 29, 2011 10:40 am 文章主題: |
|
|
不管用甚麼連接方式,
真正速度的瓶頸都是在 DB SERVER(EX: M$ SQL server,Oracle server,mysql server,.....) 本身,
而非 Client 端怎麼送命令,
只是寫程式的老是把重心擺在怎麼送命令.
以為字寫越少,或是用甚麼奇奇怪怪的技巧寫,速度就越快,
即便你用 spt,remote view,ca 等方法,而且是搞成vfp自己做更新的方式
當你下了tableupdate,
vfp 一樣是一筆一筆下inert,delete,update,
沒有甚麼"更快的方法"
對M$ SQL SERVER 來說,可以做成 server 端 cursor 及 client端cursor,
兩者的資料更新模式稍有不同,
當你去監視 VB/C#.NET 的行為也會發現,
隨著你ado連線方式不同,可以做成兩種更新模式,
server 端cursor 更新模式傳回sql server是像這樣的命令:
代碼: |
exec sp_cursor 180150000, 33, 1, N'', @FIELD01 = N'OOXX'
|
client端cursor更新模式,回傳給sql server的是正常的 SQL 命令,
代碼: |
exec sp_executesql N'UPDATE "TABLE" SET "FIELD01"=@P1, ......
|
兩種更新方式各有利弊.
vfp 傳統的spt或是remote view 會自然做成client端cursor更新的模式,
利用ADO +CA 就可以做出與VB/C#.NET一樣的兩種更新模式. _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙
syntech 在 星期五 四月 29, 2011 11:03 am 作了第 1 次修改 |
|
回頂端 |
|
|
ckp6250
註冊時間: 2004-07-30 文章: 1644
第 9 樓
|
發表於: 星期五 四月 29, 2011 10:56 am 文章主題: |
|
|
請教 syntech
按您的說法,那麼
方法一:
for i=1 to 100
SQLEXEC(gnConnHandle, "insert into abc (...)", "MyCursor")
Next
方法二:
SQLEXEC(gnConnHandle, "insert into abc (...);insert into abc (...);insert into abc (...);insert into abc (...);....", "MyCursor")
這二個方式, 效率是一樣的囉 ? |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4212 來自: Taipei,Taiwan
第 10 樓
|
發表於: 星期五 四月 29, 2011 11:10 am 文章主題: |
|
|
我寫的是 "效能瓶頸在 DB SERVER".而不是"一樣" _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4212 來自: Taipei,Taiwan
第 11 樓
|
發表於: 星期五 四月 29, 2011 11:13 am 文章主題: |
|
|
在 CLIENT 端做
代碼: |
CSQL = " INSERT .........."
CSQL = CSQL+" INSERT .........."
.
.
.
.
=SQLEXEC(CONNECTHANDLE,CSQL)
|
與
代碼: |
CSQL = ""
for i =1 to N
CSQL = CSQL+" INSERT .........."
next
=SQLEXEC(CONNECTHANDLE,CSQL)
|
執行時間自然不一樣,
但是與DB SERVER 怎麼處理資料異動的時間,
根本可以忽略.
但是你可以注意到,大多數寫程式的,是追求程式要寫得如何如何,
而不是去探討DB SERVER 怎樣做資料異動. _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙
syntech 在 星期五 四月 29, 2011 11:23 am 作了第 1 次修改 |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4212 來自: Taipei,Taiwan
第 12 樓
|
發表於: 星期五 四月 29, 2011 11:17 am 文章主題: |
|
|
所以濃縮成"加油",
其實就是我連說明都懶的意思. XD _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|