오랜시간 PowerBuilder 사용하고 있으나 실상을 뒤집어 보면 아는게 별로 없는 허접한 개발자 맞다. 이제서야 정확한 이 옵션의 의미를 이해 했다는 것은 편의성이 가져다 주는 오만함을 심어 줬던것은 아니었을까. 역시나 내 무식함을 오늘도 한번 다시 느낀다.
Reference URL
http://infocenter.sybase.com/archive/index.jsp?topic=/com.sybase.help.pb_10.5.pbug/html/pbug/BHBHDIEG.htm
Example
Consider this situation: a DataWindow object is updating the Employee table, whose key is Emp_ID; all columns in the table are updatable. Suppose the user has changed the salary of employee 1001 from $50,000 to $65,000. This is what happens with the different settings for the WHERE clause columns:
If you choose Key Columns for the WHERE clause, the UPDATE statement looks like this:
UPDATE Employee
SET Salary = 65000
WHERE Emp_ID = 1001
This statement will succeed regardless of whether other users have modified the row since your application retrieved the row. For example, if another user had modified the salary to $70,000, that change will be overwritten when your application updates the database.
If you choose Key and Modified Columns for the WHERE clause, the UPDATE statement looks like this:
UPDATE Employee
SET Salary = 65000
WHERE Emp_ID = 1001
AND Salary = 50000
Here the UPDATE statement is also checking the original value of the modified column in the WHERE clause. The statement will fail if another user changed the salary of employee 1001 since your application retrieved the row.
If you choose Key and Updatable Columns for the WHERE clause, the UPDATE statement looks like this:
UPDATE Employee
SET Salary = 65000
WHERE Emp_ID = 1001
AND Salary = 50000
AND Emp_Fname = original_value
AND Emp_Lname = original_value
AND Status = original_value
20여년간 외식전문기업에서 디지털전화과 혁신에 관한 일을 하면서 경험하게 된 다양한 이야기를 나만의 방식으로 풀어 내고자 한다. 외식기업 뿐 아니라 소상공인 모두 지속가능한 성장을 위해서 이제는 반드시 필요 한 것이 디지털 기술의 활용이며 우리의 변화가 필요 하다.
2015년 1월 26일 월요일
2013년 12월 17일 화요일
[PowerBuilder] 일상적인 Tip 그리고 오류 들
Tip 01. Windows7 64Bit 레지스트리 값을 가져오지 못하는 경우
XP 환경에서 계속 개발을 하다가 올해 부터 Windows7 64Bit 를 사용하였다. 그러다 보니 과거 프로그래밍해 놓은것들이 64Bit 환경에서 잘 안되는 것들이 하나둘 씩 생기기 시작 했다.
그중 레지스트리 값을 읽어 오지 못하는 경우가 있었음..
* 변경 이전
RegistryGet("HKEY_LOCAL_MACHINE\SOFTWARE\AAA\SetText", "SetYn", Ls_SetYn)
* 변경 이후
RegistryGet("HKEY_CURRENT_USER\SOFTWARE\AAA\SetText", "SetYn", Ls_SetYn)
기본적으로 windows 7에서는 사용자계정컨트롤이 켜져 있을때와 꺼져있을때 참조하는 위치가 다릅니다. HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node 여기 아래를 참조하게 되지요.. 따라서, local_machine 보다는 HKEY_CURRENT_USER 아래로 위치를 바꾸세요~
[출처] 윈도우7(64Bit)레지스터 가져오기 안되는데요 (파워빌더 커뮤니티(PBExpertClub))
| 덧글 작성자 까리보이 허륜석
Tip 02.
XP 환경에서 계속 개발을 하다가 올해 부터 Windows7 64Bit 를 사용하였다. 그러다 보니 과거 프로그래밍해 놓은것들이 64Bit 환경에서 잘 안되는 것들이 하나둘 씩 생기기 시작 했다.
그중 레지스트리 값을 읽어 오지 못하는 경우가 있었음..
* 변경 이전
RegistryGet("HKEY_LOCAL_MACHINE\SOFTWARE\AAA\SetText", "SetYn", Ls_SetYn)
* 변경 이후
RegistryGet("HKEY_CURRENT_USER\SOFTWARE\AAA\SetText", "SetYn", Ls_SetYn)
기본적으로 windows 7에서는 사용자계정컨트롤이 켜져 있을때와 꺼져있을때 참조하는 위치가 다릅니다. HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node 여기 아래를 참조하게 되지요.. 따라서, local_machine 보다는 HKEY_CURRENT_USER 아래로 위치를 바꾸세요~
[출처] 윈도우7(64Bit)레지스터 가져오기 안되는데요 (파워빌더 커뮤니티(PBExpertClub))
| 덧글 작성자 까리보이 허륜석
Tip 02.
2012년 6월 15일 금요일
[PowerBuilder] Data Windows to HTML ( save Excel)
String ls_HTML, ls_FileName, ls_Modify, ls_Named, ls_TmpFile
Integer li_FileNumber, li_Return
Long ll_Location
Integer li_FileNumber, li_Return
Long ll_Location
// Don't proceed if there is no data object loaded in the DW
If (dw_1.dataobject = "") Then Return -1
If (dw_1.dataobject = "") Then Return -1
// Generate the HTML
ls_Modify += "DataWindow.HTMLTable.Border=1 "
ls_Modify += "DataWindow.HTMLTable.Border=1 "
If Trim(ls_Modify) <> "" Then
dw_1.Modify(ls_Modify)
End If
ls_HTML = dw_1.Object.DataWindow.Data.HTMLTable
dw_1.Modify(ls_Modify)
End If
ls_HTML = dw_1.Object.DataWindow.Data.HTMLTable
If IsNull(ls_HTML) Or Len(ls_HTML) <= 1 Then
MessageBox ("Error", "Error generating HTML table.", Exclamation!)
Return -1
End If
MessageBox ("Error", "Error generating HTML table.", Exclamation!)
Return -1
End If
OLEObject EXCEL
EXCEL = CREATE OLEObject
EXCEL.ConnectToNewObject("Excel.Application")
EXCEL.ConnectToNewObject("Excel.Application")
// 저장 위치
li_Return = GetFileSaveName( "Save File", ls_FileName, ls_Named, "xls" , "All Files (*.*),*.*" )
li_Return = GetFileSaveName( "Save File", ls_FileName, ls_Named, "xls" , "All Files (*.*),*.*" )
IF li_Return <> 1 THEN
MessageBox("확인", "저장할 곳을 선택하십시오.")
Return -1
END IF
MessageBox("확인", "저장할 곳을 선택하십시오.")
Return -1
END IF
ls_TmpFile = ls_FileName + ".htm"
IF FileExists(ls_TmpFile) THEN FileDelete(ls_TmpFile)
IF FileExists(ls_FileName) THEN FileDelete(ls_FileName)
IF FileExists(ls_FileName) THEN FileDelete(ls_FileName)
li_FileNumber = FileOpen(ls_TmpFile, LineMode!, Write!, LockReadWrite!, Append!, EncodingUTF8! )
If (li_FileNumber >= 0) Then
DO WHILE LenA(ls_HTML) > 10240
ll_Location = PosA(ls_HTML, '<TR>') + 3
FileWrite(li_FileNumber, LeftA(ls_HTML, ll_Location))
ls_HTML = MidA(ls_HTML, ll_Location + 1)
LOOP
FileWrite(li_FileNumber, ls_HTML)
FileClose(li_FileNumber)
Else // File open error
MessageBox ("FileOpen Error", "Could not open file: " + ls_FileName + " (" + String( li_FileNumber ) + ")")
End If
DO WHILE LenA(ls_HTML) > 10240
ll_Location = PosA(ls_HTML, '<TR>') + 3
FileWrite(li_FileNumber, LeftA(ls_HTML, ll_Location))
ls_HTML = MidA(ls_HTML, ll_Location + 1)
LOOP
FileWrite(li_FileNumber, ls_HTML)
FileClose(li_FileNumber)
Else // File open error
MessageBox ("FileOpen Error", "Could not open file: " + ls_FileName + " (" + String( li_FileNumber ) + ")")
End If
EXCEL.WorkBooks.Open(ls_TmpFile)
EXCEL.WorkBooks(1).SaveAs(ls_FileName)
EXCEL.WorkBooks(1).Saved = True
EXCEL.WorkBooks(1).SaveAs(ls_FileName)
EXCEL.WorkBooks(1).Saved = True
EXCEL.Application.Quit
EXCEL.DisConnectObject()
EXCEL.DisConnectObject()
Destroy EXCEL
FileDelete(ls_TmpFile)
Messagebox("완료", "파일이 저장되었습니다.")
Return 1
2012년 6월 13일 수요일
[PowerBuilder] DataWindows to Excel
/*저장하는 칼럼의 셀에 맞혀 셀 위치에 (1:일반),(2:텍스트),(3:날짜) 셋팅
long Array1[], Array2[]
Array1[] = {1,1,2,2,1} //ex = {A,B,C,D,E}
Array2[] = {1,1,2,2,1} //엑셀에 값이 먼저 들어가기전에 형식지정을 먼저 해주어 ' 0 ' 값이 사라지는것을 막습니다.
long Array1[], Array2[]
Array1[] = {1,1,2,2,1} //ex = {A,B,C,D,E}
Array2[] = {1,1,2,2,1} //엑셀에 값이 먼저 들어가기전에 형식지정을 먼저 해주어 ' 0 ' 값이 사라지는것을 막습니다.
OleObject oleExcel , oleQuery
long li_rc
long li_rc
//하나의 Excel에 저장하려는 datawindow name 과 .txt파일을 먼저 저장할 경로 지정
dw_1.SaveAs('c:\t1.txt', TEXT!, True)
//이제 Excel 생성 - .txt로 생성한 파일을 Excel로 이동
oleExcel = Create OleObject
li_rc = oleExcel.ConnectToNewObject("excel.application")
IF li_rc <> 0 THEN
MessageBox("Information!", "File Conversion Failed!")
MessageBox('오류!', 'Excel을 구동하면서 오류가 발생했습니다.', stopsign!)
Destroy oleExcel
RETURN -1
end if
dw_1.SaveAs('c:\t1.txt', TEXT!, True)
//이제 Excel 생성 - .txt로 생성한 파일을 Excel로 이동
oleExcel = Create OleObject
li_rc = oleExcel.ConnectToNewObject("excel.application")
IF li_rc <> 0 THEN
MessageBox("Information!", "File Conversion Failed!")
MessageBox('오류!', 'Excel을 구동하면서 오류가 발생했습니다.', stopsign!)
Destroy oleExcel
RETURN -1
end if
oleExcel.WorkBooks.Add()
oleExcel.ActiveWorkbook.Sheets.Add.Name = 't1'
oleQuery = oleExcel.ActiveWorkbook.Sheets('t1').QueryTables.Add('TEXT;c:\t1.txt' , oleExcel.ActiveWorkbook.Sheets('t1').Cells(1,1) )
oleQuery.TextFileColumnDataTypes = Array1
oleQuery.refresh()
oleExcel.ActiveWorkbook.Sheets.Add.Name = 't1'
oleQuery = oleExcel.ActiveWorkbook.Sheets('t1').QueryTables.Add('TEXT;c:\t1.txt' , oleExcel.ActiveWorkbook.Sheets('t1').Cells(1,1) )
oleQuery.TextFileColumnDataTypes = Array1
oleQuery.refresh()
oleExcel.Application.Visible = True
[PowerBuilder] Function List
1. 배열(Array)처리 함수
LowerBound : 지정한 배열의 하위 경계
UpperBound : 지정한 배열의 상위 경계
LowerBound : 지정한 배열의 하위 경계
UpperBound : 지정한 배열의 상위 경계
2. Bolb관련 함수
Blob : 텍스트 데이터를 Blob 데이터로 변환 또는 복사
BlobEdit : PB가 지원하는 데이터를 Blob변수로 복사
BlobMid : Blob 데이터 문자열에서 N번째 문자를 반환
Len : 문자열의 길이
Blob : 텍스트 데이터를 Blob 데이터로 변환 또는 복사
BlobEdit : PB가 지원하는 데이터를 Blob변수로 복사
BlobMid : Blob 데이터 문자열에서 N번째 문자를 반환
Len : 문자열의 길이
3. 데이터형 검사 및 변환 함수
Char : blob,정수,문자열을 문자로 바꿔서 반환
Dec : 문자열의 내용을 십진수로 바꿔서 반환
Double : 문자열의 내용을 Double로 바꿔서 반환
Integer : 문자열의 내용을 정수로 바꿔서 반환
Long : 문자열의 내용을 long으로 바꿔서 반환
Real : 문자열의 내용을 실수로 바꿔서 반환
Date : 데이터베이스로부터 읽은 DateTime값에서 Date부분만 빼온다.
DateTime : Date나 Time을 DateTime 값으로 변환한다.
IsDate : 지정한 문자열이 유효한 Date값을 지녔는지 검사한다.
IsNull : 넘어온 인자가 NULL인지 검사한다.
IsNumber : 지정한 문자열이 숫자값을 지녔는지 검사한다.
IsTime : 지정한 문자열이 유효한 Time값을 지녔는지 검사한다.
String : 지정한 형식으로 문자열을 얻는다.
Time : 데이터베이스로부터 읽은 DateTime값에서 Time부분만 빼온다.
Char : blob,정수,문자열을 문자로 바꿔서 반환
Dec : 문자열의 내용을 십진수로 바꿔서 반환
Double : 문자열의 내용을 Double로 바꿔서 반환
Integer : 문자열의 내용을 정수로 바꿔서 반환
Long : 문자열의 내용을 long으로 바꿔서 반환
Real : 문자열의 내용을 실수로 바꿔서 반환
Date : 데이터베이스로부터 읽은 DateTime값에서 Date부분만 빼온다.
DateTime : Date나 Time을 DateTime 값으로 변환한다.
IsDate : 지정한 문자열이 유효한 Date값을 지녔는지 검사한다.
IsNull : 넘어온 인자가 NULL인지 검사한다.
IsNumber : 지정한 문자열이 숫자값을 지녔는지 검사한다.
IsTime : 지정한 문자열이 유효한 Time값을 지녔는지 검사한다.
String : 지정한 형식으로 문자열을 얻는다.
Time : 데이터베이스로부터 읽은 DateTime값에서 Time부분만 빼온다.
4. 날짜,요일,시간 처리 함수
Day : 일자를 구한다(1에서 31 사이의 정수)
DayName : 주간의 요일명을 구한다.
DayNumber : 주간의 요일을 숫자로 표현한다.(예를들면 일요일은1, 목요일은 5)
DaysAfter : 지정한 날짜에 n일전,후를 구한다.
Hour : 주어진 시간의 시 값을 구한다.
Minute : 주어진 시간의 분 값을 구한다.
Month : 주어진 날짜의 월 값을 구한다.(1에서 12까지)
Now : 클라이언트의 시스템 시간을 구한다.
RelativeDate:주어진 날짜를 기준으로 n일 후 날짜를 구한다.
RelativeTime:주어진 시간을 기준으로 n초 후 시간을 구한다.
Second : 주어진 시간의 초 값을 구한다.
Today : 클라이언트의 현재 날짜를 구한다.
Year : 주어진 날짜의 년 값을 구한다.(1000에서 3000년까지임)
Day : 일자를 구한다(1에서 31 사이의 정수)
DayName : 주간의 요일명을 구한다.
DayNumber : 주간의 요일을 숫자로 표현한다.(예를들면 일요일은1, 목요일은 5)
DaysAfter : 지정한 날짜에 n일전,후를 구한다.
Hour : 주어진 시간의 시 값을 구한다.
Minute : 주어진 시간의 분 값을 구한다.
Month : 주어진 날짜의 월 값을 구한다.(1에서 12까지)
Now : 클라이언트의 시스템 시간을 구한다.
RelativeDate:주어진 날짜를 기준으로 n일 후 날짜를 구한다.
RelativeTime:주어진 시간을 기준으로 n초 후 시간을 구한다.
Second : 주어진 시간의 초 값을 구한다.
Today : 클라이언트의 현재 날짜를 구한다.
Year : 주어진 날짜의 년 값을 구한다.(1000에서 3000년까지임)
5.DDE클라이언트 함수
CloseChannel:OpenChannel함수로 열린 DDE서버 어플리케이션의 채널을 닫는다.
ExecRemote : 서버 어플리케이션에게 명령 실행을 요구한다.
GetDataDDE : 연결된 서버 어플리케이션으로부터 새로운 데이터를 받아온다.
GetDataDDEOrigin:연결된 서버 어플리케이션으로부터 원래의 데이터를 받아온다.
GetRemote : 서버 어플리케이션에게 데이터를 요구한다.
OpenChannel: DDE서버 어플리케이션을 연다.
RespondRemote:서버에게 명령 또는 데이터가 클라이언트에게 받아들여졌는지를 알려준다.
SetRemote : 서버 어플리케이션에게 지정한 값을 설정하도록 한다.
StartHotLink:서버 어플리케이션과의 연결을 시작한다.
StopHotLink: 서버 어플리케이션과의 연결을 종료한다.
CloseChannel:OpenChannel함수로 열린 DDE서버 어플리케이션의 채널을 닫는다.
ExecRemote : 서버 어플리케이션에게 명령 실행을 요구한다.
GetDataDDE : 연결된 서버 어플리케이션으로부터 새로운 데이터를 받아온다.
GetDataDDEOrigin:연결된 서버 어플리케이션으로부터 원래의 데이터를 받아온다.
GetRemote : 서버 어플리케이션에게 데이터를 요구한다.
OpenChannel: DDE서버 어플리케이션을 연다.
RespondRemote:서버에게 명령 또는 데이터가 클라이언트에게 받아들여졌는지를 알려준다.
SetRemote : 서버 어플리케이션에게 지정한 값을 설정하도록 한다.
StartHotLink:서버 어플리케이션과의 연결을 시작한다.
StopHotLink: 서버 어플리케이션과의 연결을 종료한다.
6. DDE서버 함수
GetCommandDDE: 클라이언트 어플리케이션이 보낸 명령을 구한다.
GetCommandDDEOrigin:어떤 클라이언트 어플리케이션이 명령을 보냈는지 구한다.
GetDataDDE : 클라이언트 어플리케이션이 보낸 데이터를 구한다.
GetDataDDEOrigin:어떤 클라이언트 어플리케이션이 데이터를 보냈는지 구한다.
RespondRemote:클라이언트에게 명령 또는 데이터가 서버에게 받아들여졌는지를 알려준다.
SetDataDDE : 클라이언트 어플리케이션에게 데이터를 보낸다.
StartServerDDE:파워빌더를 서버로 동작하게 한다.
StopServerDDE:파워빌더가 서버로 동작하는 것을 중지한다.
GetCommandDDE: 클라이언트 어플리케이션이 보낸 명령을 구한다.
GetCommandDDEOrigin:어떤 클라이언트 어플리케이션이 명령을 보냈는지 구한다.
GetDataDDE : 클라이언트 어플리케이션이 보낸 데이터를 구한다.
GetDataDDEOrigin:어떤 클라이언트 어플리케이션이 데이터를 보냈는지 구한다.
RespondRemote:클라이언트에게 명령 또는 데이터가 서버에게 받아들여졌는지를 알려준다.
SetDataDDE : 클라이언트 어플리케이션에게 데이터를 보낸다.
StartServerDDE:파워빌더를 서버로 동작하게 한다.
StopServerDDE:파워빌더가 서버로 동작하는 것을 중지한다.
7. 파일처리 함수
FileClose : 파일 닫기
FileDelete : 파일 삭제
FileExists : 파일 존재 유/무
FileLength : 파일 길이
FileOpen : 파일 열기
FileRead : 파일 읽기
FileSeek : 파일 내 위치 이동
FileWrite : 파일에 쓰기
GetFileOpenName:파일 열기 공통 다이얼로그 열기
GetFileSaveName:파일 저장 공통 다이얼로그 열기
FileClose : 파일 닫기
FileDelete : 파일 삭제
FileExists : 파일 존재 유/무
FileLength : 파일 길이
FileOpen : 파일 열기
FileRead : 파일 읽기
FileSeek : 파일 내 위치 이동
FileWrite : 파일에 쓰기
GetFileOpenName:파일 열기 공통 다이얼로그 열기
GetFileSaveName:파일 저장 공통 다이얼로그 열기
8. 라이브러리 함수
LibraryCreate:라이브러리 생성
LibraryDelete:라이브러리 삭제
LibrarDirectory:pb라이브러리 파일의 모든 오브젝트의 리스트를 구한다.
LibraryExport:라이브러리 파일의 모든 오브젝트를 Export한다.
Library Import:지정한 라이브러리 파일에서 오브젝트를 Import한다.
LibraryCreate:라이브러리 생성
LibraryDelete:라이브러리 삭제
LibrarDirectory:pb라이브러리 파일의 모든 오브젝트의 리스트를 구한다.
LibraryExport:라이브러리 파일의 모든 오브젝트를 Export한다.
Library Import:지정한 라이브러리 파일에서 오브젝트를 Import한다.
9.MAPI함수
mailAddress :메일 메세지에 주소를 주거나 주소 리스트를 보여준다.
mailDELETEMessage :메일 메시지를 지운다.
mailGetMessages :메지시 id를 얻어온다.
mailHandle :내부 메일 시스템 핸들을 얻어온다.
mailLogOff :메세징 시스템과의 세션을 끊는다.
mailLogOn :메세징 시스템과의 세션을 시작한다.
mailReadMessage :메일 메시지를 읽는다.
mailRecipientDetails:지정된 수취인의 주소 정보를 보여준다.
mailResolveRecipient:불분명한 수취인 명을 결정한다.
mailSaveMessage :사용자 수신함에 새로운 메시지를 생성하거나 기존에 있는 메시지를 대체한다.
mailSend :메일 메시지를 보낸다.
mailAddress :메일 메세지에 주소를 주거나 주소 리스트를 보여준다.
mailDELETEMessage :메일 메시지를 지운다.
mailGetMessages :메지시 id를 얻어온다.
mailHandle :내부 메일 시스템 핸들을 얻어온다.
mailLogOff :메세징 시스템과의 세션을 끊는다.
mailLogOn :메세징 시스템과의 세션을 시작한다.
mailReadMessage :메일 메시지를 읽는다.
mailRecipientDetails:지정된 수취인의 주소 정보를 보여준다.
mailResolveRecipient:불분명한 수취인 명을 결정한다.
mailSaveMessage :사용자 수신함에 새로운 메시지를 생성하거나 기존에 있는 메시지를 대체한다.
mailSend :메일 메시지를 보낸다.
10. 수치 처리 함수
Abs : 수치의 절대값을 얻는다.
Ceiling : 지정한 수보다 크거나 같은 최소 정수를 구한다.
Cos : 주어진 각도의 코사인 값을 구한다.
Exp : e를 Number만큼 거듭제곱한 값을 구한다.(e=2.71828182845904)
Fact : 계승값을 구한다. Number의 계승값은 1*2*3*...* Number이다.
Int : 소수점 이하를 버리고 가장 가까운 정수로 변환한다.
Log : 지정 숫자의 자연로그값을 구한다.
LogTen : 지정한 숫자에 대해 밑이 10인 로그값을 구한다.
Max : 두 수 중 큰 수를 구한다.
Min : 두 수 중 작은 수를 구한다.
Mod : 두 수를 나눈 나머지를 구한다.
Pi : 3.14159265358979를 구한다.
Rand : 난수를 구한다.
Randomize : 난수 발생기를 초기화한다.
Round : 숫자를 지정한 자릿수로 반올림한다.
Sign : 숫자의 부호를 결정한다. Number가 양수이면 1을 표시해주고 0이면 0,
음수이면 -1을 표시한다.
Sin : 주어진 각도의 사인 값을 구한다.
Sqrt : 양의 제곱근을 구한다.
Tan : 주어진 각도의 탄젠트 값을 구한다.
Truncate : 숫자의 소수점 이하를 버리고 정수로 변환한다.
Abs : 수치의 절대값을 얻는다.
Ceiling : 지정한 수보다 크거나 같은 최소 정수를 구한다.
Cos : 주어진 각도의 코사인 값을 구한다.
Exp : e를 Number만큼 거듭제곱한 값을 구한다.(e=2.71828182845904)
Fact : 계승값을 구한다. Number의 계승값은 1*2*3*...* Number이다.
Int : 소수점 이하를 버리고 가장 가까운 정수로 변환한다.
Log : 지정 숫자의 자연로그값을 구한다.
LogTen : 지정한 숫자에 대해 밑이 10인 로그값을 구한다.
Max : 두 수 중 큰 수를 구한다.
Min : 두 수 중 작은 수를 구한다.
Mod : 두 수를 나눈 나머지를 구한다.
Pi : 3.14159265358979를 구한다.
Rand : 난수를 구한다.
Randomize : 난수 발생기를 초기화한다.
Round : 숫자를 지정한 자릿수로 반올림한다.
Sign : 숫자의 부호를 결정한다. Number가 양수이면 1을 표시해주고 0이면 0,
음수이면 -1을 표시한다.
Sin : 주어진 각도의 사인 값을 구한다.
Sqrt : 양의 제곱근을 구한다.
Tan : 주어진 각도의 탄젠트 값을 구한다.
Truncate : 숫자의 소수점 이하를 버리고 정수로 변환한다.
11. 출력(Print)함수
Print : 현재 글꼴로 문자열을 인쇄한다.
PrintBitmap: 지정한 인쇄공간에 비트맵 이미지를 인쇄한다.
PrintCancel: 인쇄를 취소한다.
PrintClose : 현재 페이지를 프린터에 보내고 인쇄를 멈춘다.
PrintDefineFont:인쇄작업시 폰트를 정의한다. 파워빌더는 각각의 인쇄 작업에 대해 8가지 폰트를 제공한다.
PrintLine : 지정한 위치에 지정한 굵기로 타원을 그린다.
PrintOpen : 현재 페이지를 프린터에 보내고 새로운 페이지를 셋한다.
PrintOval : 지정한 위치에 지정한 굵기로 타원을 그린다.
PrintPage : 지정한 위치에 지정한 굵기로 둥근 모서리의 사각형을 그린다.
PrintRect : 지정한 위치에 지정한 굵기로 사각형을 그린다.
PrintRouneRect:지정한 위치에 지정한 굵기로 둥근 모서리의 사각형을 그린다.
PrintSend :지정한 문자열을 프린터에게 보낸다.
PrintSetFont:현재 인쇄 작업에 대한 글꼴을 지정한다.
PrintSetSpacing:라인간 너비를 지정한다.
PrintSetup : 프린터 설정 다이얼로그 박스를 부른다.
PrintText : 지정한 위치에 지정한 문자를 인쇄한다.
PrintWidth : 현재 글꼴에서 지정된 문자열의 너비를 구한다.
PrintX : 커서의 X좌표를 구한다.
PtintY : 커서의 Y좌표를 구한다.
12. 문자열 처리 함수
Asc : 문자열의 첫번째 문자의 ASCII값을 구한다.
Char : 주어진 ASCII값에 해당하는 문자를 구한다.
Fill : 지정한 문자를 반복시켜서 문자열을 만든다.
Left : 문자열의 시작부터 지정한 수의 문자를 읽어온다.
LeftTrim : 문자열의 시작에 있는 공백을 없앤다.
Len : 문자열의 길이를 구한다.
Lower : 주어진 문자열 내의 대문자를 소문자로 고친다.
Mid : 주어진 문자열에서 시작 위치와 끝 위치를 지정해 문자열의
일정 부분만을 구한다.
Pos : 다른 문자열에서 주어진 문자열의 위치를 찾는다.
Replace : 문자열의 일부를 다른 문자열로 바꾼다.
Right : 문자열의 끝에서 주어진 수의 문자를 얻어온다.
RightTrim : 문자열의 끝에 있는 공백을 없앤다.
Space : 지정한 길이로 공백 문자열을 얻는다.
Trim : 문자열의 시작과 끝의 공백을 없앤다.
Upper : 지정한 문자열 내의 소문자를 대문자로 고친다.
Asc : 문자열의 첫번째 문자의 ASCII값을 구한다.
Char : 주어진 ASCII값에 해당하는 문자를 구한다.
Fill : 지정한 문자를 반복시켜서 문자열을 만든다.
Left : 문자열의 시작부터 지정한 수의 문자를 읽어온다.
LeftTrim : 문자열의 시작에 있는 공백을 없앤다.
Len : 문자열의 길이를 구한다.
Lower : 주어진 문자열 내의 대문자를 소문자로 고친다.
Mid : 주어진 문자열에서 시작 위치와 끝 위치를 지정해 문자열의
일정 부분만을 구한다.
Pos : 다른 문자열에서 주어진 문자열의 위치를 찾는다.
Replace : 문자열의 일부를 다른 문자열로 바꾼다.
Right : 문자열의 끝에서 주어진 수의 문자를 얻어온다.
RightTrim : 문자열의 끝에 있는 공백을 없앤다.
Space : 지정한 길이로 공백 문자열을 얻는다.
Trim : 문자열의 시작과 끝의 공백을 없앤다.
Upper : 지정한 문자열 내의 소문자를 대문자로 고친다.
13. 시스템 및 환경 함수(System and Environment)
Clipboard : 윈도우의 클립보드의 내용을 얻는다.
GetApplication:현재 어플리케이션의 핸들을 구한다.
CommandParm: 어플리케이션 실행시 지정된 파라미터가 있을 경우 그값을 구한다.
DoScript : 애플 스크립트(AppleScript)를 실행한다.(매킨토시 버전에만 해당)
GetEnvironment:시스템의 운영체제와 프로세서 등과 같은 정보를 얻는다.
Handle : Window SDK함수를 부르기 위해 사용한다.
Post : 지정한 윈도우에 대한 메시지를 메시지 큐에 마지막에 삽입한다.
ProfileInt : 지정한 프로파일에서 숫자값을 얻어온다.
ProgileString:지정한 프로파일에서 문자열을 얻어온다.
Restart : 모든 스크립트의 실행을 중지하고, 모든 윈도우를 닫으며 데이터베이스에 Commit한후 연결을 끊고 다시 어플리케이션을 실행시킨다.
Run : 지정한 어플리케이션을 실행시킨다.
Send : 지정한 윈도우에 메시지를 순차적으로 보낸다.
SetProfileString:지정한 프로파일 값을 저장한다.
ShowHelp : 윈도우 3.x에 있는 도움말(Help)파일을 읽어 파워빌더 어플리케이션에서 사용할 수 있다.
SignalError: 어플리케이션 레벨에서의 시스템 에러를 발생한다.
Yield : 반복문 안에서 다른 오브젝트나 어플리케이션의 메시지가 발생 됐는지를 체크할수 있게 한다.
Clipboard : 윈도우의 클립보드의 내용을 얻는다.
GetApplication:현재 어플리케이션의 핸들을 구한다.
CommandParm: 어플리케이션 실행시 지정된 파라미터가 있을 경우 그값을 구한다.
DoScript : 애플 스크립트(AppleScript)를 실행한다.(매킨토시 버전에만 해당)
GetEnvironment:시스템의 운영체제와 프로세서 등과 같은 정보를 얻는다.
Handle : Window SDK함수를 부르기 위해 사용한다.
Post : 지정한 윈도우에 대한 메시지를 메시지 큐에 마지막에 삽입한다.
ProfileInt : 지정한 프로파일에서 숫자값을 얻어온다.
ProgileString:지정한 프로파일에서 문자열을 얻어온다.
Restart : 모든 스크립트의 실행을 중지하고, 모든 윈도우를 닫으며 데이터베이스에 Commit한후 연결을 끊고 다시 어플리케이션을 실행시킨다.
Run : 지정한 어플리케이션을 실행시킨다.
Send : 지정한 윈도우에 메시지를 순차적으로 보낸다.
SetProfileString:지정한 프로파일 값을 저장한다.
ShowHelp : 윈도우 3.x에 있는 도움말(Help)파일을 읽어 파워빌더 어플리케이션에서 사용할 수 있다.
SignalError: 어플리케이션 레벨에서의 시스템 에러를 발생한다.
Yield : 반복문 안에서 다른 오브젝트나 어플리케이션의 메시지가 발생 됐는지를 체크할수 있게 한다.
14. 시간처리 함수
CPU : 현재 실행중인 PB어플리케이션 프로그램의 시작 시간부터 현재까지의 CPU시간을 구해준다.
Idle : 사용자가 아무런 입력이 없이 지정한 시간이 흐르면 Idle이벤트 발생시킨다.
Timer : 지정한 윈도우에 일정한 간격의 타이머를 지정하여 Timer이벤트를 발생시킨다.
CPU : 현재 실행중인 PB어플리케이션 프로그램의 시작 시간부터 현재까지의 CPU시간을 구해준다.
Idle : 사용자가 아무런 입력이 없이 지정한 시간이 흐르면 Idle이벤트 발생시킨다.
Timer : 지정한 윈도우에 일정한 간격의 타이머를 지정하여 Timer이벤트를 발생시킨다.
15. 그밖의 함수
Beep : 정해진 시간(초단위)동안 경고음을 발생한다.
DBHandle : DBMS의 핸들을 반환한다.
IsValid : 지정한 윈도우가 열려있는지 검사한다.
KeyDown : 사용자가 특정한 키를 눌렀는가 검사한다.
MessageBox : 메시지 박스를 출력한다.
PixelsToUnits: 픽셀(Pixel)을 PB의 Unit로 바꾼다.
RGB : 특정 색상을 표현하는 Long형 값을 반환한다.
SetNull : 변수의 유형에 상관없이 변수를 Null로 지정한다.
SetPointer : 마우스 포인터를 지정한 모양으로 바꾼다.
TypeOf : 오브젝트의 형을 결정한다. 예를들면 CheckBox, Picture, RadioButton
등이다.
UnitsToPixels: PB의 Unit를 픽셀(Pixel)로 바꾼다.
Beep : 정해진 시간(초단위)동안 경고음을 발생한다.
DBHandle : DBMS의 핸들을 반환한다.
IsValid : 지정한 윈도우가 열려있는지 검사한다.
KeyDown : 사용자가 특정한 키를 눌렀는가 검사한다.
MessageBox : 메시지 박스를 출력한다.
PixelsToUnits: 픽셀(Pixel)을 PB의 Unit로 바꾼다.
RGB : 특정 색상을 표현하는 Long형 값을 반환한다.
SetNull : 변수의 유형에 상관없이 변수를 Null로 지정한다.
SetPointer : 마우스 포인터를 지정한 모양으로 바꾼다.
TypeOf : 오브젝트의 형을 결정한다. 예를들면 CheckBox, Picture, RadioButton
등이다.
UnitsToPixels: PB의 Unit를 픽셀(Pixel)로 바꾼다.
1. UpperBound(배열명,{배열차원}) : 가끔 사용
(1) 개념 : 배열의 가장높은 경계값을 알아낸다.
Option으로 배열의 차원을 지정할 수 있으며 Default 차원은 1차원이다.
(2) Return : integer(배열의 가장높은 경계값)
(3) 예제
가)
integer li_number[7] , li_return
li_return = UpperBound(li_number) // li_return 은 7이 된다.
나)
string ls_name[5,6] integer li_return
li_return = UpperBound(ls_name,1) // li_return 은 5가 된다
li_return = UpperBound(ls_name,2) // li_return 은 6이 된다
가)
integer li_number[7] , li_return
li_return = UpperBound(li_number) // li_return 은 7이 된다.
나)
string ls_name[5,6] integer li_return
li_return = UpperBound(ls_name,1) // li_return 은 5가 된다
li_return = UpperBound(ls_name,2) // li_return 은 6이 된다
(4) 메모 : 가변길이 선언 배열에서 ( ls_text[] )
위의 함수를 사용하여 0이 Return되면 배열이 아직 현 메모리에 적재되지 않았음을 의미한다.
위의 함수를 사용하여 0이 Return되면 배열이 아직 현 메모리에 적재되지 않았음을 의미한다.
(5) 상대함수 : LowerBound()
2. IsDate(string) : 자주 사용
(1) 개념 : 특정한 String이 정확한 Date인지를 확인한다.
(2) Return : Boolean ( Date가 맞으면 True 아니면 False이다. )
(3) 예제 boolean lb_check
lb_check = IsDate("1996/05/22") // lb_check 는 True이다
lb_check = IsDate("1996/00/22") // lb_check 는 False 이다
lb_check = IsDate("1996/05/22") // lb_check 는 True이다
lb_check = IsDate("1996/00/22") // lb_check 는 False 이다
(4) 메모 : 특정한 String등을 Date로 변환시키기 직전에 많이 사용한다.
(5) 유사함수 : Isnull() , Isnumber() , Istime() , Isvalid()
3. Date(datetime) , : 자주사용 Date(string) , Date(year,month,day)
(1) 개념 : datetime , string , 년월일의 integer값을 Date 변수타입으로 변환한다
(2) Return : Date ( Valid 한 Date가 아닐때는 1900-01-01을 Return한다 )
(3) 예제 datetime ldt_this date ld_new
ld_new = Date(ldt_this)
IF ld_new = Date("1900-01-01") THEN
Messagebox("ERROR",'정확한 일자가 아닙니다 !!')
return
END IF
ld_new = Date("1996/08/15") ld_new = Date(1999,11,23)
ld_new = Date(ldt_this)
IF ld_new = Date("1900-01-01") THEN
Messagebox("ERROR",'정확한 일자가 아닙니다 !!')
return
END IF
ld_new = Date("1996/08/15") ld_new = Date(1999,11,23)
(4) 유사함수 : DateTime()
4. Control명.ClassName() : 가끔사용 ClassName(변수명)
(1) 개념 : 특정한 Object의 Class명을 String으로 알아낸다.
(2) Return : String ( Error 발생시에는 empty string "" 이 반환된다)
(3) 예제
가)
string ls_name
ls_name = Parent.ClassName()
IF ls_name = "w_insa001u" THEN
sle_1.text = ls_name
END IF
가)
string ls_name
ls_name = Parent.ClassName()
IF ls_name = "w_insa001u" THEN
sle_1.text = ls_name
END IF
// 어떤 Object의 Dragdrop Event 에서
string ls_name dragobject ldr_what
ldr_what = DraggedObject() ls_name = ldr_what.ClassName()
IF ls_name = 'em_delete' THEN
ldr_what.Drag(end!) Messagebox("Drag Object",'Drag된 Object 는 '& + ls_name + '입니다')
END IF
string ls_name dragobject ldr_what
ldr_what = DraggedObject() ls_name = ldr_what.ClassName()
IF ls_name = 'em_delete' THEN
ldr_what.Drag(end!) Messagebox("Drag Object",'Drag된 Object 는 '& + ls_name + '입니다')
END IF
나)
long ll_qty string ls_class
ls_class = ClassName(ll_qty) // ls_class 는 'long' 을 받아온다
ls_class = ClassName(this) // ls_class 는 현 Object 의 Class 명칭을 받아온다
long ll_qty string ls_class
ls_class = ClassName(ll_qty) // ls_class 는 'long' 을 받아온다
ls_class = ClassName(this) // ls_class 는 현 Object 의 Class 명칭을 받아온다
5. Object명.PostEvent(event명) : 자주사용
(1) 개념 : Script가 쓰여진 현 Event가 끝난뒤 특정 Object의 Event를 수행하게 한다.
위의 function은 script가 쓰여진 위치에 관계없음으로 그 이후에 어떤 scrip가 있다면
그것을 모두 수행한후에 실행된다.
(1) 개념 : Script가 쓰여진 현 Event가 끝난뒤 특정 Object의 Event를 수행하게 한다.
위의 function은 script가 쓰여진 위치에 관계없음으로 그 이후에 어떤 scrip가 있다면
그것을 모두 수행한후에 실행된다.
(2) Return : Boolean (성공하면 true , event가 없거나 script가 없으면 false)
(3) 예제
cb_close.PostEvent(clicked!) // object에 기본적으로 있는 event일때
cb_close.PostEvent("ue_keydown") // User가 정의한 event일때
cb_close.PostEvent(clicked!) // object에 기본적으로 있는 event일때
cb_close.PostEvent("ue_keydown") // User가 정의한 event일때
6. Object명.TriggerEvent(event명) : 매우 자주사용
(1) 개념 : 현 Event에서 어떤 특정Object의 특정Event를 즉각적 수행하고 돌아온다.
Script가 쓰여진 위치가 중요하다
(1) 개념 : 현 Event에서 어떤 특정Object의 특정Event를 즉각적 수행하고 돌아온다.
Script가 쓰여진 위치가 중요하다
(2) Return : Boolean (성공하면 true , event가 없거나 script가 없으면 false)
(3) 예제
cb_check.TriggerEvent(clicked!) // object에 기본적으로 있는 event일때
cb_check.TriggerEvent("ue_check") // User가 정의한 event일때
cb_check.TriggerEvent(clicked!) // object에 기본적으로 있는 event일때
cb_check.TriggerEvent("ue_check") // User가 정의한 event일때
(4) 메모 : 어떤 Event의 Script를 수행한다는 면에서는 Postevent와 Triggerevent는 동일하며
두 이벤트 중 어떤것을 써야할지의 선택기준은 현재의 Event가 수행되고 난뒤
어떤 Event를 이어서 수행시키느냐 (Postevent) , 즉각적으로 어떤 Event를
수행하느냐 (Triggerevent) 의 차이이다.
두 이벤트 중 어떤것을 써야할지의 선택기준은 현재의 Event가 수행되고 난뒤
어떤 Event를 이어서 수행시키느냐 (Postevent) , 즉각적으로 어떤 Event를
수행하느냐 (Triggerevent) 의 차이이다.
2012년 6월 12일 화요일
[PowerBuilder] OLE Excel Format Type
oleExcel.ActiveWorkbook.saveas("엑셀저장명.xls", 포맷형식)
포맷형식
이름 | 값 | 설명 |
---|---|---|
xlAddIn | 18 | Microsoft Office Excel 추가 기능 |
xlAddIn8 | 18 | Excel 2007 추가 기능 |
xlCSV | 6 | CSV |
xlCSVMac | 22 | Macintosh CSV |
xlCSVMSDOS | 24 | MSDOS CSV |
xlCSVWindows | 23 | Windows CSV |
xlCurrentPlatformText | -4158 | 현재 플랫폼 텍스트 |
xlDBF2 | 7 | DBF2 |
xlDBF3 | 8 | DBF3 |
xlDBF4 | 11 | DBF4 |
xlDIF | 9 | DIF |
xlExcel12 | 50 | Excel 12 |
xlExcel2 | 16 | Excel 2 |
xlExcel2FarEast | 27 | Excel2 FarEast |
xlExcel3 | 29 | Excel3 |
xlExcel4 | 33 | Excel4 |
xlExcel4Workbook | 35 | Excel4 통합 문서 |
xlExcel5 | 39 | Excel5 |
xlExcel7 | 39 | Excel7 |
xlExcel8 | 56 | Excel8 |
xlExcel9795 | 43 | Excel9795 |
xlHtml | 44 | HTML 형식 |
xlIntlAddIn | 26 | 국제 형식 추가 기능 |
xlIntlMacro | 25 | 국제 형식 매크로 |
xlOpenXMLAddIn | 55 | Open XML 추가 기능 |
xlOpenXMLTemplate | 54 | Open XML 서식 파일 |
xlOpenXMLTemplateMacroEnabled | 53 | Open XML 매크로 사용 서식 파일 |
xlOpenXMLWorkbook | 51 | Open XML 통합 문서 |
xlOpenXMLWorkbookMacroEnabled | 52 | Open XML 매크로 사용 통합 문서 |
xlSYLK | 2 | SYLK |
xlTemplate | 17 | 서식 파일 |
xlTemplate8 | 17 | 서식 파일 8 |
xlTextMac | 19 | Macintosh 텍스트 |
xlTextMSDOS | 21 | MSDOS 텍스트 |
xlTextPrinter | 36 | 프린터 텍스트 |
xlTextWindows | 20 | Windows 텍스트 |
xlUnicodeText | 42 | 유니코드 텍스트 |
xlWebArchive | 45 | 웹 보관 |
xlWJ2WD1 | 14 | WJ2WD1 |
xlWJ3 | 40 | WJ3 |
xlWJ3FJ3 | 41 | WJ3FJ3 |
xlWK1 | 5 | WK1 |
xlWK1ALL | 31 | WK1ALL |
xlWK1FMT | 30 | WK1FMT |
xlWK3 | 15 | WK3 |
xlWK3FM3 | 32 | WK3FM3 |
xlWK4 | 38 | WK4 |
xlWKS | 4 | 워크시트 |
xlWorkbookDefault | 51 | 통합 문서 기본 |
xlWorkbookNormal | -4143 | 통합 문서 일반 |
xlWorks2FarEast | 28 | Works2 FarEast |
xlWQ1 | 34 | WQ1 |
xlXMLSpreadsheet | 46 | XML 스프레드시트 |
2012년 3월 28일 수요일
[PowerBuilder] DW - Select Row
*데이터 윈도우 selectrow시 아래와 같이 해당 데이터 윈도우의 클릭 이벤트에 작성을 한다.
[기본적인 script]
if row = 0 then return
[기본적인 script]
if row = 0 then return
selectrow(0, false)
dw_1.selectrow(0, false)
dw_1.selectrow(0, false)
selectrow(row, true)
setrow(row)
[피이지프레임 사용시]
피이지프레임에서는 자체적으로 selectrow스크립트가 적용이 되어있기때문에 별도로
스크립트를 줄 필요는 없습니다.
스크립트를 별도 주지 않을 경우 데이터 윈도우 컬럼의 탭오더값이 있으면, row선택시 탭오더값이 있는
컬럼을 선택을 해야 row가 이동이 된다. 탭오더가 없을경우는 상관이 없습니다.
그러나 탭오더가 값이 있는데 탭오더 값이 있는 컬럼외에 다른 컬럼을 선택을 해도 row가 이동을 할 수
있게 하는 방법은 아래의 이미지를 참고 하시면 됩니다.
setrow(row)
[피이지프레임 사용시]
피이지프레임에서는 자체적으로 selectrow스크립트가 적용이 되어있기때문에 별도로
스크립트를 줄 필요는 없습니다.
스크립트를 별도 주지 않을 경우 데이터 윈도우 컬럼의 탭오더값이 있으면, row선택시 탭오더값이 있는
컬럼을 선택을 해야 row가 이동이 된다. 탭오더가 없을경우는 상관이 없습니다.
그러나 탭오더가 값이 있는데 탭오더 값이 있는 컬럼외에 다른 컬럼을 선택을 해도 row가 이동을 할 수
있게 하는 방법은 아래의 이미지를 참고 하시면 됩니다.
피드 구독하기:
글 (Atom)
다양한 채널의 블로그 작성으로 집중이 좀 안되기도 하고 나의 회사를 운영하고 관리 하다 보니 회사의 블로그로 작성 해보는 것은 어떤가 하고 하나로 옮겨 봅니다. (주)다이닝웨이브 - 블로그 바로가기
-
웹/앱 리뉴얼 프로젝트를 진행 중에 내부에서 처리해야할 프로세스상 로직이 있었는데 오라클(데이터베이스) 단계에서 처리가 곤란하게 되어 외부서비스(웹)의 특정 URL/URI를 호출해야 되는 경우가 생겼다. 구글링으로 검색을 해도 상세히 설명 된 곳이 별...
-
# Reference URL - http://struts.apache.org/docs/tutorials.html 아래 문서는 내부 구성원을 위한 간략한 설정 및 설치를 위한 정보 공유에 목적이 있으며 IT의 구성 환경에 따라 달라 질 수 있으...
-
주로 윈도우에서 RStudio를 사용할 때는 잘 몰랐는데 이동성 때문에 Mac Ari/Book에서 사용하는 경우 한글 깨짐현상이 발생 하기도 한다. 이럴때 해야 하는 여러가지 방법이 있는데 그중에 내가 사용한 내용을 공유하고자 한다. 우선은 RS...