말풍선

Windows/JAVASCRIPT 2008. 5. 24. 14:52
<html>
<head>
<script language="JavaScript">
<!--
function alt( msg, _width, _height ){
    var _style = alt_div.style;
    if( msg != null ){
        alt_div.innerHTML = msg;
        _style.visibility = "visible";
        if( _width != null ){
            if( alt_div.offsetWidth > _width ){
                _style.width = _width;
            }
        }
        if( _height != null ){
            if( alt_div.offsetHeight > _height ){
                _style.height = _height;
            }
        }
    }else{
        _style.visibility = "hidden";
    }
}

document.write(
    "<div id=alt_div style=\"" +
    "padding:2;" +
    "border:1 solid #FF7200;" + // 말풍선 테두리 컬러
    "background-color:#F7F7F7;color:#000;" + // 말풍선 테이블 백그라운드컬러 / 폰트컬러
    "position:absolute;" +
    "visibility:hidden;" +
    "overflow:hidden;" +
    "z-index:auto;" +
    "width:auto;" +
    "height:auto;" +
    "filter:alpha(opacity=60);" + // 투명도
    "\"></div>"
);

document.onmousemove = get_xy;
function get_xy(){
    var _style = alt_div.style;
    var x = event.x + document.body.scrollLeft;
    var y = event.y + document.body.scrollTop;
    _style.left = x + 10;
    _style.top = y + 10;
}
//-->
</script>
</head>

<body>
<a href=# onmouseover="alt( '테스트용 말풍선 입니다.<br>말풍선이 생겼나요?<p>생겼으면 말해주세요.' )" onmouseout="alt()">마우스 올려봐요.</a><p>
레이어에 투명도를 주었군요.ㅎㅎ
</body>

</html>
Posted by 아로스

<input type="text" name="" value="" style="ime-mode:disabled;">


-----------------------------------------------------------------


ime-mode의 옵션을 보면..


auto : 한/영 변환이 자유롭게 된다. 지정안한것과 똑같다..

active : ime를 거치기 때문에 기본에서  한/영키를 한번 누른것 같은.. 즉 한글기본이된다. 그리고 이또한 한/영변환이 자유롭다.

inactive : ime를 거치지 않고 입력이 된다. 즉 영문기본이고 한/영변환이 자유롭다.

disabled : 영문기본으로 한/영변환이 안된다. 즉 영문, 숫자만 입력되고 한글입력은 불가능.


------------------------------------------------------------------


Syntax

HTML { ime-mode : sMode }
Scripting [ sMode = ] object.style.imeMode

Possible Values

sMode String that specifies or receives one of the following values.
auto Default. IME is not affected. This is the same as not specifying the ime-mode attribute.
active All characters are entered through the IME. Users can still deactivate the IME.
inactive All characters are entered without IME. Users can still activate the IME.
disabled IME is completely disabled. Users cannot activate the IME if the control has focus.
Posted by 아로스

view 권한 부여

Windows/MSSQL 2008. 4. 29. 15:13
CREATE VIEW VORDERS
AS
SELECT ORDERID, CUSTID
FROM DBO.ORDERS
-- 테스트로 함 불러보고

EXEC SP_ADDLOGIN 'TEST_USER', '1234', PERFORMANCE
-- 로그인 생성(아이디,패스워드,데이터베이스)

EXEC PERFORMANCE.DBO.sp_grantdbaccess TEST_USER
-- 엑세스 가능하게 만들고

GRANT SELECT ON VORDERS TO TEST_USER
-- 딱 뷰 하나만 SELECT 하는 권한 주고
GO

SETUSER 'TEST_USER'
-- TEST_USER 로 가장해서 들어간 뒤 테스트
GO

SELECT * FROM VORDERS
-- 성공

SELECT * FROM ORDERS
-- 실패

SETUSER
-- 원래 권한 유저로 돌아오기
Posted by 아로스

MSSQL] 백업 , 복구, 로그자르기 MS_SQL

2006/12/10 19:55

http://blog.naver.com/ronghuan/110011923855


-- 경로를 지정하여 백업하기
BACKUP DATABASE DB이름 TO disk = '파일경로및이름'

-- 백업정보보기
restore headeronly from disk = '파일경로및이름'

-- 백업한 DB 복구하기
RESTORE DATABASE DB이름
FROM disk = '파일경로및이름' WITH REPLACE,
MOVE '논리적장치이름(Data)' TO 'Data파일경로및이름',
MOVE '논리적장치이름(Log)' TO 'Log파일경로및이름'

-- 논리적 장치이름
RESTORE FILELISTONLY from disk = '파일경로및이름'

--attach
EXEC sp_attach_db @dbname = N'디비 이름',
@filename1 = 'Data파일경로및이름',
@filename2 = 'Log파일경로및이름'

--------------------------------------------------------------------------------------
--디바이스(장치)

 --1.디바이스 설치
 sp_addumpdevice 'disk', '장치명', '경로 및 파일'
 
  ----sp_addumpdevice 'disk', 'XERP', 'd:databackup\dbbackup\xerp'
 
 --2.디바이스 삭제
 sp_dropdevice '장치명'
 
  --sp_dropdevice 'XERP'
 
 --3.디바이스 정보
 sp_helpdevice '장치명'
 
  --sp_helpdevice XERP


--BACKUP


1. 전체 BACKUP
    BACKUP DATABASE 'DB명' TO '디바이스명'
    BACKUP DATABASE 'DB명' TO '디바이스명' WITH INIT--(장치내역 HISTORY 삭제)
2. 차등 BACKUP
 BACKUP DATABASE 'DB명' TO '디바이스명' WITH DIFFERENTIAL
3. 로그 BACKUP
 BACKUP LOG 'DB명' TO '디바이스명'



RESTORE HEADERONLY FROM XERP

  BACKUP DATABASE XERP TO XERP -- WITH INIT
  BACKUP DATABASE XERP TO XERP WITH DIFFERENTIAL
  BACKUP LOG XERP TO XERP




--RESTORE

1. RESTORE HEADERONLY FROM '디바이스명(장치명)' 을 하여 복원할 파일의 번호(POSITION)를 알아낸다.

2. RESTORE DATABASE 'DB명' FROM '디바이스(장치)명' WITH FILE = 복원할 파일의 번호(POSITION) , RECOVERY --NORECOVERY(복원해야 할 것이 더 있을때)
   RESTORE LOG 'DB명' FROM '디바이스(장치)명' WITH FILE = 복원할 파일의 번호(POSITION) , RECOVERY --NORECOVERY(복원해야 할 것이 더 있을때)

   WITH INIT 을 한 파일을 복원 할때 = RESTORE DATABASE 'DB명' FROM '디바이스(장치)명'

 --EM을 사용하여 복원하는걸 권장 (IDC에서도 정기적으로 백업을 함)


--로그잘라내기

1. BACKUP LOG 'DB명' TO '디바이스명(장치명)'   --로그백업  
   BACKUP LOG 'DB명' WITH TRUNCATE_ONLY        --로그 잘라내기

/*
 ex)BACKUP LOG XERP TO XERP    
    BACKUP LOG XERP WITH TRUNCATE_ONLY

 위의 두가지 방법 모두 사용할 수 있으나 로그백업을 권장함(단순복구모델일때는 로그 잘라내기를 함)

*/


2. DBCC SHRINKFILE('로그파일명', 파일크기)      --파일크기를 정해주어 파일을 축소하는 방법
   DBCC SHRINKFILE('로그파일명', TRUNCATEONLY)  --불필요한 로그 파일을 잘라 파일을 축소하는 방법  
/*
 ex)DBCC SHRINKFILE ('XERP_LOG',500)
    DBCC SHRINKFILE ('XERP_LOG',TRUNCATEONLY)

       DBCC LOGINFO


 위의 두가지 방법 모두 사용할 수 있으니 TRUNCATEONLY를 더 권장 함

*/

--파일명 알아내기

 EXEC SP_HELPFILE
    SELECT * FROM SYSFILES

Posted by 아로스
출처 블로그 > Developer's Note
원본 http://blog.naver.com/taekani/130015877476

자 이번에 소개해 드릴 녀석들이 바로 T-SQL 프로그래밍의 꽃이라고 할 수 있는

그런 녀석들 입니다. 마치 소면과 채소 사이에 숨어있는 진짜 쫄깃한 골뱅이라고도

표현이 가능하겠지요. 갑자기 맥주 한잔이 땡기는군요.

 

첫번째인 변수 선언 입니다.

변수의 선언법은 아시겠죠?

DECLARE @변수명 자료형

하시면 변수가 생성되는 것입니다.

여기에 값을 대입 하려면?

SET @변수명 = 값

이런 식이 되지요.

 

DECLARE @변수1 int
SET @변수1 = 10
SELECT @변수1

 

간단히 보시면 저런 식이 됩니다. 어렵지 않으시져?

이미 커서와 저장 프로시져 등에서 많이 봐 오셔서 어렵지는 않으실 거에요.

 

다음 IF - ELSE 입니다. 분기라는 것만 생각하세요.

 

IF (SELECT AVG(price) FROM titles WHERE type = 'mod_cook') < $15
   BEGIN
      PRINT 'The following titles are excellent mod_cook books:'
      PRINT ' '
      SELECT SUBSTRING(title, 1, 35) AS Title
      FROM titles
      WHERE type = 'mod_cook'
   END
ELSE
   PRINT 'Average title price is more than $15.'

 

또는 이를 중첩 하신후. ^_^

 

IF (SELECT AVG(price) FROM titles WHERE type = 'mod_cook') < $15
   BEGIN
      PRINT 'The following titles are excellent mod_cook books:'
      PRINT ' '
      SELECT SUBSTRING(title, 1, 35) AS Title
      FROM titles
      WHERE type = 'mod_cook'
   END
ELSE
   IF (SELECT AVG(price) FROM titles WHERE type = 'mod_cook') > $15
      BEGIN
         PRINT 'The following titles are expensive mod_cook books:'
         PRINT ' '
         SELECT SUBSTRING(title, 1, 35) AS Title
         FROM titles
         WHERE type = 'mod_cook'
      END

이렇게 구성이 됩니다. if의 끝에 End if가 없지요? ^_^

약간의 차이만 느끼시면 문제 없지요.

느끼시듯이 IF의 구문은

IF Boolean_expression
     { sql_statement | statement_block }
[ ELSE
     { sql_statement | statement_block } ]

이런 식입니다.

주의하실점으로 IF 후 처리한 루틴에서 여러 처리가 들어갈시 반드시

BEGIN - END로 블럭을 지정해 단위별로 수행을 하셔야만 합니다.

BEGIN - END로 묶지 않을시는? 에러가 나거나 첫 단위만 수행합니다.

 

다음은 WHILE구문 입니다.

 

USE pubs
GO
WHILE (SELECT AVG(price) FROM titles) < $30
   BEGIN
      UPDATE titles
         SET price = price * 2
      SELECT MAX(price) FROM titles
      IF (SELECT MAX(price) FROM titles) > $50
         BREAK
      ELSE
         CONTINUE
   END
   PRINT 'Too much for the market to bear'

 

일반적으로 이러한 식의 처리로 조건이 맞을때 까지 루프를 돌면서

처리하게 됩니다. 적절한 방식으로 비교 루틴을 두신후 돌리시면 되지요.

WHILE의 구문은

WHILE Boolean_expression
     { sql_statement | statement_block }
     [ BREAK ]
     { sql_statement | statement_block }
     [ CONTINUE ]

의 식입니다.

BREAK는 WHILE구문을 끝내며

CONTINUE는 WHILE 루프를 다시 시작하게 합니다.

 

다음 CASE입니다.

CASE구문 정보를 먼저 봐 보지요.

 

단순 CASE 함수

CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
]
END

검색된 CASE 함수
CASE
WHEN Boolean_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
]
END

단순 처리시 입니다.

 

USE pubs
GO
SELECT Category =
   CASE type
      WHEN 'popular_comp' THEN 'Popular Computing'
      WHEN 'mod_cook' THEN 'Modern Cooking'
      WHEN 'business' THEN 'Business'
      WHEN 'psychology' THEN 'Psychology'
      WHEN 'trad_cook' THEN 'Traditional Cooking'
   ELSE 'Not yet categorized'
   END,
CAST(title AS varchar(25)) AS 'Shortened Title',
price AS Price
FROM titles
WHERE price IS NOT NULL
ORDER BY type, price
COMPUTE AVG(price) BY type
GO

역시나 CASE샘플로 비교값을 가지는 케이스 입니다.

 

USE pubs
GO
SELECT 'Price Category' =
   CASE
      WHEN price IS NULL THEN 'Not yet priced'
      WHEN price < 10 THEN 'Very Reasonable Title'
      WHEN price >= 10 and price < 20 THEN 'Coffee Table Title'
   ELSE 'Expensive book!'
   END,
CAST(title AS varchar(20)) AS 'Shortened Title'
FROM titles
ORDER BY price
GO

이러한 부분 입니다.

 

