程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> VB編程俱樂部問答

VB編程俱樂部問答

編輯:VB綜合教程
問:我在學習VB過程中遇到一個問題,如源代碼:
  SndPlaySound(″c:MyWorkeep.wav″)
  在制成安裝盤後,安裝到其它機器中不同目錄下就不能執行,必須安裝到C:MyWork下才能執行。怎樣在源代碼中識別,或有更好的辦法。
  答:這是初學者經常忽略的一個小問題。在打開文件、調用程序時喜歡使用絕對文件路徑。其實,只要使用相對路徑,就完全可以避免這個問題。在Windows下,某個程序一旦運行,除非特別指定了工作目錄,一般該程序文件所在的目錄就是工作目錄,其他目錄可以用工作目錄為參照系。例如,上述問題中,程序被安裝到了MyWork目錄下,那麼在MyWork目錄下的所有文件就不必用路徑全稱了,可以直接SndPlaySound(″Beep.wav″)。以此類推,如果要播放C:MyWorkSoundABC.Wav文件,就可以SndPlaySound(″SoundABC.wav″)。以後無論應用程序安裝在何處,都可以避免這一問題。
  
  問:VB5.0生成的Exe文件能不能在一台從沒裝過VB5.0的機器上運行,如不能應如何做?
  答:當然可以。你只要運行VB5帶的“應用程序安裝向導”就可以了。向導自動把應用程序及其依賴的DLL、OCX、DAO驅動程序等打包,形成一個安裝程序。分發這個安裝包就一切搞定了。
  
  問:假設表A有一字段B(文本型,8個字符),當我在表中進行輸入時超過8個字符,系統就會禁止我輸入,這沒有什麼問題。但當我在VBA中使用DAO編輯這個字段時,我遇到了麻煩。
  答:可以通過DAO提供的Recordset或TablDef對象來得到字段B的長度,然後,根據情況把你的值直接賦予它或截斷後賦值。例如:
  DimdbasDatabase,rsasRecordset
  DimiSizeasInteger,SasString
  setdb=DBEngine.OpenDatabase(″XXX.mdb″)
  setrs=db.OpenRecordset(″TableA″)
  iSize=td(″FieldB″).Size′字段長度
  ……
  ′下面准備賦值
  S=″ABC中DE國FGEGHG″
  setrs=db.OpenRecordset(″TableA″)
  rs.Edit
  IfiSize>=LenB(strconv(S,vbFromUnicode))Then
  rs(″FieldB″)=S′直接賦值
  Else
  rs(″FieldB″)=LeftB(strconv(S,vbFromUnicode),iSize)'截斷賦值
  EndIf
  rs.Update
  ……
  請注意,VB或VBA中字符串默認以vbUnicode格式保存,所以要轉換後再比較運算。請參閱函數StrConv(),參數:vbFromUnicode,vbUnicode,及Byte數組,和以‘B'結尾的函數。
  
  問:我寫了個應用程序,第一次進入時想要求用戶輸入密碼,並將密碼保存(有什麼方法別人看不到)。下次進入時提示輸入密碼。應如何完成呢?
  答:可以把密碼保存到INI文件或注冊數據庫。一般應用級的用戶是不會去看這些密碼的。為了防止像你我這樣的人觀看,比較好的是使用如DES、RC5等加密算法或自行設計一個加密算法,這樣才能夠達到一個較高的密級。本人設計有一個以DES和自制加密算法混合工作的DLL,如果有興趣,請與我聯系。
  
  問:如何生成一個透明窗體?使得可以看到窗體後面的內容?
  答:用如下代碼可生成透明窗體,若要顯示其他信息,可做一個背景透明的圖案為窗體背景。
  Me.AutoRedraw=True
  hBitmap=CreateCompatibleBitmap(Me.hdc,0,0)
  SelectObjectMe.hdc,hBitmap
  Me.Refresh
  感謝ZhuangYong提供解答
  
  問:在Access97中如何實現代碼輸入? 
  答:在Access97中的代碼輸入解決方案是我見過中的比較好的一種。Accesss97至少提供了兩種場合使用的代碼輸入方式。
  其一、在表結構設計窗口,選中指定字段,單擊“查閱”標簽,改顯示控件為組合框或列表框,根據情況選擇“行來源”類型為“表/查詢”或“值列表”,然後選擇代碼表或輸入候選值即可。這樣的設置在“數據表”狀態體現最完美:顯示代碼Name,挑選代碼ID列表;其二、在設計Form時對指定控件做上述設定,其效果稍遜。運行時,輸入框中僅可顯示代碼ID,卻無法顯示代碼Name。
  其實,關鍵是三個要素:1、控件顯示的內容;2、和控件相關的數據源的字段;3、代碼表。把握好這三者的關系就真正抓住了問題的關鍵。建議讀者看看Delphi或C++Builder的DBLookup控件,它的解決方法非常好,我希望能看到提供給VB、Access使用的短小精悍的代碼輸入控件也能做到這一點。->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved