  | 
				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 文章: 4252 來自: 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 文章: 172
 
  第 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 文章: 1645
 
  第 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 文章: 4252 來自: 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 文章: 1645
 
  第 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 文章: 4252 來自: Taipei,Taiwan
  第 10 樓
  | 
		
			
				 發表於: 星期五 四月 29, 2011 11:10 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				我寫的是 "效能瓶頸在 DB SERVER".而不是"一樣" _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: 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 文章: 4252 來自: Taipei,Taiwan
  第 12 樓
  | 
		
			
				 發表於: 星期五 四月 29, 2011 11:17 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				所以濃縮成"加油",
 
其實就是我連說明都懶的意思.    XD _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |