Work Book2004 UserPreferences
 
Help Info Print View Search Diffs Edit
 인덱스   찾기   Freeboard   Subjectless   Images   최근글 

오전 12:18 2004-12-18
        int test[100]; 
        int *p = test; 
        for(int i=0;i<100;i++) 
                test[i] = i; 
        printf("test[] is filled with integer 0 between 99\n"); 
        printf("and pointer p is pointed to test[0]\n\n"); 
 
 
        printf("*p = %d\n", *p); 
        printf("p[0] = %d\n", p[0]); 
        printf("test[0] = %d\n\n", test[0]); 
         
        printf("p is jumped to test[2]\n\n"); 
        p = &test[2]; 
         
        printf("*p = %d\n", *p); 
        printf("p[-1] = %d\n", p[-1]); 
        printf("test[2] = %d\n", test[2]); 
이런게 다 되네.. 배열 지시자로 -1을 원래 사용할 수 있었던건가?

오후 7:55 2004-12-07
분명히 원형은 이놈시낑이인데 :
BOOL 
WINAPI 
EnumPrintersA( 
    DWORD   Flags, 
    LPSTR Name, 
    DWORD   Level, 
    LPBYTE  pPrinterEnum, 
    DWORD   cbBuf, 
    LPDWORD pcbNeeded, 
    LPDWORD pcReturned 
); 

닷넷에서는 이렇게 임포트해서 쓰고 있다 :

[DllImport("winspool.drv")] 
[return : MarshalAs(UnmanagedType.Bool)] 
public static extern bool EnumPrinters( 
        [MarshalAs(UnmanagedType.I4)]int Flags, 
        [MarshalAs(UnmanagedType.LPTStr)]string pName, 
        [MarshalAs(UnmanagedType.I4)]int Level, 
        [MarshalAs(UnmanagedType.I4)]int pPrinterInfo, 
        [MarshalAs(UnmanagedType.I4)]int cdBuf, 
        [MarshalAs(UnmanagedType.I4)]ref int pcbNeeded, 
        [MarshalAs(UnmanagedType.I4)]ref int pcbReturned 
        ); 
... 
nResultCode = EnumPrinters( 
  PRINTER_ENUM_LOCAL, null, 2, 0, 0, ref nNeeded, ref nPrinterInfoReturned); 

LPBYTE 같은 경우.. System.IntPtr?형으로 변환이 안된다고 하는데
그럼 System.IntPtr?은 대체 왜 있는건지도 모르겠고,
만약 저 포인터로 값을 얻어 올 수 있다면, 해당 포인터는 어떻게 접근하지? ;;

memset같은걸 써야 하는건가 ;ㅁ; 이거 참
닷넷 저수준 프로그래밍은 골때리는구만...;

오전 1:21 2004-12-02
euc-kr로 인코딩된 파일 읽어오기, C#
true 값은 자동으로 인코딩을 파악한다. (false일 경우 지정한 인코딩이 맞지 않으면 글자가 깨진다)
string strEUCText; 
System.IO.StreamReader streamreader = new System.IO.StreamReader( 
        fd.FileName, System.Text.Encoding.GetEncoding("EUC-KR"), true); 
strEUCText = streamreader.ReadToEnd(); 
System.Diagnostics.Trace.WriteLine(strEUCText); 
streamreader.Close(); 

오전 11:33 2004-11-30
C#에서 폼으로 들어오는 키보드 입력 가로채기

두가지 작업이 필요하다 :

  1. ProcessCmdKey?를 오버라이딩한다.
protected override bool ProcessCmdKey( 
 ref System.Windows.Forms.Message msg , System.Windows.Forms.Keys keyData) 
{ 
        // 폼에서 종료 가능한 키 조합을 막아버리자 
        bool bHandle = false;   // true 일 경우 이 폼에서 처리해버림 
        if(keyData == (Keys.Alt | Keys.F4)) 
                bHandle = true; 
        if(keyData == (Keys.Alt | Keys.Space)) 
                bHandle = true; 
        return bHandle; 
} 
  1. 폼의 KeyPreview? 속성을 true로 설정한다.

위 두 가지 작업을 하고 나면, 해당 폼으로 전달되는 키보드 메시지는 폼 위에 얹혀진 컨트롤에서 처리되기 전에 ProcessCmdKey?로 전달되고, 위 오버라이딩한 함수의 예와 같이 적절하게 제어해주면 특정 단축키 등의 조합을 막을 수 있다. (ctrl+alt+del 같은 경우는 보다 상위의 키보드 핸들러에서 처리되므로 막을 수 없음)

오후 12:58 2004-11-17
마우스 포인터 위치 파악하기 (div에 포인터 올라와 있는지 여부 확인)

<script> 
var isDiv = false; 
function bodytrace() 
{ 
        if(!isDiv) 
                window.status="body_x:"+event.x+"y:"+event.y; 
} 
 
function divtrace(div) 
{ 
        window.status=div.name+"_x:"+event.x+"y:"+event.y; 
        isDiv=true; 
} 
</script> 
<body onmousemove="bodytrace()"> 
<div name="div1" onmousemove="divtrace(this)" onmouseout="isDiv=false;">asdasd</div> 
<div name="div2" onmousemove="divtrace(this)" onmouseout="isDiv=false;">asdasd</div> 
<div name="div3" onmousemove="divtrace(this)" onmouseout="isDiv=false;">asdasd</div> 
<div name="div4" onmousemove="divtrace(this)" onmouseout="isDiv=false;">asdasd</div> 
<div name="div5" onmousemove="divtrace(this)" onmouseout="isDiv=false;">asdasd</div> 
<div name="div6" onmousemove="divtrace(this)" onmouseout="isDiv=false;">asdasd</div> 
</body> 

오전 10:00 2004-11-17
미디어 플레이어 화면에 안 보이면서 사운드 쌈싸먹기

<SCRIPT LANGUAGE="VBScript"> 
<!--    
function sound_stop() 
        window.RSM.stop() 
end function 
 
function sound_play(filename) 
        window.RSM.FileName = filename 
        window.RSM.Play() 
end function 
 
On error resume next    
        window.RSM.Stop()                                
//--> 
 
</SCRIPT> 
 
... 
 
<OBJECT ID="RSM" width=0 height=0 
classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95" 
codebase="http://activex.microsoft.com/activex/controls/mplayer/en/ 
nsmp2inf.cab#Version=6,4,5,715" 
type="application/x-oleobject" VIEWASTEXT> 
        <PARAM NAME="FileName" VALUE=""> 
        <PARAM NAME="ShowControls" VALUE="false"> 
        <PARAM NAME="ShowStatusBar" VALUE="false"> 
</OBJECT> 
 
<a href="javascript:sound_play('01.mp3');">플레이 테스트 01</a> 
<a href="javascript:sound_play('02.mp3');">플레이 테스트 02</a> 
<a href="javascript:sound_stop();">Stop</a> 

오전 11:03 2004-11-11
Building Keyboard Accelerators into .NET Windows Forms Applications
http://www.codeguru.com/Csharp/.NET/net_general/keyboard/article.php/c4639/

오후 2:12 2004-11-08
http://www.flashplayercontrol.com/dll/help/index.html 플래시 컨트롤 제어 쌈싸먹기

On(release)  
{  
trace("button pressed");  
} 
 
or 
 
Button.onRelease = function()  
{  
trace("button pressed");  
} 

오후 6:59 2004-11-03
[WWW]자바 오픈소스로 시스템 통합하기

오전 11:53 2004-10-25
Visual Studio .NET Bootstrapper
http://msdn.microsoft.com/vstudio/downloads/tools/bootstrapper/

Visual Studio .NET 2003 Hosted Experience
http://msdn.microsoft.com/vstudio/tryit/

Visual Basic 2005 Express Edition Beta
http://lab.msdn.microsoft.com/express/vbasic/default.aspx

Introducing the Visual Basic .NET Power Pack
http://msdn.microsoft.com/vbasic/default.aspx?pull=/library/en-us/dv_vstechart/html/vbpowerpack.asp

Visual Basic At The Movies
http://msdn.microsoft.com/vbasic/atthemovies/

Windows Mobile > Tools and Downloads
http://msdn.microsoft.com/mobility/windowsmobile/downloads/

Smart Client Development
http://msdn.microsoft.com/smartclient/

Visual Basic Dev
http://msdn.microsoft.com/vbasic/default.aspx

GotDotNet? User Sample: Cave Man Hank (.net compact framework)
http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=aef48b4c-9345-4138-ac75-0248bc5b7691

ASP.NET Web: The Official Microsoft ASP.NET Site
http://www.asp.net/

오후 2:43 2004-10-22
M$계열 서버 부하 통계 알아보기
성능모니터링을 활용하는 방법
http://mudmania.org/reiot/PerformanceMonitoring

Web Application Stress Tool의 이용
http://support.microsoft.com/default.aspx?scid=kb;KO;231282
http://www.microsoft.com/downloads/details.aspx?FamilyID=e2c0585a-062a-439e-a67d-75a89aa36495&DisplayLang=en

mrtg
http://mrtg.co.kr/
http://snmpboy.msft.net/default.aspx

log 분석
http://awstats.sourceforge.net

http://gotdotnet.com 닷넷 관련
http://www.debuglab.com/ 디버그랩

.NET: Visual Basic .NET
Getting Started with Visual Basic .NET
http://msdn.microsoft.com/library/en-us/dnaa/html/getstart_vbasic.asp
Printed pages 19

Getting Started with Visual C# .NET
http://msdn.microsoft.com/library/en-us/dnaa/html/getstart_vcsharp.asp
Printed pages 20
.NET: Visual C++.NET

Getting Started with Visual C++ .NET
http://msdn.microsoft.com/library/en-us/dnaa/html/getstart_vcppn.asp
Printed pages 20
Other

Getting Started with Visual C++
http://msdn.microsoft.com/library/en-us/dnaa/html/getstart_vcpp.asp
Printed pages 20

오후 12:54 2004-10-13
[WWW]닷넷 프로젝트를 정복하라 - ① 이래서 안되는거군!

[WWW]Serial Communication with VB.Net
[WWW]GotDotNet User Samples - serial
[WWW]GotDotNet User Sample: RS232-Serial comunication class (update)
[WWW]The Moth - Serial (RS232) communications in .NET

오후 10:25 2004-09-08
http://www.microsoft.com/korea/windowsserversystem/virtualserver/evaluation/rceval.asp
Microsoft Virtual Server 2005, Enterprise Edition RC 버전 페이지.

Virtual pc가 windows 2003으로 넘어가면서, 이름까지 바꿔치려는 모양.
서버 하나 마련해서 뭔가 좀 해볼까...

오후 9:56 2004-09-03
bstr to char
#include <comdef.h> 
 
... 
 
CString strLine; 
_bstr_t bstrText( strText ); 
strLine.Format( "%s", LPCSTR( bstrText ) ); 

오전 9:50 2004-08-20
http://support.microsoft.com/default.aspx?scid=KB;EN-US;q186133
How to dynamically number rows in a SELECT Statement ; 간단히, oracle의 rownum 같은 것을 쓰기 위한 꽁수

오후 6:00 2004-08-19
atl에서 objectsafety를 구현하는건 단순히 다음의 인터페이스를 상속받아주면 끝 :
public IObjectSafetyImpl<CKioPhotoPaymentCtrl, 
        INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA> 
오후 2:22 2004-08-17
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaxctrl/html/msdn_abcsmfc.asp
The ABCs of MFC ActiveX Controls (ActiveX Controls Technical Articles)

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaxctrl/html/msdn_signmark.asp
Signing and Marking ActiveX Controls

[Upload]helpers.zip

ObjectSafety 관련 레지스트리 자가 등록 도와주는 코드 
참고로 레지스트리 등록 코드는 DllRegisterServer()에서 해도 되지만, 
clsid를 가져다 쓴다던가의 문제가 있으므로.. 
컨트롤::CKioPhotoCtrlFactory::UpdateRegistry 함수에서 등록하도록 하자. 

오전 11:53 2004-08-17
http://www.codeproject.com/system/serial.asp 시리얼 통신용 Wrapper Class.

오전 11:39 2004-08-16
브라우저에서 마우스 키보드 막기 (ie 기준)
// 키보드 막기 
document.onkeydown=KeyEventHandle;  
document.onkeyup=KeyEventHandle;  
 
function KeyEventHandle() { 
        if ( (event.ctrlKey == true && (event.keyCode == 78 || event.keyCode == 82)) || 
                (event.keyCode >= 117 && event.keyCode <= 123) ) {  
                event.keyCode = 0;  
                event.cancelBubble = true;  
                event.returnValue = false;  
        }  
}  
 
// 마우스 막기 
document.onmousedown = mouseright; 
function mouseright(e) { 
        if (navigator.appName == 'Netscape' && (e.which == 3 || e.which == 2)) { 
                return false; 
        } else if (navigator.appName == 'Microsoft Internet Explorer' && 
                (event.button == 2 || event.button == 3)) { 
                return false; 
        } 
 
        return true; 
} 
오전 11:08 2004-08-16
vb에서 ocx 만들 때 IObjectSafety
? 인터페이스 구현
' 메인 모듈에 삽입하는 부분 
 
Global gPortOpen As Boolean 
Global gVIewMode As Integer 
Option Explicit 
 
      Public Const IID_IDispatch = "{00020400-0000-0000-C000-000000000046}" 
      Public Const IID_IPersistStorage = _ 
        "{0000010A-0000-0000-C000-000000000046}" 
      Public Const IID_IPersistStream = _ 
        "{00000109-0000-0000-C000-000000000046}" 
      Public Const IID_IPersistPropertyBag = _ 
        "{37D84F60-42CB-11CE-8135-00AA004BB851}" 
 
      Public Const INTERFACESAFE_FOR_UNTRUSTED_CALLER = &H1 
      Public Const INTERFACESAFE_FOR_UNTRUSTED_DATA = &H2 
      Public Const E_NOINTERFACE = &H80004002 
      Public Const E_FAIL = &H80004005 
      Public Const MAX_GUIDLEN = 40 
 
      Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _ 
         (pDest As Any, pSource As Any, ByVal ByteLen As Long) 
      Public Declare Function StringFromGUID2 Lib "ole32.dll" (rguid As _ 
         Any, ByVal lpstrClsId As Long, ByVal cbMax As Integer) As Long 
 
      Public Type udtGUID 
          Data1 As Long 
          Data2 As Integer 
          Data3 As Integer 
          Data4(7) As Byte 
      End Type 
 
      Public m_fSafeForScripting As Boolean 
      Public m_fSafeForInitializing As Boolean 
 
      Sub Main() 
          m_fSafeForScripting = True 
          m_fSafeForInitializing = True 
      End Sub 
 
 
' 컨트롤 코드에 삽입하는 부분 
 
Private Sub IObjectSafety_GetInterfaceSafetyOptions(ByVal riid As _ 
      Long, pdwSupportedOptions As Long, pdwEnabledOptions As Long) 
 
          Dim Rc      As Long 
          Dim rClsId  As udtGUID 
          Dim IID     As String 
          Dim bIID()  As Byte 
 
          pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER Or _ 
                                INTERFACESAFE_FOR_UNTRUSTED_DATA 
 
          If (riid <> 0) Then 
              CopyMemory rClsId, ByVal riid, Len(rClsId) 
 
              bIID = String$(MAX_GUIDLEN, 0) 
              Rc = StringFromGUID2(rClsId, VarPtr(bIID(0)), MAX_GUIDLEN) 
              Rc = InStr(1, bIID, vbNullChar) - 1 
              IID = Left$(UCase(bIID), Rc) 
 
              Select Case IID 
                  Case IID_IDispatch 
                      pdwEnabledOptions = IIf(m_fSafeForScripting, _ 
                    INTERFACESAFE_FOR_UNTRUSTED_CALLER, 0) 
                      Exit Sub 
                  Case IID_IPersistStorage, IID_IPersistStream, _ 
                     IID_IPersistPropertyBag 
                      pdwEnabledOptions = IIf(m_fSafeForInitializing, _ 
                    INTERFACESAFE_FOR_UNTRUSTED_DATA, 0) 
                      Exit Sub 
                  Case Else 
                      Err.Raise E_NOINTERFACE 
                      Exit Sub 
              End Select 
          End If 
      End Sub 
 
      Private Sub IObjectSafety_SetInterfaceSafetyOptions(ByVal riid As _ 
      Long, ByVal dwOptionsSetMask As Long, ByVal dwEnabledOptions As Long) 
          Dim Rc          As Long 
          Dim rClsId      As udtGUID 
          Dim IID         As String 
          Dim bIID()      As Byte 
 
          If (riid <> 0) Then 
              CopyMemory rClsId, ByVal riid, Len(rClsId) 
 
              bIID = String$(MAX_GUIDLEN, 0) 
              Rc = StringFromGUID2(rClsId, VarPtr(bIID(0)), MAX_GUIDLEN) 
              Rc = InStr(1, bIID, vbNullChar) - 1 
              IID = Left$(UCase(bIID), Rc) 
 
              Select Case IID 
                  Case IID_IDispatch 
                      If ((dwEnabledOptions And dwOptionsSetMask) <> _ 
                   INTERFACESAFE_FOR_UNTRUSTED_CALLER) Then 
                          Err.Raise E_FAIL 
                          Exit Sub 
                      Else 
                          If Not m_fSafeForScripting Then 
                              Err.Raise E_FAIL 
                          End If 
                          Exit Sub 
                      End If 
 
                  Case IID_IPersistStorage, IID_IPersistStream, _ 
                IID_IPersistPropertyBag 
                      If ((dwEnabledOptions And dwOptionsSetMask) <> _ 
                    INTERFACESAFE_FOR_UNTRUSTED_DATA) Then 
                          Err.Raise E_FAIL 
                          Exit Sub 
                      Else 
                          If Not m_fSafeForInitializing Then 
                              Err.Raise E_FAIL 
                          End If 
                          Exit Sub 
                      End If 
 
                  Case Else 
                      Err.Raise E_NOINTERFACE 
                      Exit Sub 
              End Select 
          End If 
      End Sub 

오전 12:48 2004-08-16
atl에 톡톡히 당하고 있는 중.

HWND hWnd; 
((IOleInPlaceObjectWindowlessImpl<Ctestatlctrl>*)this)->GetWindow(&hWnd); 
::PostMessage(hWnd, WM_PAINT, 0, 0); 
일단 m_rcPos 객체로 이녀석이 어디 박혀있는지는 알아 낼 수 있는데,
invalidate, invalidaterect 따위의 함수를 써도...
브라우저뿐만이 아니라, 화면 전체가 갱신되어 버린다.

::InvalidateRect(m_hWnd, &m_rcPos, false); 
호출될때마다 화면 전체가 껌벅껌벅... -_-

그냥 mfc로 짜야겠다...

오후 8:20 2004-08-12
최근 com 컨트롤을 만들고 있는데, 엄하게 BSTR 문자열을 일반 아스키로 변환하느라 삽질.
sprintf, wsprintf 함수로 char, wchar_t 형식 변환은 가능한데,

문제는.. BSTR은 multibyte가 아니라 unicode라는 것 -_-
MultibyteToWidechar
?인가... 그 함수로 변환했다 --;

오전 11:24 2004-08-05
Microsoft Win32 to Microsoft .NET Framework API Map
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/win32map.asp

오후 3:38 2004-07-21
Startup Phases for x86-based Systems
http://www.microsoft.com/resources/documentation/Windows/XP/all/reskit/en-us/Default.asp?url=/resources/documentation/Windows/XP/all/reskit/en-us/prmc_str_reii.asp

오후 2:33 2004-07-19
http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q145/6/79.asp&NoWebContent=1
vb 에서 레지스트리 쌔우기

오전 11:22 2004-07-07
Accessibility 관련 링크
오전 11:26 2004-06-04
자동 로그온 쌔우기
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion
?\Winlogon
오후 3:54 2004-05-26
RegressionAnalyzingGrapher 개발관련 1차 미팅

오전 10:38 2004-05-11
CDO 1.2.1 for Winnt 뉴스 포스팅용 asp 함수
Win2k Server (sp2)에서 정상 작동함.
news.microsoft.com의 경우 포스팅에 20~30여초가 소요됨.
iframe이나 팝업등을 이용, 백그라운드에서 포스팅되도록 하는 것이 좋을 듯.

'Configuration용 접두어-Namespace 
const CONFURL = "http://schemas.microsoft.com/cdo/configuration/" 
 
function PostNewsThread(host, newsgroup, subject, contenttext, username, useremail) 
        Set msg = Server.CreateObject("CDO.Message") 
        Set Flds = msg.Configuration.Fields             'Flds는 ADODB.Fields 객체임 
         
        Flds(CONFURL+"postusing")               = 2 'cdoPostUsingPort 
        Flds(CONFURL+"protocolauthentication")               = 0 'cdoAnonymous  
        Flds(CONFURL+"nntpserver")               = host 
        Flds(CONFURL+"nntpserverport")               = 119 
        Flds(CONFURL+"nntpauthenticate")                  = 0 'cdoAnonymous  
        Flds(CONFURL+"postusername")               = username 
        Flds(CONFURL+"postnntpaccountname")               = username 
        Flds(CONFURL+"postpassword")               = "" 
        Flds(CONFURL+"postemailaddress")               = username + " <"+useremail+">" 
        Flds(CONFURL+"postuserreplyemailaddress")               = username + " <"+useremail+">" 
        Flds.Update 
 
        msg.Subject = subject 
        msg.TextBody = contenttext 
        msg.Newsgroups = newsgroup 
        msg.From = username + " <"+useremail+">" 
        msg.Post 
end function 
오후 1:30 2004-05-06
[WWW]182598 HOWTO: Implement IObjectSafety in Visual Basic Controls

오전 10:36 2004-04-23
wscript를 이용한 레지스트리 액세스.txt
[VBScript]  
Dim WshShell, bKey 
Set WshShell = WScript.CreateObject("WScript.Shell") 
 
WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\", 1, "REG_BINARY" 
WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\MindReader", "Goocher!", "REG_SZ" 
 
bKey = WshShell.RegRead("HKCU\Software\ACME\FortuneTeller\") 
WScript.Echo WshShell.RegRead("HKCU\Software\ACME\FortuneTeller\MindReader") 
 
WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\MindReader" 
WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\" 
WshShell.RegDelete "HKCU\Software\ACME\" 
 
[JScript]  
var WshShell = WScript.CreateObject ("WScript.Shell"); 
 
WshShell.RegWrite ("HKCU\\Software\\ACME\\FortuneTeller\\", 1, "REG_BINARY"); 
WshShell.RegWrite ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader", "Goocher!", "REG_SZ"); 
 
var bKey =    WshShell.RegRead ("HKCU\\Software\\ACME\\FortuneTeller\\"); 
WScript.Echo (WshShell.RegRead ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader")); 
 
WshShell.RegDelete ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader"); 
WshShell.RegDelete ("HKCU\\Software\\ACME\\FortuneTeller\\"); 
WshShell.RegDelete ("HKCU\\Software\\ACME\\"); 

오후 4:00 2004-04-22
msde 라이센스 관련 url.
http://www.microsoft.com/sql/msde/howtobuy/msderights.asp
http://www.microsoft.com/sql/msde/howtobuy/msdeuse.asp
http://www.microsoft.com/sql/msde/productinfo/features.asp

오후 12:18 2004-04-21
<script> 
function openNewWin(tmpImg) 
{ 
    var newWin; 
    newWin = window.open(tmpImg.src, '', 'width='+tmpImg.width+',height='+tmpImg.height); 
    newWin.focus(); 
} 
 
function onloadfile(fname) 
{ 
        alert(fname); 
        var tmpImg = new Image; 
        tmpImg.src = fname; 
        tmpImg.onload = openNewWin(tmpImg); 
} 
</script> 
 
<BODY> 
<INPUT TYPE="file" name="file1" onChange="onloadfile(this.value);"> 
</body> 

오후 11:43 2004-04-09
/* 테이블 생성 SQL */ 
CREATE TABLE [dbo].[tb1] ( 
        [ID] [varchar] (10)  NOT NULL , 
        [description] [varchar] (50) NOT NULL  
) ON [PRIMARY] 
GO 
 
CREATE TABLE [dbo].[tb2] ( 
        [idx] [int] IDENTITY (1, 1) NOT NULL , 
        [ID1] [varchar] (10) NULL , 
        [ID2] [varchar] (10) NULL , 
        [ID3] [varchar] (10) NULL , 
        [ID4] [varchar] (10) NULL , 
        [ID5] [varchar] (10) NULL , 
        [ID6] [varchar] (10) NULL , 
        [ID7] [varchar] (10) NULL , 
        [ID8] [varchar] (10) NULL , 
        [ID9] [varchar] (10) NULL , 
        [ID10] [varchar] (10) NULL  
) ON [PRIMARY] 
GO 
/* 테이블 생성 SQL의 끝 */ 
 
 
 
/* 실제 필요한 스크립트의 시작 */ 
/* 일단 필드의 갯수는 10개로 가정 */ 
Declare @d1 varchar(10), @d2 varchar(10), @d3 varchar(10),@d4 varchar(10),@d5 varchar(10), 
        @d6 varchar(10),@d7 varchar(10),@d8 varchar(10),@d9 varchar(10),@d10 varchar(10) 
 
CREATE TABLE #temp(tempfield varchar(10) NULL)  
 
/* 각 필드의 ID 값에 따라 설명에 해당하는 description 필드를 가져옴 
    필드의 ID 값이 NULL이면 해당 description 필드에도 NULL 값이 들어간다 */ 
Declare rCursor CURSOR FOR   
      SELECT   tb1_1.description AS description1, tb1_2.description AS description2,  
                tb1_3.description AS description3, tb1_4.description AS description4,  
                tb1_5.description AS description5, tb1_6.description AS description6,  
                tb1_7.description AS Expr6description7, tb1_8.description AS description8,  
                tb1_9.description AS description9, tb1_10.description AS description10 
        FROM      dbo.tb2 
          LEFT OUTER JOIN dbo.tb1 tb1_1 ON dbo.tb2.ID1 = tb1_1.ID 
          LEFT OUTER JOIN dbo.tb1 tb1_2 ON dbo.tb2.ID2 = tb1_2.ID 
                LEFT OUTER JOIN dbo.tb1 tb1_3 ON dbo.tb2.ID3 = tb1_3.ID 
                LEFT OUTER JOIN dbo.tb1 tb1_4 ON dbo.tb2.ID4 = tb1_4.ID 
                LEFT OUTER JOIN dbo.tb1 tb1_5 ON dbo.tb2.ID5 = tb1_5.ID 
                LEFT OUTER JOIN dbo.tb1 tb1_6 ON dbo.tb2.ID6 = tb1_6.ID 
                LEFT OUTER JOIN dbo.tb1 tb1_7 ON dbo.tb2.ID7 = tb1_7.ID 
                LEFT OUTER JOIN dbo.tb1 tb1_8 ON dbo.tb2.ID8 = tb1_8.ID 
                LEFT OUTER JOIN dbo.tb1 tb1_9 ON dbo.tb2.ID9 = tb1_9.ID 
                LEFT OUTER JOIN dbo.tb1 tb1_10 ON dbo.tb2.ID10 = tb1_10.ID 
OPEN rCursor  
FETCH NEXT From rCursor  
        INTO @d1, @d2,  @d3,  @d4,  @d5,  @d6,  @d7,  @d8,  @d9,  @d10   
 
/* 루프를 돌면서  NULL 이 아닌 값을 임시 테이블에 집어넣는다 */  
WHILE (@@FETCH_STATUS <> -1)   
BEGIN   
        IF(@d1 IS not null)  
        INSERT   #temp 
                Select @d1 
        IF(@d2 IS not null)  
        INSERT   #temp 
                Select @d2 
        IF(@d3 IS not null)  
        INSERT   #temp 
                Select @d3 
        IF(@d4 IS not null)  
        INSERT   #temp 
                Select @d4 
        IF(@d5 IS not null)  
        INSERT   #temp 
                Select @d5 
        IF(@d6 IS not null)  
        INSERT   #temp 
                Select @d6 
        IF(@d7 IS not null)  
        INSERT   #temp 
                Select @d7 
        IF(@d8 IS not null)  
        INSERT   #temp 
                Select @d8 
        IF(@d9 IS not null)  
        INSERT   #temp 
                Select @d9 
        IF(@d10 IS not null)  
        INSERT   #temp 
                Select @d10 
        FETCH NEXT From rCursor  
                INTO @d1, @d2,  @d3,  @d4,  @d5,  @d6,  @d7,  @d8,  @d9,  @d10   
END   
CLOSE rCursor   
DEALLOCATE rCursor  
 
/* 결과값 가져오기 */ 
SELECT   * 
FROM      #temp; 
 
/* 임시 테이블 삭제 */ 
DROP TABLE #temp; 

오후 5:25 2004-04-08
삽질은 계속되고...
asp의 파라메터 객체와는 또 달라진 ado.net.
덕분에 또 삽질... -_-;

이젠 행복하게 저장 프로시저를 좀 써보자... ;ㅂ;

SqlCommand comm = new SqlCommand(); 
SqlConnection conn = 
    new SqlConnection(ConfigurationSettings.AppSettings["DSNConnectionString"]); 
comm.Connection = conn; 
comm.CommandType = CommandType.StoredProcedure; 
comm.CommandText = "sp_uGetKeyCode"; 
SqlParameter param = new SqlParameter("RETURN_VALUE",SqlDbType.Int); 
param.Direction = ParameterDirection.ReturnValue; 
comm.Parameters.Add(param); 
conn.Open(); 
comm.ExecuteNonQuery(); 
int nRet = (int)comm.Parameters["RETURN_VALUE"].Value; 
conn.Close(); 
오후 4:44 2004-03-29
T-SQL에 눈을 뜬 Kenial.
Declare @count int 
Declare rCursor CURSOR FOR 
        SELECT * From Cont_TB Order by Colorcode 
Set @count = 0 
OPEN rCursor 
FETCH NEXT FROM rCursor 
WHILE (@@FETCH_STATUS <> -1) 
        BEGIN 
                Set @count = @count + 1 
                UPDATE Cont_TB SET Key_Code = @count WHERE CURRENT OF rCursor 
                FETCH NEXT FROM rCursor 
        END 
CLOSE rCursor 
DEALLOCATE rCursor 
GO 

CREATE PROCEDURE [dbo].[sp_uGetKeyCode] AS 
Declare @count int, @rKeyCode int, @row_status int 
 
Set @count = 0  
Declare rCursor CURSOR FOR  
        SELECT Key_Code From Cont_TB Order by Key_Code 
OPEN rCursor 
FETCH NEXT From rCursor 
        INTO @rKeyCode 
 
WHILE (@@FETCH_STATUS <> -1)  
BEGIN  
        Set @count = @count + 1 
        Set @row_status = @@FETCH_STATUS 
        IF(@count <> @rKeyCode) 
        BEGIN 
                Set @count = @count - 1 
                Break 
        END 
        FETCH NEXT From rCursor 
                INTO @rKeyCode 
END  
CLOSE rCursor  
DEALLOCATE rCursor 
RETURN(@count+1) 
GO 

http://support.microsoft.com/default.aspx?scid=kb;en-us;257405&Product=win2000 램디스크 관련

오후 3:36 2004-03-26
엉엉 대체 뭐가 어떻게 된거야 이건.
일단 동전인식기는 제어가 되는데.. VB로 알아볼 수 없게 짠 코드덩어리.
mscomm 객체 따위를 써서 이렇게 만들어놓다니..

일단 기계 제작사에서 만든 코드를 쓰는거니까 이상은 없겠지만.
rs-232 통신.. 어흑이다 진짜 ;

비베에서 ocx 만들려면 이렇게 하는 수밖에 없는건가...?
진짜 복잡하고 난잡하기가 귀성길의 서울역에 그지없구나 ;

오후 6:33 2004-03-24
웹서비스 시작!

uddi, wsdl, soap, http.

오전 9:46 2004-01-26
http://www.madchick.com/Default.asp?Page=2&SubPage=2 activex 관련
http://www.component.pe.kr/Lecture/ActiveX/ActiveX.html .net에서 activex 배포질하기

오후 1:55 2004-01-19
jscript로 프로그램 런칭하기 (로컬에서만 작동)
<script> 
function fnShellExecuteJ() 
{ 
        var objShell = new ActiveXObject("Shell.Application"); 
        objShell.ShellExecute("notepad.exe", "", "", "open", 1); // normal window 
} 
</script> 

초간단 ado.net 예제 (in C#)

// 네임스페이스 추가 
 
Using System.Data; 
Using System.Data.SqlClient; 
 
... 
  
SqlConnection sCon = new SqlConnection("DB연결문자열"); 
SqlCommand sCom = new SqlCommand(); 
sCom.Connection = sCon; 
// 저장 프로시저를 사용 안하면 이부분은 생략 
sCom.CommandType = CommandType.StoredProcedure; 
 
try 
{ 
    // 이미 열린 SqlConnection 개체를 또 열때 발생하는 에러 방지 
    if(sCon.State == ConnectionState.Open) 
        sCon.Close(); 
    // 트랜잭션 시작 
    sCom.Transaction = sCon.BeginTransaction(IsolationLevel.ReadCommitted,"트랜잭션명"); 
 
    ... 
    sCom.CommandText = "해당 프로시저명"; // 저장 프로시저를 사용 안할 경우 인라인 쿼리문 
    sCom.ExcuteNonQuery(); // 기타 실행방식도 가능 
    sCom.CommandText = "해당 프로시저명"; 
    sCom.ExcuteNonQuery(); 
    ...// 이런 식으로 쿼리문 실행 계속.. 루프도 이 부분에서 돌립니다.  
 
    // SqlParameter가 필요하면 해당쿼리 실행 전에 
    // Add 또는 Clear  또는 RemoveAt 메소드 사용 
 
    // 여기까지 에러가 없으면 Commit 해줌 
    sCom.Transaction.Commit(); 
} 
catch(SqlException ex) 
{ 
    // 에러가 발생하면 Rollback 해줌 
    sCom.Transaction.Rollback(); 
} 
finally 
{ 
    sCon.Close(); 
} 

프로그래밍분류 WorkBook


PythonPowered EditText of this page (last modified 2005-01-16 15:41:20)
FindPage by browsing, searching, or an index
Or try one of these actions: DeletePage, DeleteUploadedFile, LikePages, SpellCheck, UploadFile