GUI sin

2018.02.26 추가

해결방법이 나와서 새글을 포스팅 하도록 하겠습니다. https://guisin.net/136




윈도우 8.1까진 해결 가능한 업데이트가 나와있는데, 윈도우 10은 아직나와있지 않다.(2015.08.19 기준)

 .hlp 파일을 열려고 하면 확장자가 연결이 안된것처럼 나오거나, 엣지 브라우저가 열려버린다.





그래서 여기저기 알아보니까,

WINHLP32 - Do we have to go through this again? 란 문서를 찾았고, 그안에 임시적인 해결방법이 나와있다.


winhlp32-windows-10-x86-x64-komeil.rar

(내가 윈도우10에 맞게 cmd 파일을 수정한 버전이다. 원본 : 다운로드)


압축을 풀고 install.cmd 파일에 마우스 오른쪽 버튼을 누르고 관리자 권한으로 실행 해주면 설치가 된다.


이제 hlp 파일이 열리는데 또다은 문제가 발생했다. 내가 자주 사용하는 PowerBuilder 에서 명령문을 선택(블럭)하고 Shift + F1 키를 눌러도 색인 검색이 되지 않는다.아 짜증나.


재밋는건 윈도우10 클린설치한 PC에선 문제가 발생하지만,

윈도우7/8/8.1 에서 업데이트(KB917607)를 적용한뒤에, 윈도우10으로 자동 업그래이드 적용된 PC에선 문제가 발생하지 않는다.


관련파일

C:\Windows\winhlp32.exe

C:\Windows\ko-KR\winhlp32.exe.mui

C:\Windows\en-US\winhlp32.exe.mui


관련 레지스트리

32bit

reg add "HKLM\SOFTWARE\Microsoft\WinHelp" /v "AllowProgrammaticMacros" /t REG_DWORD /d "0x00000001" /f

reg add "HKLM\SOFTWARE\Microsoft\WinHelp" /v "AllowIntranetAccess" /t REG_DWORD /d "0x00000001" /f


64bit

reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\WinHelp" /v "AllowProgrammaticMacros" /t REG_DWORD /d "0x00000001" /f

reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\WinHelp" /v "AllowIntranetAccess" /t REG_DWORD /d "0x00000001" /f



2015.08.20 추가

오늘 또 고생해본 결과 윈도우10 출시 초기인 만큼 가장 확실하게 윈도우10을 설치하는건,

윈도우7/8/8.1을 먼저 설치하고 정확한 드라이버를 설치한 뒤에 윈도우10으로 업그래이드 하는 방법이 있겠다.

(이방법도 확실히 안되는것 같다.)






Comment +0

1. 변경을 원하는 dw object에서 마우스 오른쪽버튼을 누르고 나오는 팝업메뉴에서 Edit Source를 선택



1
2
3
4
5
6
release 10;
datawindow(units=0 timer_interval=0 color=1073741824 processing=0 HTMLDW=no print.printername="" print.documentname="" print.orientation = 0 print.margin.left = 110 print.margin.right = 110 print.margin.top = 96 print.margin.bottom = 96 print.paper.source = 0 print.paper.size = 0 print.canusedefaultprinter=yes print.prompt=no print.buttons=no print.preview.buttons=no print.cliptext=no print.overrideprintjob=no print.collate=yes hidegrayline=no grid.lines=0 grid.columnmove=no selected.mouse=no )
header(height=84 color="536870912" )
summary(height=0 color="536870912" )
footer(height=0 color="536870912" )
detail(height=84 color="536870912" )
cs


1. 두번째 줄의 processing=0 부분을 수정해주면 된다. (0 : tabular, 1 : grid)


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
35
CREATE FUNCTION [dbo].[fx_FormatUsingMask] 
(
    -- Add the parameters for the function here
    @input nvarchar(1000),
    @mask nvarchar(1000)
)
RETURNS nvarchar(1000)
AS
BEGIN
    -- Declare the return variable here
    DECLARE @result nvarchar(1000= ''
    DECLARE @inputPos int = 1
    DECLARE @maskPos int = 1
    DECLARE @maskSign char(1= ''
 
    WHILE @maskPos <= Len(@mask)
    BEGIN
        set @maskSign = substring(@mask, @maskPos, 1)
 
        IF @maskSign = '#'
        BEGIN
            set @result = @result + substring(@input, @inputPos, 1)
            set @inputPos += 1
            set @maskPos += 1
        END
        ELSE
        BEGIN
            set @result = @result + @maskSign
            set @maskPos += 1
        END
    END
    -- Return the result of the function
    RETURN @result
 
END
cs

MSSQL 버전마다 어떤지는 모르겠지만, 적당한 함수를 못찾아서 인터넷을 검색해보니 이런 녀석이 나오드라.

사용 예)
1
select dbo.fx_FormatUsingMask('201503050900''####-##-## ##:##:00')
cs




Comment +0

보통 2개 의 테이블에서 조인을 하여 특정 테이블의 컬럼을 Update 하고 싶을 때, 대부분 SET 절에 SubQuery 형태로 문장을 작성하여, 특정값을 가져오게 하여 Update 하도록 많이 작성을 할 것입니다. 예를 들면 아래와 같은 문장이 되겠죠?

1
2
3
4
UPDATE table_a a
   SET column_1 = (SELECT column_1
                     FROM table_b b
                    WHERE b.KEY = a.KEY)
cs

 

그럼 위의 문장과 같은 형식으로 table_a 에 두개 이상의 컬럼을 Update 한다고 생각하면,

1
2
3
4
5
6
7
8
9
10
UPDATE table_a a
   SET column_1 = (SELECT column_1
                     FROM table_b b
                    WHERE b.key = a.key),
       column_2 = (SELECT column_2
                     FROM table_b b
                    WHERE b.key = a.key),
       column_3 = (SELECT column_3
                     FROM table_b b
                    WHERE b.key = a.key)
cs

  와 같은 식의 문장을 생각할 수 있습니다. 하지만, 아래와 같은 문장은 어떻게 될까요?

1
2
3
4
5
6
7
8
9
UPDATE
       (
        SELECT a.column_1 AS a_column_1,
               b.column_1 AS b_column_1
          FROM table_a a,
               table_b b
         WHERE a.key= b.key
       )
   SET a_column_1 = b_column_1
cs

  SQL문을 많이 접해보신 분이라면, 위 문장이 대략 어떤 의미인지 아실 수 있을 것 입니다. 즉, 위 문장과 같이 Updatable Join View 를 생각할 수 있습니다. 물론 이경우 조인되는 2개의 테이블은 반드시 1:1 또는 1:N의 관계여야 하며, Update되는 컬럼의 테이블은 N쪽 집합이어야 합니다. 이것은 1에 해당하는 집합인 부모 table의 조인 컬럼이 UK 또는 PK로 설정되어 있어야 된다는 것입니다. 위의 문장에서 보이는 table_a 와 table_b가 UK 또는 PK 로 설정이 되어 있지 않으면 ORA-01779 cannot modify a column which maps to a non key-preserved table 에러를 방생하며 실행되지 않습니다. 이쯤에서 한번 고민해봐야 할 문제가, 처음에 문제로 던졌던 두개의 Table을 조인하여, 특정 table의 컬럼 하나만 업데이트 할경우엔 Set 절에 Sub-Query 형태로 문장을 작성해도 큰 문제가 되지 않을 듯 합니다. 하지만, 컬럼이 여러개일 경우와 행이 무수히 많은 Table을 Update 할 경우 SET절에서 동일 문장으로 특정 테이블을 반복적으로 실행해야하는 로드가 발생하므로 Update 해야 하는 행이 많을 경우엔 Updatable Join View를 활용 해야만 하는 필요가 있다. 그러나, Updateable Join View 를 활용하기 위해 매번 테이블의 UK 혹은 PK를 생성해야만 해야 하나 라는 필요성에 대해 생각해 보게 되는데, 일반적으로는 UK나 PK Constraint를 설정하기 어려운 것이 현실입니다. 따라서, 이러한 Constraint를 피해서 Updatable Join View를 사용할 수 있도록 하기 위해 준비된 오라클 힌트가 있는데 그것이 바로, BYPASS_UJVC 입니다. 즉, 위에서 소개한 문장에서 UK 혹은 PK가 설정되지 않아 에러가 리턴 될경우 아래와 같이 힌트를 준다면 정상적으로 실행이 될 것입니다.

1
2
3
4
5
6
7
8
9
UPDATE 
       (
        SELECT a.column_1 AS a_column_1,
               b.column_1 AS b_column_1
          FROM table_a a,
               table_b b
         WHERE a.key= b.key
       )
   SET a_column_1 = b_column_1
cs

  컬럼이 여러개 일 경우에도,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
UPDATE 
       (
        SELECT a.column_1 AS a_column_1,
               b.column_1 AS b_column_1,
               a.column_2 AS a_column_2,
               b.column_2 AS b_column_2,
               a.column_3 AS a_column_3,
               b.column_3 AS b_column_3
          FROM table_a a,
               table_b b
         WHERE a.key= b.key
       )
   SET a_column_1 = b_column_1,
       a_column_2 = b_column_2,
       a_column_3 = b_column_3
cs

  위와 같이 표현될 수 있을 것 입니다. 이렇게 두개이상의 테이블을 조인하여 Update 할 경우 Updatable Join View 를 활용하여 Update 문을 실행하면, 실행시간도 단축(튜닝)되는 효과를 보실 수 있을 듯 합니다. 마지막으로 위에서 소개한 힌트의 의미를 풀어보자면 bypass_ujvc : Bypass Updateable Join view Constraints 이라는 의미 입니다. 풀어서 적어보니, UJVC 라는 의미가 쏙 들어오지 않나요?



Comment +0

여백 만들기

database/oracle2014. 11. 26. 19:30
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
/* Formatted on 2014/11/26 오후 7:31:59 (QP5 v5.256.13226.35510) */
WITH M
     AS (SELECT 1 AS seq, 'A' AS val FROM DUAL
         UNION ALL
         SELECT 2 AS seq, 'B' AS val FROM DUAL
         UNION ALL
         SELECT 3 AS seq, 'C' AS val FROM DUAL
         UNION ALL
         SELECT 4 AS seq, 'E' AS val FROM DUAL
         UNION ALL
         SELECT 5 AS seq, 'E' AS val FROM DUAL)
SELECT seq, val FROM M
UNION ALL
    SELECT ROWNUM + (SELECT COUNT (*FROM M) AS seq,
           DECODE (ROWNUM, 1'-이하여백-'NULL)
      FROM (SELECT '' val
              FROM DUAL
             WHERE 0 <
                      MOD (
                         (CASE
                             WHEN (SELECT COUNT (*FROM M) = 0 THEN 29
                             ELSE (SELECT COUNT (*FROM M)
                          END),
                         30)                           -- 30으로 딱 떨어질때를 위한 제동장치
                            ) S
CONNECT BY LEVEL <=
                30
              - MOD (
                   (CASE
                       WHEN (SELECT COUNT (*FROM M) = 0 THEN 29
                       ELSE (SELECT COUNT (*FROM M)
                    END),
                   30)
cs


Comment +0

1
2
3
4
5
6
7
8
SELECT WMSYS.WM_CONCAT (MESSAGE) MESSAGE
  FROM (SELECT LO.MESSAGE MESSAGE
          FROM SMEIS.S_LECTUREOPINION LO
         WHERE     LO.YEAR = '2014'
               AND LO.SEASONCODE = '11'
               AND LO.SUBJECTCODE = '380031'
               AND LO.DIVISION = '12'
               AND MESSAGE IS NOT NULL)
cs


Comment +0

1
2
3
4
5
6
7
INSERT INTO S_UPDATELOG
   SELECT *
     FROM (SELECT *
             FROM S_UPDATELOG AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' MINUTE) A
    WHERE     A.STNO = '2009432007'
          AND A.CHANGECODE = '21'
          AND A.CHANGEYEAR = '2012';
cs


Comment +0




[다운로드]


막힘. 파워빌더 15의 작명이 변경되어 파워빌더 2017 R2, 2017 R3 이런식으로 변경되었다.


Comment +0