다른 64비트 os 버전

도스창에서 aspnet_regiis -i 를 64bit OS에서 실행하면 아래와 같은 오류메시지가 나온다.

"이 오류는 IIS가 64비트 모드이지만 해당 응용 프로그램이 32비트 응용 프로그램이므로 호환되지 않음을 나타냅니다."

 

이런 경우에는 아래와 같이 IIS를 32비트 호환모드로 바꾸어 주어야 한다.

c:\Inetpub\AdminScripts> cscript adsutil.vbs set w3svc/appPools/enable32bitAppOnWin64 true 를 실행

그러면,
enable32bitapponwin64 : <BOOLEAN> True 라는 메시지가 뜬다.

이후에 IIS 재시작한다.
c:\Inetpub\AdminScripts> iisreset


* 개발용PC의 OS가 64bit일 때, 위와 같이 iis를 32비트 호환모드로 바꾸어주지 않으면
   PresentationCore 관련한 오류 등이 발생한다.

SP_MSFOREACHTABLE 'sp_changeobjectowner ''?'' , ''dbo'''
전체 테이블 소유자 변경
 
EXEC sp_changeobjectowner 'TableName', 'dbo'
테이블 하나 소유자 변경

 

출처 : http://www.devpia.com , http://www.excellove.com

작성자 : 박승민

☞ VB로 Excel(엑셀) 핸들링 - 시트 추가, 삭제, 이름 변경

 전 강좌의 리플에서 말씀드린 내용이지만 이 강좌는 VB 에서 엑셀 핸들링을 위주로 다룰 것이고 필요에 따라서는 VBA와 엑셀의 기본

기능을 설명하고 기초적이고 기본적인 내용만 다룰 내용 예정이니 질문이 필요할 때 이 강좌와 관련이 있거나 누구나가 공감할 수 있

는 질문이면 여기다가 댓글을 남겨주시면 되고 지금 강좌에 보다 더 깊이 다뤄야 할 부분이 있는 질문은 회원가입은 하셔야 겠지만

http://excellove.com 의 묻고 답하기 게시판을 이용해 주시면 감사하겠습니다. 죄송하지만 쪽지 질문과 메일 질문은 제가 잘 확인하

지 않는 관계로 사양합니다. 위의 게시판을 이용해 주셨으면 합니다. 물론 엑셀을 다루는 싸이트이기 때문에 질문은 반드시 엑셀이나

VBA에 관련된 질문이어야 합니다.

 

그럼 시작하겠습니다. 이번 시간에는 Worksheet 개체에 대해서 설명을 드릴 것입니다.

제가 Workbook 은 그냥 엑셀 파일 정도로 생각하시면 된다고 말씀드렸고 시트라는 말이 생소한 분들이 있을지 모르겠습니다만 간단히

설명드리면 하나의 어플리케이션 안에 여러개의 워크북이 존재하듯이 하나의 워크북 안에도 여러개의 시트가 존재합니다. 엑셀 메뉴의

옵션에서 특별히 건드리지 않았다면 디폴트는 3개이지만 더 추가하거나 삭제할 수 있습니다. 하지만 0 은 될 수 없고 무조건 시트는 1개 이상

이어야 합니다. 워드의 페이지 개념하고 비슷하지만 출력 단위의 페이지 개념은 아니고 하나의 시트는 가로 256 열과 세로 65536 행의

셀이 모인 집합으로 구성이 됩니다. 이 정도 개념은 아시는 분이 더 많을 것이라 생각하고 더 깊이 들어가면 강의 주제와 벗어나기 때문에

이 정도까지만 설명 드리겠습니다.

 

VB에서 Worksheet 개체를 다룬다고 하면 크게 주된 작업으로 떠오르는 것은 시트 삽입, 삭제, 시트명 변경 등이 있습니다. 먼저 시트 삽입을

다뤄보면 워크북과 마찬가지로 Add 메서드를 쓰면 됩니다.

 

xlApp.Worksheets.Add

 

 

그런데 보통 시트를 위의 코드를 써서 추가하면 그림과 같이 맨 앞에 해당시트(그림에서 Sheet4)가 추가 되는데 실제 작업은 맨 뒤에 추가할 경우가 오히려 더 많이 쓰입니다.

 

참고적으로 그림과 같이 기본 시트가 3개이고 1개가 추가돼서 4개로 보이지 않는 경우는 엑셀 메뉴의 도구-옵션의 일반탭에서 새 통합

문서의 시트 수가 3개인지 확인하시기 바랍니다.

 

 

어쨌든 Add 의 인수를 살펴보면 Before, After, Count, Type 라는 인수들을 갖게 됩니다. Type 은 시트 종류로서 워크시트 외에는 쓸

일이 없겠지만 워크시트, 매크로 시트, 차트 시트 등의 종류가 있다는 정도만 알고 계시고 Sheets 컬렉션과 Worksheets 컬렉션에 대해

서는 나중에 다뤄보고 전자는 그냥 특별한 시트(차트시트, 매크로 시트)를 포함한 시트, 후자는 일반 시트 정도로 알아 두시고 넘어가

겠습니다. 여기서는 After 와 Count 만 설명드리자면 After 는 지정할 시트 뒤에 추가한다는 말이고 Count 는 추가할 시트의 수입니다.

 

예를 들어서 "Sheet2" 라는 시트명을 가진 시트 뒤에 2개의 시트를 추가해라 라는 것을 작성한다면 다음과 같습니다.

xlApp.Worksheets.Add After:=xlApp.Worksheets("Sheet2"), Count:=2

 

<참고>

:= 라는 것이 무엇이냐라고 물어보시는 분이 계셨던 것 같아서 혹시 모르시는 분들에 대해서 설명을 드리자면 인수명에 값을 대입할

때 쓰는 것이고 누구나 아는 MsgBox로 예를 들면 아래 2개의 문장은 같은 내용입니다.

 

MsgBox "메세지", , "제목"

MsgBox Prompt:="메세지", Title:="제목"

 

실제 코딩하실 때 MsgBox 하고 한칸 띄우면 Prompt 라는 인수명이 보이실 것입니다.

전자는 컴마(,)가 두개가 있고 후자는 하나임에 주목하시기 바랍니다.

MsgBox "메세지" 와 같이 인수명을 생략하면 인수의 순서에 맞게 값이 대입이 되는 것이고 중간의 인수를 생략할 때는 컴마(,)를 하나

더 찍어서 그 위치를 건너 뛰어서 입력해야 하는데 비해 Title:="제목" 과 같이 인수명을 지정을 해주면 인수의 순서와 상관없이 인수를

대입할 수 있습니다. Excel VBA 는 VB 보다 인수가 많은 경우가 더러 있으므로 "인수명:=값" 형태로 많이 쓰이게 되니 꼭 숙지하시고

넘어가시기 바랍니다.

 

3번째 시트(시트탭 좌측에서 3번째 시트)에서 시트 하나를 추가 해라 라는 것은 다음과 같습니다.

xlApp.Worksheets.Add After:=xlApp.Worksheets(3)

 

현재 활성화 된 시트 뒤에 시트 하나를 더 추가 해라 라는 것은 다음과 같습니다.

xlApp.Worksheets.Add After:=xlApp.Activesheet

 

이것은 어떻게 되는 것인지 먼저 생각해 보시기 바랍니다.

xlApp.Worksheets.Add After:=xlApp.Sheets(xlApp.Sheets.Count)

 

xlApp.Sheets.Count 는 Count 를 보셨으면 이해가 되시겠지만 시트 전체의 개수를 의미합니다. Sheets(숫자)는 그 숫자 번째에

해당하는 시트를 의미합니다. 따라서 xlApp.Sheets(xlApp.Sheets.Count) 는 맨 마지막 시트(맨 우측에 있는 시트)를 의미하는 것이고

위의 예문은 맨 뒤에 시트를 추가하라는 것이죠.

Worsheets.Count 는 일반 시트의 개수이고 Sheets.Count 는 전체 시트(특별한 시트 포함)의 개수이지만 별로 구분해서 쓰실 일은 거의

없을 것입니다.

 

제가 가독성이 좋으라고 With ~ End With 구문은 쓰지 않았지만 With xlApp 로 코딩하시는 것이 좋겠죠. 그리고 After 대신에 Before

를 쓰면 시트 뒤가 아닌 앞을 의미합니다. 이 부분은 쉽게 응용하실 수 있다고 생각하고 넘어가겠습니다.

 

WorkBook 개체와 마찬가지로 Worksheet 도 사용방법이 비슷한데 위에서 예를 든

Worksheets("Sheet2"), Worksheets(3), ActiveSheet 실제 MSDN 에서 부르는 용어는 좀 다르긴 합니다만 모두 Worksheet 개체라고

생각하시면 됩니다.

 

Worksheets("Sheet2") 는 "Sheet2" 라는 이름을 가진 워크시트 개체, Worksheets(3)는 인덱스 3인(3번째) 워크시트 개체, ActiveSheet

현재 활성화 된 워크시트 개체를 의미합니다.

참고로 ActiveWorkbook 처럼 ActiveWorkSheet 가 아니고 ActiveSheet 라고 쓰셔야 활성화 된 시트를 의미합니다.

 

시트를 추가 하고 나서 실제 엑셀 데이터 핸들링하기 전에 보통 해야 하는 작업은 시트명을 바꿔줘야 합니다. 간단히 Name 속성을

이용하시면 됩니다.

 

xlApp.Worksheets("Sheet1").Name = "ABC"

 

시트명이 "Sheet1" 시트를 "ABC" 로 바꾼다는 내용입니다.

 

그럼 조합을 해보겠습니다. 맨 마지막에 위치에 시트명을 "ABC"로 추가한다면...

 

With xlApp

    .Worksheets.Add After:=.Sheets(.Sheets.Count)

    .ActiveSheet.Name = "ABC"

End With

 

이해가 되시는지요. 마지막에 시트를 추가하고 추가할 때 그 시트가 활성화가 되니 그 활성화 된 시트의 이름을 "ABC"로 바꿔주는 것

이죠. 결국 마지막에 "ABC" 라는 이름으로 시트를 추가 시켜라 라는 구문이죠.

 

소스를 줄여보겠습니다.

With xlApp

    .Worksheets.Add(After:=.Sheets(.Sheets.Count)).Name = "ABC"

End With

 

이상하지요? 이 구문을 처음 보시면 Add 메서드 다음에 Name 속성이 나오는 것이 무엇인가라고 생각하시겠죠. Name 은 Add 에 연결이

되는 것이 아니라 추가된 워크북 개체에 연결된다고 생각하시면 됩니다. Worksheets.Add 로 추가된 WorkBook 에 Name 이 연결된다고

생각하시면 이해하시는데 무리가 없을 것 같습니다. 위의 소스 하나를 설명 드리기 위해서 여태까지 설명드렸던 것이죠. 다른 것 다

잊어버려도 Add 뒤에 Name 이 있는 위의 소스만 기억하도록 하십시오.

 

오늘의 마지막 주제 시트 삭제에 대해서 말씀을 드리겠습니다. 결론 부터 말씀드리면  Delete 메서드를 쓰시면 됩니다. 현재 활성화된

시트를 삭제하는 경우라면 다음과 같이 하시면 됩니다. 첫번째 시트라면 ActiveSheet 대신에 Sheets(1) 을 쓰시면 되겠죠. 다 같은

Worksheet 개체이니 Worksheets("Sheet1") 형식으로 쓰셔도 상관없습니다. 참고적으로 각 개체에는 코드네임이라는 것이 있습니다.

저는 Worksheets("Sheet1") 형태보다는 Sheet1 이라는 코드네임으로 처리하는 방법을 더 좋아합니다. 이것에 대해서는 VBE 창에 대해서

설명할 때 같이 설명드리겠습니다.

 

xlApp.ActiveSheet.Delete

 

 

삭제할 때 간과해서는 안되는 경우 예를 들어 엑셀에 데이터가 있는 경우 A1 셀에 "ABC" 라는 데이터를 넣고 삭제하는 경우

 

xlApp.Range("A1").Value = "ABC" 'Range 개체에 대해서는 뒤에서 다룰 예정이니 데이터를 넣어둔다 정도만 기억하고 넘어가시기 바랍니다.

xlApp.ActiveSheet.Delete

 

위의 소스를 실행을 해보면 다음과 같이 경고창이 뜹니다.

 

 

일반 엑셀 유저들은 데이터가 실수로 지워지지 않는 것 때문에 당연히 필요한 기능이지만 개발자들한테는 자동화에 거슬리는 구문이죠.

 

이런 경우에는 제가 첫회 때 말씀 드린 Application 개체의 주요 속성 중에 하나인 DisplayAlerts 를 쓰시면 됩니다. 다음과 같이

코딩하시면 경고창이 뜨지 않게 되죠.

 

xlApp.DisplayAlerts = False

xlApp.Range("A1").Value = "ABC"

xlApp.ActiveSheet.Delete

xlApp.DisplayAlerts = True

 

Application 개체의 주요 속성은 이 외에도 몇 개 있는데 필요할 때마다 하나하나씩 예를 들어서 설명 드리겠습니다.

엑셀에서 경고창이 뜨는 경우, 모든 경고창은 xlApp.DisplayAlerts = False 로 날려버리시고 사용 후에는 xlApp.DisplayAlerts = True

로 복원하세요. 서두에도 말씀드렸지만 시트를 삭제할 때 모든 시트를 삭제할 수는 없고 한개 이상의 시트는 반드시 존재해야 합니다.

 

설명드릴 부분이 많아서 아마도 Range 개체까지 설명드리고 나면 초보자 분들도 어느정도 감을 잡으실 수 있을 것 같으니 '이게 뭐야,

지금까지 강좌를 봐도 아무것도 만들 수 없네'하는 분들은 그 때까지는 좀 참아 주시기 바랍니다.

그리고 VBA를 어느정도 하시는 분들 중에 혹시나 매크로 기록기를 쓰면 되는 것을 이렇게 어렵게 강좌를 할 필요가 있나 하시는 분들도

좀 참아주시기 바랍니다. 매크로 기록기를 Range 개체 설명할 때 정도에 다루겠습니다. 왜 뒤에서 다루는지는 그 때 설명드리고 매크로

기록기에서는 최대한 자세히 다뤄보도록 하겠습니다. 그 때까지 좀 힘들더라도 잘 따라오시길 바랍니다.

 

강좌가 쉬운지, 보통인지, 어려운 것인지 모르겠으니 그것에 대해 리플 달아주시면 고맙겠고 리플이 없으면 강좌 수준은 제 마음대로

잡겠습니다.

 

그럼 오늘도 활기찬 하루를 시작하시기 바랍니다.

비스타 환경에서 개발하시는 분이라면,

여러가지 설치에 능숙하겠지만

3rd 파트 설치시 오류를 만나면 상당히 골치아프다.

.NET환경에서 개발하다보면 꼭 한번 만나는 3rd 파트 Infragistics(이하 Infra).

각 버젼별로 할 얘기는 너무나 많지만 오늘은 간단하게

Vista에서 설치오류에 대해서 써보고자 한다.

설치오류의 핵심은 Infra를 깔면서 예제 웹사이트를 가상디렉토리에 쓰는데 생기는 오류이다.

설치전에 설치경로를 찾을 수 없다는 에러인데

레지스트리의 간단한 수정으로 해결 할 수 있다.

HKEY_LOAL_MACHINE - SOFRWARE - MICROSOFT - INETSTP

위 경로에서 PathWWWRoot라는 파일이 있다. (IIS 디폴트 폴더 경로이다)

거기 경로를 %SystemDrive%가 아닌 명시적인 경로(일반적으로 C:)로 바꾸어 준다.

Visual Basic 6.0 에서는 기본적으로 마우스 스크롤이 안된다.

이 기능은 추가기능으로 설치하여 사용해야 한다.

압축을 풀고, VBA Mouse Wheel Fix.reg 파일을 더블클릭하여 레지스트리에 등록한다.

VB6IDEMouseWheelAddin.dll 파일은 적당한 위치(이러한 파일은 c:\windows\system32 에 넣어두는 것이 좋다)에 복사하여 둔다.

'시작' -> '실행' 창에서 아래와 같이 입력한다.

 regsvr32 (복사해둔경로)\VB6IDEMouseWheelAddin.dll

 예) regsvr32 c:\windows\system32\VB6IDEMouseWheelAddin.dll

 (또는 regsvr32 까지만 입력한 후, 파일을 마우스로 drag하여 실행창에 drop하면 자동으로 파일경로와 파일명이 입력된다.)

 '확인' 버튼을 누르면 등록된다.

 Visual Basic 6.0 실행 후, 메뉴에서 '추가 기능' -> '추가 기능 관리자' -> 'MouseWheel Fix' 선택한 후,

 '로드/언로드' 항목과 '시작할 때 로드'를 체크해주면 실행시 자동으로 로드된다.


아래는 소스보기 에디터 변경하는 부분의 내용을 퍼왔다.
ie8 전용에디터가 color 를 표현해줘서 좋기도 하지만, 소스보기후 화면제어가 가능하기까지 너무많은 시간을
잡아먹어서 editplus 로 변경을 했다. 헐씬 좋은 에디터니...

================================================================================================
레지스트리 편집기를 열어 (시작 메뉴의 "실행"에서 regedit을 입력한 후 엔터키를 누르면 열린다)

 HKEY_LOCAL_MACHINE을 연다. 이 폴더에서 차례대로 SOFTWARE > Microsoft > Internet Explorer까지 찾아간다.

흔히 이 Internet Explorer 항목에 View Source Editor란 서브키는 보이지 않을 것이다.

이제 Internet Explorer폴더를 선택한 상태에서 마우스 오른쪽 버튼을 클릭한 후
 
"새로 만들기 > 키"를 선택하여 "View Source Editor"란 키를 생성한다.

새로 생성된 View Source Editor 키를 선택한 후 마찬가지로 오른쪽 마우스 버튼을 클릭한 후
 
"새로 만들기 > 키"를 선택하여 "Editor Name"이란 키를 또 생성한다.

이제 새로 생성된 Editor Name을 선택하고 오른쪽 창에 있는 "기본값"을 더블클릭한 후

데이터에 자신이 원하는 에디터 프로그램의 전체 경로를 적어주거나, 기본 메모장인 notepad.exe 라고 적어 넣는다.

이젠 브라우저의 "소스 보기"를 클릭하면 원하는 에디터가 열릴 것이다.


Linked Server를 구성하여
Table Select는 되지만 프로시저 호출을 하면 RPC 오류가 떨어질때
아래와 같이 조치한다.



Linked Server의 속성 > 서버옵션 > RPC내보내기 --> True



// 오늘 날짜를 가져오는 방법: (3월 8일 목요일)

DateTime today = DateTime.Today;

 

// 1일 날짜를 가져오는 방법: (3월 1일 목요일)

DateTime first_day = today.AddDays(1 - today.Day);

 

// 이번달의 1일날. ( 1월 1일)

DateTime first_day = today.AddDays(1 - today.DayOfYear);

 

// 첫번째 주의 일요일을 가져오는 방법: (2월 25일 일요일)

DateTime first_sunday = first_day.AddDays(0 - (int)(first_day.DayOfWeek));

 

// 첫번째 주의 일수를 가져오는 방법: (3일)

int first_week_day_count = 7 - (int)(first_day.DayOfWeek);

 

// 말일 날짜를 가져오는 방법: (3월 31일 토요일)

DateTime last_day = today.AddMonths(1).AddDays(0 - today.Day);

 

// 마지막 주의 일요일을 가져오는 방법: (3월 25일 일요일)

DateTime last_sunday = last_day.AddDays(0 - (int)(last_day.DayOfWeek));

 

// 마지막 주의 일수를 가져오는 방법: (7일)

int last_week_day_count = last_day.DayOfYear - last_sunday.DayOfYear + 1;

 

// 이번 달의 주수를 가져오는 방법: (5주)

int this_month_week_count = ((last_sunday.DayOfYear - first_sunday.DayOfYear) / 7) + 1;

 

from : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=17&MAEULNo=8&no=72997&ref=72997

String to DateTime

Collapse Copy Code
 // String to DateTime
 String MyString;
 MyString = "1999-09-01 21:34 PM";

 DateTime MyDateTime;
 MyDateTime = new DateTime();
 MyDateTime = DateTime.ParseExact(MyString, "yyyy-MM-dd HH:mm tt",
                                  null);


DateTime to String

Collapse Copy Code
 //DateTime to String
 MyDateTime = new DateTime(1999, 09, 01, 21, 34, 00);
 String MyString;
 MyString = MyDateTime.ToString("yyyy-MM-dd HH:mm tt");


use master
go
Backup log [db명] with truncate_only
go

use [db명]
go
dbcc shrinkfile ([db로그명], 1)
go

   1) DOT Print가 설치되어 있는 컴퓨터의 프린터를 공유한다. (프린터 공유이름 설정)

   2) 다른 컴퓨터에서 도스창을 띄운뒤...

   3) NET USE LPT2: \\컴이름\공유된프린터이름 /PERSISTENT:YES 을 실행한다.

      ----> 이는 프린터가 설치되어 있지 않은 LPT2에 직접 인쇄를 실행하면, 실제 프린터가 있는 컴퓨터의 포트로

               Redirect된다.

   4) 위의 설정을 지우려면 NET USE LPT2: /DELETE


'Programming > Windows' 카테고리의 다른 글

[IIS] 64bit OS에서 32bit 운영 설정  (0) 2010.09.17
IE8 전용에디터 변경하기  (0) 2009.06.02

+ Recent posts