<?xml version="1.0" encoding="big5" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:annotate="http://purl.org/rss/1.0/modules/annotate/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<!--
	This feed generated for Anonymous
	More info at http://naklon.info/rss/about.htm
-->
<channel>
<title>VFP 愛用者社區</title>
<link>http://vfp.sunyear.com.tw/</link>
<description>本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用&quot;搜尋&quot;的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.</description>
<managingEditor>garfield@sunyear.com.tw</managingEditor>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<generator>RSS Feed 2.2.4</generator>
<lastBuildDate>Thu, 27 Aug 2026 03:48:10 GMT</lastBuildDate>
<image>
	<url>http://vfp.sunyear.com.tw/templates/subSilver/images/logo_phpBB_med.gif</url>
	<title>VFP 愛用者社區</title>
	<link>http://vfp.sunyear.com.tw/</link>
	<width>122</width>
	<height>56</height>
</image>
<item>
<title>VFP 討論區 :: RE: 分享:全域可見的 CREATEOBJECT(&quot;Collection&quot;) 用法</title>
<link>http://vfp.sunyear.com.tw/viewtopic.php?p=37048#37048</link>
<pubDate>Fri, 21 Aug 2026 07:10:33 GMT</pubDate>
<guid isPermaLink="true">http://vfp.sunyear.com.tw/viewtopic.php?p=37048#37048</guid>
<description>發表人: &lt;a href=&quot;http://vfp.sunyear.com.tw/profile.php?mode=viewprofile&amp;u=6455&quot; target=&quot;_blank&quot;&gt;CPS0204&lt;/a&gt;&lt;br /&gt;

發表於: 星期五 八月 21, 2026 3:10 pm (GMT 8)&lt;br /&gt;
&lt;br /&gt;&lt;span class="postbody"&gt;
&lt;span style=&quot;font-size: 24px; line-height: normal&quot;&gt;&lt;span style=&quot;color: red&quot;&gt;public my_empty_object 與 public my_array[100,3] 的差異&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;

&lt;br /&gt;
&lt;span style=&quot;color: blue&quot;&gt;在 Visual FoxPro 9 中，PUBLIC my_empty_object（搭配 CREATEOBJECT('EMPTY')）與二維陣列 PUBLIC my_array[100,3] 的核心差異在於資料模型、變數池耗用、存取方式與維護成本：&lt;/span&gt;
&lt;br /&gt;
有圖形,請看附件word檔&lt;/span&gt;&lt;br /&gt;
</description>
<dc:creator>CPS0204</dc:creator>
<dc:subject>VFP 討論區</dc:subject>
<annotate:reference rdf:resource="http://vfp.sunyear.com.tw/viewtopic.php?p=37044#37044" />
<comments>http://vfp.sunyear.com.tw/posting.php?mode=quote&amp;p=37048</comments>
</item>
<item>
<title>VFP 討論區 :: RE: 分享:全域可見的 CREATEOBJECT(&quot;Collection&quot;) 用法</title>
<link>http://vfp.sunyear.com.tw/viewtopic.php?p=37047#37047</link>
<pubDate>Fri, 21 Aug 2026 07:05:22 GMT</pubDate>
<guid isPermaLink="true">http://vfp.sunyear.com.tw/viewtopic.php?p=37047#37047</guid>
<description>發表人: &lt;a href=&quot;http://vfp.sunyear.com.tw/profile.php?mode=viewprofile&amp;u=6455&quot; target=&quot;_blank&quot;&gt;CPS0204&lt;/a&gt;&lt;br /&gt;

發表於: 星期五 八月 21, 2026 3:05 pm (GMT 8)&lt;br /&gt;
&lt;br /&gt;&lt;span class="postbody"&gt;
&lt;span style=&quot;font-size: 24px; line-height: normal&quot;&gt;&lt;span style=&quot;color: blue&quot;&gt;createobject('empty') 創造的是全域可見的物件嗎?&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;color: red&quot;&gt;不是，CREATEOBJECT('EMPTY') 本身並不會自動創造出全域可見的物件。&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 24px; line-height: normal&quot;&gt;
&lt;br /&gt;
&lt;span style=&quot;color: green&quot;&gt;物件的可見範圍（Scope）與生命週期，完全取決於存放它的「變數宣告方式」，而不是物件類別本身。
&lt;br /&gt;
一、 變數宣告決定它的可見範圍
&lt;br /&gt;
宣告方式	可見範圍（Scope）	生命週期
&lt;br /&gt;
LOCAL loObj
&lt;br /&gt;
loObj = CREATEOBJECT('EMPTY')	區域可見（局部）
&lt;br /&gt;

&lt;br /&gt;
只有宣告它的該段 Procedure / Method 內部看得到。	當該函式或事件執行完畢（RETURN）時，物件立即自動消滅釋放。
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
PRIVATE loObj
&lt;br /&gt;
loObj = CREATEOBJECT('EMPTY')	向下層可見
&lt;br /&gt;
當前函式以及其呼叫的所有子程序（Sub-routine）看得到。	當定義它的母程序結束時消滅。
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
PUBLIC goObj
&lt;br /&gt;
goObj = CREATEOBJECT('EMPTY')	全系統全域可見（Global）
&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;

&lt;br /&gt;
整個 ERP 系統的任何 PRG、Form、Report、Menu 皆可隨時讀寫。	直到系統關閉（QUIT）或手動執行 RELEASE goObj。
&lt;br /&gt;
二、 為什麼常讓人誤以為它是「全域」？（跨 DataSession 特性）
&lt;br /&gt;
大家常說 EMPTY 物件具備「穿透性」，容易讓人誤會它是全域的。實際上它指的是：物件在記憶體中的參考（Reference）可以安全地「跨私有表單（DataSession = 2）傳遞與存取」，而不會像 Table/Cursor 那樣被工作階段隔離。
&lt;br /&gt;
1. 區域物件（LOCAL）也能傳給私有表單：
&lt;br /&gt;
即便物件是以 LOCAL 宣告，只要透過參數傳入私有表單，子表單就能直接使用該物件實體：
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
* 主程式 (DataSession = 1)
&lt;br /&gt;
LOCAL loParam
&lt;br /&gt;
loParam = CREATEOBJECT(&quot;EMPTY&quot;)
&lt;br /&gt;
= ADDPROPERTY(loParam, &quot;CustNo&quot;, &quot;C001&quot;)
&lt;br /&gt;

&lt;br /&gt;
* 傳入私有表單 (DataSession = 2)
&lt;br /&gt;
DO FORM frm_CustDetail WITH loParam
&lt;br /&gt;
2. 若要做到真正「全系統到處免傳參直接存取」，必須宣告為 PUBLIC 或掛在 _SCREEN：
&lt;br /&gt;
&#8226;	做法 A：宣告為 PUBLIC 變數
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
* MAIN.PRG 系統啟動時
&lt;br /&gt;
PUBLIC goSysParam
&lt;br /&gt;
goSysParam = CREATEOBJECT(&quot;EMPTY&quot;)
&lt;br /&gt;
= ADDPROPERTY(goSysParam, &quot;CompanyID&quot;, &quot;KS01&quot;)
&lt;br /&gt;
= ADDPROPERTY(goSysParam, &quot;TaxRate&quot;, 0.05)
&lt;br /&gt;

&lt;br /&gt;
* 系統內任何表單皆可隨時讀取：
&lt;br /&gt;
? goSysParam.CompanyID
&lt;br /&gt;
&#8226;	做法 B：掛載在 _SCREEN 或 _VFP 系統物件上（免 PUBLIC 變數）
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
* 直接掛在主畫面上，全系統永遠可見且不會被 CLEAR ALL 誤刪
&lt;br /&gt;
= ADDPROPERTY(_SCREEN, &quot;oSysParam&quot;, CREATEOBJECT(&quot;EMPTY&quot;))
&lt;br /&gt;
= ADDPROPERTY(_SCREEN.oSysParam, &quot;CompanyID&quot;, &quot;KS01&quot;)
&lt;br /&gt;

&lt;br /&gt;
* 任何表單調用：
&lt;br /&gt;
? _SCREEN.oSysParam.CompanyID&lt;/span&gt;&lt;br /&gt;
</description>
<dc:creator>CPS0204</dc:creator>
<dc:subject>VFP 討論區</dc:subject>
<annotate:reference rdf:resource="http://vfp.sunyear.com.tw/viewtopic.php?p=37044#37044" />
<comments>http://vfp.sunyear.com.tw/posting.php?mode=quote&amp;p=37047</comments>
</item>
<item>
<title>VFP 討論區 :: RE: 分享:全域可見的 CREATEOBJECT(&quot;Collection&quot;) 用法</title>
<link>http://vfp.sunyear.com.tw/viewtopic.php?p=37046#37046</link>
<pubDate>Fri, 21 Aug 2026 07:02:38 GMT</pubDate>
<guid isPermaLink="true">http://vfp.sunyear.com.tw/viewtopic.php?p=37046#37046</guid>
<description>發表人: &lt;a href=&quot;http://vfp.sunyear.com.tw/profile.php?mode=viewprofile&amp;u=6455&quot; target=&quot;_blank&quot;&gt;CPS0204&lt;/a&gt;&lt;br /&gt;

發表於: 星期五 八月 21, 2026 3:02 pm (GMT 8)&lt;br /&gt;
&lt;br /&gt;&lt;span class="postbody"&gt;
&lt;span style=&quot;font-size: 18px; line-height: normal&quot;&gt;&lt;span style=&quot;color: red&quot;&gt;CREATEOBJECT('EMPTY') 用法&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
在 Visual FoxPro 中，EMPTY 是一個非常特殊的底層輕量類別（Lightweight Base Class）。
&lt;br /&gt;
它與一般的 Custom 或 Form 類別不同：EMPTY 物件「沒有任何內建的屬性、方法或事件（No PEMs）」。它純粹就是一塊乾淨的記憶體空間，專門用來當作輕量資料結構（Data Structure / Record），用來在函式、類別以及私有表單（DataSession = 2）之間傳遞資料。
&lt;br /&gt;
一、 EMPTY 物件的核心特點
&lt;br /&gt;
1.	極度輕量、節省記憶體：沒有繼承任何 Visual FoxPro 基礎物件的多餘負擔（如 Name、Class、Init 等都沒有）。
&lt;br /&gt;
2.	完全動態擴充：無法直接在上面寫程式碼（Method），但可以使用 ADDPROPERTY() 隨時掛載任意自訂屬性。
&lt;br /&gt;
3.	無縫穿透私有表單：不受 DataSession 隔離限制，可在不同表單與程序間自由傳遞。
&lt;br /&gt;
二、 基本使用方法：手動建立與賦值
&lt;br /&gt;
透過 ADDPROPERTY() 動態為物件新增屬性：
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
LOCAL loUser
&lt;br /&gt;
loUser = CREATEOBJECT(&quot;EMPTY&quot;)
&lt;br /&gt;

&lt;br /&gt;
* 為物件動態新增屬性：ADDPROPERTY(物件, 屬性名稱, 初始值)
&lt;br /&gt;
= ADDPROPERTY(loUser, &quot;UserID&quot;,   &quot;MIS001&quot;)
&lt;br /&gt;
= ADDPROPERTY(loUser, &quot;UserName&quot;, &quot;張三&quot;)
&lt;br /&gt;
= ADDPROPERTY(loUser, &quot;Age&quot;,      56)
&lt;br /&gt;
= ADDPROPERTY(loUser, &quot;IsAdmin&quot;,  .T.)
&lt;br /&gt;

&lt;br /&gt;
* 取用屬性值（直接用 . 存取）
&lt;br /&gt;
? loUser.UserID      &amp;&amp; 輸出: MIS001
&lt;br /&gt;
? loUser.UserName    &amp;&amp; 輸出: 張三
&lt;br /&gt;

&lt;br /&gt;
* 修改屬性值（直接賦值即可，不需要再呼叫 ADDPROPERTY）
&lt;br /&gt;
loUser.UserName = &quot;李四&quot;
&lt;br /&gt;
三、 與資料表連動的高階用法（ERP 開發最常用）
&lt;br /&gt;
在 VFP 中，EMPTY 物件最經典的應用是搭配 SCATTER NAME 與 GATHER NAME，取代傳統的記憶體變數或陣列：
&lt;br /&gt;
1. 將目前資料列瞬間轉為 EMPTY 物件
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
USE Orders IN 0
&lt;br /&gt;
SELECT Orders
&lt;br /&gt;

&lt;br /&gt;
* 自動建立一個 EMPTY 物件 loRow，並將目前資料列的所有欄位自動掛載為屬性
&lt;br /&gt;
SCATTER NAME loRow MEMO
&lt;br /&gt;

&lt;br /&gt;
* 此時可直接讀取欄位名稱
&lt;br /&gt;
? loRow.OrderNo
&lt;br /&gt;
? loRow.OrderDate
&lt;br /&gt;
? loRow.TotalAmt
&lt;br /&gt;

&lt;br /&gt;
* 修改物件內容
&lt;br /&gt;
loRow.TotalAmt = loRow.TotalAmt * 0.9
&lt;br /&gt;

&lt;br /&gt;
* 將物件內容回寫進資料表
&lt;br /&gt;
GATHER NAME loRow MEMO
&lt;br /&gt;
四、 跨私有表單（DataSession）傳遞多筆參數
&lt;br /&gt;
當表單啟用私有工作階段（DataSession = 2）時，若要傳遞 5~6 個參數，傳統做法寫在 DO FORM frm_detail WITH ... 容易混亂，改傳一個 EMPTY 物件最乾淨：
&lt;br /&gt;
1. 呼叫端（主表單）
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
LOCAL loParam
&lt;br /&gt;
loParam = CREATEOBJECT(&quot;EMPTY&quot;)
&lt;br /&gt;
= ADDPROPERTY(loParam, &quot;ActionType&quot;, &quot;EDIT&quot;)
&lt;br /&gt;
= ADDPROPERTY(loParam, &quot;OrderNo&quot;,    &quot;SO202608001&quot;)
&lt;br /&gt;
= ADDPROPERTY(loParam, &quot;ItemNo&quot;,     &quot;A001&quot;)
&lt;br /&gt;
= ADDPROPERTY(loParam, &quot;CanDelete&quot;,  .F.)
&lt;br /&gt;

&lt;br /&gt;
* 將整包物件傳入子表單
&lt;br /&gt;
DO FORM frm_OrderDetail WITH loParam
&lt;br /&gt;
2. 接收端（子表單 Init 事件）
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
* 子表單 Form.Init
&lt;br /&gt;
LPARAMETERS toParam
&lt;br /&gt;

&lt;br /&gt;
IF VARTYPE(toParam) == &quot;O&quot;
&lt;br /&gt;
    ThisForm.cActionType = toParam.ActionType
&lt;br /&gt;
    ThisForm.cOrderNo    = toParam.OrderNo
&lt;br /&gt;
    ThisForm.cmd_del.Enabled = toParam.CanDelete
&lt;br /&gt;
ENDIF
&lt;br /&gt;
五、 與 Collection（集合）搭配：打造記憶體字典快取
&lt;br /&gt;
將多個 EMPTY 物件存入 Collection 中，能完全取代跨工作區容易被干擾的 Cursor：
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
LOCAL oUserList, loEmp
&lt;br /&gt;
oUserList = CREATEOBJECT(&quot;Collection&quot;)
&lt;br /&gt;

&lt;br /&gt;
* 建立第一筆資料物件
&lt;br /&gt;
loEmp1 = CREATEOBJECT(&quot;EMPTY&quot;)
&lt;br /&gt;
= ADDPROPERTY(loEmp1, &quot;EmpID&quot;, &quot;E001&quot;)
&lt;br /&gt;
= ADDPROPERTY(loEmp1, &quot;Name&quot;, &quot;王大明&quot;)
&lt;br /&gt;
oUserList.Add(loEmp1, loEmp1.EmpID)
&lt;br /&gt;

&lt;br /&gt;
* 建立第二筆資料物件
&lt;br /&gt;
loEmp2 = CREATEOBJECT(&quot;EMPTY&quot;)
&lt;br /&gt;
= ADDPROPERTY(loEmp2, &quot;EmpID&quot;, &quot;E002&quot;)
&lt;br /&gt;
= ADDPROPERTY(loEmp2, &quot;Name&quot;, &quot;陳小美&quot;)
&lt;br /&gt;
oUserList.Add(loEmp2, loEmp2.EmpID)
&lt;br /&gt;

&lt;br /&gt;
* 瞬間依 Key 取出物件並使用
&lt;br /&gt;
IF oUserList.GetKey(&quot;E001&quot;) &gt; 0
&lt;br /&gt;
    loTarget = oUserList.Item(&quot;E001&quot;)
&lt;br /&gt;
    ? loTarget.Name   &amp;&amp; 輸出: 王大明
&lt;br /&gt;
ENDIF
&lt;br /&gt;
六、 輔助函數：檢測與移除屬性
&lt;br /&gt;
&#8226;	檢查屬性是否存在（PEMSTATUS）：
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
IF PEMSTATUS(loUser, &quot;UserName&quot;, 5)
&lt;br /&gt;
    ? &quot;物件擁有 UserName 屬性&quot;
&lt;br /&gt;
ENDIF
&lt;br /&gt;
&#8226;	移除屬性（REMOVEPROPERTY）：
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
* 移除已掛載的屬性，釋放空間
&lt;br /&gt;
= REMOVEPROPERTY(loUser, &quot;IsAdmin&quot;)
&lt;br /&gt;

