2개 이상의 디비 접속2개 이상의 디비 접속

Posted at 2010. 10. 8. 13:25 | Posted in PowerBuilder
반응형

가끔 작업을 하다 보면 불가피(?)하게 2개의 디비에 접속을 해야할 경우가 생깁니다.

특히 sms 보내기 등 할때 말이죠.. ㅠㅠ

파빌 9.0 + ms sql2000 기준입니다.. 다른 디비는 접속 스크립트를 변경하시면..되겠죠..

배포시에는.. 해당 디비의 접속 dll 이 들어가야 한답니다..--;;

 

 

//글로벌 변수

TRANSACTION SQLCA, SQLCA_sms //사용할 트랜젝션 선언해줍니다..

 

//어플리케이션 오픈 이벤트

// 1번디비
SQLCA = Create Transaction // 트랜젝션 생성합니다..

SQLCA.DBMS = "MSS Microsoft SQL Server"
SQLCA.Database = "디비명"
SQLCA.LogPass = "페스워드"
SQLCA.ServerName = "서버주소"
SQLCA.LogId = "로그인아뒤"
SQLCA.AutoCommit = False
SQLCA.DBParm = ""


connect using sqlca;

if sqlca.sqlcode <> 0 then
 messagebox('error', sqlca.sqlerrtext)
 return
end if

 

//sms디비
sqlca_sms  = Create Transaction

sqlca_sms.DBMS = "MSS Microsoft SQL Server"
sqlca_sms.Database = "디비명"
sqlca_sms.LogPass = "페스워드"
sqlca_sms.ServerName = "서버주소"
sqlca_sms.LogId = "로그인아뒤"
sqlca_sms.AutoCommit = False
sqlca_sms.DBParm = ""


connect using sqlca_sms;

if sqlca_sms.sqlcode <> 0 then
 messagebox('error', sqlca_sms.sqlerrtext)
 return
end if

 

open(w_main) //오픈윈도우..

 

// 사용할 페이지에서..변수 선언 제외했음..

select count(*) into :변수 from 테이블 using sqlca;  //1번 디비 연결이용

 

select count(*) into :변수 from 테이블 using sqlca_sms;  //sms 디비 연결 이용..


반응형

//

ORACLE(PL-SQL) 초급 매뉴얼ORACLE(PL-SQL) 초급 매뉴얼

Posted at 2010. 10. 8. 13:19 | Posted in PowerBuilder
반응형

오라클 SQL 기초 강좌 입니다.

 

Oracle 초급매뉴얼 -> Oracle 강좌 -> SQL 기초강의

순서로 보시면 됩니다.

반응형

//

PowerBuilder 컴퓨터 환경 읽어오기PowerBuilder 컴퓨터 환경 읽어오기

Posted at 2010. 10. 8. 13:17 | Posted in PowerBuilder
반응형

ContextKeyword lcxk_base
string ls_Path
string ls_values[]

this.GetContextService("Keyword", lcxk_base)
lcxk_base.GetContextKeywords("OS", ls_values)

IF Upperbound(ls_values) > 0 THEN  
   ls_Path = ls_values[1]
ELSE  
   ls_Path = "*UNDEFINED*"

END IF

messagebox('1',ls_path)

 
//XP 적용된 환경 정보
ALLUSERSPROFILE      location of the All Users Profile.
APPDATA              location where applications store data by default.
CD                   current directory string.
CLIENTNAME           client's NETBIOS name when connected to terminal server session.
CMDCMDLINE           ncommand line used to start the current cmd.exe.
CMDEXTVERSION        version number of the current Command Processor Extensions.
CommonProgramFiles   path to the Common Files folder.
COMPUTERNAME         name of the computer.
COMSPEC              path to the command shell executable.
DATE                 current date.
ERRORLEVEL           error code of the most recently used command.
HOMEDRIVE            drive letter is connected to the user's home directory.
HOMEPATH             full path of the user's home directory.
HOMESHARE            network path to the user's shared home directory.
LOGONSEVER           name of the domain controller that validated the current logon session.
NUMBER_OF_PROCESSORS   number of processors installed on the computer.
OS                   name of the operating system.
                      (Windows XP and Windows 2000 list the operating system as Windows_NT.)
Path                 search path for executable files.
PATHEXT              file extensions that the operating system considers to be executable.
PROCESSOR_ARCHITECTURE   processor's chip architecture.
PROCESSOR_IDENTFIER  description of the processor.
PROCESSOR_LEVEL      model number of the computer's processor.
PROCESSOR_REVISION   revision number of the processor.
ProgramFiles         path to the Program Files folder.
PROMPT               command-prompt settings for the current interpreter.
RANDOM               random decimal number between 0 and 32767.
SESSIONNAME          connection and session names when connected to terminal server session.
SYSTEMDRIVE          drive containing the Windows root directory.
SYSTEMROOT           location of the Windows root directory.
TEMP and TMP         default temporary directories for applications that are available to                     users who are currently logged on.
TIME                 current time.
USERDOMAIN           name of the domain that contains the user's account.
USERNAME             name of the user currently logged on.
USERPROFILE          location of the profile for the current user.
WINDIR               location of the OS directory.


반응형

//

간단히 현재 실행 중인 경로 알아오기 [출처] [초보] 간단히 현재 실행 중인 경로 알아오기.간단히 현재 실행 중인 경로 알아오기 [출처] [초보] 간단히 현재 실행 중인 경로 알아오기.

Posted at 2010. 10. 8. 13:14 | Posted in PowerBuilder
반응형

GetCurrentDirectory() 함수를 사용하게되면 특별히 함수를 등록하거나 하지 않고

 바로 현재 실행중인 프로그램의 경로를 알수있다.

 

     예)


 

 

 

===== 코드 =====

string  sDir

//현재 directory 가져오기
sDir = GetCurrentDirectory()

 

간단한 코드로 쉽게 현재 실행 중인 경로를 변수에 담아서

원하는 이벤트에서 변수를 이용하여 현재 경로를 통해서 결과를 얻을 수 있다.

 

(파워빌더 9.0이상 버전에서 기본으로 제공되는 함수/ 이하버전에서는 API이용)

 

===== 9.0이하 하위버전 =====

Global External Functions
FUNCTION ulong GetCurrentDirectoryA(ulong BufferLen, ref string currentdir) LIBRARY "Kernel32.dll"
FUNCTION boolean SetCurrentDirectoryA(ref string cdir) LIBRARY "kernel32.dll"

 

GlobalVariables
string gs_main_path // 시작경로를 저장(Global 변수로 선언합니다)
ulong ul_BufferLen

 

어플리케이션 오픈시
ul_BufferLen = 100
gs_main_path = space(ul_BufferLen)
GetCurrentDirectoryA(ul_BufferLen, gs_main_path)

반응형

'PowerBuilder' 카테고리의 다른 글

2개 이상의 디비 접속  (0) 2010.10.08
ORACLE(PL-SQL) 초급 매뉴얼  (0) 2010.10.08
PowerBuilder 컴퓨터 환경 읽어오기  (0) 2010.10.08
파워빌더에서 화면 캡처하기  (0) 2010.10.03
PB DataDirect ODBC 등록방법  (0) 2010.10.03

//

파워빌더에서 화면 캡처하기파워빌더에서 화면 캡처하기

Posted at 2010. 10. 3. 18:07 | Posted in PowerBuilder
반응형
파워빌더 자체에서 제공하는 함수가 따로 있는 것은 아닙니다.
파워빌더에서 직접 윈도우 API 를 호출하는 방법도 있지만
매우 복잡해져서, DLL 을 만들고 파워빌더에서는 간단하게
함수를 호출하는 형식으로 만들어봤습니다.

첫번째 argument 에 윈도우의 handle 을 넘겨주면 그 윈도우 만을 capture 하게 됩니다.
만약 파워빌더에서 다른 윈도우의 화면을 capture 하려고 한다면 그 윈도우의 handle 을
찾는 것은 별도로 구현하셔야 합니다.

첫번째 argument 에 0 을 주면 두번째 argument 에 지정된 모니터 화면 전체를 capture 합니다.
(멀티 모니터도 지원이 됩니다. 1 이 기본 모니터이며 2가 확장된 모니터입니다.
3개 이상의 모니터를 가지고 있을 경우 2, 3 이 어떤 것이 될지는 테스트되지 않았습니다.
테스트 후 프로그램에 반영하셔야 합니다.)

자세한 내용은 첨부한 소스를 보시면 됩니다.

PB 11.5 에서 만들어 졌으며, 하위 버전을 사용하시는 분들은 아래의 스크립트를 참조하십시요.

// external function
FUNCTION long pb_screencapture( unsignedlong hwnd, long whichMonitor, long imageType, long imageQuality, string filename, ref string msg ) library "pbscreen.dll" alias for "pb_screencapture;ansi"


// PowerBuidler scripts
boolean lb_checked
long ll_ret, ll_monitor_no, ll_imageType, ll_imageQuality
ulong lu_handle
string ls_filename, ls_msg, ls_imageType

// 저장될 파일 이름.
ls_filename = sle_3.text

// 에러가 발생했을 때, 메시지. 반드시 space 로 공간을 잡아주어야 한다.
ls_msg = space(1024)

// 현재의 윈도우만 capture 할 것인지의 여부를 묻는 체크박스
// 체크되지 않으면 monitor number 에 지정된 화면 전체를 capture.
lb_checked = cbx_1.checked

if lb_checked then
lu_handle = handle(parent)
else
lu_handle = 0
end if

// 윈도우만 capture 하는 것이 아닐 경우에만 사용. 모니터의 번호. 1 부터 시작.
// 1 은 기본 모니터를 뜻한다.
ll_monitor_no = long( sle_4.text )

// 그림의 형식. JPG, GIF, BMP 만 지원된다.
// JPG 가 가장 효율적임.
ls_imageType = ddlb_1.text
choose case ls_imageType
case "JPG"
ll_imageType = 1
case "GIF"
ll_imageType = 2
case "BMP"
ll_imageType = 3
end choose

// 100 : 가장 좋은 품질. 사이즈가 커진다.
// 1 : 가장 않좋은 품질. 사이즈가 작다.
// 50-80 사이의 값이면 화면을 알아보는데 지장이 없음.
ll_imageQuality = 50

ll_ret = pb_screencapture( lu_handle, ll_monitor_no, ll_imageType, ll_imageQuality, ls_filename, ls_msg )
MessageBox( string(ll_ret), ls_msg )
반응형

//

PB DataDirect ODBC 등록방법PB DataDirect ODBC 등록방법

Posted at 2010. 10. 3. 18:06 | Posted in PowerBuilder
반응형
DIRECT ODBC를 이용하는 방법입니다.

--> 레지스트리 등록
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources", "ODBC_TEST", "PB DATADIRECT OEM 4.20 Oracle Wire Protocol")

// Intersolv ODBC Registry Set
If RegistryGet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC Drivers", "PB DATADIRECT OEM 4.20 Oracle Wire Protocol", ls_Tmp) = -1 Then
li_SetOK += RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC Drivers", "PB DATADIRECT OEM 4.20 Oracle Wire Protocol", "Installed")
li_SetOK += RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\PB DATADIRECT OEM 4.20 Oracle Wire Protocol", "APILevel" , "1")
li_SetOK += RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\PB DATADIRECT OEM 4.20 Oracle Wire Protocol", "ConnectFunctions", "YYY")
li_SetOK += RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\PB DATADIRECT OEM 4.20 Oracle Wire Protocol", "CPTimeout" , "60")
li_SetOK += RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\PB DATADIRECT OEM 4.20 Oracle Wire Protocol", "Driver" , SYS.WINDOWSDIR + "\pbora19.dll")
li_SetOK += RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\PB DATADIRECT OEM 4.20 Oracle Wire Protocol", "DriverODBCVer" , "3.52")
li_SetOK += RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\PB DATADIRECT OEM 4.20 Oracle Wire Protocol", "FileUsage" , "0")
li_SetOK += RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\PB DATADIRECT OEM 4.20 Oracle Wire Protocol", "Setup" , SYS.WINDOWSDIR + "\pbora19s.dll")
li_SetOK += RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\PB DATADIRECT OEM 4.20 Oracle Wire Protocol", "SQLLevel" , "1")
li_SetOK += RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\PB DATADIRECT OEM 4.20 Oracle Wire Protocol", "UsageCount" , "1")
End If

// Intersolv ODBC(PB) SharedDLL Registry Set
li_SetOK += RegistrySet("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\SharedDLLs", SYS.WINDOWSDIR + "\PBORA19.DLL" ,ReguLong!, 2)
li_SetOK += RegistrySet("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\SharedDLLs", SYS.WINDOWSDIR + "\PBORA19S.DLL" ,ReguLong!, 2)
li_SetOK += RegistrySet("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\SharedDLLs", SYS.WINDOWSDIR + "\PBBAS19.DLL" ,ReguLong!, 2)
li_SetOK += RegistrySet("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\SharedDLLs", SYS.WINDOWSDIR + "\PBUTL19.DLL" ,ReguLong!, 2)
li_SetOK += RegistrySet("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\SharedDLLs", SYS.WINDOWSDIR + "\PBUTL19R.DLL" ,ReguLong!, 2)
li_SetOK += RegistrySet("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\SharedDLLs", SYS.WINDOWSDIR + "\IVPB.LIC" ,ReguLong!, 2)
li_SetOK += RegistrySet("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\SharedDLLs", SYS.WINDOWSDIR + "\PBODB100.DLL" ,ReguLong!, 2)

// ODBC.INI Set
SetProfileString(SYS.WINDOWSDIR + "\ODBC.INI", "ODBC 32 bit Data Sources" , "ODBC_TEST", "PB DATADIRECT OEM 4.20 Oracle Wire Protocol")
SetProfileString(SYS.WINDOWSDIR + "\ODBC.INI", "ODBC_TEST" , "Driver32", SYS.WINDOWSDIR + "\PBORA19.DLL")

// ODBC_TEST ODBC Configure
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "ApplicationUsingThreads" , "1" )
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "ArraySize" , "60000" )
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "CachedCursorLimit" , "32")
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "CachedDescLimit" , "1" )
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "CatalogIncludesSynonyms" , "1" )
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "CatalogOptions" , "0")
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "DefaultLongDataBuffLen" , "8192" )
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "DescribeAtPrepare" , "1" )
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "Description" , "ODBC_TEST")
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "Driver" , SYS.WINDOWSDIR + "\PBORA19.DLL")
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "EnableDescribeParam" , "0" )
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "EnableNcharSupport" , "1" )
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "EnableScrollableCursors" , "1" )
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "EnableStaticCursorsForLongData", "1")
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "EnableTimestampWithTimeZone" , "1" )
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "HostName" , "")
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "LocalTimeZoneOffset" , "")
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "LockTimeOut" , "-1")
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "LogonID" , "")
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "PortNumber" , "")
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "ProcedureRetResults" , "1" )
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "SID" , "")
li_SetOK += RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC_TEST", "UseCurrentSchema" , "1")

이렇게 하면 ODBC_TEST 이라는 ODBC가 생성됩니다.
관련 화일은 위 구문에 보시면 몇개 안됩니다..

그걸 찾으시면 됩니다..

CONNECT 시에는

SQLCA.DBMS = "ODBC" // ODBC
SQLCA.DBPARM = "ConnectString='DSN=ODBC_TEST;HOST="+ls_ipaddress+";PORT="+ls_port+";SID="+ls_sid+";UID="+ls_logid+";PWD="+ls_logpass+"',CommitonDisconnect='No'"
SQLCA.AUTOCOMMIT = FALSE

로 하시면 됩니다.

단, 단점은 Oracle SP를 sqlca transaction에 등록 후 사용하셔야 합니다.
 
반응형

//