?? 數據庫技巧2.txt
字號:
本談論集是小狐從網易社區VFP版區中的談論內容,有些技巧可能并不能實行,但大家可從各人的談論中發現一些編程的思路,對自己的設計思想也是有幫助的!
1、各位大蝦:我在使用中文 VFP 5.0 瀏覽數據庫時,不論是用 Browse、Edit還是 SQL 查詢,都會自動打開中文輸入法,而我又找不到解決的辦法。有知道解決辦法的高手,請多多賜教,不勝感激之至!
答:在程序中可以這樣控制:
IMESTATUS(0) --- 關閉
IMESTATUS(1) --- 打開
小狐補充:其實可以有一個很方便的辦法,就是:進入VFP系統后,選擇“選項”菜單,在“常規”選項卡中有一“瀏覽時打開IME控件”的選擇,不把它打勾就可以解決問題了!^ - ^
2、在VFP中如何得知WIN95的安裝目錄?
答:有兩種方法:
1.用home()函數,簡單方便,但需在編譯成EXE后獨立使用時用,在設計時home()返回的是vfp啟動目錄。
2.用Win32API,復雜難用如:
DECLARE INTEGER RegOpenKeyEx IN Win32API INTEGER nKEY,;
STRING @cSubKey,INTEGER nReserved,INTEGER nAccessMask,;
INTEGER @nResult
3、我在一個表單里調用了另一個表單,我想從被調用表單中返回一個參數值給調用表單,該怎么做? 我在調用里定義了public num ,在被調用時改變了num的值,卻用不上,為什么 ? 調用程序如下:
public num
num=1
do form aaa.scx ***其中我給num 重新賦值了,當然不是 1
wait window num
go num
thisform.refresh
wait window 顯示的值仍是 1 。
答:最簡單的方法:在被調用的表單里定義變量!
4、用VPF做一個表單,生成.EXE文件,在VPF里運行很正常,可退出,在WIN下運行發現表單一閃而過,不知是什么原因???
答:做一個主程序(如 MAIN.PRG),內容為:
DO FROM <formname>
READ EVENT
在退出表單的代碼最后加上:
CLEAR ENENT
在項目管理器中設置MAIN.PRG為主程序
連編為.EXE 文件即可。
5、我在設計報表時在頁尾設置sum()函數,但在預覽和運行時出現"找不到sum.prg"的情況,我曾在命令窗口試過這一函數卻可以執行,請問該如何處理?
答:選擇字段名,按屬性,選計算,再選sum函數ok
6、我在使用VFP 6。0時將源程序連編成可執行文件,運行該文件總要出現那討厭的工具欄。(我在進行連編時,編程環境中已經取消了工具欄顯示)不知各位高手能否給予指點。
答: 我用VFP5.0時也遇到過類似情況,編譯后的可執行文件運行時無工具欄,某一天卻發現所有用VFP5.0編譯的程序都莫名其妙地出現了工具欄,經摸索發現,只要將工具欄用鼠標拖放到另一位置,在右鍵單擊工具欄,選擇關閉,之后不但該程序的工具欄消失,而且所有VFP程序的工具欄也不會出現了,真奇怪。不知VFP6.0是否也是這樣。
7、編譯了一個程序,運行時FOXPRO主窗口沒有占滿整個屏幕,如何使主窗口一運行就最大化,哪位高手幫忙一下?
答:把編譯了的程序在Windows是建立一個快捷鍵,然后修改其屬性,選擇“最大化”就可以了。
小狐補充:若使用了系統窗口,可以這樣做:SCREEN.WINDOWSTATE=2 ,若不使用系統窗口,可以上面的代碼改為:主表單名.WINDOWSTATE=2即可。
8、我把vfp5.0編譯后的一exe文件拷入一在未裝vfp5.0的計算機不能運行,是否缺少動態鏈接文件?
答: 從一個項目中,可以建立應用程序文件 (.app) 或者可執行文件(.exe)。如果用戶有一個完整的 Visual FoxPro 副本,則可以運行一個 .app 文件。另外一個選擇方案是建立一個可執行文件。該可執行文件需要和兩個 Visual FoxPro 動態連接庫 (Vfp5r.dll 和 Vfp5enu.dll) 連接,這兩個庫和應用程序一起構成了 Visual FoxPro 所需的完整運行環境。VFPxxx.DLL指定用于應用程序開發的地區版本。
9、用 DO FORM 和 READ EVENTS 在表單里運行另一表單,但編譯成 .EXE后,運行時會運行READ EVENTS 后面的命令(在FOXPRO里就不會),請高手指教.
答: 好像READ EVENTS不能在一個.EXE里重復使用。
10、在COMBO中怎樣利用方向鍵(DOWN)模擬鼠標點按COMBO時DOWNCLICK的事件?
答:在KEYPRESS事件中加入:
LPARAMETERS nKeyCode, nShiftAltCtrl
if nkeycode=24 &&down key value
THIS.DOWNCLICK
endif
11、我用VFP3.0做了一個表單,但總是不夠大。我想做一個全屏大小的表單,該用什么方法?
答:修改屬性:WindowMode=2
12、我正在用VFP做一東東,數據庫MESS。DBF在NT服務器上。請問如何編程,讓此程序在各工作站上可以對數據庫進行增、刪、改等操作?在單機上我會但,數據庫放在SERVER上我就不知如何訪問了。望各位指點。
答:當一用戶欲對數據庫進行操作時,應具備當時數據庫沒有被其他用戶訪問,而進行有關操作時,要求將數據庫轉為操作用戶獨占方式等等,總之在但機時十分容易完成的操作,在多用戶環境中實現,有很多技巧.
13、在數據庫表中appe一條記錄,會出現索引關鍵字不唯一的提示,如何解決?
答:1、您的表的主關鍵字字段已經有一空白值的行。
2、建議得到序列表的序列號m_myunique后,采用:
insert into (mydbf) (myunique) values (m_myunique)
3、如果有可能刪除記錄,并利用已經刪除的序列號,建議添加索引條件:
not dele()
14、本人遇到一個問題:VFP5.0的報表打印時,打印一次,打印機就自動換紙,請問各位高手,如何讓紙停住
答:如下辦法不是很好,但我就是用它來實現實時系統記錄。請參考:
1、利用以下代碼生成臨時文件(_PRNFILE)
SET TEXTMERGE ON
SET TEXTMERGE NOSHOW
SET TEXTMERGE TO (_PRNFILE)
\ <<PADC('┌', 2)>>
\\<<REPL('─',20)>>
\ <<PADc(alltrim(ADDRESS),30)>>
\ <<CHR(12)>>
WAIT CLEAR
SET TEXTMERGE OFF
SET TEXTMERGE TO
2、RUN /N7 PRGS\COPYFILE.BAT (_PRNFILE)
3、COPYFILE.BAT文件如下:
COPY %1 PRN
15、何將一個數據表動態的加入數據環境中?
答:THISFORM.DataEnvironment.ADDOBJECT('mydbf','CURSOR')
16、如何得到窗口的句柄?
答:DECLARE INTEGER GetActiveWindow IN win32api
THISFORM.FOXHWND=str(GetActiveWindow())
17、有兩張表單處理同一數據庫,由一個表單調用另一個表單,如何保持兩表單同步刷新?
答:用一時鐘控件,過一段時間就比較表單中的數據與數據庫中的數據是否還同,如不同則重新寫入
18、在VFP中如何判斷軟盤是否插好,是否有這樣的函數?
答:最簡單的方法:
FILE("A:\NUL")
小狐補充:同理,使用FILE()函數可以判斷某一目錄是否已存在,如:我們要判斷C:\CARD這目錄是否存在,可使用命令
?FILE("C:\CARD\NUL")
19、 當需查詢或統計某一年齡段的人員資料時,由于年齡是隨時間遞增的,如果用手工或人工干預來增加年齡則是件非常麻煩的事,不知大家有何方法能讓數據庫中的年齡字段的年齡自行遞增?
答:庫中不要把年齡作為字段,你只要登記人員的出生年份即可.顯示時,人員的年齡為
今年與出生年分之差.
20、 在開發環境中沒問題,但編譯并安裝到另一臺機上就出問題了,說找不到文件。而且我弄不懂VFP6中的視圖對象的SQL藏在那里,沒法象查詢那樣
答:視圖對象的SQL保存在數據庫文件中.你用use 數據庫.dbc 就可看到view記錄項.用視圖前要先打開數據庫
21、怎么才能將用ACTIVE DOCUMENT做的程序連到網頁上,需要怎么設置?
答:Active Document 是在 Intranet 上配置 Visual FoxPro 應用程序的一種方法。您可以使用 Active Document 在 Microsoft Internet Explorer 瀏覽器中直接運行由 Visual FoxPro 創建的包含有 Visual FoxPro 代碼的表單。在 Visual Basic 中,Active Document 只是稍做修改的表單,目的是支持 Internet Explorer 的特性。Visual FoxPro 中的 Active Document 與其稍有不同。ActiveDoc 類是一個非可視類,它的功能更類似于一種應用程序對象,用于處理在瀏覽器中運行已有的 Visual FoxPro 表單所需的事件。因此,不需要轉換表單。另外還加入了一些新的屬性,如表單的 ScrollBars 和 TitleBar 屬性,以便包容到 Internet Explorer 中時可以與其用戶界面標準保持一致。應該注意,在 Internet Explorer 所運行的
Visual FoxPro ActiveDoc 只是一個應用程序文件(.app),它也可以在 Visual FoxPro 中直接運行。也正由于這個原因,需要有 Visual FoxPro 的運行時刻版本。Active Document 更適用于 intranet 環境,這是由于大多數用戶是使用調制解調器訪問 Internet 的,因此在 intranet 環境中對下載大型 Visual FoxPro 運行時刻文件的限制要寬松得多。值得慶幸的是,運行時刻文件只需下載一次。
22、我有試過使用COPY TO ARRAY FIELDS FIELDNAME和SCATTER與SCAN的組合.結果卻都是一樣:除第一個元素顯示正確外,其余的類型、值都是"L"、".F."。請問該如何解決?
答:要將多個記錄或整個表復制到數組,則指定一個二維數組。數組的行數就是數組能容納的記錄數,數組的列數就是數組能容納的字段數。
23、請問如何在VFP3.0中調用16位DLL?我用Visual C++ 1.5自定義了一個 DLL
char *MyFuc(char *a, char *b, char *c);
答:DECLARE STRING MyFuc IN MYFUC.DLL;
STRING A, STRING B, STRING C
24、VFP5中,我想控制 report表的項目,也就是說,我想 在庫表中不為零的字段打印出來, 而為零的字段,在報表中不打印出來。
答:在該字段上按右鍵,選取屬性——打印條件——字段>0即可。
25、我用appe gene 或是appe gene link加入一個jpg檔案到General字段中還是會很大。
答:我想,foxpro里對于jpg、gif等圖形都是先轉化為位圖來處理的,這樣它可以省略其他圖形的解釋器。(只是猜測,沒有證實)比如,透明的gif文件,透明的地方都變成灰色了。
26、請問如何在Visual Foxpro中由一個Form調用另一個Form時,原Form暫停執行,直至被調用Form被Release?
答:請用如下命令:
do form 表單名2 to 變量名
在表單名2的unload中
retu .t.
這樣就可以了!
27、select語句生成的結果如何存入自己的數據庫?
答:用如下語句:
select * from ... into array <數組名>
sele (table name)
appen from array <數組名>
28、我用DELETE命令刪除記錄單沒執行PACK,進行查詢時,刪除的記錄仍查詢得到,請問如何解決?
答:set dele on 即可
29、如何在VFP中調用"打開文件"對話框及"保存","另存"對話框?
答:使用GETFILE()函數
30、 我做一個游覽功能的表單.(數據取自三個dbf),內有一表格,數據源來自一個查詢的結果.現在的問題是:每運行一次表單,它先做查詢,一定要把查詢結果的窗口關掉以后才顯示我所要的游覽窗口
答:將查詢結果存放在一個dbfname.tmp文件上中,再在自定義方法中用代碼把dbfnam
e.tmp與表格聯系起來秒,OK了?!!!
小狐補充:代碼可以這樣寫:
sele 字段 from 數據表名 where 條件 INTO CURSOR ABC
thisform.grid1.recordsource=“ABC”
thisform.grid1.recordsourcetype=2
31、在程序中,我想在GRID做refresh操作后在第一條記錄獲得焦點,如何做?
答:很簡單,在refresh前加上 go top就 ok?!!!!!
32、為什么在含有頁框的表單中加入resizable類后,總是提示出錯?
答:resizable類是VFP所帶的SOLUTION.VCX可視類庫中的一個,它提供了一個在程序運行期間更改表單尺寸后,自動更改表單控件大小的簡單方法。但是經使用發現,改類中存在嚴重的BUG,主要現象是:當在表單中加入頁框,并在頁框中加入一些控件后,運行程序時,一但更改表單的尺寸,就會提示出錯或者錯誤移動頁框的位置。經本站研究之后發現,原來微軟的程序員在設計本類的程序時,沒有考慮到頁框內控件的Top/Left/Height/Width的值只是相對頁框的大小而言的,而包括表單中頁框外的其他控件的Top/Left/Height/Width的值是相對表單而言的,因此造成了在試圖更改頁框內控件尺寸和位置時的錯誤。
為此本站已對該類進行了修改,并在軟件下載中更新了SOLUTION.VCX文件。
33、樣在VFP中讓用戶建立新目錄并將某一目錄下的所有DBF文件復制到新目錄下(類似
答:建立目錄:md floder,獲得當前目錄:defaultfloder=sys(5)+curdir( )
建立完整的備份目錄及文件路徑:bf_path=defaultfloder+"\"+"floder"+"\"+"*.dbf"
(defaultfloder后面是否要加"\"我有點忘了,自己調試一下吧)
拷貝文件:copy file *.dbf to &bf_path
34、我在vfp6下,連編一個項目的com dll時出錯,出錯信息如下:"聯編DLL: 不能缺少OLE公共類.",不知何解,請有識之士點撥一二.
答:只要你將你的類庫中的一個類定義為OLE公用類就可以了。方法是在類瀏覽器中打開你的類庫,隨便右擊一個類然后選擇OLE公用項即可。
35、 在一個Form 中有幾個控件 都要調用同一些公共的過程 ,: 這些公共的過程 應放在那?
答:在修改表單狀態下,從菜單中選擇“表單”->“新方法程序”建一個自定義過程即可!
36、請問組合框中哪個屬性是指用戶選中的內容?
答:當單選時:this.list1.value 或 this.list1.listindex 即是你所選的值或序號.多選時:用this.list1.selected(i) 來定: 當=.t. 此項已選,=.f. 未選.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -