日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PB实用技巧

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PB实用技巧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如何在PB5中自動生成行號?
delelte數據窗口中若干行,然后update,出現: “rows changed between retrieve and update No changes made to database… Delete from table where ….” 請教是何緣故,該數據窗口是updatable 的,未設置關鍵字。?
如何能夠作到,在打印一個DataWindows后不自動換頁,而繼續打印下一個DataWindows??
我在table中改了一個字段的類型,回來一看,相應的datawindow字段在運行時再?
也無法輸入東西了?.?
我沒安裝watercom C++,連用模板生成的PBL都不能正確編成EXE運行,生成的EXE在?
windows95 中遠行時報程序啟動錯誤,怎么辦??
我剛安裝好nt40中文版 及sybase system 11.0.1無任何錯誤提示,啟動SSM時給提示:無法找到DNETW.DLL于指定路徑 C:\SYBASE\BIN C:\WINNT\SYSTEM32…..但還能啟動SSM。 打開SERVER時提示:NO LANGUAGE HANDLER INSTALL這與NT有關嗎?如何解決?

  • 如何在PB5中自動生成行號?
    自動生成行號的方法很多,你可以看看PB的例子就知道了。目前我用的方法是,先用SQL語句統計表中最大的行號,把結果保存到一個變量中去,然后再對此變量進行加1不就可以了嗎?但這種做法只是從最大的行號開始產生行號,產生最小的行號也是類似的。

  • delelte數據窗口中若干行,然后update,出現: “rows changed between retrieve and update No changes made to database… Delete from table where ….” 請問為什么??
    試試更改數據窗口的Update Properties中的 ‘Where Clause for Update/Delete’中的選項。

  • 如何能夠作到在打印一個DataWindows后不自動換頁,而繼續打印下一個DataWindows??
    在PrintPage事件中返回0

  • 在table中改了一個字段的類型,回來一看,相應的datawindow字段在運行時再也無法輸入東西了,為什么??
    datawindow具有自己的SQL語法,該語法和數據庫后臺中的變化不能時時響應,因此,當后臺的數據庫發生修改后,應該手工修改datawindow中的列定義,如:將變化的列刪除,再次添加就可以了。

  • 沒安裝watercom C++,連用模板生成的PBL都不能正確編成EXE運行,生成的EXE在windows95 中遠行時報程序啟動錯誤,怎么辦??
      不用安裝Watcom C++,編譯器內置于pb6文件中,估計你和我以前的錯誤一樣,在win98中編譯后在win95中運行報啟動錯,解決方法:
    1.在本站點下載pb6.5 patch,它可使你的pb6升級到pb6.5,可解決win98下很多問題.?
    2.在win95下編譯.?
      原因是PB在執行時找不到運行庫必須將\powersoft\shared加入路徑或將它的內容拷入運行目錄

  • 安裝好nt40中文版 及sybase system 11.0.1無任何錯誤提示,啟動SSM時給提示,這與NT有關嗎?如何解決??
    first:you must restart your system?
    second:perhaps you need running SQLEDIT.

  • 縮小含較少數據的Sybase數據庫的規模,如2G的數據庫,其中含200M的數據,如何將其轉換為500M左右的數據庫??
    高級方法:不用BCP,使用修改系統表SYSUSAGES的方法。詳細方法在SYSBASE NEWSGROUP 有。你可以在www.sybase.com找到administrator 論壇。

  • 請教兩個sybase sql server 之間復制數據的方法?
    SYBASE有一個東東叫Replication Server,專用來復制Sybase SQL Server,不過就是對維護人員要求高(沒有sybase幫你,我看你日子不好過)

  • 如何將Excle文件中的數據倒入PB5.0的Database

  • 回答1:將該xls文件建立ODBC數據源,在PB里打開,存成sql文件,在打開sqlanywhere的庫,運行此sql文件即可。

    回答2:采用DDE或OLE編程。將PB置成DDE server 或ole server.在EXCEL中進行VBA編程,可實現對特定數據的處理和傳送。

  • 問題: Pb5.0應用程序編譯后,運行時出現非法頁面操作:(發生在datawindow Itemchanged 事件腳本)
  • 回答1:檢查你的DATAWINDOW是否與TABLE 相符。最好此DATAWINDOW重新生成。


  • 問題:我手中的PB是6.0企業版(試用),Sql AnyWhere 5.0.03,問題是:1、PB調試器Debug經常出現非法操作(無效頁面)錯!2、Sybase Central帶有Sql AnyWhere 5.0.03的Plug-in,運行某些功能和退出時,出現非法操作(無效頁面)錯!?
    回答1:第一個問題現已出現不多,可能是書寫程序不規范所致。第二個問題是Sybase Central 在中文環境下的問題,如果你用西文Win95, 外掛的漢字系統,并且將區域設置(regional setting) 設成英語國家,就可以了?;卮?:PB出現無效頁面錯,是和某些軟件的沖突,如運行cstar 2.97則Sybase Central退出時出錯,若在純凈的英文win95,win98下PB6.5很穩定,說明PB在中文下測試不夠,本身抗干擾能力差,至少出錯信息少,特別程序本身的底層出錯檢驗差.
  • 回答2:我同意您的觀點。但我的情況是剛剛裝完Win95后立即裝PB,同樣出問題。友人建議我使用PB5.0不要追求高版本。但Sybase中國可能已不出售這個版本的PB了。


  • 問題: 怎么將NT上的SYBASE SQL SERVE10數據轉入小型機上的SYBASE SQLSERVER11!!!(不要告訴我用pipeline!)
  • 回答1:1,在SSM里生成DDL?
    2,把所有數據BCP出來(提示,可以先生成一個BAT文件,不用我說了吧?)?
    3,在小型機的SQL Server里運行DDL?
    4,把所有數據BCP進去(提示,可以先生成一個BAT文件)


  • 問題: 我們用VC編寫一動態連接庫,函數形式為 int ecrtx(string cmd,word i,string retval),在Delphi中正常調用,但在PB6中就是出錯提示,怎么辦?
  • 回答1:在VC中, int 是32位. 而在PowerBuilder 中int 是16位, long則是32位.


  • 問題: PB6程序編譯為EXE時,菜單和對話框會出亂字符,該怎么辦
  • 回答1:編譯時不要選編為本機代碼。?
    回答2:下載補丁版

  • 問題: 我使用Infomaker 5.0.0.01 轉換Foxpro25 DBF文件到MS SQL SERVER6.5時,發現轉入不能成功,怎么辦?
  • 回答1:不要使用PB的ODBC驅動,用MS的?
    回答2:將SQL SERVER的CHAR類型改成VARCHAR類型

  • 在用 PB 6.5 研究 PB 的三層結構開發方式,在開發中運行該應用運行到 connect using transaction; 時, 系統就會PB60.EXE 運行錯誤,然后就關閉 PB 開發環境,為什么?
  • 回答1:我沒有出現這種情況啊?不過在PBCGI60正在運行時,即網頁正在刷新時,如果關閉服務器應用會產生這種情況(100%)。我認為這是PB的BUG,可能是PBCGI與應用通迅時是通過共享內存來實現的,而內存是由應用分配而來,當應用關閉時,所分配的內存也就釋放了,這時PBCGI60。EXE還是去這塊內存取數據的話,操作系統就會認為非法操作(因為這塊內存已經歸還給操作系統了,PBCGI60。EXE沒有操作的權限)

  • 有四個問題:(1)當數據窗口是由兩個表的不同字段組成,兩者通過一個相關字段進行關聯,當改變某一個表的字段(此字段為關聯字段)值時,如何使另一個表的其他字段值進行刷新 ?(2)能否使計算域的值由兩條以上記錄的某字段值計算而得?(3)在程序中如何獲得某計算域的值?(4)在數據窗口中,能否使兩個字段間建立對應關系:一個字段的值隨著另一字段的值發生變化
  • 回答1:1,在DW的ItemChanged寫Script實現?
    2,computedField本來就可以由兩條以上記錄的某字段值計算而得,例如sum,count等。如果你想指定某幾條記錄來作計算,可以用IF,例如要統計第一個記錄和第二個記錄的值:sum(if(getrow()=1 or getrow()=2),字段名,0)?
    3,給ComputedField一個名字,然后用getitemXXX(1,名字)?
    4,要在ItemChanged里寫Script

  • 所用的Sybase數據庫的一張表已輸入大量數據,現遇到一個字段的寬度不能夠滿足一個記錄的寬度,請問如何處理
  • 回答1:BCP is another way.?
    回答2:不能修改,可以另外建一個表,用PIPELINE將數據倒過去。

  • 一個系統用PFC 5.0.4書寫,Full Complile無問題,但編譯成機器碼時失敗,原因不明.從Log中自得到如下信息:CGEN: Compiling ‘C:\DOS\main.c’CGEN: Linking…__imp__VirtualQuery@12 偼枹掕媊嶲徠偱偡,怎么辦?
  • 回答1:在Infobase里按出錯的關鍵字查一下,應該可以找到原因。?
    回答2:按PBD編譯吧!

  • 問題: PB6如何顯示JPG?
  • 回答1:在win95 osr2版里選裝附件中的‘映像’,即可得到WANG系列的image控件,非常好用,請試一試。

  • 問題: 請問各位大蝦有沒有辦法將對Sybase或MSSQL中某表查詢后顯示的記錄在表中的記錄號顯示出來?
  • 回答1:沒有紀錄號的概念啦!

  • 問題: pb分布式計算求助 ,在三層c/s結構下,APPLICATION SERVER 端使用DATASTORE封裝了對數據庫的訪問,如何將RETRIEVE的結果返回CLIENT?
  • 回答1:這要看你是使用同步還是異步調用,同步你可以傳遞一個REF STRING 參數、然后用 IMPORTSTRING 函數引入數據,如果是異步調用你需要使用 SERVER PUSH 技術返回一個STRING,然后在用IMPORTSTRING。詳細處理看 PB ONLINEBOOKS

    回答2:用 datastore.object.datawindow.syntax 得到語法,用 datastore.object.datawindow.data 得到數據

  • 問題: (1)如何在PB狀態下查看數據庫的觸發器程序。(2)如何改寫系統日期和時間
  • 回答1:1.具體與你使用的數據庫有關,在SQL Server及SQL Anywhere中trigger 語法存放在syscomments表中,直接select出來就可憐看到。?
    2.調用windows API.具體function我記不清了,查一下visual c++幫助,不難。

  • 問題:使用PB5.0中帶的SQL ANYWHERE 5.0,在一個表中設置了一個列 user char(10 ) 其default value 設為current user用于記錄誰向該表中加入了新行,但什么也記不下來,另外有無簡單的手段記錄,誰最后修改了行?
  • 回答1:SQL AnyWhere default value=當前用戶 的語法用user char ( 10 ) default user,而不是 default current user,再試試!

    回答2:在此表上ADD一個TRIGGER。在INSERT 和UPDATE時出發。TRIGGER啟動后SELECT USER INTO VAR1 NEW。USER := USER;我也是蝦血,你可以試試。


  • 問題:在PB中使用大文本時碰上字符集不能轉換的錯誤,如何處理?
  • 回答1:用 Image 類型 的列試試。

  • 問題:連接到adaptive server anywhere6.0 network database server ,客戶端怎么設置?
  • 回答1:客戶端配置 ODBC 時注意以下幾點:?
    1)Server Name 項寫 ASA 的 Server Name?
    2) Database Starup 項內選中 Network radio button.

  • 問題:在PB中同時連接兩個Informix數據庫服務器,怎么配置第二個數據庫服務器的Transaction變量。請指教!
  • 回答1:第二個 Transaction 的屬性配置和第一個類似,只是在用的時候 SQL 語句后要加 using …; ,并且用完后要用 Destroy 命令刪掉。

  • 問題: 我在窗口中使用了 vb 所帶的一個ocx 控件,用install builder 制成安裝盤并在另一機器上安裝后,ocx 控件調用不正確。該機器沒有安裝vb,我該怎樣在安裝時注冊 ocx 的相關信息呢???
  • 回答1:聽說是用windows\system里的REGSVR32命令

  • 問題:我準備用VB中的MSCOMM32.OCX在PB中做串口通信,我在OLE中插入時,提示“Insert of OLE failed,license file required”,這是什么原因,我拷的文件還缺嗎?
  • 回答1:是否缺少.lic文件?

  • 問題: PB中如何創建SQL ANYWHERE的數據庫?
  • 回答1:打開Database Painter, 在 File 菜單項下有Create Database,如果沒有,那么可能你裝PB的時候沒裝 SQL Anywhere.

  • 問題: PB中鼠標從控件上離開的事件是那個?
  • 回答1:移入、移出控件我都是用的 mousemove, 可以在 Script中進行區分。

  • 問題:ORACLE數據庫的Client/Server連接成功,且Delphi能夠連接到ORACLE 7.3.4 For NT,但是,PB連接ORACLE時,出現如下錯誤:沒連接接口驅動程序—功能未執行?
  • 回答1:sqlca.servername = ‘@’ + ORACLE數據庫別名?
    sqlca.dbms=’o72’?
    sqlca.login = ‘SYSTEM’?
    sqlca.loginpass = ‘MANAGER’

  • 問題:PB5,PB6中DataBase中Table的column Name等屬性不能修改,ataBase中Table不能刪除,提示錯誤”The following DDL command is no supported:Droptable”,為什么?
  • 回答1:droptable不對, 應該是drop table,PB對sybase自身的數據庫產品的支持應該是沒有問題的,連接oracle或者db2等一般不能直接修改列名或者列類型,另外, 對于大型數據庫而言, 一般不允許將列長度變小, 如:?
    col1 numeric(8,2) –> col numeric(10, 2) ok,?
    col1 numeric(8,2) –> col numeric(8, 0) no

    R回答1:我的數 據 庫 是SYBASE SQL Anywhere,開始在PB5.0下建的表,而且能修改Column Name等屬性.后來因其它原因重裝后便不可以了.硬盤格式化后重裝也不行.便安裝了PB6.0,剛用時是正常的.過了幾天再用便又不行了.AR回答1:實在不行的話, 如果你用sql anywhere, 使用Sybase sql Central 也可以修改列名等, 規則和我上次談的一樣
    • 1
    • 2
    • 3
  • 問題: 由于服務器沒正常關機,導致數據庫脫機,用sp_helpdb命令得到“cinms”數據庫被標記為”offline”,請問如何去掉這個標記,使得數據庫能工作?
  • 回答1:不妨試試如下命令(在交互式環境下)?
    online database cinms?
    go?
    看看是否可以解決問題!!!

    回答2:手工更改master庫中的sysdatabases表,它有兩個狀態欄status,status2,可以去掉SUSPECT位,具體數值意義可以看SYBASE的參考資料.

  • 問題:我在一臺Dec alpha 1200上的Digital Unix 4.0D平臺上安裝Sybase Server(安裝文件是從原盤上tar下來的),結果每次輸入CAS后提示:Please confirm that you have selected the NON-rewinding tape device if applicable. If you have done so, inform Sybase Technical Support that there is a problem with this tape and cite error condition 803.然后退出,不知是什么原因?另外Sybase非得在光碟上或磁帶上安裝嗎?如何備份原盤?
  • 回答1:你的sybload后沒加-D的參數或CAS不對。

  • 問題: 我正做一應用程序,需動態計算數據窗口不同列的數據值,不但有數值計算,而且有條件語句,我試圖用DW表達式及俄EVALUTE函數解決,沒有成功,請賜教!!!
  • 回答1: 可考慮自己在程序中計算,最后insertrow(0),并Setiem.

  • 問題: 在對有Identity字段的table進行數據import時,identity字段數據不能導入,用set identity-insert 屬性也沒用,怎么辦?
  • 回答1:用 set identity_insert on 改變設定后,insert 語句中 identity 列的值是顯式指定 identity 列將從這個值開始遞增,或用這個值填充 identity 列值中的空隙。如果不影響邏輯的話,能不能drop再create?

  • 問題: 我用的是PB5.0,源程序在開發環境中運行,正常無比,但編譯后執行EXE文件卻發現:程序實現的功能莫名其妙的不行了.現象:源程序中有一句dw_userquery.DataObject =”d_pacuser2”,在EXE文件執行時好象根本不顯示數據窗口對象d_pacuser2的內容.而在開發環境中卻是好好的!請問為何?
  • 回答1:是這樣,當你用到一個對象是動態加入的,如你程序中的類似 dw_userquery.DataObject = “d_pacuser2” 的情況,編譯是PB 不會將 數據窗口 d_pacuser2 自動編譯到 EXE 文件中去,解決辦法有兩個:?
    1)將此數據窗口所在的PBL 文件編譯成 DLL 或 PBD,(即 編譯時選中此 PBL文件后面的 DLL 多選框)?
    2)創建資源文件(以PBR結尾)?
    例如:?
    創建文件 dw_list.pbr?
    內容如下:?
    c:\sample\myapp.pbl(d_pacuser2)?
    將此文件寫在 Resource File 處。

  • 問題: 最近搞個統計表,錄入浮點數時的問題已在另外一篇帖說了,打印時更麻煩,幾個浮點數一合計,最后一位小數后又多出幾位,這是不是一個BUG,有PATCH嗎?
  • 回答1:這是PB的問題,如果要求嚴格的話,請不要使用轉換函數.解決的辦法只有用兩個整數來代替一個浮點數的整數及小數部份,在有關處理中,只能人工解決

  • 問題: 在PB6下的DW輸入浮點數9.112,光標離開輸入框后,數字就變成9.1120005,在UPDATE保存后也是9.1120005。怎么會這樣?
  • 回答1: 這種現象我也遇到過,可以采用設置EDITMASK來解決 將mask設為###.##而不是000.00

  • 問題: 如何動態修改DATAWINDOWS的SQL?
  • 回答1: 1>dw_1.setSqlSelect 或?
    2>dw_1.object.datawindow.table.select=…

  • 問題:在PB中生成的動態SQL的運行速度很慢,有沒有藥救?
  • 回答1:如果多次調用,則最好Prepare一次,再在循環中Open,不要每次都Prepare.

  • 問題: composite型datawindow有一報表rep,rep的datasource有參數,如何在程序中傳遞參數,用retrieve(value)不行。請高手指教!
  • 回答1:在COMPOSITE REPORT 設計過程中,雙擊COMPOSITE 報表的空白處,設置composite report的檢索參數(value),然后雙擊rep,把剛才設置的參數賦于rep,最后用 dw_composite_report.RETRIEVE(VALUE)

  • 問題: 請教高手一個問題:composite型的datawindow dw_1中有個報表rep1,rep1中有個statictext型對象st_1,如何在程序中給st_1附值?我用dw_1.object.rep1.st_1.text=value,運行時出錯。這么做?
  • 回答1:試試這樣:dw_1.object.rep1.object.st_1.text=value

  • 問題:怎樣屏蔽PB6,datawindow中操作錯誤時產生的英文信息
  • 回答1:通過判斷默認事務對象sqlca的屬性sqlcode來決定.?
    if slqca.sqlcode=** then?
    messagebox(”,’中文提示’)?
    end if?
    當然要了解pb的錯誤級別.

  • 問題: 我在TreeView的constructor事件中聲明并使用dataStore的實例,通過該實例檢索data window object得到數據后使用TreeView的InsertItem()可在控件加入根一級的數據顯示項,在加入下一級數據項時,我使用了TreeView的Itempoplate事件,聲明另一個datastore檢索另一個數據窗口對象,得到數據并加入下一級item,在腳本中我使用了for next 循環以得到同一級的多個數據項.現在需要在這一級下面再加入子項,該怎樣做?如果在for next 循環中嵌套一個for next循環,回出現很奇怪的現象,請參考PB5 的online books的Application technique中的chapter 12 using Lists in a window 關于treeview的部分.多謝指點!
  • 回答1:完全可用多重循環來實現。插入可用函數insertitemlast()來完成,注意其語法為:?
    treeviewname.InsertItemLast(handleparent, item )?
    其中handleparent為要插入Item其父項的句柄(第插入一項都返回一個句柄,long型),item為treeviewitem。?
    for example:?
    for i = 1 to row1 step 1?
    name = dept_datastore.getitemstring(i,”dept_name”)?
    code = dept_datastore.getitemnumber(i,”dept_code”)?
    xt_tvitem.label = name?
    xt_tvitem.data = dept_datastore.getitemnumber(i,”dept_code”)?
    xt_tvitem.pictureindex = 2?
    xt_tvitem.selectedpictureindex = 2?
    ll_newitem = tv_1.insertitemlast(ll_rootitem,xt_tvitem)//返回一個句柄ll_newitem ,作其子項父句柄。ll_rootitem為根句柄?
    for j = 1 to row2 step 1?
    xt_tvitem.label = emp_datastore.getitemstring(j,”name”)?
    xt_tvitem.data = emp_datastore.getitemnumber(j,”em_code”)?
    xt_tvitem.pictureindex = 3?
    xt_tvitem.selectedpictureindex = 3?
    tv_1.insertitemlast(ll_newitem,xt_tvitem)//用到父句柄?
    next?
    next


  • 問題: 我用的是ORACLE數據庫,PB中想動態修改DW的select語句的條件部分:string newwhere newwhere = ‘where ("table1“."field1” = ’ + ’ ~’Y~’)’是正確的.如果想把常量’Y’改為一個變量該怎么辦??
    回答1:可以這樣寫:?
    string ls_Y?
    ls_Y = ‘Y’?
    newwhere = “where (table1.~~field1~~ = ‘” + ls_Y + “’)”
  • 回答2:pb倒是沒有提供標準的modify接口,可能要用死辦法直接修改syntax的table區,具體格式可以看 SRD

  • 問題:請問PFC是什么?
  • 回答1: PFC是一些基本類庫,PFC功能強大,使用PFC開發程序,需要寫的代碼很少,時間可以大大減少,界面也比較好。

    回答2: PowerBuilder Fundamental Classes, 是這個意思吧,就是和微軟的MFC差不多的東東。

  • 問題:SYBASE_SQL_SERVER 11.2的sa口令忘記了怎么辦?
  • 回答1:好像在RUN_SYBASE文件內加一個 -m 然后,重新啟動,會自動產生一個新的SA口令。一定要用筆記住。再用sp_password改成自己的口令。的自己加的-m去掉,重啟動就可以了。

    回答2:為了安全,SYBASE 確認了你的身份后才能幫你解決。有時需要正式介紹信。


  • 問題: 是關于修改顯示器分辯率的ChangeDisplaySetting的問題。
  • 回答1:The first function returns the color of a specific pixel(像素;顯示器的最小分辨單元). The SetPixel function changes the targeted pixel to the color sent. There is no PowerBuilder equivalent.?
    Global External Function:?
    FUNCTION ulong GetPixel(ulong hwnd, long xpos, long ypos) LIBRARY “Gdi32.dll”?
    FUNCTION ulong SetPixel(ulong hwnd, long xpos, long ypos, ulong pcol) LIBRARY “Gdi32.dll”

    Script:?
    long lx, ly?
    ulong rtn?
    ulong l_handle, l_device?
    lx = 100?
    ly = 100?
    l_handle = handle(w_main)?
    l_device = GetDC(l_handle)?
    rtn = GetPixel(l_device, 100, 100)?
    MessageBox(“Position ” + string(lx) + “,” + string(ly),”Color = ” + string(rtn))?
    SetPixel(l_device, lx, ly, 0) // This call will set the pixel at lx, ly to black.

  • Q :請問在PB中如何利用PBCATTBL,PBCATCOL,PBCATFMT,PBCATEDT,PBCATVLD五個系統表?請說明各字段的中主含義。
  • 回答1:There five table is used to loaded “Lable”,”validation”,”head” and “tablename” and others table information whose in PB.We can used to show “table name” in our application and delete “died tabled ” in Database’

  • 問題: 如何播放動畫G胛試赑B中除了用RUN或外部函數SHELLEXECUTEA播放外,有沒有其他方法?
  • 回答1:使用VB5.0所帶ActiveX control.安裝vb后在pb OLE control中即可見.

  • Q : 如果做個窗口放報表,顯示多行時好象不舒服。請高手指點,謝謝。
  • 回答1:使用如下語句顯示DW dw1.object.datawindow.print.prview = True

  • Q :用DataWindow增加一筆記錄時,出現Can’t allocate space for object ‘Syslogs’ in database ‘bkacedb’ because the logsegment’ segment is full. If you ran out of space in Syslogs, dump the transaction log. Otherwise, use ALTER DATABASE or sp_extendsegment to increase the size of the segment.No changes made to database.如何從dump the transaction log下手?
  • 回答1:很簡單,你在Sql Enterprise Manager中對你的數據庫右擊,再點edit,再點Truncate,就可以將數據庫中已完成的事務清掉.或者用DUMP TRANSACTION … WITH TRUNCATE就可以了

    回答2: 您的DATAWINDOW是不是有很多個TABLE的復雜關連?它將導致臨時表空間不夠,若是,那你就要改變DATAWINDOW的做法了,例如,你可以在VIEW或者STORE PROCEDURE中將多個TABLE關聯起來,然和建立一個用VIEW或者STORE PROCEDURE作為數據源的DATAWINDOW.


  • 問題:在PB中如何實現音樂的播放?
  • 方法一

    1、聲明外部函數?
    FUNCTION boolean sndPlaySoundA (string SoundName, uint Flags) LIBRARY “WINMM.DLL”?
    Function Uint LoadLibraryA(String As_Library) Library “kernel32.dll”?
    Subroutine FreeLibrary (Uint Hinstance) Library “kernel32.dll”?
    2、程序如下:?
    Uint Lu_instance?
    Lu_instance = LoadLibraryA(“winmm.dll”)?
    if Lu_instance = 0 then?
    SndPlaySoundA(“c:\windows\media\chimes.wav”,1)?
    FreeLibrary(Lu_instance)?
    end if?
    3、存在問題:?
    如何播放格式的音樂?

    方法二:

    1、聲明外部函數?
    Function Uint ShellExecuteA (Uint hwndId,ref string op,ref string file,ref string parms,ref string dir,Uint show) library “shell32.dll”?
    Function Uint LoadLibraryA (String As_Library) Library “kernel32.dll”?
    Subroutine FreeLibrary (Uint Hinstance) Library “kernel32.dll”?
    2、程序如下:?
    String Ls_path,ls_file,ls_parms,ls_dir,ls_command?
    Uint lu_return,lu_instance?
    SetNull(ls_parms)?
    //check to see if the dll is available.Return number < 32 if not Lu_Instance = LoadLibraryA(“shell32.dll”)?
    if Lu_Instance <> 0 then?
    MessageBox(“操作提示”,”SHELL32.DLL動態庫不存在!”)?
    else?
    //Shell32.dll is here.Get a filename from the user?
    GetFileOpenName(“打開文件”,ls_path,ls_file,”“,”All Files (.),.*”)?
    if ls_path <> “” then?
    SetPointer(HourGlass!)?
    //Examine the checkbox for open or print configuration?
    if cbx_print.checked then?
    ls_command = “print”?
    else?
    ls_command = “open”?
    end if?
    //call the function.pass the parent as the ower.run normal.?
    Lu_return = ShellExecuteA(Handle(parent),ls_command,ls_path,ls_parms,ls_path,1)?
    //check for errors from function?
    if lu_return < 32 then?
    MessageBox(“操作提示”,”程序執行非法操作! ~r~n” + ls_path)?
    end if?
    end if?
    //free the resources from the dll since it was loaded with the loadlibrary call?
    FreeLibrary(lu_instance)?
    end if?
    注:本方法可運行任何文件,當然可以播放音樂文件 和動畫文件。在sndPlaySoundA() 的函數定義中,把 string SoundName 定義成 ref string SoundName,再試試,反正這個函數的原型就是有 ref 的。

  • 問題: 如何讓數據窗口只顯示表的最后幾條記錄?
  • 回答1: 加 filter ;根據索引加 where 條件;或者干脆用 rowsmove 把其他記錄移到 filter buffer 中。

  • Q : 我本人最近遇到了這么一個問題!pb6.0在win95中文環境下一切正常,但是移植到win98時漢字出現的卻全都是亂碼,請問如何解決這個問題?謝謝!!!
  • 回答1:請您使用黑體或楷體,否則在無盤工作站和WIN98中都會出現字體顯示不出來的情況.

  • 問題: 我如何能動態地在一個grid風格的datawindow中加一個標題行,該datawindow也是動態創建的。多謝!
  • 回答1:用grid風格的datawindow想加標題行比較麻煩,因為grid風格中的標題band中也會顯示網格線,而且要將text控件的band屬性設為Foreground.你可以用Create語句創建一個text控件,然后指定它的位置和band屬性.create的語法如下:?
    dw_1.Modify(‘create text(band=foreground alignment=”2” name=datetext text=”text” border=”0” color=”0” x=”0” y=”0” height=”69” width=”650” font.face=”Arial” font.height=”-9” font.weight=”400” font.family=”2” font.pitch=”2” font.charset=”0” background.mode=”1” background.color=”16777215” )’)?
    其中text的屬性大部分為必需的,如果不完整的話,該text可能不能顯示.據我所知,用grid風格的datawindow時要想加上標題,而且要顯示得比較好看,只能用text控件將顯示出的多余的網格線給蓋住,這樣做語法上比較麻煩,因為你要得到這個datawindow中最后一個列的y值和width,以控制text的width,特別是你這個datawindow和text是動態創建的.當然這些都是可以實現的,多多鉆研吧!

  • 問題:程序在PB5中運行的好好的.但是編譯好的.EXE文件運行時卻提示缺少settransobject or settrans fuction.請問這是怎么回事?
  • 回答1:該錯誤大多是由于Transaction沒有正確的Connect,你Connect后,應檢查sqlcode的值Put transaxtion parameters in scripts .or copy pb.ini to the directory of the *.exe file.

    回答2:應用在pb開發環境中運行時,系統會自動去找需要的庫,但編譯成.exe文件后運行就需要手工設置路徑或copy這些庫到當前目錄。一般這些庫都能在pb的shared目錄下找到。具體可參看“可執行文件調用動態鏈接庫問題”一帖的答復。已有幾位高手詳細解釋。

    A3:可能全局變量與局部變量,事例變量沖突

  • 問題:請問:因為要用連續紙打印發票和報表,打印機自動切紙以后,再打第二張發票時,繼續重新打在第一張發票的位置上,不知如何是好?是否要在PB中用調用外部函數設置自定義紙張大小,才起作用?
  • 回答1: I had a solution, like follows,?
    void WINAPI PrintSet(LPCTSTR PrinterName, DWORD PaperSize, DWORD Height, DWORD Width, LPDWORD ret_code, LPTSTR errortext)?
    {?
    DEVMODE* lv_devmode;?
    DEVMODE* lv_devmode_2;?
    PRINTER_INFO_2* lv_printer_info;?
    LPTSTR lv_str, pDeviceName;?
    HANDLE phPrinter;?
    DWORD pcbNeeded, lv_dword;?
    lv_printer_info = malloc( 500 );?
    if (!OpenPrinter(PrinterName, &phPrinter, NULL))?
    {?
    free(lv_printer_info);?
    *ret_code = GetLastError();?
    lv_str = “打開打印機失敗 !”;?
    strcpy(errortext, lv_str);?
    return;?
    }?
    if (!GetPrinter(phPrinter, 2, lv_printer_info, 500, &pcbNeeded ))?
    {?
    free(lv_printer_info);?
    *ret_code = GetLastError();?
    ClosePrinter(phPrinter);?
    lv_str = “無法得到打印機參數 !”;?
    strcpy(errortext, lv_str);?
    return;?
    }?
    lv_devmode = lv_printer_info->pDevMode;?
    pDeviceName = lv_devmode->dmDeviceName;?
    lv_dword = DocumentProperties(0, phPrinter, pDeviceName, lv_devmode, 0, DM_OUT_BUFFER);?
    if (lv_dword<0)?
    {?
    free(lv_printer_info);?
    *ret_code = GetLastError();?
    ClosePrinter(phPrinter);?
    lv_str = “無法取得打印機參數 !”;?
    strcpy(errortext, lv_str);?
    return;?
    }?
    // 修改DEVMODE結構, 設置紙張大小及其高度和寬度?
    lv_devmode->dmFields = lv_devmode->dmFields|DM_ORIENTATION|DM_PAPERLENGTH|DM_PAPERWIDTH|DM_PAPERSIZE;?
    lv_devmode->dmOrientation = DMORIENT_PORTRAIT ;?
    lv_devmode->dmPaperSize = PaperSize ;?
    lv_devmode->dmPaperLength = Height;?
    lv_devmode->dmPaperWidth = Width;?
    // 通過調用DOCUMENTPROPERTIES函數傳會修改的DEVMODE結構,?
    // 在調用時指定DM_IN_BUFFER|DM_OUT_BUFFER?
    lv_devmode_2 = malloc(500);?
    lv_dword = DocumentProperties(0, phPrinter, pDeviceName, lv_devmode_2, lv_devmode, DM_IN_BUFFER|DM_OUT_BUFFER);?
    if (lv_dword<0)?
    {?
    free(lv_devmode_2);?
    free(lv_printer_info);?
    *ret_code = GetLastError();?
    ClosePrinter(phPrinter);?
    lv_str = “無法設置打印機參數 !”;?
    strcpy(errortext, lv_str);?
    return;?
    }?
    if (!SetPrinter(phPrinter, 2, lv_printer_info, NULL))?
    {?
    free(lv_printer_info);?
    *ret_code = GetLastError();?
    ClosePrinter(phPrinter);?
    lv_str = “無法設置打印機參數 !”;?
    strcpy(errortext, lv_str);?
    return;?
    }?
    free(lv_devmode_2);?
    free(lv_printer_info);?
    ClosePrinter(phPrinter);?
    lv_str = “設置打印機參數成功 !”;?
    strcpy(errortext, lv_str);?
    *ret_code = 1;?
    return ;?
    }

  • 問題:如何動態創建控件 ,雖然能夠用CREATE來創建構件, 但無法在窗口中顯示。
  • 回答1:原因是你創建控件的語法不完整,一些必須的屬性沒有說明,如X,Y,band.你可以先將控件的語法先輸出到文本里,再替換為你的控件的屬性.以下為一個text控件的最基本的語法.?
    create text(band=detail alignment=”0” text=”aaaa:” x=”691” y=”52” height=”77” width=”426” name=aaaa font.face=”Arial” font.height=”-12” font.family=”2” font.charset=”0” background.mode=”1” )

    回答2: 我又看了看幫助,找到了答案:現在公布:?
    window.openUserObject ()?
    參數請查看幫助

  • 問題:PB做報表時,如何使表格線連續 不同記錄之間的表格線總是斷的!
  • 回答1:請將豎線畫長點!

    回答2:在報表的屬性中設置Units項為1/1000cm或Pixels,這樣報表的上下線就可以連續了。

  • 問題:如何取出DDDW中的Display Column的內容。
  • 回答1:string ls_value?
    ls_value=dw_1.describe(“Evaluate(‘lookupdisplay(column_name)’,1)”)?
    column_name=列名 ,’1’表示第一行;看看Help中的Describe

  • 問題:變量je 是decimal {2} 型,語句je=real(data)是從一column object 取得數據。此column 是number(8,2),data是事件itemchange的參數,string型。當string data = “212122.26”時,je=212122.27。這么會這樣?
  • 回答1:用dec()函數轉換

  • 問題: 如何在PB6.0中實現圖形數據窗口的水平,垂直滑桿拖動(有時數據項很多,滿屏顯示不下!)
  • 回答1: 把圖形 datawin object的 border 設為可調大小,即resize。然后把datawindow控件選上水平,垂直 滾動條屬性即可。

  • 問題:在PowerBuilder中如何釋放分配給游標的資源。SQL Server中如何計算master和tempdb的大小?
  • 回答1: 用close cursor 可以關閉游標,用deallocate cursor 可以釋放分配給游標的資源

  • Q : 在SCO UNIX OPEN SERVER 3.0 下安裝SYBASE10.0.2,當運行SYBINIT到最后要啟動SQL SERVER時失敗,如何解決?
  • 回答1:看看share memory could not directly allocated在SCO UNIX OPEN SERVER 3.0 下安裝SYBASE10.0.2,當運行SYBINIT到最后要:?
    1, 增加操作系統的Max Shared Memory?
    2,修改SQL Server的配置?
    a. Set Total Memeory . ex:32M?
    b. Create Cache for Database or append the default data cache?
    c. 其它需要根據你的具體情況配置?
    3, 增大tempdb的容量?
    4, 建立合適的index 根據你的應用建立index,避免大的表掃描。

  • 問題::我的情況是:安裝SYBASE,運行SYBINIT進行各項設置時,當它試圖Boot the sql server 時出錯,如何解決?
  • 回答?
    1,Unix 的IDE H.D.一般應該為Normal.?
    2, SYBASE在UNIX下要配置幾個參數。前面有過回答。SYBINIT運行到最后,BUILD THE MASTER 成功,當它試圖Boot the sql server 時出錯,boot fail.這是安裝的最后一步卻失敗了,配置中止,安裝失敗,而不是使用過程中的問題。設好環境變量后,試試以下幾步:?
    1, cd /etc/conf/cf.d 用configure 設 16.shared data 為32000000?
    2, cd /usr/libvi aiomemlock加sybase=32000000?
    3, cd /etc/conf/sdevice.d 改suds 的第二項’N’為’Y’?
    4, cd /etc/conf/cf.d link_unix

  • 問題:在哪里可以找到該文件中各段作用及意義的詳細解釋? 2。是否每各application都必須有一個ini文件? 其中哪些內容是必須的?
  • 回答1: 您完全可以不要INI文件,只不過用INI文件方便一些,當與數據庫連接的信息或配置信息變化時不用修改程序而已。一般在WIN95中用注冊表代替。

  • 問題:所用的后臺是sql server 11.5,對于違反DBMS 數據一致性的錯誤信息如何用中文錯誤信息代替?常見的如數據錄入時,不能為空的字段沒有輸入數據,為什么?
  • 回答1:在DW的dberror事件中,用MessageBox寫上自己的Error Message,最后,關鍵的一點, return 1(或>0的數)。

  • Q : 在PB編程中,可以定制用戶事件,請問如果想采用WINSOCK API編程,當網絡上數據來時, 哪個WINDOWS消息會被觸發?PB中對應的事件ID是什么?
  • 回答1:PowerBuilder does not support Socket programming. You can use VB or Power++ to create an ActiveX which encapsulates all socket methods. Then integrates this ActiveX into PowerBuilder.?
    Note: If you call the receive method. The method will block until all data are received

  • Q : 請問PB5如何連接LAN上另外一臺PC上的FOXPRO文件?
  • 回答1:使用ODBC連接當文件名不確定時,可以動態修改注冊表中的ODBC信息及OBDC.INI文件中的信息,再用 transaction連接。

  • 問題: PB5.0中生成*.exe文件后執行時報錯:DataWindow Error、Database transaction 、information not available、Call SetTrans or SetTransObject function,為什么?
  • 回答1:在DataWindow Retrieve之前應該用Settransobject函數,即:?
    Connect using sqlca;?
    dw_1.settransobject(sqlca)?
    dw_1.retrieve()

  • Q : 通過Winsock已實現調用Web頁面的功能,但在撥號時win95自動啟動的撥號網絡程序, 請問Winsock中是否有自動撥號和收線的函數?
  • 回答1:PB原本是不支持WINSOCK編程的,但POWERSOFT提供了pslib5.dll和winsock.pbl兩個工具.前者是winsock 2.0的DLL,后者是PB的用戶對象集,提供了winsock的所有函數.

  • 問題:PB6 的應用生成可執行文件后,怎么知道它需要哪些動態連接庫?是否所有庫都能在shared目錄下找到?
  • 回答1:(only for win95)?
    一、shared ALL PBVM60.DLL; Datawindow and report PBDWE60.DLL;Richtext PBRTC60.DLL;OLE win95 PBAEN60.TLB?
    二、DB interface MS SQL server 6.0 PBMSS60.DLL;PB ODBC PBODB60.DLL;PBODB60.INI;Oracle 7.1 PBO7106.DLL;Oracle 7.2 PBO7206.DLL;Oracle 7.3 PBO7306.DLL;Sybase SQl Server 11.x PBSYC60.DLL?
    三、數據庫驅動DLL這個太多了,查查相應的HLP文檔。?
    shared DLL、DB interface、DB driver 三者缺一不可,把所有的這些文件放入\window目錄下是可以的,因為該目錄是window的缺省目錄,

    Q回答1:但是不能把所有的應用程序的DLL都放這里吧??
    有兩種Solution:?
    1>>把工作路徑加入Windows注冊表中應用程序的PATH中,(V_V);?
    2>>把工作路徑加入Autoexec.bat中(^_^)。?
    這樣,這些DLL放在那里都可以了!

  • 問題:使用PWIN95 OSR2, PB5.0, SQL ANYWHERE本地庫.在PB下使用自己的配置文件,可以訪問本地庫.但是編譯生成EXE后,無法訪問,為什么?另外APP如果同時訪問網絡DB和本地DB,程序打包時應該注意什么問題?
  • 回答1: 1》這些庫都包括了嗎?(PB在windows注冊表中包含了DLL的路徑,所以他的DLL可以不必放在PB60.EXE下,yours?)?
    2》SQLCA直接寫吧,不要從PB.ini中讀。?
    3》一定要找到SQLANY50和oracle 7.3的DB driver,并放置到合適的路徑下。SQLANY50 WOD50T.DLL,WL50ENT.DLL,WTR50T.DLL,WODBC.HLP?
    4》你的DLL包含了MS的DB driver了嗎?DS16GT.DLL,DS32GT.DLL, MSCVRT40.DLL,ODBC32.DLL,ODBC16GT.DLL, ODBC32GT.DLL, ODBCCP32.CPL, ODBCCR32.DLL,ODBCINT.DLL,ODBCINST.CNT,ODBCTRAC.DLL,ODBCAD32.EXE?
    5》試試控制面板中的ODBC32,是不是有什么問題。?
    6》如還有問題,請再說詳細些。

  • 問題:用PWIN95 OSR2, PB5.0, SQL ANYWHERE本地庫.在PB下使用自己的配置文件,可以訪問本地庫.但是編譯生成EXE后,無法訪問,為什么?程序打包時應該注意什么問題,?
  • 回答1: 其實,如果編譯沒有錯誤,只要在pb目錄中shared子目錄下,把Pbvm60.dll拷貝到win95的目錄下,然后在把pbdwe60.dll、pbodb60.dll、pbrtc60.dll、pbtra60.dll、pbodb050.dll、pbmss60.dll這幾個動態連接庫,拷貝到你編譯后的工作目錄下,就可以了。

  • Q : 請教pb6.0如何調用win95的輸入法問題。比如:當光標在編輯框中,系統能自動的顯示當前的輸入模式,不用Ctrl+space組合鍵來顯示當前的輸入法,請問怎么實現這一方法?
  • 回答1:先在Local extenal function定義下列API Function?
    function boolean ImmSimulateHotKey (UnsignedLong hWnd,UnsignedLong dwHotKeyID) library “IMM32.dll”?
    function unsignedlong GetKeyboardLayout (unsignedlong wLayout)library “user32.dll”?
    function boolean ImmIsIME(unsignedLong hklKeyboardLayout)library “IMM32.DLL”?
    如果是使用datawindow, 在itemchangedfocus event中:?
    ulong hklKeyboardLayout?
    Choose Case dwo.name?
    Case “chinese_text”?
    // 需要中文輸入的字段?
    hklKeyboardLayout=GetKeyboardLayout(0)?
    if not ImmIsIME(hklKeyboardLayout) then?
    ImmSimulateHotKey(handle ( parent,112)?
    end if?
    Case “Englist_text”?
    // 英文輸入字段?
    hklKeyboardLayout=GetKeyboardLayout(0)?
    if ImmIsIME(hklKeyboardLayout) then?
    ImmSimulateHotKey(handle ( parent ),112)?
    end if?
    End Choose?
    在windows 編輯框中類似。

  • 問題:DataWindow控件Find函數的查詢條件好象只能有一個like,而且有了like就不能和其他條件組合,是這樣嗎?
  • 回答1: 1》可以用方法POS(str1,str2)>0 and …;?
    2》把like子句()。即:(col1 like ‘%ggg%’) and (col2 like ‘___WW’)。

  • 問題: PB無法調用定義在PACKAGE中的函數或過程,此時這些函數或過程在PB中根本看不到,為什么?
  • 回答1:首先在PACKAGE聲明方法(Function,受JAVA的“METHOD”的影響不習慣叫“函數”, HEHE..)這個聲明把該方法聲明成公共 (Public)方法。然后在PACKAGE BODY中定義該方法。(如果僅在PACKAGE BODY中定義該方法,則被認為是私有(Private)方法,將不能被包外的應用訪問,OOP的典型應用)例如:定義包,并聲明一個 procedure pro_1:?
    Package p_zhhz is procedure pro_1(v1 in number);?
    end p_zhhz;?
    定義包體,在包體中定義這個 procedure pro_1:?
    Package BODY p_zhhz is procedure pro_1(v1 in number) is begin?
    delete from a_zhhz_test where zhhz_number = v1;?
    end pro_1;?
    end p_zhhz;?
    在PB中調用:?
    int li_v1?
    //聲明procedure,并且置初值?
    li_v1=5?
    DECLARE sel_zp_zhhz_1998_9_2 procedure for p_zhhz.pro_1(:li_v1) ;?
    EXECUTE sel_zp_zhhz_1998_9_2;?
    CLOSE sel_zp_zhhz_1998_9_2;?
    // (zhhz 1998-9-2)?
    // zhhz_zhhz@hotmail.com?
    回答2: 感謝你的幫助.由于我的存儲過程是個函數,所以沒采用EXECUTE;在TRANSACTION對象中聲明時采用”RFCFUNC”定義為一個函數,加上包名.問題已得到解決.


  • 問題:為何在一個TabPage上建一個DATA WINDOW 后不能COMMIT?
  • 回答1:commit是嵌入SQL語句,update()函數把對數據庫的修改寫到日志,commit遞交到數據庫,因此不存在無法commit的問題??赡苣鷽]有把TabPage上的update()函數要寫成Tab_?.TabPage_?.dw_?.update()

    回答2:能夠!可能是你的data window的屬性(update)沒有設置!


  • 問題:在pb的Datawindow中遇到了日期格式的困擾,如何處理?
  • 回答1:我用PB的EDITMASK 時,可以直接修改無須用DEL先刪除。不知你的屬性如何設置

    總結

    以上是生活随笔為你收集整理的PB实用技巧的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。