GUI sin

이 문제 때문에 무척이나 애를 먹었다. SQL 2000/2005, Oracle, MDAC 등등 여기저기 자료를 찾아찾아 설치해 봤지만 도저히 안되다가 간신히 해결할수 있었다.

<해결방법>
① 첨부파일 PBOLE105.DLL 를 다운로드 한다.
② 다운로드 받은 파일을 C:\Program Files\Sybase\Shared\PowerBuilder 폴더에 복사한다.
③ Maintenance(patch) 를 적용한다.

간단-_-;

Comment +0

OS : Microsoft Windows Vista Enterprise x86, Microsoft Windows XP SP3
PB : Sybase PowerBuilder 7,8,9,10
DB : Microsoft SQL 2000, 2005

Error Message :
Unable to load the requested Database interface. Please make sure that both the interface and client software are properly installed


Database Profiles 에서 MSS Microsoft SQL Server 를 추가 할려고 하면 위와 같은 메시지가 나타날 수 있다.

<해결 방법>
① System C:\Program Files\Sybase\Shared\PowerBuilder 폴더에 dll을 확인한다.
본인의 경우 NTWDBLIB.DLL 파일을 System32 폴더에,
PBMSSXX.DLL(XX의 숫자는 파워빌더의 버전) 파일을 C:\Program Files\Sybase\Shared\PowerBuilder 폴더에 넣어주었다. (http://www.sybase.com/detail?id=47750)


② System32 폴더와 C:\Program Files\Sybase\Shared\PowerBuilder 폴더가 정상적으로 [환경변수] path 에 설정 되어 있는지 확인하고 없으면 추가해준다.(윈도우7 x64 의 경우 C:\Windows\system 에 넣어준다.)


ntwdblib.2282.rar

 


Comment +0


<작업환경>
OS : Microsoft Windows XP SP3
DB : Microsoft SQL 2000 SP4, Microsoft SQL 2005 SP2
PB : Sybase PowerBuilder 10.5.2 build 7599

1. 서버 별칭 구성
   ① [시작] - [모든 프로그램] - [Microsoft SQL Server] - [클라이언트 네트워크 유틸리티] 실행
   ② 상단의 [별칭] 탭 선택 후 우측의 [추가] 버튼 클릭
   ③ 서버 별칭 입력 하고 우측의 [네트워크 라이브러리] - [TCP/IP] 선택 [서버 이름] 에 서버(IP)입력

2. ODBC 사용자 DSN 등록
   ① [시작] - [제어판] - [관리 도구] - [데이터 원본 (ODBC)] 실행
   ② 상단의 [사용자 DSN] 탭 선택 후 [추가] 버튼 클릭
   ③ 리스트 하단의 [SQL Server] 선택 후 [마침]
   ④ [이름] 에 데이터 원본을 가르키는 이름 입력(추후 파워빌더 DB Profile에서 사용할 이름)
   ⑤ [서버] 에 위의 서버 별칭 구성에서 등록한 별칭 입력 후 [다음] 버튼 클릭(드롭다운 메뉴를 선택하면 리스트가 나온다.)
   ⑥ [사용자가 입력한 로그인 ID 및 암호를 사용하는 SQL Server 인증 사용] 선택 후 아래에 아이디와 암호를 입력하고 [다음] 버튼 클릭
   ⑦ [기본 데이터 베이스를 다음으로 변경] 체크박스를 선택하고 기본 데이터베이스를 선택하고 [다음] 버튼 클릭
   ⑧ 별다른 특이사항 없으면 [마침] 버튼 클릭
   ⑨ [데이터 원본 테스트] 버튼을 누르고 성공 메시지를 확인한 후 [확인] 버튼을 누른다.

3. 파워빌더 에서 DB Profile 생성
   ① [시작] - [모든 프로그램] - [Sybase]  - [PowerBuilder 10.5] - [PowerBuilder 10.5] 파워빌더 실행
   ② 상단 메뉴의 [Tools] - [Database Profile] 메뉴 실행
   ③ [ODB ODBC]를 클릭하여 포커스를 맞추고 우측의 [New] 버튼 클릭
   ④ [Connection] 탭에서 [Profile Name] 에 원하는 프로필 이름을 입력, [Data Source]에 위에서 등록한 DSN 이름을 선택하고 아이디와 암호를 입력.
   ⑤ [Preview] 탭을 선택하고 [Test Connection] 버튼을 눌러 정상 성공 메시지 확인후 [OK] 버튼 클릭


Comment +0

//전달(BeforeMonth)
cTempMonth = Left(cPayMonth, 4) + '/' + Right(cPayMonth, 2) + '/01'
cBeforeMonth = String(RelativeDate(Date(cTempMonth), -1), 'yyyymm')

Comment +0

Question

사진 파일을 DataBase(blob)에 저장을 해두었습니다. 근데 사진을 올릴때 확장자가 다른 사진들이 함께 들어가있습니다. (JPG, BMP, GIF 등등) 모든 사진을 특정 디렉토리에 내려받았는데(모든 확장자를 JPG로), 어떤 것은 보이고 어떤 것은 보이지 않고 해서 알고보니 확장자의 문제더군요. 일일이 수정하기 힘들어서 이렇게 질문을 합니다.



Answer

일반적으로는 이미지를 DataBase에 저장할 때 확장자나 파일의 이름을 다른 컬럼으로 저장을 합니다. 그런 방식으로 안되어 있으시다면 다음과 같은 방법을 적용해 보는건 어떠실런지요. 이건 정석이 아니라 말씀드리기 좀 그렇지만 이런 편법적인 방법이라도 도움이 되실까해서 답변 드립니다.
*.BMP, *.GIF, *.JPEG 파일들을 일반 Editor(UltraEditor, EditPlus)에서 열어 보시면, 가장 첫 문자로 공통적으로 찍히는 부분이 있을 것입니다. BMP일 경우 BM, GIF일 경우 GIF, JPEG 파일은 깨진 이상한 문자가 보이네요. SELECTBLOB 으로 읽어낸 데이터의 첫 2자리를 잘라서 BM인지, GI인지 이 둘다 아닌경우는 JPEG가 됩니다. 이런식으로 처리를 해보시는건 어떠실런지요. SELECTBLOB 으로 읽어서 INTO한 변수를 BlobMid() 함수로 두자리를 잘라서 비교를 해보는 것이지요. 적용시켜 보십시오.


Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Int loops, k, li_complete
Long bytes_read, lgth, ncnt
Blob b, imagedata, imagedata2
String ls_version, cDate, cTime, ls_path, file_path

cDate = String(Curday(), 'yyyymmdd')
cTime = String(Curday(), 'hhmmss')

// 사진파일을 resource폴더에 write
ls_path = cgResourceDir + "\TEMP\"
file_path = ls_path + arg_filename

// 파일읽을 횟수
IF arg_filelength > 32765 THEN
    IF Mod(arg_filelength, 32765= 0 THEN
        loops = arg_filelength / 32765
    ELSE
        loops = (arg_filelength / 32765+ 1
    END IF
ELSE
    loops = 1
END IF

// 파일읽기
FOR k = 1 TO loops
    bytes_read = FileRead(arg_fnum, b)
    imagedata = imagedata + b
NEXT

// Blob 변수에 제대로 들어갔는지 크기로 확인
lgth = Len(imagedata)

// 사진 확장자 오류 확인
IF ( String(BlobMid(imagedata, 12)) = 'BM' OR String(BlobMid(imagedata, 12)) = 'GI' ) AND Upper(arg_compmode) = 'JPG' THEN
    MessageBox('오류','잘못된 사진 파일 입니다. 확인하시고 다시 시도해주세요.')
    RETURN 0
END IF

// 이하 생략...
cs


아주 간단하게 System에 적용시켜보았다. 이걸 몰라서 하루 종일 책을 찾아봤더니 조금 억울하네. (ㅠ_ㅜ)흑~


Comment +0


연 나이/만 나이 란?

'연나이'란 현재연도에서 출생연도를 뺀 나이, 즉 생년월일이 83년 12월 1일인 사람의 경우 2002년이 되기만하면 연나이로 19세가 된다. 하지만 만 나이로는 2002년 12월1일 이 지나야 19세가 되는 것이다. '만나이'개념으로 하면 같은 83년생이라도 생일이 지났냐 안지났냐에 따라 성년/미성년이 가려졌으나, '연나이'로 하면 같은 해에 태어난 사람은 똑같이 미성년이 되거나 성년이 된다.



생일이 지났을 경우 만 나이 = 현재 연도 - 태어난 연도
생일이 지나지 않았을 경우 만 나이 = 현재 연도 - 태어난 연도 - 1



< 스트립트 >
IF ( long(string(curday(),'mmdd')) >  long(mid(birth_date , 5, 4)),
string(long(string(curday(),'yyyy')) - long(mid(birth_date , 1, 4))) + '세',
string(long(string(curday(),'yyyy')) - long(mid(birth_date , 1, 4)) - 1) + '세' )

Comment +0

IF sqlca.sqlcode <> 0 THEN
   ROLLBACK;
   MessageBox('Error', 'SQL Error')
   RETURN FALSE
ELSE
   Commit;
   MessageBox('OK', 'OK')
END IF

스크립트 안에서 가장 간단하게 오류를 확인하고 Roll Back 한다.
이녀석도 자주 사용하는데 자주 잊는 문장중에 하나.-_-;

Comment +0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//clicked() script

STRING cConKind, cRegion, cRoomType, ls_newsql
DataWindowChild dwc  

Choose Case dwo.name

    //콘도이용지역 
    Case 'region'
    
        This.AcceptText()  
        cConKind = This.GetItemString(This.GetRow(), 'con_kind')
        
        This.getchild('region', dwc)  // dcode
        dwc.SetTransObject(SQLCA)
        
        ls_newsql = " SELECT datachkd.dcode,         " + &
                    "        datachkd.dname,         " + &
                    "        datachkd.hcode,         " + &
                    "        datachkd.dname1,        " + &
                    "        datachkd.dvalue,        " + &
                    "        datachkd.hdcode,        " + &
                    "        datachkd.relate_code1,  " + &    
                    "        datachkd.relate_code2,  " + & 
                    "        datachkd.fix_code1,     " + &
                    "        datachkd.fix_code2      " + &
                    "   FROM datachkd                " + &
                    "  WHERE datachkd.hcode = 'H753' " + &
                    "    AND datachkd.relate_code1 like '"+ cConKind +"'"  
        
        dwc.SetSqlSelect(ls_newsql)    
        dwc.Retrieve() 

End Choose
cs


Comment +0