明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

PB8.0應(yīng)用程序編譯公布技術(shù)研究

[摘要]摘要:本文主要討論基于Windows平臺的PowerBuilder 8.0應(yīng)用程序編譯發(fā)布關(guān)鍵問題和解決方法,包括執(zhí)行文件的建立、資源文件的創(chuàng)建、安裝程序的建立及添加數(shù)據(jù)源和SQL anywhere 數(shù)據(jù)庫移動處理等問題。關(guān)鍵字:軟件開發(fā)、PowerBuilder 8.0、應(yīng)用程序發(fā)布、Setup...
   摘要:本文主要討論基于Windows平臺的PowerBuilder 8.0應(yīng)用程序編譯發(fā)布關(guān)鍵問題和解決方法,包括執(zhí)行文件的建立、資源文件的創(chuàng)建、安裝程序的建立及添加數(shù)據(jù)源和SQL anywhere 數(shù)據(jù)庫移動處理等問題。關(guān)鍵字:軟件開發(fā)、PowerBuilder 8.0、應(yīng)用程序發(fā)布、Setup程序制作 。

       引言

  PowerBuilder+ODBC+SQL anywhere是目前開發(fā)數(shù)據(jù)庫應(yīng)用程序非常流行的模式。但PowerBuilder本身僅是一個開發(fā)工具,當(dāng)一個應(yīng)用程序被開發(fā)并完成調(diào)試后,我們還需對其建立可執(zhí)行文件并移植到終端用戶的機(jī)器上,其中ODBC的配置和SQL anywhere的安裝是難點(diǎn),本文論述基于Windows平臺的PowerBuilder 8.0應(yīng)用程序編譯發(fā)布關(guān)鍵技術(shù)問題和解決辦法。

  執(zhí)行文件的建立

  1、編譯格式的選擇

  PowerBuilder 8.0對生成可執(zhí)行文件提供了兩種編譯格式:偽代碼(Pcode,即pseudocode的縮寫)和機(jī)器代碼(Machinecode)。偽代碼是一種在所有PowerBuilder 平臺上支持的解釋性語言,它的格式與PowerBuilder 運(yùn)行庫(.pbl)一樣,在可執(zhí)行狀態(tài)下保存單個對象,其優(yōu)點(diǎn)是方便和可移植;機(jī)器代碼則是真正的完全脫離PowerBuilder 環(huán)境的可執(zhí)行文件,其優(yōu)點(diǎn)是速度快,但文件容量比較大。選擇編譯代碼格式一般基于以下三個方面:

  ①速度。若目標(biāo)是優(yōu)化運(yùn)行速度和應(yīng)用強(qiáng)化腳本處理,則選擇機(jī)器代碼。要是代碼中較多地使用了循環(huán)結(jié)構(gòu)、浮點(diǎn)運(yùn)算或整數(shù)算法及函數(shù)調(diào)用,機(jī)器代碼將比偽代碼做得更好。但偽代碼的編譯速度比機(jī)器代碼快,特別是開發(fā)人員要快速地創(chuàng)建測試用的可執(zhí)行文件時非常便利;

 、诖笮。偽代碼生成的文件比機(jī)器代碼的小。如運(yùn)行應(yīng)用程序的終端機(jī)器容量緊張的話,就需要放棄較快的機(jī)器代碼而選擇偽代碼;

 、垡浦。偽代碼對于跨平臺的應(yīng)用非常有用。它可以方便地跨平臺(PowerBuilder 支持)使用,包括:Microsoft Windows (16位和32位)、AppleMacintosh和UNIX。機(jī)器代碼是依賴于平臺的,也就是說要求生成和可執(zhí)行應(yīng)用平臺一致,不過它可以獲得更好的性能。

  2、動態(tài)庫的建立

  發(fā)布PowerBuilder 8.0應(yīng)用可以將一些對象不放到可執(zhí)行文件中,而放到動態(tài)庫中在運(yùn)行時裝入,這樣可以將應(yīng)用程序分割成更小的模塊便于管理和維護(hù)。

  選擇偽代碼(Pcode)編譯方式生成PowerBuilder動態(tài)庫(.pbd文件),選擇機(jī)器代碼(Machinecode)方式在Windows和UNIX平臺上生成動態(tài)鏈接庫(.dll文件,如將test.pbl編譯成test.dll),在machine平臺上生成平臺支持的共享庫(如test.lib)。如果在Windows上有兩個應(yīng)用,那么編譯成的.pbd包含一個調(diào)用全局外部函數(shù)的用戶對象,為了保證正確調(diào)用函數(shù)必須為每個應(yīng)用單獨(dú)編譯和發(fā)布.pbd文件。

  當(dāng)建立動態(tài)庫時,將源庫(.pbl文件)中所有對象的編譯版本拷貝到動態(tài)庫中。為了在某些庫中只使用所需的對象,可以將它們放到一個標(biāo)準(zhǔn)的PowerBuilder庫(.pbl)中。

  在建立動態(tài)庫時,PowerBuilder并不檢查所有對象,只是簡單地去掉對象的源格式,因此,對于一些在畫筆或腳本中指定了使用資源(圖形、圖標(biāo)或指針)的對象,若不想提供單獨(dú)的資源,則必須在資源文件(.pbr)中羅列出這些資源,這樣才能保證在建立動態(tài)庫時包含這些資源。

  動態(tài)庫的建立有兩種途徑:一是在庫管理畫筆中建立;二是在工程畫筆中建立工程對象時一起建立。

  3、資源文件的使用

  可執(zhí)行文件或動態(tài)庫中可以包含一些資源(圖形、圖標(biāo)或指針),也可以將它們作為單獨(dú)的資源文件(.pbr文件)保存。

 。1)單獨(dú)的分布資源

  若某資源不包含在可執(zhí)行文件或動態(tài)庫中,則在執(zhí)行應(yīng)用程序引用它時,PowerBuilder按查詢路徑查找該資源,因此,必須將它與應(yīng)用程序一起放在查詢路徑下。

  Windows的查詢路徑為:當(dāng)前目錄,Windows目錄,Windows的System目錄和PATH環(huán)境變量中設(shè)置的所有目錄。

  (2)資源文件

  可以使用PowerBuilder資源文件(.pbr)替代單獨(dú)的資源,其中列出所有的動態(tài)分配的資源也可以包含動態(tài)分配的數(shù)據(jù)窗口對象。PowerBuilder將這些資源編譯后放入可執(zhí)行文件或.pbd文件中,這些資源在執(zhí)行時可直接使用。

  若給數(shù)據(jù)窗口控件動態(tài)分配數(shù)據(jù)窗口對象,則必須創(chuàng)建一個資源文件,且在可執(zhí)行文件或動態(tài)庫文件中包含該對象,或在一個單獨(dú)的動態(tài)庫中包含它。

  資源文件(.pbr)是一個ASCII碼文件,在其中列出了應(yīng)用程序要有到的各種資源(如.bmp、.cur、.ico、.rle和.wmf文件)和數(shù)據(jù)窗口對象。使用文本編輯器(如Windows的記事本)創(chuàng)建一個文本文件,其中列出在應(yīng)用中動態(tài)引用的資源文件,一行列出一個資源,格式如:

appico.ico
appbmp1.bmp
appbmp2.bmp
……

  以上文件和對象都假設(shè)是在當(dāng)前目錄中,如果存在于另一個目錄中,則必須包含所在路徑,格式如:

e:\myapp\test.jpg。

  在.pbr文件中指定的文件名必須與在腳本中引用的資源匹配,若引用時包含路徑,則在.pbr文件中也必須包含同一路徑,否則因PowerBuilder在執(zhí)行時只是簡單地進(jìn)行字符串比較而導(dǎo)致無法發(fā)現(xiàn)該資源。

  若應(yīng)用程序中包含有動態(tài)引用的數(shù)據(jù)窗口,則在.pbr文件中必須包含數(shù)據(jù)窗口對象,格式如:

myapp.pbl(dw_infodisplay)

  其中:myapp.pbl為應(yīng)用程序庫,dw_infodisplay為數(shù)據(jù)窗口對象,一般是在當(dāng)前目錄或指定路徑。在執(zhí)行時,若引用資源,PowerBuilder首先檢查可執(zhí)行文件,找不到再在.pbd文件中、文件查詢路徑的目錄中查找。

  在工程畫筆中建立工程對象時可以為可執(zhí)行文件或每一個動態(tài)庫指定它使用的資源文件,也可以在庫管理畫筆中建立動態(tài)庫時使用。

  配置PowerBuilder 8.0應(yīng)用程序

  一般來說發(fā)布一個PowerBuilder 8.0應(yīng)用程序,除提交應(yīng)用程序可執(zhí)行文件(.exe)、應(yīng)用程序的動態(tài)庫(.pbd或.dll)外,還應(yīng)包含如下文件:

  1、PowerBuilder 8.0應(yīng)用程序運(yùn)行時的支持文件

  PowerBuilder 8.0應(yīng)用程序運(yùn)行時的支持文件(.dll)應(yīng)放在與應(yīng)用程序相同的目錄中或放在搜索路徑中的目錄中。

  以上文件可以在C:\Program Files\Sybase\Shared\PowerBuilder取得。

  2、數(shù)據(jù)庫接口

  所有數(shù)據(jù)庫接口文件及驅(qū)動程序(PBTRA80.DLL、PBODB80.DLL和PBODB80.INI)必須放在應(yīng)用程序目錄或系統(tǒng)目錄中。

  以上文件可以在C:\Program Files\Sybase\Shared\PowerBuilder取得。我們把他們復(fù)制到應(yīng)用程序目錄或系統(tǒng)目錄中。如果使用專用數(shù)據(jù)庫接口以及activeX,所需復(fù)制的文件參考PowerBuilder的OnlineBook。

  3、Microsoft ODBC驅(qū)動程序和DLLs

  DS16GT.DLL,DS32GT.DLL,ODBC32.DLL,ODBC32GT.DLL,ODBCAD32.EXE,ODBCCP32.CPL,_
  ODBCCP32.DLL,ODBCCR32.DLL,ODBCINST.CNT,ODBCINST.HLP,ODBCINT.DLL,ODBCTRAC.DLL

  以上文件可以在Window的系統(tǒng)目錄system32取得,具體路徑隨操作系統(tǒng)不同而不同。我們把他們復(fù)制到應(yīng)用程序目錄或系統(tǒng)目錄中。

  4、Adaptive Server Anywhere的ODBC數(shù)據(jù)庫驅(qū)動程序及其支持文件
PBBAS15.dll,PBFLT15.dll, PBUTL15.dll,PBTRN15.dll,IVPB.LIC,PBDRV15.CNT,PBDRV15.HLP。

  以上文件可以在C:\Program Files\Sybase\Shared\MerantODBC取得,我們把他們復(fù)制到應(yīng)用程序目錄或系統(tǒng)目錄中。

  5、Adaptive Server Anywhere運(yùn)行系統(tǒng)文件

DBODBC7.DLL,DBBACKUP.EXE,DBCON7.DLL,DBISQLC.EXE,DBLGEN7.DLL,DBLIB7.DLL,DBODTR7.DLL,_
DBTOOL7.DLL,DBUNLOAD.EXE,DBVALID.EXE,DBENG7.EXE,DBCTRS7.DLL,DBSERV7.DLL,DBWTSP7.DLL。

  以上文件可以在C:\Program Files\Sybase\SQL Anywhere 7\win32取得,我們把他們復(fù)制到應(yīng)用程序目錄或系統(tǒng)目錄中。

  6、OLE系統(tǒng)文件

  如果應(yīng)用程序中使用了OLE控件,那么終端用戶的機(jī)器上應(yīng)該有OLE系統(tǒng)文件,它們是:
COMPOBJ.DLL,OLE2NLS.DLL,CTL3DV2.DLL,OLE2PROX.DLL,OLE2.DLL,STORAGE.DLL,OLE2CONV.DLL,_
TYPELIB.DLL,OLE2DISP.DLL,TDOLE.TLB

  若它們不存在的話,我們把他們復(fù)制到應(yīng)用程序目錄或系統(tǒng)目錄中。

  以上所列的所有支持文件不一定全部要把他們復(fù)制到應(yīng)用程序目錄或系統(tǒng)目錄中,具體可根據(jù)情況靈活決定。在發(fā)布應(yīng)用程序之前,為確定都需要包含哪些動態(tài)鏈接庫,一種比較可行又可靠的方法是:

 。1)將生成的應(yīng)用程序拷貝到另一臺未裝過PowerBuilder的計算機(jī)上并運(yùn)行它。

 。2)找出應(yīng)用程序提示的因找不到而不能運(yùn)行的那個動態(tài)庫。

 。3)從開發(fā)該應(yīng)用程序的機(jī)器上將相應(yīng)的動態(tài)庫文件拷貝過來。

 。4)重復(fù)(2)(3)兩步,直到所有動態(tài)鏈接庫都包含進(jìn)來。

  安裝程序的制作

  在Windows平臺上開發(fā)的應(yīng)用程序不能象在DOS環(huán)境下經(jīng)過簡單的COPY就可發(fā)布和安裝。因此,制作一個安裝程序(Setup)就成為Windows平合應(yīng)用程序發(fā)布的必不可少的重要一步。

  1、Setup的基本功能

  Setup程序的唯一目的就是安裝應(yīng)用程序,應(yīng)該由它來完成對安裝過程的處理,Setup程序應(yīng)具備以下基本功能:

 。1)傳送文件。將需要安裝的應(yīng)用程序及有關(guān)的支持文件傳送到目標(biāo)機(jī)器上,并處理傳送過程中的錯誤。此乃Setup程序最基本的功能。

 。2)詢問終端用戶有關(guān)必要的信息,如用戶名、產(chǎn)品序列號、目標(biāo)路徑等,并響應(yīng)用戶輸入。

 。3)給用戶以改變想法的機(jī)會,如改變安裝路徑、取消安裝等。

 。4)注冊表訪問。如設(shè)置應(yīng)用程序查找路徑鍵、創(chuàng)建應(yīng)用程序信息鍵等。

 。5)卸載功能,對安裝的文件及對注冊表的設(shè)置應(yīng)有卸載登記功能,以便用戶在取消安裝或在不需要時順利卸載應(yīng)用程序并改回注冊表。

  (6)安裝完畢應(yīng)給用戶以完成提示。

  2、應(yīng)用程序的安裝規(guī)則

  當(dāng)把應(yīng)用程序安裝到機(jī)器上時,有許多規(guī)則應(yīng)當(dāng)遵從,其中大多數(shù)是常識性的。它們使用戶的應(yīng)用程序維護(hù)更加容易,而且較少產(chǎn)生由文件復(fù)制而引起的問題。

  (l)應(yīng)避免把任何文件拷貝到系統(tǒng)目錄中,除非正在升級由外部的應(yīng)用程序使用的常用文件(例如,ODBC或本機(jī)數(shù)據(jù)庫驅(qū)動程序)。這有助于避免由于改變了這些區(qū)域的文件而使操作系統(tǒng)的性能降級。

  (2)如果文件是一個僅在單個用戶的應(yīng)用程序之間共享的通用文件,就應(yīng)在Program Files的子目錄Common Files中建立一個入口。

  (3)在 Windows中,應(yīng)把用戶自己的應(yīng)用程序放在Program Flies下自己的目錄中。

  (4) 對于 Windows應(yīng)把支持文件( .hlp、.dll等)分布在稱為System用戶自己的應(yīng)用程序的一個子目錄中。然后將它的位置注冊在應(yīng)用程序的HKEY_LOCALMACHINE\software入口處的AppPathS子鍵的注冊表中。

  (5)應(yīng)使用注冊表存儲有關(guān)應(yīng)用程序的所有必需信息,而不應(yīng)該修改system.ini、win.ini或應(yīng)用程序的INI文件。

  (6)在操作系統(tǒng)的啟動引擎中制作一個入口,提供對用戶應(yīng)用程序的訪問。對于Windows,應(yīng)把應(yīng)用程序的一個快捷圖標(biāo)放在桌面或在開始菜單的程序文件夾中。

  (7)用戶放在系統(tǒng)目錄中的任何文件都應(yīng)注冊于HKEY_LOCALMACHINE的sharedll子鍵中。

  3、安裝程序制作工具的選擇

  Installshield是InstallShield軟件公司開發(fā)的著名的安裝程序制作軟件。Installshield提供了易于使用的向?qū)Ш鸵粋集成環(huán)境來幫助創(chuàng)建應(yīng)用程序安裝程序。但是InstallShield的使用比較復(fù)雜,InstallShield并不是自由軟件,而是一個有版權(quán)的商業(yè)化軟件。絕大部分PowerBuilder 8.0書籍資料在談及發(fā)布應(yīng)用程序時極其簡單地提示使用InstallShield制作安裝程序。而介紹InstallShield使用的資料又非常少。因而常會碰到不少困難。

  在制作中安裝程序時比較常用的安裝制作工具是CreateInstall 2000。它是一個共享軟件,支持中文。能在www.Gentee.com下載到。沒有注冊的話會在制作好的安裝盤運(yùn)行時出現(xiàn)提示信息,但是功能是沒有限制的。

  另一個比InstallShield更加方便好用的安裝制作工具是GP-Install。GP-Install是一個用Delphi編制的自由軟件。雖然是自由軟件,但不是說它的功能就比較少,或者不夠強(qiáng)。正好相反,一個安裝軟件應(yīng)該有的功能它一個不少,而且相當(dāng)方便、實(shí)用。整個軟件安裝以后大約有2M,只是InstallShield的零頭。InstallShield有的功能GP-Install基本都有,生成的安裝程序界面也非常相似,但GP-Install更加讓人感到親切。GP-Install還有一個最大的特點(diǎn)就是允許生成帶有多國語言的安裝程序,在一個安裝程序中就包含了多種國家的語言,并且你在安裝時選擇了什么語言,在反安裝(卸載)時也會顯示出什么語言。這對于希望把自己的程序向其他國家、地區(qū)推廣的程序員來說是非常有用處的。GP-Install主頁:http://www.qsc.co.uk,你可以在那里下載一個最新的版本,目前最新版本是5.0.2.57。

  其它還有一些比較常用的可用來制作安裝程序的軟件有Setup Factory 等。

  4、添加注冊表信息

  這是最關(guān)鍵的!涉及到ODBC的安裝和數(shù)據(jù)源的配置。千萬不能搞錯,否則前功盡棄。

  添加注冊表信息的方法有兩種:

 。1) 直接添加,主要見于手工添加數(shù)據(jù)源或創(chuàng)建安裝程序時。一般只須對下列項(xiàng)進(jìn)行設(shè)置即可:

根鍵  子鍵  值名稱 值
HKEY_CURRENT_USER  Software\ODBC\ODBC.INI\demo(替換成你自己的數(shù)據(jù)源名稱) AutoStop  Yes
HKEY_CURRENT_USER 同上 DatabaseName Demo(替換成你自己的數(shù)據(jù)庫名稱)
HKEY_CURRENT_USER 同上 DatabaseFile demo.db(替換成你自己的數(shù)據(jù)庫文件)
HKEY_CURRENT_USER 同上 Driver C:\Program Files\Sybase\SQL Anywhere 7\win32\dbodbc7.dll
HKEY_CURRENT_USER 同上 PWD Sql
HKEY_CURRENT_USER 同上 UID Dba

  有時還須對下列項(xiàng)進(jìn)行設(shè)置:

根鍵 子鍵 值名稱 值
HKEY_CURRENT_USER  Software\ODBC\ODBC.INI\demo(替換成你自己的數(shù)據(jù)源名稱) Description 我的數(shù)據(jù)庫(替換成你對自己數(shù)據(jù)庫的描述,可以是中文)
HKEY_CURRENT_USER 同上 EngineName 我的數(shù)據(jù)庫(替換成自己的數(shù)據(jù)引擎描述,可以是中文)
HKEY_CURRENT_USER 同上 Start C:\Program Files\Sybase\SQL Anywhere 7\win32\dbeng7.exe -c 8m,0
HKEY_LOCAL_MACHINE software\ODBC\ODBC Drivers Adaptive Server Anywhere 7.0 Installed
HKEY_LOCAL_MACHINE software\ODBC\Adaptive Server Anywhere 7.0  Driver C:\Program Files\Sybase\SQL Anywhere 7\win32\dbodbc7.dll
HKEY_LOCAL_MACHINE  software\ODBC\Adaptive Server Anywhere 7.0 Setup C:\Program Files\Sybase\SQL Anywhere 7\win32\dbodbc7.dll
HKEY_CURRENT_USER software\ODBC\ODBC.INI\ODBC Data Sources 你自己的數(shù)據(jù)源名稱如:demo  Adaptive Server Anywhere 7.0
HKEY_LOCAL_MACHINE software\Microsoft\Windows\CurrentVersion\App Paths\MyApp.exe(替換成自己的可執(zhí)行文件名) Path C:\Program Files\sybase\shared\PowerBuilder;
c:\program files\sybase\SQL Anywhere 7\win32\;C:\Program Files\Sybase\Shared\MerantODBC
HKEY_LOCAL_MACHINE  software\Microsoft\Windows\CurrentVersion\App Paths\MyApp.exe(替換成自己的可執(zhí)行文? Default MyApp.exe(替換成自己的可執(zhí)行文件名)

  以上各項(xiàng)為注冊可執(zhí)行文件和搜索路徑。你也可以改變?yōu)榱硗獾穆窂。具體情況在制作安裝程序時靈活決定。

  (2) 在PowerBuilder中用程序來動態(tài)添加ODBC數(shù)據(jù)源,主要是利用 PowerBuilder對注冊表操作函數(shù) RegistrySet(),再就是利用 PowerBuilder的ProfileString()函數(shù)和SetProfileString()函數(shù)讀取和設(shè)置INI配置文件中預(yù)先定義好的參數(shù)。

   RegistrySet( Key,Valuename,Valuetype,Value)

  功能:在PowerBuilder程序中設(shè)置注冊表中的信息。

  Key表示主鍵; Valuename表示鍵值名; Valuetype表示鍵值類型;Value表示鍵值。

   Profilestring(Filename,Section,Key,Value)

  功能:在PowerBuilde程序中讀取INI配置文件中的信息。

  Filename表示文件名;Section表示段名;Key表示關(guān)鍵字;Value表示關(guān)鍵字值。

   SetProfileString(Filename,Section,Key,Value)

  功能:在PowerBuilde程序中設(shè)置INI配置文件中的信息。

  Filename表示文件名;Section表示段名;Key表示關(guān)鍵字;Value表示關(guān)鍵字值。

  至此,ODBC和數(shù)據(jù)源就配置好了。 對不同的數(shù)據(jù)庫管理系統(tǒng)而言,上面的方法和語句會有所不同,但用戶可用以下方法作為用程序添加ODBC數(shù)據(jù)源的依據(jù):①在控制面板中打開ODBC數(shù)據(jù)源管理器,手動添加一數(shù)據(jù)源。②運(yùn)行Regedit,打開注冊表編輯器,找到剛才添加的數(shù)據(jù)源,記下其各鍵值的值。③在安裝程序中或在PowerBuilder程序中用 RegistSet()函數(shù)把各鍵值的值寫入注冊表。當(dāng)然,某些鍵值肯定會不同,比如數(shù)據(jù)庫的具體路徑等。

  5、數(shù)據(jù)庫文件(.db)的移動處理

  在PowerBuilder 8.0中,SQL anywhere 數(shù)據(jù)庫由后綴分別為.db和.log兩個文件組成,其中.db的文件是用來存放數(shù)據(jù)庫信息(包括表結(jié)構(gòu)、視圖、數(shù)據(jù)等)。而.log文件是個日志文件,用來記錄用戶每一次對數(shù)據(jù)庫有影響的操作,例如創(chuàng)建或刪除表、視圖、觸發(fā)器等對象,插入、刪除、修改表中的數(shù)據(jù)等。當(dāng)我們建立一個SQL anywhere 數(shù)據(jù)庫時,除生成一個庫文件(.db)外,還默認(rèn)建立相應(yīng)的.log文件。

  移動SQL anywhere 數(shù)據(jù)庫時首先將.db文件和.log文件一同復(fù)制,配置ODBC, 再在PowerBuilder中設(shè)置Profile即可連通。但日志文件(.log)經(jīng)常會帶來一些麻煩,使數(shù)據(jù)庫不能方便地移動到別的機(jī)器上使用。因?yàn)槿绻鸖QL anywhere在創(chuàng)建數(shù)據(jù)庫的時候把日志文件的路徑信息存放到了數(shù)據(jù)庫中,那么你把數(shù)據(jù)庫拷貝到另外一臺機(jī)子上時,如果目錄不一樣,則數(shù)據(jù)庫就連不上了。

  一般的解決方法是:在終端用戶機(jī)器上建立一個對應(yīng)的目錄。即如果在建立該庫時的.log文件路徑為:H:\Pb8.0\share\myapp.log,則在終端用戶機(jī)器上先建立一個盤號為H:的虛擬盤,再建立相應(yīng)的目錄,將myapp.log拷貝到該目錄中(也可不拷,則重新建立.log日志文件),即可打開并調(diào)用數(shù)據(jù)庫了。另一種解決辦法是:重新注冊.log文件,在DOS模式下進(jìn)入SQL anywhere 的Win32目錄, 運(yùn)行DBLOG -T X1:\PATH1\XXX.LOG X2:\PATH2\XXX.DB。其中X1:\PATH1\XXX.LOG是生成的新.log文件要放的路徑和名稱。X2:\PATH2\XXX.DB是你現(xiàn)在應(yīng)用程序要使用的.db文件。注意不要搞錯了。

  一般情況下,若不是要求太高,可省略掉.log文件,即在建庫時不要附帶.log文件,這樣庫文件移動起來也就方便一些。

  突然斷電或不正常關(guān)機(jī)或你不小心操作都有可能破壞SQLAnywhere的數(shù)據(jù),由此造成很大的損失,如果只損壞了.db文件而.log還正常,則可以恢復(fù)被破壞的數(shù)據(jù)庫的的大部分?jǐn)?shù)據(jù),只要把.log文件的內(nèi)容轉(zhuǎn)換成一條條的SQL語句,然后再建一個空的數(shù)據(jù)庫,再執(zhí)行這些SQL語句,則恢復(fù)數(shù)據(jù)的問題就解決了。Sybase公司提供了幾個實(shí)用程序來完成以上功能。

  現(xiàn)假設(shè)數(shù)據(jù)庫系統(tǒng)文件分別名為myapp.db和myapp.log。如果myapp.db已被破壞,F(xiàn)在創(chuàng)建一個新的數(shù)據(jù)庫,假設(shè)文件分別名為new.db和new.log。

  用Sybase提供的dbtranw.exe,db32w.exe,rtsqlw.exe等實(shí)用程序來完成恢復(fù)工作,步驟如下:

  1.dbtranw -r-k-y myapp.log db.sql // 把.log文件的內(nèi)容轉(zhuǎn)換成的SQL語句
  2.attrib -r myapp.db // 修改只讀文件myapp.db的屬性為可寫
  3.attrib-r myapp.log // 修改只讀文件myapp.log的屬性為可寫
  4.copy new.db myapp.db // 用新的空庫文件覆蓋被破壞的舊庫文件
  5.copy new.log myapp.log // 用新的日志文件覆蓋舊的日志文件
  6.db32w.exe -d myapp.db // 啟動數(shù)據(jù)庫SQLAnywhere
  7.rtsqlw-q-c "userid=dba;password=sql " read db.sql // 執(zhí)行從.log文件中倒出來的SQL語句

  其中第一步的功能是把舊的日志文件轉(zhuǎn)換成SQL語句,并放在一個名為db.sql的文件中,特別注意它只能在第五步之前操作,否則日志文件會被new.log所覆蓋,而導(dǎo)致無法恢復(fù)數(shù)據(jù)。最后一步的功能是從文件db.sql中讀取SQL語句并執(zhí)行,假設(shè)數(shù)據(jù)庫的用戶名為dba,而口令為sql。有關(guān)各個命令及參數(shù)據(jù)的更詳細(xì)的用法可以查看相應(yīng)的幫助。注意:.log文件不能隨便刪除,否則恢復(fù)的數(shù)據(jù)就不完整。

  結(jié)束語

  本文就基于Windows平臺的的PowerBuilder 8.0應(yīng)用程序編譯發(fā)布的關(guān)鍵問題進(jìn)行了分析,并給出了詳細(xì)的解決方法,主要包括開發(fā)PowerBuilder 8.0應(yīng)用程序時,執(zhí)行文件的建立、資源文件的創(chuàng)建、安裝程序的建立及添加數(shù)據(jù)源和SQL anywhere 數(shù)據(jù)庫移動處理等問題。該方法并不限于Powerbuilder,對其它開發(fā)工具同樣有借鑒意義。所論技術(shù)已在廣西師大計算機(jī)系研究生綜合管理系統(tǒng)MPS開發(fā)中得到驗(yàn)證。同時,該技術(shù)已應(yīng)用于多個管理信息系統(tǒng)中,收到了良好的效果。