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

vfp odbc 新增資料問題?

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
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.這個實在困擾很久.... Embarassed
有時候我對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. 想學習系統規劃,想找系統架構的顧問

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



註冊時間: 2009-05-13
文章: 75


第 3 樓

發表發表於: 星期四 四月 28, 2011 10:18 am    文章主題: 引言回覆

引言回覆:

1.組字串問題


Help 內查詢 TEXT ENDTEXT

引言回覆:

做一個簡單的【流水號】


Help 內查詢 RECNO()

以上給你參考,看看有沒有幫助 ~~
回頂端
檢視會員個人資料 發送私人訊息
whh



註冊時間: 2010-04-16
文章: 166


第 4 樓

發表發表於: 星期四 四月 28, 2011 11:31 am    文章主題: 引言回覆

pilipala 寫到:
引言回覆:

1.組字串問題


Help 內查詢 TEXT ENDTEXT

引言回覆:

做一個簡單的【流水號】


Help 內查詢 RECNO()

以上給你參考,看看有沒有幫助 ~~


RECNO我試過了沒有用捏,不知道是不是有join的問題
回頂端
檢視會員個人資料 發送私人訊息
aizz



註冊時間: 2007-01-29
文章: 171


第 5 樓

發表發表於: 星期四 四月 28, 2011 2:46 pm    文章主題: 加油!加油!加油! 引言回覆

syntech 寫到:
加油


躺長灘島沙灘上等妳來

加油!
加油!
加油!

Twisted Evil
回頂端
檢視會員個人資料 發送私人訊息
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
這樣應該可以達成你要的
回頂端
檢視會員個人資料 發送私人訊息 MSN Messenger
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 次修改
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
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. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
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 次修改
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
syntech



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

第 12 樓

發表發表於: 星期五 四月 29, 2011 11:17 am    文章主題: 引言回覆

所以濃縮成"加油",
其實就是我連說明都懶的意思. XD

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

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

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


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