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

select 出來的table 是否可以以陣列的方式寫入text(I)

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
smilechc



註冊時間: 2010-04-22
文章: 5


第 1 樓

發表發表於: 星期一 五月 01, 2017 10:56 am    文章主題: select 出來的table 是否可以以陣列的方式寫入text(I) 引言回覆

各位大大日安
小弟做了20個Textbox,想利用陣列的方式將資料寫入Textbox中,但按VB的寫法好像不行,所以VFP是否可以有這個功能,或是有大大有相關訊息可以參考,感謝您。

原程式為
SELECT * FROM aa WHERE no=bb.no AND cd="CM" ORDER BY sn INTO CURSOR cc

GO top
for i =1 to 20
thisform.pageframe1.page2.text(i).Value=cc.cd
thisform.pageframe1.page2.text(i).toolTipText=cc.cd_name
next

Smile
回頂端
檢視會員個人資料 發送私人訊息
ckp6250



註冊時間: 2004-07-30
文章: 1642


第 2 樓

發表發表於: 星期一 五月 01, 2017 5:56 pm    文章主題: 引言回覆

老狐狸最怕人家說他不行!

GO top
for i =1 to 20
thisform.pageframe1.page2.text(i).Value=evaluate(Field(i))
next
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
garfield
Site Admin


註冊時間: 2003-01-30
文章: 2157


第 3 樓

發表發表於: 星期一 五月 01, 2017 8:20 pm    文章主題: 引言回覆

SELECT * FROM aa WHERE no=bb.no AND cd="CM" ORDER BY sn INTO CURSOR cc

scan
i=tran(recno())
thisform.pageframe1.page2.text&i..Value=cc.cd
thisform.pageframe1.page2.text&i..toolTipText=cc.cd_name
endscan

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
syntech



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

第 4 樓

發表發表於: 星期二 五月 02, 2017 12:12 am    文章主題: 引言回覆

代碼:


GO top
for i =1 to 20
cCOMMAND= "thisform.pageframe1.page2.text"+alltrim(str(I))+".Value="+cc.cd

&cCOMMAND

cCOMMAND= "thisform.pageframe1.page2.text"+alltrim(str(I))+".toolTipText="+cc.cd_name 

&cCOMMAND

next





Shocked Shocked Shocked Shocked Shocked

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

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



註冊時間: 2014-07-20
文章: 203


第 5 樓

發表發表於: 星期二 五月 02, 2017 12:54 am    文章主題: 引言回覆

樓主寫法似乎只是同一記錄跑20次@@

2樓ckp6250大是第1到20欄位

3樓garfield大是整個暫存檔跑完,有可能超過20

4樓syntech大和樓主一樣

可見樓主的問題不夠明確,以致各位大大解讀不同!!
拿3樓garfield大寫的小改一下
go top
scan
i=allt(str(recn()))
thisform.pageframe1.page2.text&i->Value=cc.cd
thisform.pageframe1.page2.text&i->toolTipText=cc.cd_name
if recn()+1>20
exit
endi
ends

使用巨集 & 時,資料庫欄位或表單物件可使用 ->
如:
sele 0
aa=sys(2015)
use test1 alia (aa) agai
bb=&aa->id
回頂端
檢視會員個人資料 發送私人訊息
syntech



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

第 6 樓

發表發表於: 星期二 五月 02, 2017 8:50 am    文章主題: 引言回覆

perry 寫到:

4樓syntech大和樓主一樣



看起來很像,
但其實這是 garfield 大 的作法的變形.
"&" 變化無窮.
我最愛的就是用字串組合命令再直接執行.
尤其是有加密需求時.

Very Happy Very Happy Very Happy Very Happy

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

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



註冊時間: 2010-04-22
文章: 5


第 7 樓

發表發表於: 星期二 五月 02, 2017 10:20 pm    文章主題: 引言回覆

日安,感謝各位大大回覆
不好意思問題沒寫清楚,由資料庫aa取出的"CM"資料存入cc,
cc裡的資料最多不會超過20。
然後再將cc的資料依序寫入Textbox1到Textbox20,如果不到20,則後面的textbox寫入""。

回覆各位大大的執行結果
ckp6250大大的結果為"Property TEXT is no found" <--這和我上面RUN的一樣,有ERROR。
版主大大的沒問題。
syntech大大的我不太確定我是否有打錯,但它出現Syntax error.
perry大大的也沒問題。
感謝各位大大的幫忙,像Syntech大大所說的字串的組合可以變化很多,
要學的還有很多,正努力學習中^_^。


其實原本是想以grid表示,但為了可以直覺化的修改所以想不到如何以grid做,就以textbox做。
用土法直接搬移,只是程式行數很多。

這個直覺化的修改是

假設有已從cc讀出5筆資料,並依序寫入text如下:
Textbox1 = AAA
Textbox2 = BBB
Textbox3 = CCC
Textbox4 = DDD
Textbox5 = EEE

如果BBB位置有誤,需在DDD後,因此我做一個BUTTON,按一次會變成如下
Textbox1 = AAA
Textbox2 = CCC
Textbox3 = BBB <--
Textbox4 = DDD
Textbox5 = EEE

再按一次,如下,即成為我要的結果
Textbox1 = AAA
Textbox2 = CCC
Textbox3 = DDD
Textbox4 = BBB <--
Textbox5 = EEE
回頂端
檢視會員個人資料 發送私人訊息
syntech



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

第 8 樓

發表發表於: 星期二 五月 02, 2017 10:46 pm    文章主題: 引言回覆

smilechc 寫到:

syntech大大的我不太確定我是否有打錯,但它出現Syntax error.


=MESSAGEBOX(cCOMMAND)

看看組合出來的命令是什麼.

這種做法,檢查做出來的命令字串是一定要的.

命令可以正確執行之後,才做字串化.


---
不過這種做法還是有限制的.

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

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



註冊時間: 2014-07-20
文章: 203


第 9 樓

發表發表於: 星期二 五月 02, 2017 11:10 pm    文章主題: 引言回覆

或許用ListBox會比較符合您要的!!

MoverBars=.T. ,可動態變更順序.
回頂端
檢視會員個人資料 發送私人訊息
smilechc



註冊時間: 2010-04-22
文章: 5


第 10 樓

發表發表於: 星期四 五月 04, 2017 12:25 am    文章主題: 引言回覆

了解
透過Syntech大大的說明,對於您的寫法,我己了解了,
因為TEXT有空值的部份,原本我按版主的方式寫
for i=1 to 20
thisform.pageframe1.page2.text&i..Value=""
thisform.pageframe1.page2.text&i..toolTipText=""
next
會出現語法錯誤,
後來用Syntech方式
FOR k=1 TO 20
cCMD1='thisform.pageframe1.page2.text'+ALLTRIM(STR(k))+'.Value=""'
&cCMD1
是可執行的。
因此由table 寫入TEXT,我用版主的方式。
在清空TEXT,我用了Syntech的方法。
目前解決問題,感謝各位大大的幫忙。

Perry的寫法我還在練習中,因此還沒寫上想法。
Perry提到的使用ListBox有想過,但我不確定是否滑鼠移到每個項目時.toolTipText的功能是否會被顯示。所以就沒再往LISTBOX的方式思考。
這個部份,我會再試試看是否可行。
感謝大大。
回頂端
檢視會員個人資料 發送私人訊息
perry



註冊時間: 2014-07-20
文章: 203


第 11 樓

發表發表於: 星期四 五月 04, 2017 6:50 am    文章主題: 引言回覆

代碼:

SELECT * FROM aa WHERE no=bb.no AND cd="CM" ORDER BY sn INTO CURSOR cc
go top
j=recc()
for i=1 to 20
    j1=allt(str(i))
    if i<=j
        go i
    endi
    thisform.pageframe1.page2.text&j1->Value=iif(i>j,'',cc.cd)
    thisform.pageframe1.page2.text&j1->toolTipText=iif(i>j,'',cc.cd_name)
next

用 ListBox 可用 wait wind ... nowa noclear 作為替代方案
在表單方面 MouseMove 中要 wait clear

目前看到的只是過程,結果是否異動資料內容或
只是存異動後的順序,皆會影响寫的方式.

並非2~4樓的大大們寫的有問題,他們只是建議您方法寫法!!
回頂端
檢視會員個人資料 發送私人訊息
smilechc



註冊時間: 2010-04-22
文章: 5


第 12 樓

發表發表於: 星期四 五月 11, 2017 4:54 pm    文章主題: 引言回覆

瞭解,太感謝各位大大了
回頂端
檢視會員個人資料 發送私人訊息
syntech



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

第 13 樓

發表發表於: 星期五 五月 12, 2017 9:56 am    文章主題: 引言回覆

話說, 要搞成物件陣列 TEXT(I),
應該差不多是這樣做吧.

代碼:

DIMENSION  aTEXT[20]

&& 把物件塞到ARRAY裡
FOR i=1 to 20
aTEXT[i] = eval('thisform.pageframe1.page2.text'+alltrim(str(i)))
NEXT

&& 清除TEXT值
FOR i=1 to 20
aTEXT[i].Value=''
aTEXT[i].toolTipText=''
NEXT

&& 指定TEXT值
select alias()
scan
i=tran(recno())
aTEXT[i].Value=cc.cd
aTEXT[i].toolTipText=cc.cd_name
endscan






如果屬於可以塞進其他物件的物件(ContainerObject ,例如form,grid,pageframe,page,....)
都會有 controls (所包含的物件之陣列),及controlcount (所包含的物件之數量)兩個屬性,
如果只是想要存取某種物件,那就自己重新整理一次
代碼:

WITH .PAGE1
FOR I=1 TO .controlcount
IF .CONTROLS(I).BASECLASS ='Textbox'
aTEXT(J) = .CONTROLS(I)
ENDIF
NEXT
ENDWITH

FOR J=1 TO 100
? aTEXT(J).NAME
NEXT

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

請聯絡我們,也許我們幫得上忙


syntech 在 星期五 五月 12, 2017 2:44 pm 作了第 1 次修改
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
syntech



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

第 14 樓

發表發表於: 星期五 五月 12, 2017 2:40 pm    文章主題: 引言回覆

由這篇:
https://msdn.microsoft.com/zh-tw/library/kxt4418a(v=vs.90).aspx

----------------------
概念上的差異
在 Visual Basic 6.0 中,控制項陣列可以用來管理表單上的控制項,它們提供了共用事件處理常式、逐一查看控制項群組,以及在執行階段加入控制項的功能。
在 Visual Basic 2008 中,已不再支援控制項陣列。改為使用事件模型讓控制項陣列變成非必要的功能,而且 .NET Framework 會提供使用控制項的相同功能。

共用事件處理常式
在 Visual Basic 6.0 中,控制項陣列可用來指定共用一組事件的控制項群組。控制項必須屬於相同型別,而且必須具有相同名稱。
Visual Basic 2008 可讓任何事件處理常式從多個控制項處理事件,即使這些控制項具有不同的名稱或不同型別的控制項也一樣。
例如,您可以將兩個 Button 控制項 (Button1 和 Button2) 及一個 CheckBox 控制項 (CheckBox1) 加入至表單,然後建立事件處理常式,處理所有三個控制項的 Click 事件。

逐一查看控制項
Visual Basic 6.0 控制項陣列的另一個功能是能夠使用 Index 屬性,逐一查看控制項群組。例如,若要清除控制項陣列中所有 TextBox 控制項的文字,您可以將 Index 屬性當做迴圈 (Loop) 變數,逐一查看控制項陣列。
雖然 Visual Basic 2008 控制項沒有 Index 屬性,但是您仍可以使用 Control 類別的 Control.ControlCollection,逐一查看表單或容器上的控制項。
在 Visual Basic 6.0 中,單一控制項陣列中的控制項可以位於不同容器中。例如,包含在兩個不同 Frame 控制項的 TextBox 控制項,可以是相同控制項陣列的一部分。
在 Visual Basic 2008 中,Controls 集合只會傳回位在單一容器中的控制項。您必須個別地逐一查看每個容器控制項中的控制項,這可以使用遞迴函式完成

----------------------


基本上,古早的VFP3 的物件模型設計就已經與Visual Basic 2008 概念上一樣.
所以運用的方式自然會比較偏上Visual Basic 2008,與VB6 不同.

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

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

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


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