좀더 유연한 CASE 처리를 위해 문자열 처리 함수와 혼용하는 샘플 입니다.

 

USE pubs
SELECT SUBSTRING((RTRIM(a.au_fname) + ' '+
RTRIM(a.au_lname) + ' '), 1, 25) AS Name, a.au_id, ta.title_id,
Type =
   CASE
      WHEN SUBSTRING(ta.title_id, 1, 2) = 'BU' THEN 'Business'
      WHEN SUBSTRING(ta.title_id, 1, 2) = 'MC' THEN 'Modern Cooking'
      WHEN SUBSTRING(ta.title_id, 1, 2) = 'PC' THEN 'Popular Computing'
      WHEN SUBSTRING(ta.title_id, 1, 2) = 'PS' THEN 'Psychology'
      WHEN SUBSTRING(ta.title_id, 1, 2) = 'TC' THEN 'Traditional Cooking'
   END
FROM titleauthor ta JOIN authors a ON ta.au_id = a.au_id

천천히 샘플을 수행해 보세요. 이게 어떤 종류구나가 중요한게 아니라..

CASE구문으로 IF ELSE의 중첩을 많이 막을 수 있으며 매우 유용합니다. ^_^

 

다음은 CASE함수와 비슷한 처리가 가능하지만 한큐로 수행이 가능한 유용한 함수 입니다.

NULLIF 입니다.

이는 NULLIF(expression1, expression2)

식이며 두 값이나 표현식이 같은 경우에 NULL을 반환합니다.

즉.. 조금더 생각해 보시면

계산된 평균값에 어떤 특정 값이 포함되지 않기를 원하는 경우에

사용될 수 있지요.

이하 두개의 질의를 비교해 보세요.

 

SELECT royaltyper
FROM titleauthor

SELECT NULLIF(royaltyper, 100)
FROM titleauthor

 

 

다음은 COALESCE 입니다.

역시나 간단합니다.

COALESCE(expression1, expression2, ….. , expressionN)

한 구문이 있을 경우...

NULL이 아닌 처음 값을 표현식부터 찾습니다. ^_^

아래의 INSERT 되는 데이터를 봐 보세요.

테이블을 아래와 같이 설계 하신후..  앞의 컬럼의 값부터 NULL이 아닌

값을 찾으려 한다면?

 

SET NOCOUNT ON
GO

CREATE TABLE wages
(
emp_id tinyint identity,
hourly_wage decimal NULL,
salary decimal NULL,
commission decimal NULL,
num_sales tinyint NULL
)
GO

INSERT wages VALUES(10.00, NULL, NULL, NULL)
INSERT wages VALUES(20.00, NULL, NULL, NULL)
INSERT wages VALUES(30.00, NULL, NULL, NULL)
INSERT wages VALUES(40.00, NULL, NULL, NULL)
INSERT wages VALUES(NULL, 10000.00, NULL, NULL)
INSERT wages VALUES(NULL, 20000.00, NULL, NULL)
INSERT wages VALUES(NULL, 30000.00, NULL, NULL)
INSERT wages VALUES(NULL, 40000.00, NULL, NULL)
INSERT wages VALUES(NULL, NULL, 15000, 3)
INSERT wages VALUES(NULL, NULL, 25000, 2)
INSERT wages VALUES(NULL, NULL, 20000, 6)
INSERT wages VALUES(NULL, NULL, 14000, 4)
GO

SET NOCOUNT OFF
GO

SELECT COALESCE(hourly_wage, salary, commission * num_sales)
FROM wages
GO

자 여기까지 입니다. ~~~  수고하셨습니다.

이곳까지가 개발자 분이라면 꼬옥 봐 두어야할 SQL서버 개발에 필요한 부분의 정리라고

보시면 됩니다. - 이하 부분은 문제상황이 발생하거나 다른 처리를 원하실때 찬찬히

보시면 되구요. ^_^

이제 프로그래밍 부분도 마무리가 다행히 되었군요. ^_^

다음장부터는 조금 난해해 질 수 있습니다. - 여기까지 보셨으니 이제 초보자 분은

아니신 겁니다. ^_^

자 수고하셨구요.   -  이제는 실제 자신의 업무에 적용하면서..

덕지덕지한 어플리케이션.. ASP나 VB의 코드를..  앞의 많은 내용을 통해

한줄로 줄여 보시길 바랍니다. ^_^

[출처] View 테이블 Mssql |작성자 여유

Posted by 아로스

아로스

달력