&lt;br /&gt;
&lt;span style=&quot;font-size: 24px; line-height: normal&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
</description>
<dc:creator>CPS0204</dc:creator>
<dc:subject>VFP 討論區</dc:subject>
<annotate:reference rdf:resource="http://vfp.sunyear.com.tw/viewtopic.php?p=37044#37044" />
<comments>http://vfp.sunyear.com.tw/posting.php?mode=quote&amp;p=37046</comments>
</item>
<item>
<title>VFP 討論區 :: vfox9 有關陣列的所有使用方法,函數介紹</title>
<link>http://vfp.sunyear.com.tw/viewtopic.php?p=37045#37045</link>
<pubDate>Thu, 20 Aug 2026 22:26:19 GMT</pubDate>
<guid isPermaLink="true">http://vfp.sunyear.com.tw/viewtopic.php?p=37045#37045</guid>
<description>發表人: &lt;a href=&quot;http://vfp.sunyear.com.tw/profile.php?mode=viewprofile&amp;u=6455&quot; target=&quot;_blank&quot;&gt;CPS0204&lt;/a&gt;&lt;br /&gt;
主題: vfox9 有關陣列的所有使用方法,函數介紹&lt;br /&gt;
發表於: 星期五 八月 21, 2026 6:26 am (GMT 8)&lt;br /&gt;
&lt;br /&gt;&lt;span class="postbody"&gt;
&lt;span style=&quot;font-size: 18px; line-height: normal&quot;&gt;&lt;span style=&quot;color: red&quot;&gt;在 Visual FoxPro 9 中，陣列（Array）是記憶體操作非常核心的一環。VFP 的陣列特性是：以 1 為基準（1-based）、單一陣列內可混合存放不同型別資料（數值、字元、日期、邏輯值甚至物件）、最多支援 二維（列與欄），且陣列內的所有元素共用變數池（MVCOUNT）。
&lt;br /&gt;
以下為您整理 VFP 9 中關於陣列的宣告與賦值、內建高頻函數、以及與 Table/SQL 互轉的高階指令。&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;

&lt;br /&gt;
&lt;span style=&quot;font-size: 24px; line-height: normal&quot;&gt;一、 陣列的宣告、賦值與基本特性&lt;/span&gt;
&lt;br /&gt;
1. 宣告陣列
&lt;br /&gt;
使用 DIMENSION、DECLARE 或搭配變數範圍關鍵字（LOCAL、PUBLIC、PRIVATE）：
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
* 一維陣列 (5 個元素，預設值皆為 .F.)
&lt;br /&gt;
LOCAL laList[5]
&lt;br /&gt;

&lt;br /&gt;
* 二維陣列 (10 列 x 3 欄)
&lt;br /&gt;
DIMENSION laMatrix[10, 3]
&lt;br /&gt;

&lt;br /&gt;
* 全域陣列宣告
&lt;br /&gt;
PUBLIC gaPower[100, 2]
&lt;br /&gt;
2. 賦值與批量初始化
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
* 單一元素賦值
&lt;br /&gt;
laList[1] = &quot;ERP系統&quot;
&lt;br /&gt;
laMatrix[1, 1] = &quot;A001&quot;
&lt;br /&gt;
laMatrix[1, 2] = 1500
&lt;br /&gt;

&lt;br /&gt;
* 批量全陣列賦值（直接對陣列名稱給值，所有元素都會變成該值）
&lt;br /&gt;
laList = 0          &amp;&amp; 所有 5 個元素一次歸零
&lt;br /&gt;
laMatrix = &quot;&quot;       &amp;&amp; 所有 30 個元素一次清為空字串
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;span style=&quot;font-size: 18px; line-height: normal&quot;&gt;二、 核心內建陣列函數一覽&lt;/span&gt;
&lt;br /&gt;
函數名稱	核心功能	常用情境
&lt;br /&gt;
ALEN()	取得陣列元素個數或維度大小	計算總元素數、總列數、總欄數
&lt;br /&gt;
ASCAN()	快速搜尋陣列內容	尋找某數值/字串在陣列中的位置
&lt;br /&gt;
ASORT()	陣列排序	依指定欄位升冪或降冪排序
&lt;br /&gt;
AINS()	插入元素 / 插入列	陣列中插入空位（會擠掉最後一筆）
&lt;br /&gt;
ADEL()	刪除元素 / 刪除列	刪除指定列（底層補空，需搭配 DIMENSION 縮容）
&lt;br /&gt;
ACOPY()	複製陣列內容	將來源陣列複製到目的陣列
&lt;br /&gt;
AELEMENT()	二維座標 $(R, C)$ 轉為一維元素序號	將 [列, 欄] 換算為單一 Index
&lt;br /&gt;
ASUBSCRIPT()	一維元素序號轉為二維座標 $(R$ 或 $C)$	搭配 ASCAN 查出該元素在第幾列
&lt;br /&gt;
AFIELDS()	讀取目前資料表結構存入陣列	取得 Table 欄位名、型別、長度等中繼資料
&lt;br /&gt;
ALINES()	將多行字串/文字依換行符號拆解進陣列	解析 Memo 欄位、文字檔或 SQL 語句
&lt;br /&gt;
ADIR()	讀取硬碟目錄與檔案清單進陣列	檔案搜尋、抓取目錄下所有 .dbf / .scx
&lt;br /&gt;
AERROR()	取得最後一次系統錯誤資訊	ON ERROR 或 TRY...CATCH 中抓取錯誤原因
&lt;br /&gt;
APRINTERS()	取得 Windows 系統所有安裝的印表機清單	印表機動態切換、預設印表機選取
&lt;br /&gt;
AFONT()	取得系統所有已安裝的字型名稱	UI 介面字型設定
&lt;br /&gt;
AMEMBERS()	取得物件（Object）的所有屬性、方法與事件	反射（Reflection）機制、動態遍歷物件
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;span style=&quot;font-size: 24px; line-height: normal&quot;&gt;三、 高頻核心函數詳解與實戰範例&lt;/span&gt;
&lt;br /&gt;
1. ALEN(ArrayName [, nArrayAttribute]) — 計算長度與維度
&lt;br /&gt;
&#8226;	ALEN(laArr) 或 ALEN(laArr, 0)：傳回總元素數量。
&lt;br /&gt;
&#8226;	ALEN(laArr, 1)：傳回總列數（Rows）（一維陣列則傳回總元素數）。
&lt;br /&gt;
&#8226;	ALEN(laArr, 2)：傳回總欄數（Columns）（若是一維陣列則傳回 0）。
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
DIMENSION laData[50, 4]
&lt;br /&gt;
? ALEN(laData)     &amp;&amp; 200 (總元素數)
&lt;br /&gt;
? ALEN(laData, 1)  &amp;&amp; 50  (列數)
&lt;br /&gt;
? ALEN(laData, 2)  &amp;&amp; 4   (欄數)
&lt;br /&gt;
2. ASCAN(ArrayName, eExpression [, nStart [, nElements [, nColumn [, nFlags]]]]) — 陣列搜尋
&lt;br /&gt;
這是 VFP 9 最強大的搜尋函數。VFP 9 支援第 6 個參數 nFlags，大幅簡化二維陣列查詢。
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
DIMENSION laUser[3, 2]
&lt;br /&gt;
laUser[1, 1] = &quot;ADMIN&quot;
&lt;br /&gt;
laUser[1, 2] = &quot;系統管理員&quot;
&lt;br /&gt;
laUser[2, 1] = &quot;MIS01&quot;
&lt;br /&gt;
laUser[2, 2] = &quot;資訊人員&quot;
&lt;br /&gt;
laUser[3, 1] = &quot;SALES&quot;
&lt;br /&gt;
laUser[3, 2] = &quot;業務專員&quot;
&lt;br /&gt;

&lt;br /&gt;
* 傳統做法：ASCAN 傳回一維序號，再用 ASUBSCRIPT 轉成列號
&lt;br /&gt;
lnElem = ASCAN(laUser, &quot;MIS01&quot;)
&lt;br /&gt;
IF lnElem &gt; 0
&lt;br /&gt;
    lnRow = ASUBSCRIPT(laUser, lnElem, 1)
&lt;br /&gt;
    ? &quot;找到在第 &quot; + STR(lnRow) + &quot; 列，職稱是：&quot; + laUser[lnRow, 2]
&lt;br /&gt;
ENDIF
&lt;br /&gt;

&lt;br /&gt;
* VFP 9 推薦做法 (利用 nFlags = 15: 完全相符、精確比對、直接傳回列號，並指定只找第 1 欄)
&lt;br /&gt;
* 語法：ASCAN(陣列, 搜尋值, 起始點, 搜尋範圍, 指定欄位, Flags)
&lt;br /&gt;
lnRow = ASCAN(laUser, &quot;MIS01&quot;, 1, -1, 1, 15)
&lt;br /&gt;
IF lnRow &gt; 0
&lt;br /&gt;
    ? &quot;直接取得列號：&quot;, lnRow  &amp;&amp; 輸出 2
&lt;br /&gt;
ENDIF
&lt;br /&gt;
3. ASORT(ArrayName [, nStart [, nElements [, nSortOrder [, nColumn]]]]) — 陣列排序
&lt;br /&gt;
&#8226;	nSortOrder：0 或省略為升冪（Ascending），1 為降冪（Descending）。
&lt;br /&gt;
&#8226;	nColumn：二維陣列指定以哪一欄作為排序基準。
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
DIMENSION laScore[3, 2]
&lt;br /&gt;
laScore[1, 1] = &quot;張三&quot;; laScore[1, 2] = 85
&lt;br /&gt;
laScore[2, 1] = &quot;李四&quot;; laScore[2, 2] = 95
&lt;br /&gt;
laScore[3, 1] = &quot;王五&quot;; laScore[3, 2] = 72
&lt;br /&gt;

&lt;br /&gt;
* 依第 2 欄（分數）進行「降冪排序」
&lt;br /&gt;
ASORT(laScore, 1, -1, 1, 2)
&lt;br /&gt;
4. ADEL() 與 AINS() — 刪除與插入列
&lt;br /&gt;
&#9888;&#65039; 重要觀念：VFP 的 ADEL 與 AINS 不會自動改變陣列大小！
&lt;br /&gt;
&#8226;	ADEL 只是將指定資料抹除並往前移，最後一筆會留下 .F.，因此刪除後必須手動 DIMENSION 縮小。
&lt;br /&gt;
&#8226;	AINS 插入空位時，會把最後一筆資料擠出陣列丟棄，因此插入前必須先 DIMENSION 放大。
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
* 示範二維陣列安全刪除第 2 列：
&lt;br /&gt;
DIMENSION laArr[3, 2]
&lt;br /&gt;
ADEL(laArr, 2, 2)  &amp;&amp; 參數 2: 第 2 列; 參數 2: 代表以「列(Row)」為單位刪除
&lt;br /&gt;
DIMENSION laArr[2, 2]  &amp;&amp; 重新定義縮小一列
&lt;br /&gt;
5. ALINES(ArrayName, cText [, nFlags [, cParseChar]]) — 字串拆解進陣列
&lt;br /&gt;
在處理 SQL 傳回的字串、文字檔、CSV 時極為常用：
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
LOCAL lcStr, lnCount
&lt;br /&gt;
lcStr = &quot;蘋果,香蕉,芭樂,鳳梨&quot;
&lt;br /&gt;

&lt;br /&gt;
* 依逗號拆解成一維陣列
&lt;br /&gt;
lnCount = ALINES(laFruits, lcStr, 1, &quot;,&quot;)
&lt;br /&gt;
FOR i = 1 TO lnCount
&lt;br /&gt;
    ? laFruits[i]
&lt;br /&gt;
ENDFOR
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;span style=&quot;font-size: 18px; line-height: normal&quot;&gt;四、 陣列與資料表（DBF / Cursor / SQL）的交互指令&lt;/span&gt;
&lt;br /&gt;
VFP 提供了極為高效的命令，讓陣列能與資料庫記錄秒級互轉：
&lt;br /&gt;
1. SELECT ... INTO ARRAY
&lt;br /&gt;
直接將 SQL 查詢結果一次性倒入二維陣列中（若有符合資料，_TALLY 會記錄實際抓到的列數）：
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
SELECT CustID, CustName, Tel FROM Customer WHERE Status = 'A' INTO ARRAY laCust
&lt;br /&gt;

&lt;br /&gt;
IF _TALLY &gt; 0
&lt;br /&gt;
    ? &quot;共載入 &quot; + STR(_TALLY) + &quot; 筆客戶資料&quot;
&lt;br /&gt;
    ? &quot;第一筆客戶：&quot;, laCust[1, 2]
&lt;br /&gt;
ENDIF
&lt;br /&gt;
2. SCATTER TO 與 GATHER FROM（單筆資料錄與陣列互轉）
&lt;br /&gt;
常用於單據畫面的「暫存、修改、還原」：
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
USE Orders IN 0
&lt;br /&gt;
SELECT Orders
&lt;br /&gt;

&lt;br /&gt;
* 將目前游標所在的那一筆紀錄，所有欄位值倒入一維陣列 laOrder
&lt;br /&gt;
SCATTER TO laOrder MEMO
&lt;br /&gt;

&lt;br /&gt;
* 修改陣列中的值
&lt;br /&gt;
laOrder[3] = 9999
&lt;br /&gt;

&lt;br /&gt;
* 將陣列值回寫覆蓋目前資料錄
&lt;br /&gt;
GATHER FROM laOrder MEMO
&lt;br /&gt;
3. COPY TO ARRAY 與 APPEND FROM ARRAY（多筆批次互轉）
&lt;br /&gt;
適用於本地端 DBF / Cursor 與二維陣列進行大批量資料搬移：
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
* 1. 將整張暫存表資料倒入陣列
&lt;br /&gt;
SELECT cur_details
&lt;br /&gt;
COPY TO ARRAY laDetails FIELDS ItemNo, Qty, Price FOR Qty &gt; 0
&lt;br /&gt;

&lt;br /&gt;
* 2. 在另一張空 Cursor 中，一次性批次將陣列倒回資料表
&lt;br /&gt;
SELECT cur_target
&lt;br /&gt;
APPEND FROM ARRAY laDetails
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;span style=&quot;font-size: 24px; line-height: normal&quot;&gt;五、 陣列在 VFP 9 中的限制與注意事項&lt;/span&gt;
&lt;br /&gt;
1.	二維限制：VFP 僅支援最多二維陣列 [Row, Col]，不支援三維以上。若需要多層巢狀結構，建議改用物件（EMPTY Object）或 Collection。
&lt;br /&gt;
2.	容量上限：VFP 9 單一陣列的元素總數量上限為 2,000,000（200 萬個元素）。
&lt;br /&gt;
3.	變數池佔用（MVCOUNT）：
&lt;br /&gt;
o	陣列中的每一個元素都會消耗一個變數計數。
&lt;br /&gt;
o	若經常使用大型陣列（如 [1000, 10] 消耗 10,000 個變數），必須在 Config.fpw 中配置 MVCOUNT = 65000，避免觸發 Too many variables。
&lt;br /&gt;
4.	傳遞陣列至 Procedure / Function：
&lt;br /&gt;
o	VFP 預設是傳值（By Value），只會傳遞陣列的「第一個元素 laArr[1]」。
&lt;br /&gt;
o	若要傳遞整個陣列，必須在名稱前加上 @ 符號（傳址 By Reference）：
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
DIMENSION laMyData[5]
&lt;br /&gt;
= ProcessData(@laMyData)  &amp;&amp; 加上 @ 才會將整個陣列傳入&lt;/span&gt;&lt;br /&gt;
</description>
<dc:creator>CPS0204</dc:creator>
<dc:subject>VFP 討論區</dc:subject>
<annotate:reference rdf:resource="http://vfp.sunyear.com.tw/viewtopic.php?p=37045#37045" />
<comments>http://vfp.sunyear.com.tw/posting.php?mode=quote&amp;p=37045</comments>
</item>
<item>
<title>VFP 討論區 :: 分享:全域可見的 CREATEOBJECT(&quot;Collection&quot;) 用法</title>
<link>http://vfp.sunyear.com.tw/viewtopic.php?p=37044#37044</link>
<pubDate>Thu, 20 Aug 2026 22:15:38 GMT</pubDate>
<guid isPermaLink="true">http://vfp.sunyear.com.tw/viewtopic.php?p=37044#37044</guid>
<description>發表人: &lt;a href=&quot;http://vfp.sunyear.com.tw/profile.php?mode=viewprofile&amp;u=6455&quot; target=&quot;_blank&quot;&gt;CPS0204&lt;/a&gt;&lt;br /&gt;
主題: 分享:全域可見的 CREATEOBJECT(&quot;Collection&quot;) 用法&lt;br /&gt;
發表於: 星期五 八月 21, 2026 6:15 am (GMT 8)&lt;br /&gt;
&lt;br /&gt;&lt;span class="postbody"&gt;
&lt;span style=&quot;font-size: 18px; line-height: normal&quot;&gt;&lt;span style=&quot;color: red&quot;&gt;VFP 9 內建的 Collection（集合類別） 是極為強大卻常被低估的工具。它本質上是一個動態陣列 + 雜湊表（Hash Table/Dictionary）的綜合體，具備以下幾項在 ERP 開發中非常實用的高階技巧：&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;

&lt;br /&gt;
&lt;span style=&quot;font-size: 18px; line-height: normal&quot;&gt;&lt;span style=&quot;color: blue&quot;&gt;個人覺得我使用早期的public my_array[100,3] 搭配ascan 好用,
&lt;br /&gt;
差別在:陣列會耗用 100*3 的變數個數( 變數池佔用（MVCOUNT）：
&lt;br /&gt;
o 陣列中的每一個元素都會消耗一個變數計數。)
&lt;br /&gt;
,collection 只會占用一個變數&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;

&lt;br /&gt;
&lt;span style=&quot;font-size: 24px; line-height: normal&quot;&gt;技巧 1：實作 Key/Value 字典（大小寫敏感度設定）&lt;/span&gt;
&lt;br /&gt;
Collection 預設的 Key 是區分大小寫的（Case-Sensitive）。在 ERP 比對功能代碼（如 F_ORDER001 vs f_order001）時，容易因為大小寫不同而查不到。
&lt;br /&gt;
解法：建立後立即將 KeySort = 2，即可關閉大小寫區分（或強制統一比對規則）：
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
LOCAL oDict
&lt;br /&gt;
oDict = CREATEOBJECT(&quot;Collection&quot;)
&lt;br /&gt;
oDict.KeySort = 2   &amp;&amp; 0=不排序, 1=升冪, 2=區分大小寫由系統設定/自動不區分
&lt;br /&gt;

&lt;br /&gt;
* 存入資料：Add(值, 鍵值)
&lt;br /&gt;
oDict.Add(&quot;1111&quot;, &quot;F_ORDER001&quot;)
&lt;br /&gt;

&lt;br /&gt;
* 取用資料（即使小寫也能精確命中）
&lt;br /&gt;
? oDict.Item(&quot;f_order001&quot;)  &amp;&amp; 輸出: &quot;1111&quot;
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;span style=&quot;font-size: 18px; line-height: normal&quot;&gt;技巧 2：安全取值（避免觸發 Error 報錯）&lt;/span&gt;
&lt;br /&gt;
如果直接使用 oCol.Item(&quot;XXX&quot;)，而該 Key 不存在時，VFP 會直接中斷並彈出 1562: Key is not found in collection 的執行時期錯誤。
&lt;br /&gt;
技巧：使用 GetKey(&quot;Key名稱&quot;) 先行探測，存在會傳回其索引序號（$&gt; 0$），不存在則傳回 0：
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
FUNCTION GetSafePower(toCol, tcProgKey)
&lt;br /&gt;
    LOCAL lnKeyIndex
&lt;br /&gt;
    lnKeyIndex = toCol.GetKey(tcProgKey)
&lt;br /&gt;
    
&lt;br /&gt;
    IF lnKeyIndex &gt; 0
&lt;br /&gt;
        RETURN toCol.Item(tcProgKey)  &amp;&amp; 安全取出
&lt;br /&gt;
    ELSE
&lt;br /&gt;
        RETURN &quot;0000&quot;                 &amp;&amp; 預設完全無權限
&lt;br /&gt;
    ENDIF
&lt;br /&gt;
ENDFUNC
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;span style=&quot;font-size: 24px; line-height: normal&quot;&gt;技巧 3：存放自訂物件（模擬「記憶體結構 / 紀錄」）&lt;/span&gt;
&lt;br /&gt;
Collection 不僅能放字串或數值，還可以直接存放 EMPTY 物件（SCATTER NAME）。這是在私有表單（DataSession = 2）之間傳遞整筆資料錄最強大的技巧，完全不依賴實體 Table 或 Cursor：
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
* 1. 建立存放使用者資料結構的集合
&lt;br /&gt;
PUBLIC goUserCache
&lt;br /&gt;
goUserCache = CREATEOBJECT(&quot;Collection&quot;)
&lt;br /&gt;

&lt;br /&gt;
* 2. 模擬從 SQL 撈出一筆紀錄並存入 Collection
&lt;br /&gt;
SELECT cur_user
&lt;br /&gt;
SCAN
&lt;br /&gt;
    SCATTER NAME loRow MEMO  &amp;&amp; 將目前資料列包裝成一個物件
&lt;br /&gt;
    
&lt;br /&gt;
    * 以員工編號作為 Key，物件作為 Value 存入集合
&lt;br /&gt;
    goUserCache.Add(loRow, ALLTRIM(cur_user.EmpNo))
&lt;br /&gt;
ENDSCAN
&lt;br /&gt;

&lt;br /&gt;
* 3. 在任何私有表單中調用該員工的完整欄位
&lt;br /&gt;
IF goUserCache.GetKey(&quot;EMP001&quot;) &gt; 0
&lt;br /&gt;
    loEmp = goUserCache.Item(&quot;EMP001&quot;)
&lt;br /&gt;
    
&lt;br /&gt;
    ThisForm.txt_name.Value   = loEmp.EmpName
&lt;br /&gt;
    ThisForm.txt_dept.Value   = loEmp.DeptName
&lt;br /&gt;
    ThisForm.txt_salary.Value = loEmp.BaseSalary
&lt;br /&gt;
ENDIF
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;span style=&quot;font-size: 24px; line-height: normal&quot;&gt;技巧 4：使用 FOR EACH 快速走訪所有元素&lt;/span&gt;
&lt;br /&gt;
走訪 Collection 不需要寫 FOR i = 1 TO oCol.Count，直接用 FOR EACH 語法最精準且簡潔：
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
LOCAL oItem, oCol
&lt;br /&gt;
oCol = CREATEOBJECT(&quot;Collection&quot;)
&lt;br /&gt;
oCol.Add(&quot;進貨單作業&quot;, &quot;F_PUR001&quot;)
&lt;br /&gt;
oCol.Add(&quot;銷貨單作業&quot;, &quot;F_SALE001&quot;)
&lt;br /&gt;
oCol.Add(&quot;庫存調整&quot;,   &quot;F_INV001&quot;)
&lt;br /&gt;

&lt;br /&gt;
* 走訪集合內所有值
&lt;br /&gt;
FOR EACH lcProgName IN oCol
&lt;br /&gt;
    ? &quot;作業名稱：&quot;, lcProgName
&lt;br /&gt;
ENDFOR
&lt;br /&gt;

&lt;br /&gt;
* 若需要同時取得 Key 與 Value：
&lt;br /&gt;
FOR lnIdx = 1 TO oCol.Count
&lt;br /&gt;
    ? &quot;鍵值(Key):&quot;, oCol.GetKey(lnIdx), &quot; =&gt; 內容(Value):&quot;, oCol.Item(lnIdx)
&lt;br /&gt;
ENDFOR
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;span style=&quot;font-size: 18px; line-height: normal&quot;&gt;技巧 5：更新已存在的 Key（覆寫值技巧）&lt;/span&gt;
&lt;br /&gt;
Collection 不允許重複 Add 同一個已存在的 Key（會報錯 1561: Key already exists）。若要更新某個 Key 的內容，必須先 Remove 再 Add：
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
PROCEDURE SetCollectionValue(toCol, tcKey, tuValue)
&lt;br /&gt;
    * 如果 Key 已存在，先移除舊的
&lt;br /&gt;
    IF toCol.GetKey(tcKey) &gt; 0
&lt;br /&gt;
        toCol.Remove(tcKey)
&lt;br /&gt;
    ENDIF
&lt;br /&gt;
    
&lt;br /&gt;
    * 寫入最新值
