Powerbuilder2010. 6. 20. 16:58



http://cafe.naver.com/pentaeduclub/10844




detail은 감추고 group 1을 만들어 sum값만 보여주는 화면인데 조회 후에 데이타 조회 수를 보여 줘야 하는데, 
rowcount는 detail에 있는 데이타 수가 나오니 화면에 보이는것은 group1만 보이기 때문에 group 1의 수를 
보여줘야 겠는데요. 어떻게 하면 되나요?.


전체 Row의 갯수가 아니라 Group 1 의 Row 갯수를 알고 싶으신 것인가요??


그런 경우라면 Computed Field를 올려놓고 아래와 같이 expression을 주시면 됩니다. 
========================================================== 
SUM( 1 for group 1) 또는 Count ( 컬럼명 for group 1 ) 
==========================================================



데이타 윈도우에서 데이터를 입력하고 입력된 행을 10줄씩만 출력되게 하면서 입력하는 코딩을 하고 싶은데 좀 
부탁드리겠습니다.


데이터윈도우에서 modify()함수를 이용해서 다이나믹하게 
데이터윈도우 내의 component(text, bitmaps, graphic 등)에 대해서 
삭제를 하거나 새로 추가 할 수 있다고 합니다. 
샘플 프로그램이나, 자세한 내용을 알 수 있는 자료가 
있으면 알려 주시기 바랍니다.

<<<< 1. 반드시 아래와 같이 Argument를 기술하여 코딩하여 >>> 
<<<< 2. 특정칼럼 앞에 생성하고 싶습니다. >>> 
(예) dw_1.modify("create disp_date") 
파워빌더 8.0 도움말에서 발췌했습니다. 
Modify method (DataWindows) 
Statement type 
----------------------------------- 
CREATE control (settings) 
Use to 
------------------------------------ 
Adds control to the DataWindow object (such as text, computed fields, and bitmaps). Settings is a list of

properties and values using the format you see in exported DataWindow syntax. To create an control,

you must supply enough information to define it



composite에 데이타 윈도우를 3개 넣어서 한 페이지를 만들었는데 dw[i_index].Object.DataWindow.Zoom = 
이 값이 틀려 질때마다 화면이 엉켜 버립니다. 왜 그런지 이유좀 알려 주세요.


Client 와 Server 쪽의 파워빌더 VM 자체가 틀리네요. 
파워빌더 버전을 10501로 올리시고.. 
양쪽에 배포하시기 바랍니다.

다른 PBD 들도 FullBuild 를 한번 해 주시는 것을 권장하고 
되도록 이면 모든 DataObject 의 Unit 을 PowerBuildr 
가 아닌 Centimeter 로 바꿔주세요..



데이터윈도우에서 필드에 엔터를 입력했을 경우 옆 필드로 커서를 이동하는 방법이 있는지 부탁합니다. 
현재는 필드에서 엔터를 입력했을 경우 커서가 아래로 이동합니다.


Enter를 Tab키 처럼 사용하고자 하시는 거라면 아래와 같이 스크립트 해보십시오. 
=================================================================== 
데이타 윈도우 컨트롤에 New EVENT를 만드는데 이때 Event ID를 
-> pbm_dwnprocessenter를 선택합니다.

그 다음 다음과 같이 스크립트를 작성합니다.

send(handle(this), 256, 9, 0) 
return 1 
===================================================================



3of9 barcode font를 사용하여 바코드 발행프로그램을 만들었습니다. 
그런데 프로그램을 컴파일하여 배포하였는데 
xp계열 운영체제에서는 정상적으로 발행되나 
win 98운영체제에서는 바코드가 아닌 텍스트가 출력됩니다. 
왜그런지 해결책은 무엇인지 알고 싶습니다.


바코드 폰트가 굉장히 민감합니다. 
파워빌더에서도 Build 번호에 따라서도 되고 안되고 하는 경우도 많으며 OS별로도 
폰트가 조금씩 다르기 때문에 발생하는 문제인듯 싶습니다. 
98용 Font를 심으신 것인지요!! 질문하신 내용상으로 Font상의 문제인듯 싶습니다. 
OS별로 해당 폰트가 존재하는지 Win98에도 해당 폰트가 심어져 있는지 확인해 보시고 조치해 보시기 바랍니다..



컴퓨터에는 7.0과 9.0이 깔려 있고 9.0에서 오류가 발생합니다


PowerBuilder를 실행시키고, 로드된 모듈을 체크해 보시기 바랍니다. (각 버전 밑 위치 확인) 
* 체크 방법 
시작-> 실행 -> winmsd -> 소프트웨어 환경 -> 로드된 모듈

그러면 로드된 소프트웨어에 가보시면, 
파워빌더 관련 dll 들이 있는데 
여기 나오는 모든 버전이 일치해야 하며 경로 또한 동일해야 합니다 
(program filessybaseShearedPowerBuilder 여기가 default 입니다)

아울러, 파워빌더를 제거 하실때, 레지스트리 정리 까지 하시는 것을 권장합니다

7과 9를 같이 까실때에는 Shared 폴더 자체를 따로 까시는것이 VM 충돌을 방지합니다.

ex)

..:SybasePowerBuilder9SharedPowerBuilder

..SybasePowerBuilder10SharedPowerBuilder.



regenerate 관련 질문을 저번에 한번 드렸는데. 
제가 하고 싶은거는 regenerate를 구현할려고 하는건 아니고 
그걸 프로그램상에서 실행시킬수 있는지가 궁금합니다. 
특정 dll의 특정 함수를 call해서 regenerate 할수 있는 방법은 
없는지요?


Regenerate 동작 원리상 현재 실행중인 Object 를 Export 하고 import 할 수는 없으므로.. 불가능합니다.



헬프시스템에서 예전에 올려주신 풍선도움말예제를 테스트했는데 
오브젝트수를 50개로 제한한거 같습니다. 
nvo_bubblehelp 에 인스턴스변수로 설정된 변수 
CONSTANT Integer li_MaxControlsOnTabs = 50 
탭이 있는 윈도우안에 있는 오브젝트가 50개가 넘으면 
에러가발생되고 50개 이하면 에러가 안나더라구요. 
오브젝트가 50개 이상인 경우에는 어떻게 설정해야 하나요?


자료실 Sample로 제공하는 소스는 참조용으로 저희쪽에서 책임을 지지 않습니다. 
그러므로 프로그램에 관계된 문의도 가급적 피해 주셨으면 합니다. 
(저희쪽도 모르는 경우가 있을 수 있음) 
nvo_bubblehelp 오브젝트의 멤버 Structure로 
str_registered_windows가 등록 되어 있는데 값이 
do_tabpage[50,2] 50를 원하는 숫자로 바꾸어 주시면 됩니다.



데이터 윈도우에서 DB컬럼의 속성을 Edit-Style type(CheckBox)로 만들어 놓고 배포를 하였는데 제자리(winxp)에선 
CheckBox에 v 표시가 나타나는데 배포한 클라이언트 PC(winxp)에서는 CheckBox에 x 가 표시가 되는데 어떻게 된건지 
잘몰라서요.


Checkbox 의 옵션중에 3D Look 이라는 옵션이 있습니다. 
이것을 체크하면 V 로 표시되고, 체크 하지 않으며, X 로 표시되어집니다. 
아울러, 배포하셨을때, 
해당 XP 의 테마가 고전일 경우에는 
Manifest 파일의 적용을 받지 않기 때문에 
XP 스타일이 적용되어지지 않습니다. 
( 물론 , 배포하실때, New Visual Style 옵션에 체크를 하셔야 XP 스타일로 배포되어집니다.) 
현재 쓰시는 버전이 5502 라면, 10.0.2.1 까지 올려주시기 바랍니다..



for i = 1 to 4 
if i < 10 then 
ls_serial = '0'+string(i) 
else 
ls_serial = string(i) 
end if

SELECT C_JBNM||':'||C_QUANTITY||'대' 
INTO :ls_jbnm 
FROM T_PO_REMOV_JBMAIN 
WHERE C_JSID = :ls_jsid 
AND C_JBSERIAL = :ls_serial;

ls_jbnmt[i] = ls_jbnm //파일이름 
next 
여기서 변수 값이 4개가 나오는데요 . 
4변수를 하나의 변수로 만들수 있는 방법을 알려주셨으면 합니다. 
항상 4개면 쉬운거 같은데 갯수가 일정하지 않아서 
좀 어려운것 같습니다. 방법을 알려주시면 감사하겠습니다. 
이유는 여기서 나오는 변수들을 text에 뿌려 주려고 하는데 변수사이에 ~r~n을 넣어서 정리를 할려구요. 
즉 변수 갯수에 상관없이 한가지 변수로 만들고 싶습니다.


Total 변수를 하나 선언해서 String을 누적 시켜서 사용하시는 방법과 ls_jbnmt[] 변수를 UpperBound(ls_jbnmt) 
하시면 동적 배열의 사이즈를 구하실 수 있습니다. 적용시켜 보십시오.



인코딩이 UTF-8로 되어있는 aa.txt파일을 인코딩이 ANSI로 변환하는 함수가 있나요? 
즉 파일을 인코딩을 다르게 가능한가요?.


파워빌더 6.5에서는 방법이 없습니다. 
파워빌더 10 에서는 FromANSI() , ToANSI() , FromUnicode() , ToUnicode() 
함수가 있으며 FileEncoding() 이라는 함수를 통해 쉽게 바꾸실 수 있고, 
FileOpen 시에도 Encoding 을 선택할 수 있습니다.



한글 OS 환경에서 개발된 프로그램이 있습니다. 
클리이언트가 한글 OS인 경우는 당연히 잘 되겠지요. 
궁금한것은 클라이언트의 OS가 영문인 경우인데 
데이터야 영어로만 넣으니 문제가 없겠지만, 
메뉴부터 시작해서 각종 title은 한글이니 다 깨질터인데 
영문 OS에서 한글 깨짐없이 볼 수 있는 방법은 없을까요?


해당 OS 에 한글 폰트만 존재하면 됩니다. 
한글 폰트를 새롭게 깔기 귀찮다면... 
우리나라 웹 사이트에 들어가시면 IE 설정을 따로 
건들인 것이 없다면, 한글 폰트가 받아 질 것입니다.



9704 패치후 팝업에서 선택한 데이타가 부모 DW에 전달이 되지 않습니다. 패치 전에는 문제가 없었습니다. 
패치를 하지 않으면 컴포짓 데이타 윈도워가 출력 이상이 생깁니다.


ClosewithReturn 을 통해서 Argument 를 넘기신 것 같은데 저희쪽에서는 정상적으로 넘겨 지는군요. Argument 
자체가 넘어가지 않는 것입니까? 팝업의 window Type 은 당연히 Response! 겠지요? Messagebox 로 확인해 
보시기 바랍니다.



화면에 보이는 dw의 내용을 column별로 sorting하는 기능을 구현하고자 합니다. 윈도우 탐색기에서처럼 "이름"을 
클릭하면 내림차순,오름차순으로 정리되고, "수정한 날짜"를 클릭하면 내림차순,오름차순으로 정리되는 것 처럼 dw에서도 
header부분의 column명을 클릭하면 내림차순,오름차순으로 정리되는 기능을 구현하고 싶습니다. 간단한 예제와 함께 
설명해 주신다면 정말 감사하겠습니다.


DW의 clicked 이벤트에 아래와 같이 작성하시면 됩니다. 
아래의 스크립트를 간단히 설명 드리자면 
기본적으로 DW를 만들면 
컬럼의 타이틀의 이름이 "컬럼이름_t"로 정해 집니다. 
정렬을 할때 컬럼의 이름을 선택한 타이틀의 이름에서 '_t'만 떼어내어 
얻어내서 얻어진 컬럼으로 Sort를 하는 스크립트 입니다. 
그렇기 때문에 해당 컬럼의 타이틀의 이름은 모두 "컬럼이름_t"로 지정해 
주셔야 아래의 스크립트가 적용됩니다. 
-------------------------------------------------------------------- 
string ls_column, ls_original_border 
IF NOT dwo.name = "datawindow" then //DWObject 바탕을 클릭! 
IF dwo.band = "header" THEN 
IF dwo.name = "" THEN 
Messagebox("Error", "칼럼 헤더 오브젝트에 칼럼명이 없습니다.") 
Return 
END IF

// DW의 컬럼 타이틀은 기본적으로 "컬럼이름_t"로 만들어 집니다. 그 규칙에 맞게 "_t"를 잘라내어 
// 컬럼명을 얻어서 Sort를 합니다. 타이틀의 이름을 "컬럼이름_t"로 모두 동일하게 맞춰 주십시오. 
ls_column = LeftA(dwo.name, PosA(dwo.name,"_t") -1 ) 
this.SetSort(ls_column + " " + is_sortorder) 
this.Sort()

IF is_sortorder = 'A' THEN // Ascending 이면 
is_sortorder = 'D' // Desending 한다. 
ELSE 
is_sortorder = 'A' 
END IF

END IF 
END IF 
---------------------------------------------------------



파워빌더7에서는 전체 빌드 말고 한 pbl만 빌드할 때 
다른 pbl의 아무 윈도우 하나 열어놓고 빌드하면 리제너레이션 
이런거 다 안하고 그냥 실행파일만 만들어지더라구요... 
물론 정상적인 방법은 아니겠지만 빠르게 pbd가 생성되기 때문에 
그방법을 즐겨사용했는데요. 
파워빌더9에서는 그 방법이 안먹히더라구요. 
지금 하나만 돌리는데도 20분이 넘게 걸리거든요. 
저희가 오브젝트가 좀 많거든요. 혹시 빠르게 생성하는 편법이 있나요?


파워빌더 8 부터는 Incremental로 Build를 하여도 
관련된 모든 PBL을 모두 다 Search를 하기 때문에 방법이 없습니다. 
파워빌더 정책이 바뀐 사항이기 때문에 유감스럽게도 방법이 없습니다..



기존 게시물에 있는 메일 관련 질문과 답변 모두 잘 봤습니다. 제가 SMTP등에 대해 잘 몰라서 SASMTP.dll 을 이용하는 
방법은 보내는 PC에 메일서버가 설치되어 있어야만 가능한 방법인지 알고 싶습니다. 일단 셈플 파일받고 레지스트리 
등록하고 셈플 프로그램 실행하면 Fail이 나와서요.


예제에 나와있는 것과 같이.. 
메일 서버를 입력해 주셔야 합니다. 
예제에는 저희회사 메일 서버인 mail.penta.co.kr 이 있구요. 
만약 , 회사의 메일 서버가 없다면, 
다른 포털 사이트의 메일서버를 작성하시면 됩니다. 
다만, POP3 가 지원되는 메일서버여야 합니다..



DBLink 로 연결된 원격지 DB를 조회/수정/저장하려고 하는데 테이블 또는 뷰가 존재하지 않습니다.라는 에러가 나옵니다.

Datawindow SQL 
SELECT ACPT_NO, 
ACPT_DATE, 
CUST_CD, 
(...생략...) 
FROM SAH410T@SEOULDB 
WHERE ACPT_NO = :as_acpt_no

조회는 정상적으로 되는데, UPDATE가 안 됩니다.

UPDATE PROPERTY 
테이블 : SAH410T@SEOULDB 및 필드항목 , PK 설정하면 
Table 'SAH410T@SEOULDB' not found 
Use table name anyway?

라는 에러메세지 출력됨. 
실제로 테이블은 있고, 다른 DB Tool을 사용했을때도 조회됨.


RPC로 만들어서 호출해 보시기 바랍니다. 방법은 다음과 같습니다.

1. Transaction User Object하나 만듭니다. 
File --> New --> PB Object( Standard Class) --> Transaction 
2. RPC 등록 
만든 Transaction Object 에서 
Local External Function --> Mouse 오른쪽 --> Paste Special -->SQL --> Remote SP --> sp 선택 
3. 사용 
3-1. Application Global Transacion 변수인 SQLCA를 치환 사용 
3-2. 새로운 Transaction Create 해서 사용



첫번째로 dw를 이용하여 조회한 data를 ole를 이용하여 Excel Sheet에 입력을 하였습니다. 
현재는 이 Excel Sheet를 저장을 하여 그 경로에서 해당 Excel을 열어서 출력을 하였습니다. 
하지만, 파워빌더에서 실행시에 메세지 박스를 띄워 "출력", "저장"을 선택하게 하여 "출력"을 선택하였을 경우에 생성한 
Excel파일을 바로 출력할 수 있는지 알고 싶습니다.

myOleObject.WorkBooks.Open(ls_sheet_name) 
myOleObject.WindowState = 2

위와 같이 Excel을 열어 출력하는 방법을 알려 주시면 감사하겠습니다...

두 번째로, 이 Excel sheet를 
myoleobject.application.workbooks(1).SaveAs('c:Infomolddata'+"수정유형현황SHEET.xls") 
로 저장시에 에러가 발생됩니다. PC를 재부팅하여 사용하면 정상적으로 저장이 되는데, 두 번째부터는 
에러가 발생합니다. 어떻게 해야 할까요?


전화로 통화한 내용과 같이 Print하는 기능은 OLE를 사용하는 스크립트가 VB script이기 때문에 MSDN을 
참고하셔서 확인해 보시기 바랍니다. myoleobject.application.workbooks(1).SaveAs() 함수의 
Return Type이 맞지 않는 관계로 에러가 발생하는 현상이오니 Return 변수 받는 부분을 삭제하여 주십시오.



아래 SASMTP.dll 이용한 메일 발송 질문에 대한 답변 잘 보았습니다. 
당연히 메일 서버는 메일호스팅 받고 있는 서버 명을 적었는데 오류가 발생합니다. 
제가 사용하고 있는 SMTP서버 아웃룩 설정에 보면 보내는 메일서버 인증 체크 부분이 있는데 이걸 체크하고 
사용하고 있습니다. (아마 스펨때문이라고 들었는데...?) 그런데 SASMTP.dll의 속성중 사용자 ID/PW 입력하는 
부분이 없던데 그래서 전송 실패가 되는거 아닌가 모르겠습니다.(인증실패?) 외부 dll의 경우 해결에 대해 Penta의 답변 
범위를 넘어서는걸로 아래 게시물에서 읽었지만 그냥 결과 정도만이라도 알려 주시면 감사하겠습니다.


smtp,dll 정식 버전에만 인증 절차가 있는것으로 알고 있습니다. 
그러므로 해당 dll 만든 회사에 문의 하시는것이 좋을것 같습니다. 
SMTP를 이용할 수 있는 방법은 기존 방법외 몇가지가 있습니다.

1. 파워빌더 9 이상에서는 pbni를 이용 smtp를 구현하실 수 있습니다.

혹 PowerBuilder9 이상을 사용하시면 사용 버전을 알려 주시면 sample를 보내 드리겠습니다.

2. EAServer를 이용하시면 javamail를 이용 smtp를 구현하실 수 있습니다. 
사용방법은 담당 엔지니어에 문의 하실 수 있습니다.



레지스트리에 RegistrySet()함수를 이용해서 이진수 값을 넣으려고 하는데 안되네요. 
즉, REG_BINARY 타입에 값을 넣으려니 안돼서요...RegUlong 타입으로 지정해도 안돼고 좋은 방법이 없을까요? 
현재 "01 00 00 00 "으로 값이 지정되어 있는데, 이 값을 "00 00 00 00"으로 바꿀려고 합니다..


// 아래와 같이 해보십시요...


// 값이 00 01 00 01 로 들어가게 됩니다. 
blob{4} lblb_value // 4 byte blob 변수 선언 
blob{4} lblb_tmp 
char lca_value[4] 
lblb_tmp = blobmid( lblb_value, 1, 1 ) + blob( char(1) ) + blobmid( lblb_value, 1, 1 ) + blob( char(1) ) 
MessageBox( "blob len", len( lblb_tmp ) ) 
if RegistrySet( & 
"HKEY_LOCAL_MACHINESoftwarePENTATest", & 
"blob_key", RegBinary!, lblb_tmp) = 1 then 
MessageBox( "INFO", "RegistrySet(binary) OK" ) 
else 
MessageBox( "ERROR", "RegistrySet(binary) FAIL" ) 
end if



1) isql과 datawindows에서 쿼리 실행시 쿼리내 decode문 등에 한글이 포함되어 있으면 select error 발생 
2) datawindows 내 sql문 쿼리 실행 오류 
- 특정 datawindows 내 쿼리가 이전에는 정상적으로 실행이 되었었는데 
언제부턴가 select 오류 발생(오류 예> select 100건이 정상이라면 -> 50건만 select 됨) 
위 2건에 대해 답변 부탁드리며, 
이전 질의건에서도 "1)번"과 같은 경우(05.7.7. 정두영님 질의건)가 있었는데 동건이 해결되었는지 해결되었다면 
어떻게 조치해야 되는지 답변 부탁합니다.


파워빌더9.0 의 최신 버전은 9.0.3 8614 입니다. 
아래의 SQL 로 isql 에서, DW 를 만들어서 테스트를 해보았습니다.

select decode(dept_id, 100,'총무부',200,'기획팀',300,'마케팅','기타부서') from department 
에러없이 잘 결과를 가져오는 
것이 확인이 되었고요. 
패치를 적용하여 실업무 프로그램을 배포하기 전에 충분히 테스트를 하시고 진행하십시요. 
많은 사이트에서 별다른 테스트 없이 패치를 적용했다가 곤란한 경우를 당하는 것을 많이 보았습니다.



원리를 설명해 주세요.! 
파워빌더가 ------>오라클 서버에 접속하는 원리 
(파워빌더---오라클서버까지 접속할 때까지의 체크 화일 및 필요한 파일)

예) 파워빌더----------------오라클 클라이언트----------------->오라클 서버

가령 1) 파워빌더가 실행시 파워빌더 지원 Native Driver과 오라클 클라이언트 버젼과 동일한지체크 
2) Nativer Driver과 오라클 클라이언트 체크후.,, 뭐 이런 Event들 ...,


파워빌더 Application 파워빌더Runtime 오라클클라이언트 오라클서버 
========================================================================== 
SQLCA.DBMS = 'O73' --> PBO73xx.DLL 
SQLCA.DBMS = 'O84' --> PBO84xx.DLL => 오라클클라이언트 => 오라클서버 
SQLCA.DBMS = 'O90' --> PBO90xx.DLL

위에서 간략하게 설명한바에 따라 파워빌더 Application에서 DB를 연결하실때 DBMS정보 세글자를 보고 
파워빌더 Runtime Module을 찾습니다. 그렇기 때문에 DBMS에 설정한 버전과 파워빌더 Runtime Module 
버전이 일치해야지만 됩니다. 파워빌더에서는 위의 사항만 체크해 주시면 됩니다. 
DB Client를 찾는건... 파워빌더의 Runtime Module에서 해당 버전과 일치하는 DB 클라이언트를 찾아서 
연결을 해주고 나머지는 DB 클라이언트가 서버를 찾아 갑니다. 그렇기 때문에 파워빌더에서 사용한 DBMS와 
동일한 버전의 DB Client가 설치되어 있어야 하며 부득이하게 파워빌더에서 지원이 안되는 Oracle버전이 있으시다면 
오라클 서버는 상위 버전이라고 하더라도 하위 버전의 Client를 설치하셔서 연결을 하셔도 무방합니다. 
허나 그렇게 사용을 하신다면 정확하게 오라클의 해당 버전에서 제공하는 신기능들은 사용하실수가 없겠죠!! 
되도록이면 DB Server와 DB Client는 동일한 버전을 사용해 주시는게 좋습니다.



상속받는 object가 있는 pbl의 경우는 관련된 모든 pbl을 같이 올려야 하는데 상속받는 object가 없지만 다른 pbl에서 호출해서 
사용하는 공통object가 있는 pbl의 경우 해당 pbl만 올려도 되는지요..


공통 Object 에는 수정사항이 전혀 없는지요? 
일반적으로 권장하는것은, 상위 Object 부터 Complie 하는 것입니다. 
이렇기 때문에 
파워빌더 8 버전 이후부터는, Increamental Build 를 하시더라도 
변경된 PBL 만 하는 것이 아닌, 조상 Object 들의 대한 
상속도 또한 모두 조사합니다.



setfilter의 필터구문에서 Like를 2회 넣을수 없는건지 궁금합니다.

예) 
string filterstr 
filterstr = "colname1 like '%종국%' and colname2 like '%종석%'" 
setfilter(filterstr) 
filter()

데이타윈도우 페인터상에서 Like하나는 되는데 
2회 사용하면 오류메세지가 발생합니다. 
실제 코딩에서 이런 구문을 쓰면 필터가 먹지 않습니다.


아래와 같이 스크립트를 변경하여 보십시오. 
================================================================== 
string filterstr 
filterstr = "(colname1 like '%종국%') and (colname2 like '%종석%') " 
setfilter(filterstr) 
filter() 
==================================================================



어떻게 하면 한 프로젝트 내에 있는 PBD를 한꺼번에 생성 하죠? 
Full Build해도 PBD는 생성이 되지 않네요. 
답변부탁드립니다.


Full Build와 PBD와는 상관이 없습니다. 
Application Wizard를 통해 Project 파일을 생성하면, 
중간에 PBD를 체크하는 부분이 나옵니다. 
거기서 PBD 부분을 체크를 하시고, 
작업을 진행 하시면 .exe와 .pbd 파일을 생성할수 있습니다.



파워빌더에서 edit data해서 save rows as.. 하면 
save as dialog box가 나오는데 프로그램에서 box를 사용하려면 
어떤 명령을 써야하나요. 
getfilesavename 함수는 알고있는데 이것말고 파빌에서 사용하는것을 쓰고 싶습니다.


다이얼로그 박스를 이용해 Data Object의 내용을 저장하시려면 간단하게 dw_1.SavaAs() 하시면 됩니다.

Posted by Julyus
Powerbuilder2010. 6. 14. 20:38
currentrow를 사용하시는거 보니 rowfocuschanged 이벤트인거 같네요

ls_data = dw_1.DESCRIBE( "Evaluate( 'LookupDisplay( airtime_startcity )', " + string( currentrow ) + ")" )

이런식으로 해보세요...
Posted by Julyus
Powerbuilder2010. 6. 1. 09:26
If KeyDown(46) Then Messagebox ('','test Delkey')

/////////////////////////////////////////////////

To: Bond numerical code often described 
  
VbKeyLButton a left mouse button 
VbKeyRButton 2 Right 
VbKeyCancel 3 CANCEL button 
VbKeyMButton four middle mouse button 
8 BACKSPACE key vbKeyBack 
VbKeyTab 9 TAB key 
VbKeyClear 12 CLEAR button 
13 ENTER key vbKeyReturn 
VbKeyShift 16 SHIFT keys 
17 CTRL key vbKeyControl 
VbKeyMenu 18 menu button 
VbKeyPause 19 PAUSE button 
CAPS LOCK key vbKeyCapital 20 
27 ESC key vbKeyEscape 
VbKeySpace 32 SPACEBAR bond 
VbKeyPageUp 33 PAGEUP bond 
VbKeyPageDown 34 PAGEDOWN bond 
35 END button vbKeyEnd 
36 HOME button vbKeyHome 
37 LEFT ARROW button vbKeyLeft 
UP ARROW button vbKeyUp 38 
RIGHT ARROW button vbKeyRight 39 
40 DOWN ARROW button vbKeyDown 
VbKeySelect 41 SELECT button 
PRINT SCREEN key vbKeyPrint 42 
EXECUTE key vbKeyExecute 43 
SNAP SHOT button vbKeySnapshot 44 
INS key vbKeyInser 45 
VbKeyDelete 46 DEL keys 
HELP button vbKeyHelp 47 
VbKeyNumlock 144 NUM LOCK keys 
  
  
A key to Z button with the value of the corresponding ASCII code 'A' to 'Z' is the same 
Numerical often described 
A key vbKeyA 65 
VbKeyB 66 B bond 
VbKeyC 67 C bond 
VbKeyD 68 D Bond 
VbKeyE 69 E bond 
VbKeyF 70 F bond 
71 G keys vbKeyG 
VbKeyH 72 H bond 
I vbKeyI 73 keys 
74 J keys vbKeyJ 
VbKeyK 75 K bond 
76 L button vbKeyL 
VbKeyM 77 M bond 
78 N bond vbKeyN 
VbKeyO 79 O bond 
80 P bond vbKeyP 
Q bond vbKeyQ 81 
82 R button vbKeyR 
VbKeyS 83 S bond 
VbKeyT 84 T Bond 
85 U keys vbKeyU 
VbKeyV 86 V bond 
W keys vbKeyW 87 
88 X button vbKeyX 
89 Y button vbKeyY 
90 Z button vbKeyZ 
  
  
0 to 9 button with the key code corresponding ASCII value of'0 'to'9' is the same 
Numerical often described 
Bond vbKey0 48 0 
VbKey1 49 1 bond 
VbKey2 50 2 keys 
VbKey3 51 3 button 
VbKey4 52 4 button 
VbKey5 53 5 keys 
VbKey6 54 6 button 
VbKey7 55 7 bond 
VbKey8 56 8 bond 
VbKey9 57 9 button 
  
  
Digital small button on the keyboard 
Numerical often described 
Bond vbKeyNumpad0 96 0 
VbKeyNumpad1 97 1 bond 
VbKeyNumpad2 98 2 keys 
VbKeyNumpad3 99 3 button 
VbKeyNumpad4 100 4 button 
VbKeyNumpad5 101 5 keys 
VbKeyNumpad6 102 6 button 
VbKeyNumpad7 103 7 bond 
VbKeyNumpad8 104 8 bond 
VbKeyNumpad9 105 9 button 
VbKeyMultiply 106 x (*) key 
VbKeyAdd 107 plus (+) key 
VbKeySeparator 108 ENTER key (in small numbers on the keyboard) 
VbKeySubtract 109 dashes (-) bond 
VbKeyDecimal 110 decimal point (.) Bond 
VbKeyDivide addition, 111 (/) key 
  
  
Function keys 
Numerical often described 
VbKeyF1 112 F1 button 
VbKeyF2 113 F2 button 
VbKeyF3 114 F3 key 
VbKeyF4 115 F4 keys 
F5 key vbKeyF5 116 
VbKeyF6 117 F6 key 
VbKeyF7 118 F7 key 
VbKeyF8 119 F8 key 
120 F9 key vbKeyF9 
121 F10 keys vbKeyF10 
122 F11 keys vbKeyF11 
123 F12 keys vbKeyF12 
124 F13 keys vbKeyF13 
125 F14 keys vbKeyF14 
126 F15 keys vbKeyF15 
127 F16 keys vbKeyF16
Posted by Julyus
Powerbuilder2010. 5. 28. 14:19
get, 폴더, Directory, dir

[Sample #1]
If is_cur_directory <> '' Then ChangeDirectory(is_cur_directory)

is_chk = 'F'
ll_rtn = GetFileOpenName("전표DETAIL DATA 찾기", &
+ ls_PathName, ls_FileName, "File", &
+ "CVS Files (*.CSV),*.CSV")
is_cur_directory= GetCurrentDirectory ()

[Sample #2]
ls_cur_directory = GetCurrentDirectory ( )
li_rtn = GetFileOpenName("Select File", &
   ls_doc_path, ls_doc_name[], "DOC", &
   + "Text Files (*.txt),*.TXT," &
   + "CSV Files (*.csv),*.CSV," &
   + "XLS Files (*.xls),*.XLS," &
   + "All Files (*.*), *.*", &
   ls_cur_directory, 18)

ChangeDirectory ( ls_cur_directory )
Posted by Julyus
Powerbuilder2010. 5. 24. 11:03




Environment env
INTEGER     resp
n_macip uo_macip

/* Variable Setting */
resp = GetEnvironment(env)     //시스템 환경을 읽어오는 함수

CHOOSE  CASE env.OSType         //OS TYPE(파워빌더는 7개 인식)
CASE aix!
    is_ostype = 'AIX'
CASE hpux!
    is_ostype = 'HPUX'
CASE macintosh!
    is_ostype = 'MacIntosh'
CASE osf1!
    is_ostype  = 'OSF1'
CASE sol2!
    is_ostype  = 'Solaris 2'
CASE Windows!
    is_ostype = 'Windows'
CASE Windowsnt!
    is_ostype  = 'Windows NT'
CASE ELSE
    is_ostype = 'etc'
END CHOOSE

uo_macip = CREATE n_macip
uo_macip.uf_getipaddr(is_ip)
uo_macip.uf_getmacaddr(is_macaddr)

gs_ip = is_ip
gs_macaddr = is_macaddr

Posted by Julyus
Powerbuilder2010. 5. 17. 20:25
Choose case dwo.name
Case 'prdf'
ls_prdt = ''
ll_prd = Long(data)
this.SetItem(row, 'prdt', data)
For i = ll_prd to 12
ls_prdt = ls_prdt + String(i) + '/'//ls_prdt + String(i) + ' ' + String(i) + '/'
Next
This.modify("prdt.values='"+ ls_prdt +"' prdt.ddlb.limit=0 prdt.ddlb.allowedit=no prdt.ddlb.case=any")
End Choose
Posted by Julyus
Powerbuilder2010. 2. 22. 09:52

특정 컨트롤(sle)에서 getfocus시 한글입력을 기본으로 하고 싶습니다? | ▦ PowerBuilder
2008.03.27 11:00

저는

f_lang_change(long, Integer) 라는 함수를 만들어 사용하는데요...

함수내용이구요...

/*================================================================================*/
/* Function    : f_lang_change                                                    */
/* Purpose     : 한/영 Toggle                                                     */
/* Arguments   : handle value, lang value                                         */
/*================================================================================*/

long hlMC 
hlMC = ImmGetContext(a_l_handle)
ImmSetConversionStatus(hlMC,a_i_lang,0) // a_i_lang가 1은 한글,0은 영문
ImmReleaseContext(a_l_handle,hlMC)

 

sle의 getfocus에 요렇게 적어주면 됩니다..

f_lang_change (Handle(Parent),1) // 한글로 기본 setting

 

간단하죠..

Posted by Julyus
Powerbuilder2009. 9. 15. 16:09

파워빌더 Datawindow 부분처리

Retrieve-as-Needed DataWindow Option

What is it? 
Retrieve As Needed is an option available in PowerBuilder that, when properly used, can reduce network traffic and speed up response times. Instead of bringing back all the rows for the datawindow on the retrieve, only as many rows as are needed to show in the datawindow at a time are retrieved. Then, if you page down through the datawindow, it will bring back the rows as needed from the server to display in the datawindow.

How does it work? 
The datawindow retains an open cursor while it is retrieving the rows. This might impact server performance. You can issue a dbcancel( ) function to end the retrieval (and thereby close the cursor), and should issue this function before closing the window. Keep in mind that some databases will not allow updates against the retrieved rows while the cursor is open.

What can override the retrieve as needed option? 
The option is overridden if you have sorting, filtering, or aggregation (such as sum or average) in the datawindow, since it will need to bring back all the rows to perform these functions. You can get around this if you have an order by clause in your select to do your sorting, specify a where clause instead of using a filter, and put the computed columns in the select statement rather than as computed fields with aggregate functions in the datawindow, form or report.

What happens if I print the datawindow? 
The print will only print as many rows as have been brought back from the server. So if you want to print a datawindow that has retrieve as needed specified, and you want all the rows to print, you can modify the datawindow retrieve.asneeded attribute to force the remaining rows to be retrieved, so that the print will print all the rows. To force any rows to be retrieved and reset the as needed flag back, code the following:

dw_1.object.datawindow.retrieve.asneeded = 'no' 
dw_1.object.datawindow.retrieve.asneeded = 'yes' 
 

What will the retrieve and rowcount functions return? 
The retrieve will tell you how many rows were initially brought back from the server. The rowcount will tell you the current number of rows that have been brought back. So if you do a retrieve, and then page down some, the rowcount should be higher than the return code from the retrieve. If you want to know how many rows COULD be retrieved if you retrieved them all, you can write an embedded sql select to do a count on the rows.

When will the retrievestart, retrieverow, and retrieveend events fire? 
The retrievestart will fire when the retrieval begins. The retrieverow event will fire whenever a row is retrieved, whether initially, or as a result of scrolling down. The retrieveend will fire when the retrieval is finished, either by retrieving all the rows, or by issuing the dbcancel function.

 

출처 - http://www.sybase.com/detail?id=42303

 

파워빌더 datawindw 기능중 하나인 Retrieve-as-Needed DataWindow Option

 

Retrieve가 Back에서 실행되고 그와중에 화면에 보여진다..

 

Event retrieverow에서

DW_NAME.object.datawindow.retrieve.asneeded = 'yes'

 

로 설정해주니 잘된당;;


Posted by Julyus