&lt;br /&gt;
    toCol.Add(tuValue, tcKey)
&lt;br /&gt;
ENDPROC
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
&lt;span style=&quot;font-size: 18px; line-height: normal&quot;&gt;技巧 6：封裝成全域快取管理器（ Singleton 類別）&lt;/span&gt;
&lt;br /&gt;
在大型 ERP 架構中，通常會以 Collection 為基礎自訂一個全域快取類別，提供更友善的介面：
&lt;br /&gt;
程式碼片段
&lt;br /&gt;
* 主程式初始化
&lt;br /&gt;
PUBLIC goCache
&lt;br /&gt;
goCache = CREATEOBJECT(&quot;AppCache&quot;)
&lt;br /&gt;

&lt;br /&gt;
* 存入快取（不論存在與否直接覆寫）
&lt;br /&gt;
goCache.Set(&quot;CURRENT_EXRATE&quot;, 31.5)
&lt;br /&gt;
goCache.Set(&quot;AUTH_F_ORDER&quot;, &quot;1111&quot;)
&lt;br /&gt;

&lt;br /&gt;
* 取用快取（若不存在給予預設值，完全不報錯）
&lt;br /&gt;
lnRate = goCache.Get(&quot;CURRENT_EXRATE&quot;, 1.0)
&lt;br /&gt;
lcAuth = goCache.Get(&quot;AUTH_F_PUR&quot;, &quot;0000&quot;)
&lt;br /&gt;

&lt;br /&gt;

&lt;br /&gt;
* =========================================
&lt;br /&gt;
* 類別定義
&lt;br /&gt;
* =========================================
&lt;br /&gt;
DEFINE CLASS AppCache AS Custom
&lt;br /&gt;
    PROTECTED oItems
&lt;br /&gt;
    
&lt;br /&gt;
    PROCEDURE Init
&lt;br /&gt;
        This.oItems = CREATEOBJECT(&quot;Collection&quot;)
&lt;br /&gt;
        This.oItems.KeySort = 2
&lt;br /&gt;
    ENDPROC
&lt;br /&gt;
    
&lt;br /&gt;
    PROCEDURE Set(tcKey, tuValue)
&lt;br /&gt;
        tcKey = UPPER(ALLTRIM(tcKey))
&lt;br /&gt;
        IF This.oItems.GetKey(tcKey) &gt; 0
&lt;br /&gt;
            This.oItems.Remove(tcKey)
&lt;br /&gt;
        ENDIF
&lt;br /&gt;
        This.oItems.Add(tuValue, tcKey)
&lt;br /&gt;
    ENDPROC
&lt;br /&gt;
    
&lt;br /&gt;
    PROCEDURE Get(tcKey, tuDefault)
&lt;br /&gt;
        tcKey = UPPER(ALLTRIM(tcKey))
&lt;br /&gt;
        IF This.oItems.GetKey(tcKey) &gt; 0
&lt;br /&gt;
            RETURN This.oItems.Item(tcKey)
&lt;br /&gt;
        ELSE
&lt;br /&gt;
            RETURN tuDefault
&lt;br /&gt;
        ENDIF
&lt;br /&gt;
    ENDPROC
&lt;br /&gt;
    
&lt;br /&gt;
    PROCEDURE Has(tcKey)
&lt;br /&gt;
        RETURN (This.oItems.GetKey(UPPER(ALLTRIM(tcKey))) &gt; 0)
&lt;br /&gt;
    ENDPROC
&lt;br /&gt;
    
&lt;br /&gt;
    PROCEDURE ClearAll
&lt;br /&gt;
        This.oItems.Remove(-1)  &amp;&amp; 傳入 -1 一鍵清空整個集合
&lt;br /&gt;
    ENDPROC
&lt;br /&gt;
ENDDEFINE
&lt;br /&gt;
&lt;span style=&quot;font-size: 24px; line-height: normal&quot;&gt;&lt;span style=&quot;color: red&quot;&gt;總結
&lt;br /&gt;
Collection 是 VFP 9 最理想的全域暫存與跨表單傳遞載體：
&lt;br /&gt;
&#8226;	傳入 -1 給 Remove(-1) 可一秒清空所有內容。
&lt;br /&gt;
&#8226;	能存字串、數值、甚至 EMPTY 物件。
&lt;br /&gt;
&#8226;	完全不受 DataSession 隔離限制，也絕不佔用任何 Work Area（工作區）。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
</description>
<dc:creator>CPS0204</dc:creator>
<dc:subject>VFP 討論區</dc:subject>
<annotate:reference rdf:resource="http://vfp.sunyear.com.tw/viewtopic.php?p=37044#37044" />
<comments>http://vfp.sunyear.com.tw/posting.php?mode=quote&amp;p=37044</comments>
</item>
<item>
<title>VFP 討論區 :: RE: 分享:vfox9還有哪些好用的dll/com</title>
<link>http://vfp.sunyear.com.tw/viewtopic.php?p=37043#37043</link>
<pubDate>Fri, 14 Aug 2026 00:42:21 GMT</pubDate>
<guid isPermaLink="true">http://vfp.sunyear.com.tw/viewtopic.php?p=37043#37043</guid>
<description>發表人: &lt;a href=&quot;http://vfp.sunyear.com.tw/profile.php?mode=viewprofile&amp;u=6802&quot; target=&quot;_blank&quot;&gt;trial03&lt;/a&gt;&lt;br /&gt;

發表於: 星期五 八月 14, 2026 8:42 am (GMT 8)&lt;br /&gt;
&lt;br /&gt;&lt;span class="postbody"&gt;
&#35874;&#35874;分享，受益匪&#27973;。&lt;/span&gt;&lt;br /&gt;
</description>
<dc:creator>trial03</dc:creator>
<dc:subject>VFP 討論區</dc:subject>
<annotate:reference rdf:resource="http://vfp.sunyear.com.tw/viewtopic.php?p=37042#37042" />
<comments>http://vfp.sunyear.com.tw/posting.php?mode=quote&amp;p=37043</comments>
</item>
</channel>
</rss>

<!-- Page generation time: 0.0087s  - Memory Usage: 1.679 Mb  - GZIP enabled -->