달력

72025  이전 다음

  • 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

asp 문법

Develope/ASP 2010. 8. 12. 11:46
반응형
 

출처 : http://maru7937.egloos.com/4840019

 선언한 크기 까지만 가능하다. 
   만약 그 이상의 값을 할당하면 에러가 발생한다.
   위에서는 2로 크기를 선언 했기 때문에 MyArray(2) 까지만 가능하다.


    ② Redim

  * 배열 크기의 재선언에 사용한다.

   예제 ②
     <%
      Dim MyArray_1()

      Redim MyArray_1(3)
          MyArray_1(0) = "대한민국"
          MyArray_1(1) = "터키"
          MyArray_1(2) = "세네갈"

      Redim MyArray_1(5) '배열의 크기를 재선언함(배열의 크기가 재선언 되면 기존

의 값들은 지워진다.)

      response.write MyArray_1(0) '값이 지워졌기 때문에 출력값이 없다..
     %>


     
  * redim 의 사용은 위처럼, 처음 배열 선언시에 배열의 크기를 정해 주지 않았을 때

에만 가능하다.
    예제 ① 에서 처럼 배열의 선언시에 크기를 선언한 경우에는 Redim 을 사용할 수

없다.


    ③ Preserve

 * 위의 예제 ②에서 
   Redim preserve Myarray_1(5) 처럼 preserve 가 쓰이면 데이터를 저장한 채로 배열

의 크기를 
             늘려준다.
   즉, 기존의 들어가 있는 데이터는 그대로 아직 존재한다. 
       따라서 대한민국이 출력된다.

 

    ④ 배열의 선언과 동시에 값 할당.

 예제 ④

 <%
 dim color
     color=Array("yellow","green","beige","silver")

 response.write color(0) '배열의 첫번째 값인 yellow 가 출력된다.
 %>


 
    ⑤ Option Explicit

 * 변수선언을 반드시 하도록 설정할 때 사용한다.


 예제 ⑤
 
 <%
   Option Explicit
   dim boy 
       boy = "소년"
       girl = "소녀"

   response.write boy & girl
 %>


 

 * 위에서 girl 은 변수에 값을 할당하기 전에 변수의 선언이 없으므로 에러가 발생한

다.
 * 주의 할 것은 Option Explicit 선언은 반드시 문서의 최 상단에 있어야 한다.
   문서의 중간에서 선언 될 수는 없다.

■ 구분자

   :

 * ASP에서 구분자로는  :(콜론) 이 쓰인다.
 * 구분자는 실행할 문장을 한줄단위로 구분짓는 역할을 한다.

 사용예)
 
 <%
   dim girl:
   dim boy : boy="소년" : response.write boy
 %>
 

 * 위에서 두번째 문장은 에러가 발생해야 하지만 구분자(:)가 있기 때문에 에러가 발

생하지 않는다.

■ 연결연산자

   &

 * &가 문자열에 쓰이면 문장과 문장을 연결해서 한 문장으로 만들어준다.
 * &가 변수에 쓰이면 변수의 값을 & 다음의 값과 이어준다.

 사용예)

 <%
    dim boy, girl, all
        boy = "김" & "영한"
        girl = "소녀"
        all = boy & girl
        all = all & "결과"

    response.write boy & "<br>"
    response.write all
 %>
 

 * 위에서 boy 의 값은 "김영한" 이며
   all 의 값은 "김영한소녀결과" 이다.


■ 주석

   '

 * ASP에서 주석처리에는 '(작은 따옴표) 가 쓰인다.
 * 행에서 ' 다음의 내용은 주석처리되어 해석이 되지 않는다.

 사용예)

 <%
   'dim boy
   'boy = "소년" 
   'response.write boy
 %>
 

 * 이렇게 하면 위의 문장들은 실행이 되지 않고 무시된다.

 

■ ASP 문자열 및 수학 함수

1. 문자열 및 수학 함수

 cint(문자열)  문자열을 정수값으로 출력(32768 이상의 큰 숫자에는 사용할 수 없다)

 사용예)

            <%=cint("100")+cint("100")%><br>
      <%="100" + "100"%>

     

     * 따옴표(") 가 붙었기 때문에 100 이 문자열이어서 100100 이어야 하지만
       첫번째 라인은 숫자형으로 변환을 했기 때문에 200 이 출력 된다.


 cdbl(문자열)  문자열을 소수점이하까지도 출력(큰 숫자에 사용한다)

 round(숫자,반올림할 위치)  지정한 소수점 자리에서 반올림한 값을 리턴

 asc(문자열)  문자열에서 첫번째 문자에 대한 ansi 코드 번호를 리턴

 chr(아스키코드번호)  지정된 번호와 일치하는 ansi 문자로 구성된 문자열을 리턴

 hex(숫자)  숫자의 16진수값을 나탸내는 문자열을 리턴

 fix(숫자)  숫자의 정수(전체)부분을 리턴 / 음수일때 숫자보다 크거나 같은 첫번째

음의 정수 리턴

 int(숫자)  숫자의 정수(전체)부분을 리턴 / 음수일때 숫자보다 작거나 같은 첫번째

음의 정수 리턴

 sgn(숫자)  숫자의 부호를 나타내는 정수를 리턴

 cdate(숫자)  날짜 형식의 인자값 리턴( 예:cdate(36890) , cdate("2001년 12월 10일

") )

 Clng(숫자)   Long 형식의 문자열 리턴

 Cstr(숫자)   String 형식의 문자열 리턴

 Csng(숫자)   Single 형식의 문자열 리턴

 formatcurrency(숫자) : 숫자를 화폐형식으로 전환
 formatdatetime(date,1) : date 함수의 표시형태를 바꿈
 formatdatetime(date,2)
 formatdatetime(date,3)
 formatpercent(숫자) : 숫자를 백분율로 표시

 strConv 지정한대로 문자를 변환.
  strConv(문자열,conversion [,LCID])
  
 >> conversion 에 가능한 값

 vbUpperCase 1 문자열을 대문자로 변환
 vbLowerCase 2 문자열을 소문자로 변환
 vbPropercase 3 문자열 단어의 첫글자를 대문자로 변환
 vbWide 4 1바이트문자를 2바이트 문자로 변환
 vbNarrow 5 2바이트문자를 1바이트문자로 변환
 vbUnicode 6 시스템의 기본 코드 페이지를 사용하여 문자열을 unicode

로 변환
 vbFromUnicode 128 unicode 문자열을 시스템의 기본 코드 페이지로 변환


3. 난수 함수(임의의 수를 리턴함)

 Randomize : 난수 발생기를 초기화 합니다.

 난수값 = Int((상한값 - 하한값) + 1) * Rnd + 하한값

 예로 1부터 100사이의 난수를 가져오려면,
 난수값 = Int(100 - 1 + 1) * Rnd + 1


4. 삼각 함수

 Atn() : 숫자의 아크 탄젠트 값을 리턴
 Cos() : 각도의 코사인값을 리턴
 Exp() : e(자연 로그의 밑)의 인자만큼의 제곱을 리턴
 Log() : 숫자의 자연로그를 리턴
 Sin() : 각도의 사인값을 리턴
 Tan() : 각도의 탄젠트값을 리턴

5. 문자열 관련 함수

 InStr("문자열","찾을 문자") 문자열의 위치 반환

     사용예)

     
     <%=instr("월드컵","대한민국 월드컵 코리아")%>

     * 실행결과 : 6
     * 만약 찾는 문자가 없다면 0 을 반환한다.
     * 문자열에서 시작은 1 부터 시작하며, 공백은 1 자리로 계산된다.

 InStrRev("문자열","찾을 문자") 문자열의 위치를 뒤에서 부터 검색해서 반환
 Lcase("문자열") 문자열을 소문자로...
 Ucase("문자열") 문자열을 대문자로...

 Len("문자열") :문자열의 길이 반환

 문자열 잘라내기

 Left("문자열",잘라낼 갯수) : 문자열을 왼쪽에서 지정한 갯수만큼 잘라냄
 Right("문자열",잘라낼 갯수) : 문자열을 오른쪽에서 지정한 갯수만큼 잘라냄

 문자열 뽑아내기
 Mid("문자열",시작위치,뽑아낼 갯수) : 문자열의 어느 부위를 뽑아냄

 문자열에서 공백문자 제거
 Yrim("문자열") : 문자열의 양쪽 공백을 제거
 Ltrim("문자열") : 문자열의 왼쪽 공백을 제거
 Rtrim("문자열") : 문자열의 오른쪽 공백을 제거

 Split("문자열","분리자") : 분리자를 기준으로 문자열을 나눔
 Splite()함수예제 : 
    str1 = Splite("사람,동물,인형",",")
    즉, "사람,동물,인형" 이라는 문자열을 "," 를 기준으로 잘라내면 자동 배열이 형

성되어 각각
    str1(0) = "사람"
    str1(1) = "동물" 
    str1(2) = "인형"  
    의 값을 가지게 된다.


 StrReverse("문자열") : 문자열을 뒤집음

 기타 확인함수

 IsArray() 변수가 배열인지의 여부를 나타내는 Boolean 값을 리턴
 IsDate() 날짜로 변환될 수 있는지의 여부를 나타내는 Boolean 값을 리턴
 IsEmpty() 변수가 초기화 될 수 있는지의 여부를 나타내는 Boolean 값을 리턴
 IsNull() 유효한 데이터를 포함하고 있는지의 여부를 리턴
 IsNumeric() 숫자로 평가될 수 있는지의 여부를 리턴
 IsObject() 유효한 ActiveX혹은 OLE 자동화 개체를 참조하는지의 여부를 리턴
 Vartype() 변수의 하위 형식을 나타내는 숫자를 리턴한다.

     사용예)

     <%
     Dim boy
         boy="소년"
     response.write IsNull(boy)
     %>

      * 실행결과: boy 변수는 NULL 이 아니므로 false 를 반환한다.


6. 날짜/시간 함수 예제

 ♠ now : 시스템의 시간과 날짜
 ♠ date : 시스템의 날짜
 ♠ time : 시스템의 시간

 현재의 년도 : year(now)
 현재의 월 month(now) , monthname(month(now))
 현재의 일 day(now)
 현재의 요일 : weekday(now) , weekdayname(weekday(now))
 현재의 시 : hour(now)
 현재의 분 : minute(now)
 현재의 초 : second(now)

  예)

  * 오늘의 날짜와 시간 : <%=now%>
  * 오늘의 날짜 : <%=date()%> 
  * 현재 시간 : <%=time%> 
  * 올해 : <%=year(now)%>
 ♠ DateAdd

 >> 지정된 날짜에 시간을 추가하거나 뺀 새로운 날짜를 반환한다.

 사용법 : DateAdd(interval, number, date)

 >> interval : 필수적인 인수로 interval을 추가한 날짜를 나타내는 문자식이다. 
 >> number : 필수적인 인수로 추가할 간격 수의 수식이다. 
             수식에서 양수는 미래의 날짜, 음수는 과거의 날짜이다. 
 >> date : 필수적인 인수로 interval을 추가한 날짜를 나타내는 Variant 또는 리터럴

이다.

 interval 에 가능한 값은 아래와 같다.

  yyyy 년 
  q 분기 
  m 월 
  y 일(일년 기준) 
  d 일 
  w 요일 
  ww 주(일년 기준) 
  h 시 
  n 분 
  s 초

  예)

  DateAdd("m",3,Date) >> 현재의 날짜에서 3개월을 더함
  DateAdd("m",-3,Date) >> 현재의 날짜에서 3개월을 뺌

 ♠ DateDiff

 >> 주어지는 두 날짜의 간격을 반환한다.

 사용법 : DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])

   >> interval : 필수적인 인수로 날짜1과 날짜2 사이의 차이를 계산하는 데 사용할

interval의 
       문자식이다. 
   >> date1, date2 : 필수적인 인수로 날짜식에서 계산에 사용할 두 날짜이다. 
   >> firstdayofweek : 선택적인 인수로 요일을 지정하는 상수로 지정하지 않으면 일

요일로 간주한다. 
   >> firstweekofyear : 선택적인 인수로 연도를 기준으로 한 첫째 주를 지정하는 상

수이다. 
     지정하지 않으면 1월 1일을 포함하는 주를 첫째 주로 간주한다.

  interval 에 가능한 값은 아래와 같다.

   yyyy 년 
   q 분기 
   m 월 
   y 일(일년 기준) 
   d 일 
   w 요일 
   ww 주(일년 기준) 
   h 시 
   n 분 
   s 초


  >> firstdayofweek 에 가능한 값은 아래와 같다.
   =======================================
   상수     값   설명 
  =======================================
  vbUseSystem  0   NLS(National Language Support) API 설정 사용 
  vbSunday     1   일요일(기본값) 
  vbMonday     2   월요일 
  vbTuesday    3   화요일 
  vbWednesday  4   수요일 
  vbThursday   5   목요일 
  vbFriday     6   금요일 
  vbSaturday   7   토요일


  >> firstweekofyear 에 가능한 값은 아래와 같다.

   =======================================
   상수        값  설명 
  =======================================

  vbUseSystem     0  NLS(National Language Support) API 설정 사용 
  vbFirstJan1     1  1월 1일을 포함하는 주에서 시작(기본값) 
  vbFirstFourDays 2  새해의 처음 4일을 포함하는 주에서 시작 
  vbFirstFullWeek 3  새해의 처음 한 주일(7일)을 포함하는 주에서 시작
 
 예)

 DateDiff("h", "2001년 12월 30일", Date) '현재시간과 2001년 12월 30일의 시간차이

비교
 DateDiff("n", "2001년 12월 30일 09:30:00", now) 
 DateDiff("s", "2001년 12월 30일 09:30:00", now)


 ♠ DatePart

 >> 주어진 날짜의 지정된 부분을 반환한다.

 사용법 : DatePart(interval, date[, firstdayofweek[, firstweekofyear]])

 >> interval : 필수적인 인수로 반환할 시간 간격의 문자식이다.
 >> date : 필수적인 인수로 계산할 날짜식이다. 
 >> firstdayof week : 선택적인 인수로 요일을 지정하는 상수로서 지정하지 않으면

일요일로 간주한다. 
 >> firstweekofyear : 선택적인 인수로 연도를 기준으로 한 첫째 주를 지정하는 상수

이다. 
   지정하지 않으면 1월 1일을 포함하는 주를 첫째 주로 간주한다.

  interval 에 가능한 값은 아래와 같다.


   yyyy 년 
   q분기 
   m 월 
   y 일(일년 기준) 
   d 일 
   w 요일 
   ww 주(일년 기준) 
   h 시 
   n 분 
   s 초

  firstdayofweek 에 가능한 값은 아래와 같다.

   =======================================
   상수          값  설명 
  =======================================

  vbUseSystem  0   NLS(National Language Support) API 설정 사용 
  vbSunday     1   일요일(기본값) 
  vbMonday     2   월요일 
  vbTuesday    3   화요일 
  vbWednesday  4   수요일 
  vbThursday   5   목요일 
  vbFriday     6   금요일 
  vbSaturday  7   토요일


  firstweekofyear 에 가능한 값은 아래와 같다.
   =======================================
   상수        값  설명 
  =======================================

  vbUseSystem     0  NLS(National Language Support) API 설정 사용 
  vbFirstJan1     1  1월 1일을 포함하는 주에서 시작(기본값) 
  vbFirstFourDays 2  새해의 처음 4일을 포함하는 주에서 시작 
  vbFirstFullWeek 3  새해의 처음 한 주일(7일)을 포함하는 주에서 시작

 예)

 <%=DatePart("q", now)%> 
 * 실행결과 : 1,2,3,4 의 숫자중 현재 분기에 해당하는 숫자 리턴

 

 ♠ DateSerial

 >>지정된 년, 월, 일의 Date 하위 형식인 Variant를 반환한다. 
   즉 임의의 숫자를 입력받아 날짜 형식으로 반환하는 함수이다.

 사용법 : DateSerial(year, month, day)

  year : 100에서 9999까지의 수 또는 수식 
  month : 모든 수식 
  day : 모든 수식

 예)

 <%=DateSerial(2001, 12, 25) %>
 * 실행결과 : 2001-12-25
 ♠ DateValue

 >>Date 하위 형식의 Variant를 반환한다.

 사용법 : DateValue(date)

 대개 date 인수는 100년 1월 1일에서 9999년 12월 31일까지를 나타내는 문자식으로

이 범위에 있는 
 날짜, 시간 또는 날짜/시간을 나타내는 식이다. 
 date 인수에 시간 정보가 있는 경우 DateValue 함수에서는 그 정보를 반환하지 않는

다. 
 그러나 date 인수에 "12:11"처럼 잘못된 시간 정보가 있으면 오류가 발생하게 된다.

 date 인수가 유효한 날짜 구분 기호로 분리된 숫자만 있는 문자열인 경우, DateValue

함수에서는 
 컴퓨터에 설정한 간단한 표시 날짜 형식에 따라 년, 월, 일에 대한 순서로 인식하게

된다. 
 또한 정식이나 약식의 월 이름을 포함하고 있는 명확한 날짜도 인식한다. 
 예를 들어 DateValue 함수는 1/23/2001과 1/23/01 뿐만 아니라 January 23,2001과

Jan 23,2001을 
 모두 인식한다.

 date 인수에서 연도 부분을 생략할 경우 DateValue 함수는 컴퓨터 시스템에 설정되어

있는 현재 
 연도를 사용한다.

 예)

 <%=DateValue("2000년 12월 25일") %>
 * 실행결과  : 2000-12-25


-----------------------------
엑셀로 저장

<%
'디비에서 데이타를 불러와 엑셀로 저장하기

'ODBC 연결
Set db = Server.CreateObject("Adodb.Connection")
db.open "dsn=nagayodb;uid=sa;pwd=kkk119;"

Response.Buffer = true

'변수 선언
Dim xlApp 
Dim xlWorkbook 
Dim xlWorksheet
Dim sSQL, rs, strHTML, str

'데이타 불러오기
sSQL = "Select * From 테이블명"
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open sSQL, db
%>
<html>
<head>
<title>디비에서 데이타를 불러와 엑셀로 저장하기</title>
<body bgcolor=white>
<table border='1' cellpadding='3' cellspacing='1'>
<%
do until rs.EOF
%>
<tr height='30'>
<td><%=rs(0)%></td>
<td><%=rs(1)%></td>
<td><%=rs(2)%></td>
</tr>
<%
rs.MoveNext
loop
%>
</table>

<br>

<a href="work\test.xls" target="_new">엑셀로 보기 </a>

<%
'엑셀로 변환
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True

Set xlWorkbook = xlApp.Workbooks.Add
Set xlWorksheet = xlWorkbook.Worksheets.Add

rs.movefirst
i = 1
do until rs.EOF

a = "A"&i
b = "B"&i
xlWorksheet.Range(a).Value = rs(0)&","&rs(1)
xlWorksheet.Range(b).Value = rs(2)

rs.MoveNext
i = i + 1
loop

xlApp.Workbooks.Item(1).SaveAs Server.MapPath("/work") & "\" & "test.xls"

'Session.SessionID & ".xls"

xlWorkbook.Close false
xlApp.WorkBooks.Close
xlApp.Quit

Set xlWorksheet = Nothing
Set xlWorkbook = Nothing
Set xlApp = Nothing

rs.Close
Set rs = Nothing
%>

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

 

아래는 http://support.microsoft.com/kb/194799/ko 내용임...

요약

이 문서에서는 삽입하고 Oracle 데이터베이스를 사용할 수 있는 ASP (Active Server Pages) 페이지 RAW 또는 LONG RAW 데이터를 검색하는 방법에 대해 설명합니다.

 

추가 정보

1.
Oracle 테이블을 이미지를 삽입하려면 다음 Microsoft 기술 자료의 다음 문서를 참조하십시오.

185958  (http://support.microsoft.com/kb/185958/EN-US/ ) AppendChunk ADO GetChunk BLOB 데이터용 Oracle 함께 사용하는 방법
참고: 우리는 Microsoft Access를 사용하여 Oracle에 이미지를 삽입할 사용하지 않는 것이 좋습니다. OLE 래퍼를 개체를 추출하여 ASP가 올바르게 해석되지 않도록 개체 주위에 추가됩니다.

2. 쿼리 및 이미지를 표시하는 다음 코드를 사용합니다.: 
  <%@ LANGUAGE="VBSCRIPT" %>

      <%
      'Clear existing HTTP header information.
      Response.Expires = 0
      Response.Buffer = TRUE
      Response.Clear

      'Set the HTTP header to an image type, if you want to display
      'a jpg you need to use the "image/jpeg" content type.
      Response.ContentType = "image/gif"

      Dim strTemp

      Set oConn = Server.CreateObject("ADODB.Connection")

     'You need to change this line to reflect your DSN, UID
     'and PWD.
      oConn.Open "DSN=Ovteam;UID=userid;PWD=password;"

     'Change this line to use your table that contains a raw or
     'long raw field.  In this case, ID is the primary key of the
     'IMAGE table and IMG is the RAW or LONG RAW data column.
      sSQL = "Select ID, IMG from IMAGE where ID = 1"

      Set oRS = Server.CreateObject("ADODB.Recordset")
      oRS.Source = sSQL
      oRS.ActiveConnection = oConn

     'The cursor type does not seem to matter.  A keyset cursor was used
     'with success for this article; however, you will not be able to
     'scroll with it because the content type of this page is set for
     '"image/gif".

      oRS.Open

      strtemp = oRS("IMG")
      Response.BinaryWrite(strTemp)
      Response.End

      oRS.Close
      Set oRS = nothing
      oConn.Close
      Set oConn = nothing
   %>

참고: 이 페이지의 콘텐츠 형식의 변경 때문에 하나의 이미지를 표시할 수 있습니다. 이 텍스트를 페이지에 통합하기 위해 서버 작업이 필요한 다른 페이지에 그림을 얻으려면 이 .asp 페이지의 측면 포함됩니다.
 
자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
192743  (http://support.microsoft.com/kb/192743/EN-US/ ) TEXT 데이터 AppendChunk ADO GetChunk Oracle 함께 사용하는 방법
 

본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Open Database Connectivity 2.5
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.1
  • Microsoft ActiveX Data Objects 2.1 서비스 팩 2
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft ActiveX Data Objects 2.6
  • Microsoft ActiveX Data Objects 2.7
  • Microsoft Active Server Pages 4.0
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
  • Microsoft Data Access Components 2.7
 
키워드: 
kbmt kbcode kbhowto kboracle kbprovider KB194799 KbMtko

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

'create objects
Set Conn = Server.CreateObject("ADODB.Connection")
set recordset = server.createobject("ADODB.Recordset")

'open connection object to database
conn.open "DSN=theDatabase;User ID=userid;password=password"
sql="select CLOBField from CLOBFieldtable"

'open recordset object
recordset.Open sql, conn

'create the Field object for the CLOB field
clobFieldObject = recordset.Fields("CLOBField")

'Use the GetChunk Method to read the data.
'Pass the size of the data you want to retrieve
'in this case, we are retrieving 50K
strCLOBstring = clobFieldObject.GetChunk(50000)


Editing CLOB fields are a little more complicated because I have to
use the empty_clob() Oracle function to create an empty CLOB field,
and then use the AppendChunk method to write the binary data to the
empty field.  The code looks like this:

'use the same connection and recordset objects as above
sql="Update CLOBFieldtable set CLOBField = empty_clob() where CLOBid =
1"

'no need to use a recordset here
conn.execute(sql)

'get your empty clob field in a recordset to update it.
sql="select CLOBField from CLOBFieldtable where CLOBid = 1"
recordset.Open sql, conn

'Get the field object we want to write to
CLOBFieldObj = recordset.Fields("CLOBField")

'Now use the AppendChunk Method to write your data
CLOBFieldObj.AppendChunk("Some Huge Long String to write to CLOB
field")

'Commit the transaction
recordset.update




=========================================================

Example 1 : Saving the Data in a SQL Server Image Column to a File on the Hard Disk
The code in this example opens a recordset on the pub_info table in the pubs database and saves the binary image data stored in the logo column of the first record to a file on the hard disk, as follows: 1. Open a new Standard EXE Visual Basic project.
2. On the Project menu, click to select References, and then set a reference to the Microsoft ActiveX Data Objects 2.5 Object Library.
3. Place a CommandButton control on Form1.
4. Make the following declarations in the form's General declarations section: Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim mstream As ADODB.Stream


5. Cut and paste the following code into the Click event of the CommandButton that you added to the form: Set cn = New ADODB.Connection
cn.Open "Provider=SQLOLEDB;data Source=<name of your SQL Server>;
Initial Catalog=pubs;User Id=<Your Userid>;Password=<Your Password>"

Set rs = New ADODB.Recordset
rs.Open "Select * from pub_info", cn, adOpenKeyset, adLockOptimistic

Set mstream = New ADODB.Stream
mstream.Type = adTypeBinary
mstream.Open
mstream.Write rs.Fields("logo").Value
mstream.SaveToFile "c:\publogo.gif", adSaveCreateOverWrite

rs.Close
cn.Close


6. Save and run the Visual Basic project.
7. Click the CommandButton to save the binary data in the logo column of the first record to the file c:\publogo.gid. Look for this file in Windows Explorer and open it to view the saved image.

The code in this example declares an ADODB Stream object and sets its Type property to adTypeBinary to reflect that this object will be used to work with Binary data. Following this, the binary data stored in the logo column of the first record in the pub_info table is written out to the Stream object by calling its Write method. The Stream object now contains the binary data that is saved to the file by calling its SaveToFile method and passing in the path to the file. The adSaveCreateOverWrite constant passed in as the second parameter causes the SaveToFile method to overwrite the specified file if it already exists.

Example 2 : Transfer the Image Stored in a .gif File to an Image Column in a SQL Server Table
The code in this example saves an image stored in a .gif file to the logo column in the first record of the pub_info table by overwriting its current contents, as follows: 1. Open a new Standard EXE Visual Basic project.
2. On the Project menu, click to select References, and then set a reference to the Microsoft ActiveX Data Objects 2.5 Object Library.
3. Place a CommandButton on Form1. 
4. Make the following declarations in the form's General declarations section:Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim mstream As ADODB.Stream


5. Cut and paste the following code in the Click event of the CommandButton that you added to the form:Set cn = New ADODB.Connection
cn.Open "Provider=SQLOLEDB;data Source=<name of your SQL Server>;
Initial Catalog=pubs;User Id=<Your Userid>;Password=<Your Password>"

Set rs = New ADODB.Recordset
rs.Open "Select * from pub_info", cn, adOpenKeyset, adLockOptimistic

Set mstream = New ADODB.Stream
mstream.Type = adTypeBinary
mstream.Open
mstream.LoadFromFile "<path to .gif file>"
rs.Fields("logo").Value = mstream.Read
rs.Update

rs.Close
cn.Close


6. Save and run the Visual Basic project.
7. Click on the CommandButton to run the code to stream the contents of the .gif file to the ADO Stream object, and save the data in the Stream to the logo column in the first record of the recordset.
8. Verify that the image in the logo column has been modified by using the code in Example 1.
반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

ASP에서 BLOB필드에 저장된 이미지를 나타내는 방법

 

이 문서는 이전에 다음 ID로 출판되었음: KR601057

요약

Active Server Page(ASP)를 사용하여, BLOB필드에 저장된 Image를 Internet Browser에서 볼 수 있다. 아래의 예제는 Microsoft SQL Server sample database table인 pub_info에 저장된 GIF 이미지를 보여주는 방법을 보여준다.

추가 정보

대부분의 Internet browser들은 GIF와 JPEG 이미지를 지원한다. 이미지를 보여주기 위해서, 브라우저는 웹 서버로부터 이미지를 요청한다. 서버는 HTTP헤더의 MIME형식을 IMAGE/GIF 또는 IMAGE/JPEG를 포함함으로써, 이미지를 브라우저로 보낸다. 이러한 작업들을 Active Server Page를 이용하여 가능하다. 다음의 예제는 이미지에 대한 HTTP헤더를 작성하고 GIF파일을 브라우저에 제공하기 위해서 SQL서버에 있는 Image필드에 있는 이진 정보를 사용한다.
 
FILE: SHOWIMG.ASP
   <%@ LANGUAGE="VBSCRIPT" %>
   <%
   ' Clear out the existing HTTP header information
   Response.Expires = 0
   Response.Buffer = TRUE
   Response.Clear

   ' Change the HTTP header to reflect that an image is being passed.
   Response.ContentType = "image/gif"

   Set cn = Server.CreateObject("ADODB.Connection")
   ' The following open line assumes you have set up a System DataSource
   ' by the name of myDSN.
   cn.Open "DSN=myDSN;UID=sa;PWD=;DATABASE=pubs"
   Set rs = cn.Execute("SELECT logo FROM pub_info WHERE pub_id='0736'")
   Response.BinaryWrite rs("logo")
   Response.End
   %>
 
위의 스크립트는 화면에 이미지만을 보여준다. HTML이나 ASP 문서로부터 이미지를 보여주려고 한다면 <IMAGE> 태그 안에 위의 파일을 참조한다.예를 들어, 이미지를 이 이미지를 설명하는 텍스트와 함께 화면에 나타내려면 다음과 같은 HTML페이지를 사용한다.
   <HTML>
   <HEAD><TITLE>Display Image</TITLE></HEAD>
   <BODY>
   This page will display the image New Moon Books from a SQL Server 6.5
   image field.<BR>
   <IMG SRC="SHOWIMG.ASP">
   </BODY>
   </HTML>
이 방법은 다른 형식의 이진 데이터에도 적용할 수 있다. 이를 위해 필요한 것은 표현될 Content의 형식이 무엇인지를 브라우저에게 알려주는 것이다. Response.ContentType에 적절한 Mine형식을 설정함으로써 브라우저에게 Content형식을 알려줄 수 있다. 예를 들어, 워드 문서를 나타내기 위해서는 ContentType = "application/msword"으로 설정한다.
 
키워드: 
KB601057
반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형






브라우저의 Base64 인코딩 지원여부 확인하기

PDF
var isDataURISupported = (function() {
   var testImage = new Image();
  testImage.src =
    '"Keyword.open('/kview.php?kd=%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80+', '브라우저 ')">브라우저 별로 지원여부를 구분하는 것은 구리다는 생각이 들어서 만들어 보았습니다. 작은 문제가 하나 있는데 "onerror" 또는 "onload" 이벤트에 의해 감지되는 브라우저는 즉각적인 확인이 불가능 할 수 있다는 것입니다. 그래서 보호 차원으로 IE계열 인지를 확인하게 했습니다. 참고로 IE8의 IE7모드는 "testImage.complete" 조건을 타기 때문에 즉시 확인 가능합니다.(입맛에 맞게 때려 고쳐 쓰세요) 
반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형


ASP TimeOut Error(408 Error)

1. ASP 스크립트 타임아웃
Option Explicit 상위에 선언하면 안됩니다.
하단에 Server.ScriptTimeOut = 600 (90초 Default)

 

2. DB 명령 수행시 타임아웃
연결시간초과, 수행시간초과 등으로 ASP페이지 실행이 종료됩니다.
명령수행시간 초과인 경우 DB를 오픈 하기 전에 DB.CommandTimeOut = 180 (30초 Default)


3. IIS 메타베이스 편집(IIS 속성에서도 수정 가능)
 a. IIS6.0 콘솔에서 컴퓨터이름에서 속성 - 메타베이스 직접 편집 허용 체크합니다.
 b. %SystemRoot%\system32\Inetsrv\Metabase.xml 을 메모장등으로 엽니다.
 c. AspBufferingLimit="4194304"  값을 크게 변경합니다.  (단위는, byte입니다.)
 d. IIS를 Reset 한 후 확인합니다.

 

ASP 스크립트 제한시간
AspScriptTimeout="90" (초 단위)

ASP 세션 시간 제한
AspSessionTimeout="20" (분 단위)

IIS 연결 시간 제한
ConnectionTimeout="120" (초 단위)

[출처] [ASP] TimeOut Error|작성자 임갱

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

FormatDateTime(Date[,NamedFormat])

 

Date :

   필수적인 인수. 날짜식을 지정합니다

NamedFormat :

  선택적인 인수. 사용한 날짜/시간 형식을 나타내는 숫자 값입니다.

  이 인수를 생략하면 vbGeneralDate를 사용합니다.


NamedFormat 인수는 아래 설정을 가집니다.

상수

설명

---------------------------------------------
vbGeneralDate
0
날짜 또는 시간을 표시합니다. 날짜 부분이 있으면 간단하게 표시 날짜 형식으로 날짜를 표시하며, 시간 부분이 있으면 자세하게 표시 시간 형식으로 시간을 표시합니다. 날짜와 시간이 같이 있으면 두 부분을 모두 표시합니다.

---------------------------------------------
vbLongDate
1
컴퓨터의 국가별 설정에서 지정한 자세하게 표시 날짜 형식으로 날짜를 표시합니다.

---------------------------------------------
vbShortDate
2
컴퓨터의 국가별 설정에서 지정한 간단하게 표시 날짜 형식으로 날짜를 표시합니다

---------------------------------------------
vbLongTime
3
컴퓨터의 국가별 설정에서 지정한 시간 형식으로 시간을 표시합니다

---------------------------------------------
vbShortTime
4
24시간 형식(hh:mm)의 시간을 표시합니다.

 

예제 ---------------------------------------
FormatDateTime("2006-11-17 17:05:22", 0) => 2004-11-17 오후 5:05:22

FormatDateTime("2006-11-17 17:05:22", 1) => 2006년 11월 17일 목요일

FormatDateTime("2006-11-17 17:05:22", 2) => 2006-11-17

FormatDateTime("2006-11-17 17:05:22", 3) => 오후 5:05:22
FormatDateTime("2006-11-17 17:05:22", 4) => 17:22


ASP 의 경우 샘플 소스
예> 2010-03-19 오전 6시 이전까지만 노출하고 싶다하면~

<!-- 요이부터-->

<script type="text/JavaScript">
<!--
function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
 
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
//-->
</script>

   <%
   Dim OneDateTime : OneDateTime=FormatDateTime(Time(), 4)
      Dim SplitTimes : SplitTimes=Split(OneDateTime,":")
      SplitTimes(0) = CInt(SplitTimes(0))
    'Response.write "<br>hour:"&SplitTimes(0)
      if Date <= "2010-03-18" or (Date = "2010-03-19" and SplitTimes(0)<6) Then

   %>
   <div id="notice01" style="position:absolute;left:50px;top:50px;width=465px;height=345px;background-color:#ffffff;overflow:hidden;">
        <table width="465" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td><a href="javascript:MM_showHideLayers('notice01','','hide');" onFocus="this.blur()"><img src="./image/notice/notice.gif" width="465" height="413" border="0"></td>
            </tr>
          </table>
     </div>
      <%
      end if
      %>
      <!-- 요이까지-->


반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

지난 달 애플이 자사의 새로운 신제품을 발표했다. Apple Special Event January 2010 행사에서 스티브잡스는 직접 자사의 아이패드(iPad)라는 신제품을 들고 나와 키노트 연설을 했다. 언제나 그렇듯이 잡스만의 간결한 키노트와 사람들의 호기심을 자극할만한 시연은 많은 이야깃거리를 제공해 줬다. 더욱이 한국 시간으로 새벽 3시에 시작되는 발표를 보기 위해 많은 사람들이 잠을 설치기도 했다.

 

애플의 다른 신제품들처럼 아이패드는 발표 전부터 많은 루머를 갖고 있었다. 많은 사람들이 제품명을 아이슬레이트(iSlate)라고 예상했지만, 신제품의 이름은 아이패드였다. 그리고 중요한 가격은 US 달러로 $499부터 시작한다는 것이다.



<표 1> 아이패드 기능과 용량별 가격

생긴 모양과 기능은 아이팟 터치·아이폰 단말의 스크린을 9.7인치 LED 화면으로 키워놓았다고 생각하면 이해가 잘 된다. 앱스토어를 통해 애플리케이션을 다운로드 받을 수 있고, 전자책 등을 구입할 수도 있다고 한다. 최근 많은 이슈가 되고 있는 e-book 시장에 새로운 강자가 등장했다고 할 수 있겠다.



<화면 1> 아이패드

아이패드 제품과 함께 프로그램 개발을 위한 아이폰 SDK 3.2 베타도 같이 발표됐다. 필자가 실제로 설치해 보니 Xcode로 기존의 아이폰 애플리케이션을 개발해 온 개발자라면 문제없이 개발할 수 있을 것 같았다.

이번 호에서는 그동안 사용해 왔던 IB(Interface Builder)라는 UI 디자인 툴을 이용하지 않고 직접 프로그램을 만드는 방법을 알아볼 것이다. 사실 IB는 화면을 디자인해 주는 것 이외에도 내부적으로는 각각의 Object들에 대해 필요한 Delegate나 View 템플릿 등을 제공해 준다. 하지만 다수의 개발자들은 불필요하다고 생각되는 템플릿 코드(dummy code)나 세밀하게 메모리를 관리해야 할 경우 IB에서 생산하는 것을 거추장스러워 하기도 한다. 그래서 처음부터 다시 만드는 수고를 마다하지 않는다. MS 윈도우 프로그램으로 생각하면 MFC와 같이 비주얼 스튜디오에서 제공해 주는 라이브러리 함수 등을 마다하고 WIN32 API를 직접 사용하는 것을 선호하는 개발자가 많다는 것에 비유될 수 있다.

결과는 툴을 사용하든 코드로 직접 구현하든 같다. 필자는 귀찮은 UI 작업 등이나 빠른 결과물을 얻을 수 있다는 측면에서 IB를 사용하는 것도 그리 나쁘지는 않은 것 같다. 하지만 게임이나 대용량의 데이터를 사용하는 일에는 적합하지 않을 수도 있다.

이제부터 IB 없이 코드로 애플리케이션을 구현하는 방법에 대해 알아보자.

IB 없이 만드는 View와 Object들
가장 먼저 할 일은 새로운 View를 ‘Windows-based Appli cation’으로 만드는 것이다. 불필요한 코드가 가장 적은 템플릿이기 때문이다. 프로젝트의 이름은 ‘withoutIB’로 작성하겠다.



<화면 2> Windows-based Application으로 View 생성

<화면 3>은 최초로 보여지는 View이다. 여기서 우리는 IB를 사용하지 않을 것이므로, ‘Resources-iPhone | MainWindow. xib’를 삭제한다. 삭제할 때는 <화면 4>와 같이 3개의 버튼 중 ‘Also Move to Trash’를 선택해야 프로젝트에서 완전히 지워지고 해당 파일도 쓰레기통으로 이동된다.



<화면 3> 최초로 보여지는 View



<화면 4> Resources-iPhone MainWindows.xlb 삭제

이제부터는 코드를 직접 구현해야 하는데, IB 없이 폼과 각종 Object들을 만들려면 다음과 같은 원리를 염두에 둬야 한다.

1. 최상위 View(버튼, 이미지 등 모든 것을 View라고 부르게 된다)를 하나 만든다(보통 Windows-Based 템플릿으로 만든 윈도우 View를 최상위 View로 사용한다).
2. 초기화 한 최상위 View 위에 원하는 Object를 배치한다.
3. 원하는 이벤트와 동작들을 추가해 코딩한다.
4. Delegat 함수에 적절한 동작을 추가한다.
5. 빌드&디버깅에 들어간다.

이제 IB를 사용하지 않고 프로젝트를 만들고자 할 때 필요한 준비가 끝났다. 코드를 하나하나 살펴보면서 진행하자.

withoutIBAppDelegate.h와 withoutIBAppDelegate.m 파일의 내용을 살펴보자. 이 두 파일은 주로 내부적으로 동작하는 애플리케이션 간의 동작을 제어한다고 생각하면 된다. 그리고 화면에 버튼 등을 실제로 보여주기 위한 소스 코드는 별도로 추가하겠다. 각 코드는 간단한 주석과 함께 살펴보자.

<리스트 1> withoutIBAppDelegate.h

#import <UIKit/UIKit.h>

 

@class withoutIBViewController.;

// ViewController를 사용하기 위해 클래스 이름을 추가한다.

 

@interface withoutIBAppDelegate : NSObject <UIApplicationDelegate> {

UIWindow *window;

withoutIBViewController *viewController;

} // withoutIBAppDelegate 클래스를 만든다. 애플리케이션을 대표하기 위해 <UIApplicationDelegate>를 상속한다.

@property (nonatomic, retain) IBOutlet UIWindow *window;

// 앞으로 윈도우 View에서 이벤트 및 함수 처리를 할 것이다.

@property (nonatomic, retain) withoutIBViewController *viewController;

 

@end

<리스트 2> withoutIBAppDelegate.m

#import "withoutIBAppDelegate.h""withoutIBViewController.h"

 

@implementation withoutIBAppDelegate

 

@synthesize window;

@synthesize viewController;

 

 

(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

viewController = [[withoutIBViewController alloc] init];

 

// Override point for customization after app launch

[window addSubview:viewController.view];

[window makeKeyAndVisible];

 

return YES

}

 

(void)dealloc { //소멸자에 해당되는 함수로 리소스를 정리해 주는 역할을 한다.

[viewController release];

[window release];

[super dealloc];

}

또 실행을 위해 main.c 소스를 <리스트 3>과 같이 수정해야 한다. UIApplicationMain 함수의 네 번째 인자로 withoutView Delegate를 추가한다.

<리스트 3> main.c

int main(int argc, char *argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

int retVal = UIApplicationMain(argc, argv, nil, @"withoutViewDelegate");

[pool release];

return retVal;

}

이제 화면에 보여질 Object들을 담을 withoutIBViewCon troller를 만들 차례이다. <화면 5>와 같이 ‘UIViewController subclass’ 템플릿을 선택한다. IB를 사용하지 않을 예정이므로 Options에서 ‘With XIB for user interface’ 체크박스에 체크하지 않는다.



<화면 5> UIViewController subclass 템플릿 선택

새로 만들어진 파일에는 IB를 이용하지 않기 때문에 별다른 내용이 없다. 이 곳에 개발에 필요한 Object들을 수동으로 만들면 된다. withoutIBViewController.m 파일에 Delegate 함수들이 주석 처리돼서 템플릿 형태로 만들어진다.

<리스트 4> withoutIBViewController.h

#import <UIKit/UIKit.h>

 

@interface withoutIBViewController : UIViewController {

}

 

@end

<리스트 5> withoutIBViewConroller.m

#import "withoutIBViewController.h"

 

@implementation withoutIBViewController

// Implement loadView to create a view hierarchy programmatically, without using a nib.

(void)loadView {

// 이곳에 처음 View가 로드될 때 필요한 함수들을 작성한다.

 

}

/ *Implement viewDidLoad to do additional setup after loading the view, typically from a nib.

(void)viewDidLoad {

[super viewDidLoad];z

}

 

/*Override to allow orientations other than the default portrait orientation.

(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

// Return YES for supported orientations

return (interfaceOrientation == UIInterfaceOrientationPortrait);

}

 

(void)didReceiveMemoryWarning {

// Releases the view if it doesn't have a superview.

[super didReceiveMemoryWarning];

 

// Release any cached data, images, etc that aren't in use.

}

 

(void)viewDidUnload {

// Release any retained subviews of the main view.

// e.g. self.myOutlet = nil;

}

 

(void)dealloc {

[super dealloc];

}

 

@end

버튼 추가하기

먼저 버튼을 놓아둘 배경이 될 UIView를 loadView 함수에서 만든다. loadView 함수는 IB를 사용하지 않을 때(nib 파일을 사용하지 않을 경우) 불려지는 함수이다.

<리스트 6> loadView

- (void)loadView

{

// Create the main view

UIView *contentView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];

self.view = contentView;

[contentView release];

...

다음으로 버튼을 만드는 코드를 살펴보자.

<리스트 7> 버튼 생성

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];

// 버튼 타입을 결정한다.

button.frame = CGRectMake(160.0f, 0.0f, 160.0f, 160.0f); //버튼이 그려질 위치를 표시한다.

button.center = CGPointMake(160.0f, 240.0f);

//버튼의 가운데 지점을 표시한다.

[button setTitle:@"버튼테스트" forState:UIControlStateNormal]; // 버튼의 타이틀을 표시한다.

[button addTarget:self action:@selector(showinfo) forControlEvents:UIControlEventTouchUpInside];

// 버튼을 터치했을 경우 동작하는 이벤트를 showinfo라는 이름으로 사용하기로 했다.

button.hidden = NO; // 버튼이 로딩될 때 보여지도록 한다.

button.alpha = 1.0f; // 버튼의 투명도를 결정한다. 1.0~0.1까지 정할 수 있다.

[self.view addSubview:button]; // 메인 View에 버튼을 붙인다.

이것을 컴파일하고 실행해 보면 <화면 6>과 같은 버튼이 생성될 것이다.



<화면 6> 버튼 생성

앞에서 버튼이 눌려졌을 경우 동작하는 함수 이름을 showinfo로 만들기로 했다. 이곳에 여러 가지 동작을 넣을 수 있는데, 필자는 AlertView를 사용해 보기로 했다. <리스트 8>과 같이 함수를 만들어 둔다.

<리스트 8> AlertView 생성

-(void) showinfo {

UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"IB없이 만들기"

message:@"Alert View 입니다.";

delegate:self

cancelButtonTitle:@"취소"

otherButtonTitles:@"확인",nil

[alert show];

[alert release];

}

실행한 결과는 <화면 6>의 오른쪽 이미지와 같다.

네비게이션 바 만들기

네비게이션 바(navigation Bar)는 화면(view)의 최상위에 위치한 형태다. 일반적으로 거의 모든 아이폰 프로그램에서 사용되는 것을 볼 수 있다. UIView는 버튼을 만들 때 사용한 것을 재활용한다.

네비게이션 바는 여러 View들을 서로 전환하면서 사용하고자 할 때 주로 사용된다. 이 때문에 몇 가지 형태의 스타일 버튼이 같이 쓰이게 되는데, 이번 강좌에서는 모양을 확인하는 차원에서 형태만 보자.

먼저 네비게이션 바를 그린다. 다른 Object들과 유사한 방식으로 다음과 같이 initWithFram으로 표시될 좌표를 설정한다.

UINavigationBar *navibar = [[UINavigationBar alloc] initWithFrame: CGRectMake(0.0, 0.0, 320.0, 40.0)];

이렇게 만든 네비게이션 바에 필요한 타이틀이나 버튼을 붙여보자. 여러 가지 방식으로 원하는 아이템을 붙일 수 있다. 다음은 타이틀을 붙일 경우의 코드이다.

UINavigationItem *naviItem = [[UINavigationItem alloc] initWithTitle:@"네비게이션바 타이틀"];
[navibar pushNavigationItem:naviItem];

이 코드는 단순히 타이틀만을 표시해 본 것이고, 타이틀 좌·우에 버튼을 붙일 경우는 다음과 같은 방식으로 코드를 naviItem 아래에 붙이면 된다.

[navibar showLeftButton:@"오른쪽" withStyle: 0
rightButton:@"왼쪽" withStyle: 0];

일반적인 형태로 네비게이션 바에 방향 버튼만을 추가할 경우는 다음과 같이 하면 된다.

[navibar showButtonsWithLeftTitle:@"Back" rightTitle:nil
leftBack: YES ];
// 왼쪽에 방향표시 버튼을 붙일 경우



<화면 7> 타이블 좌우에 버튼 생성

텍스트 박스 만들기
다음으로는 사용자의 입력을 받아서 처리하는 텍스트 박스를 만들어보자. 다른 Object 들과 마찬가지로 좌표를 생성하고 해당되는 View를 추가하면 된다.

<리스트 9> 텍스트 박스 생성

// 텍스트 박스를 생성하는 예제

UITextField *txtbox= [[UITextField alloc] initWithFrame:CGRectMake(10.0, 10.0, 300.0, 30.0)];

[txtbox setBorderStyle:UITextBorderStyleRoundedRect];

[self.view addSubview:txtbox];



<화면8> 텍스트 박스 생성

텍스트 박스에서 자주 사용되는 프로퍼티를 살펴보자. 다음과 같은 항목들이 있다.

@property(nonatomic,copy)   NSString            *text;                 
@property(nonatomic,retain) UIColor             *textColor;           
@property(nonatomic,retain) UIFont              *font;                 
@property(nonatomic)        UITextAlignment     textAlignment;        
@property(nonatomic)        UITextBorderStyle   borderStyle;          
@property(nonatomic,copy)   NSString            *placeholder;        
@property(nonatomic)        BOOL                clearsOnBeginEditing; 
@property(nonatomic)        BOOL                 adjustsFontSizeToFitWidth
@property(nonatomic)        CGFloat             minimumFontSize;      
@property(nonatomic,assign) id<UITextFieldDelegate> delegate;            
@property(nonatomic,retain) UIImage             *background;           
@property(nonatomic,retain) UIImage             *disabledBackground;   
@property(nonatomic,readonly,getter=isEditing) BOOL editing;

다음과 같은 방법으로 사용하면 된다.

1. 기본적으로 표시되는 텍스트를 표현할 때
   [txtbox setText:@ “기본적으로 표시되는 텍스트”];

2. 텍스트의 색상을 빨간색으로 변경할 때
   [txtbox setTextColor:[UIColor redColor]];

3. 텍스트의 폰트를 다른 폰트로 변경할 때
   [txtbox setFont:[UIFont fontWithName:@“DBLCDTempBlack” size:24.0]];

4. 텍스트를 가운데 정렬하고 자할 때
   [txtbox setTextAlignment:UITextAlignmentCenter];

이와 같은 방법으로 여러 가지 항목들을 조절할 수 있다.

라벨 만들기

라벨도 아이폰 UI에서 가장 많이 사용되는 것 중 하나일 것이다. 텍스트 박스와 유사하게 다음과 같은 코드로 만들 수 있다.

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10.0,60.0, 300.0, 30.0)]; [label setText:@"라벨입니다."]; [self.view addSubview:label];



<화면 9> 라벨 생성

<주요 프로퍼티>

@property(nonatomic,copy) NSString   *text;
@property(nonatomic,retain) UIFont   *font;
@property(nonatomic,retain) UIColor   *testColor;
@property(nonatomic,retain) UIColor   *shadowColor;
@property(nonatomic)   CGSize   shadowOffset;
@property(nonatomic)   UITextAlignment textAlignment;
@property(nonatomic)   UILineBreakMode lindBreakMode;

이미지 View 만들기

자주 쓰이는 기능 중의 하나인 파일로부터 이미지를 로드하는 방법을 알아보자.

이미지를 로드하기 위해서는 UIImage라는 Object를 사용한다. 이 과정을 설명하기 위해 glass_numbers.png라는 이미지 파일을 프로젝트에 추가했다. 다음과 같은 코드가 사용된다.

UIImageView *imgload = [[UIImageView alloc] initWithFrame:self.view.bounds];
[imgload initWithImage:[UIImage imageNamed: @"glass_numbers_0.png"]];
self.view addSubview:imgload];



<화면 10> 이미지 View 생성

<주요 프로퍼티>

@property(nonatomic,getter=isUserInteractionEnabled) BOOL userInteractionEnabled;
@property(nonatomic)   NSInteger tag;
@property(nonatomic,readonly,retain)   CALayer *layer;
@property(nonatomic)   CGRect   frame;
@property(nonatomic)   CGRect   bounds;
@property(nonatomic)   CGPoint   center;
@property(nonatomic)   CGAffineTransform transform;
@property(nonatomic,getter=isMultipleTouchEnabled) BOOL multipleTouchEnabled;
@property(nonatomic,getter=isExclusiveTouch) BOOL exclusiveTouch;

<사용 예>

1. 이미지를 화면의 가운데로 오게 할 때 

[imgload setCenter:CGPointMake(160.0, 240.0)];

2. 새로운 이미지를 불러올 때 

[imgload setImage:[UIImage imageNamed:@"glass_numbers_0 .png"]];

3. URL을 입력해 이미지를 불러오고자 할 때

① http 프로토콜을 사용해 이미지를 불러올 때는 다음과 같이 먼저 이미지가 포함된 URL을 만들고 ImageWithData라는 프로퍼티를 사용해 해당 이미지를 가져오게 된다.

NSURL *aTempURL = [NSURL
URLWithString:@"https://mail.google.com/mail/help/images /logo2.gif"]; NSData *aTempData = [NSData dataWithContentsOf URL:aTempURL];
// 이렇게 하면 aTempData에 주소의 이미지 데이터가 들어간다 .
[imgload setImage:[UIImage imageWithData:aTempData]];

② 이미지를 회전시킬 때는 setTransform이라는 프로퍼티를 사용하는데, 원하는 방향과 좌표를 다음과 같은 방식으로 지정해 주면 이미지를 회전할 수 있다.

[imgload setTransform:CGAffineTransformMake(10.0, 5.0, 0.0, 5.0, 10.0, 10.0)];



<화면 11> 이미지 회전

WebView 만들기
이름 그대로 웹 브라우저와 같은 역할을 하는 Object이다. URL을 그대로 가져와서 사용하려면 loadRequest라는 함수를 사용한다. 그리고 URLWithString이라는 애트리뷰트를 통해 URL을 입력한다. 다음은 google.com에 접속하는 경우의 예이다.

UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]]; [self.view addSubview:webView];



<화면 12> WebView 생성

<주요 프로퍼티>

@property(nonatomic,readonly,retain) NSURLRequest *request;
@property(nonatomic,readonly,getter=canGoBack) BOOL canGoBack;
@property(nonatomic,readonly,getter=canGoForward) BOOL canGoForward;
@property(nonatomic,readonly,getter=isLoading) BOOL loading;
@property(nonatomic) BOOL scalesPageToFit;

<사용 예>

1. 웹 페이지 로딩 애니메이션 보이기
 

아이폰에서 사파리 브라우저로 웹 페이지를 로딩할 때 페이지가 로드되는 중에 상단에 로딩 애니메이션이 동작하는 것을 볼 수 있다. 이것은 다음과 같이 networkActivityIndicatorVisible이라는 애트리뷰트를 사용하면 된다.

UIApplication* app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = YES;



<화면 13> 웹 페이지 로딩 애니메이션 생성

이 때 애니메이션을 종료하려면 UIWebView의 Delegate를 사용해야 한다. Delegate는 일종의 콜백 함수 역할을 하는 Obj-C의 컨트롤러이다. 따라서 콜백 함수처럼 해당 Object에 전달되는 이벤트나 메시지 등을 모니터링하고 있다가 반응을 하게 된다.

이번 예에서는 Delegate 함수를 사용했다.


-(void)webViewDidFinishLoad:(UIWebView *)webView;
withoutIBViewController.h에서 다음과 같은 Delegate 컨트롤러를 확인한다. <UIWebViewDelegate>가 있는지 보자.
 
#import <UIKit/UIKit.h>
@interface withoutIBViewController : UIViewController <UIWebViewDelegate> { }
@end

다음으로 실제로 사용될 곳에 Delegate 함수를 사용하겠다고 알려준다. WebView의 경우는 다음과 같이 쓰면 된다.

webView.delegate = self

이제 WebView에서 발생되는 메시지를 기다렸다가 Delegate가 해당되는 동작을 하면 된다. 다음과 같이 하면 google.com 페이지가 열리는 동안 로딩 애니메이션을 볼 수 있다.

<리스트 10> WebView 생성

UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds]; [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]];

UIApplication* app = [UIApplication sharedApplication]; app.networkActivityIndicatorVisible = YES; //로딩애니메이션이 동작한다 .

webView.delegate = self; [self.view addSubview:webView];

웹 페이지가 모두 로딩되면 WebView Delegate를 사용해 다음과 같이 애니메이션을 중단해 준다.

-(void)webViewDidFinishLoad:(UIWebView *)webView {UIApplication sharedApplication].networkActivityIndicatorVisible = NO; }

MapView만들기 
MapView는 구글 맵을 활용해서 지도를 볼 수 있는 Object이다. <화면 14>와 같이 지도를 핀 과 함께 표시할 때 사용한다. 지도를 표시하기 위해서 MapKit를 import하고 MapKit. framework을 포함하도록 한다 .

#import <MapKit/MapKit.h>

MapView는 MK로 시작되는 클래스를 사용해서 클래스 포인터를 만든다.

MKMapView *mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];



<화면 14> MapView 생성

<주요 프로퍼티>

@property (nonatomic) MKMapType mapType;
@property (nonatomic) MKCoordinateRegion region;
@property (nonatomic) CLLocationCoordinate2D centerCoordinate;
@property(nonatomic,getter=isZoomEnabled) BOOL zoomEnabled;
@property(nonatomic,getter=isScrollEnabled) BOOL scrollEnabled;
@property (nonatomic) BOOL showsUserLocation;
@property (nonatomic,readonly) MKUserLocation *userLocation;
@property (nonatomic,readonly,getter=isUserLocationVisible) BOOL userLocationVisible;
@property (nonatomic, readonly) NSArray *annotations;
@property (nonatomic, readonly) CGRect annotationVisibleRect;

<사용 예>

1. 지도를 보여줄 때 

먼저 withoutIBViewController.h에 MapKit을 포함하고, MapKit.framework을 가져온 후 Delegate 컨트롤러를 추가한다. 2개 이상의 Delegate 컨트롤러를 추가할 때는 다음과 같이 ‘,’로 구분한다.

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface withoutIBViewController : UIViewController <UIWebViewDelegate, MKMapViewDelegate> {
}
@end 

withoutIBViewController.m 파일에 MapView를 생성한다. 다른 Object를 추가할 때와 유사하게 쓰면 된다.
 

MKMapView *mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];


2. 사용자 위치를 표시할 때
mapView.showsUserLocation = YES

3. 지도의 확대·축소가 가능하도록 할 때
mapView.zoomEnabled = YES

4,지도에 스크롤이 가능하도록 할 때
mapView.scrollEnabled = YES

5, 화면에 표시할 지도의 형태를 정의할 때
mapType이라는 프로퍼티를 쓰는데, 종류는 3가지다.

mapView.mapType = MKMapTypeStandard

지도의 타입은 다음과 같다.

enum{
   MKMapTypeStandard = 0,
   MKMapTypeSatellite,
   MKMapTypeHybrid
};
typedef NSUInteger MKMapType;

<화면 15>는 새틀라이트(Satellite) 타입과 하이브리드 타입으로 지도를 표시해 본 것이다 .

Delegate를 사용하기 위해서 다음의 코드를 추가한다.

mapView.delegate = self;


이번 호에서는 IB를 사용하지 않고 코드만으로 각종 View와 Object들을 만들어 봤다. IB를 사용하지 않고 UI를 구성하는 과정을 소개해서 그런지 그림이 별로 없는 강좌가 된 듯 하다. 다음 호 부터는 애플 앱스토어에서 판매중인 애플리케이션에서 구현된 프로그램 기법을 분석해 보고 실제 구현도 해보자.

안경훈 linuxgood@gmail.com|리눅스와 맥OS에 관심이 많으며, 모바일 디바이스에서 동작되는 사용자 중심의 프로그램을 개발하는 것에 흥미를 갖고 있다. 현재 삼성SDS에서 근무 중이다.

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

무한루프에서 낭비되는 자원 절약을 위해 어플리케이션 종료를 위해 사용

서버의 스크립트 시간은 기본이 90초!!!
90초가 되도록 ASP 스크립트가 계속 실행한다면 서버는 응답을 하지 않고 질문내용처럼 에러페이지를 보여줌.


ASP 소스가 시작되는 맨 첫줄에 Server.ScriptTimeOut = 10000
10000 초동안 스크립트가 실행되도록 하는 설정

참고로 메일을 보내실때 IIS의 SMTP로 보내신다면 1000통씩 끊어서 보내시는게 좋

대~~ 누구 의견이야?? 

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

1. 새 컬럼 추가
    alter table 테이블이름
    add (컬럼이름 데이터타입 [default 표현식] [, 다른 컬럼 정의...]);

    ex) alter table any_table add ( any_column1 int not null, any_column2 int);

- 추가된 컬럼은 항상 마지막 순서에 놓인다.(컬럼 순서를 변경할 수 없다.)
- 추가된 데이터는 각 행에 널값으로 삽입된다.
 테이블 내에 레코드가 존재한다면 낫널인 컬럼을 추가할 수 없다.
 빈 테이블일 경우 낫 널을 부여할 수 있다.

2. 존재하는 컬럼 수정
    alter table 테이블이름
    modify (컬럼이름 데이터타입 [default 표현식] [, 다른 컬럼 정의...]);

    ex) alter table any_table modify (any_column1 varchar2(20));

- 타입, 사이즈, 기본값을 변경 가능
- 디폴트 값을 변경했을 경우 이후 삽입되는 데이터에 대해서만 적용된다.

가이드라인
- 숫자형 사이즈 증가 가능
- 문자형 데이터 사이즈 증가 가능
- 사이즈 줄일 수 있는 경우
        모든 값이 널일 경우
        레코드가 없을 경우
        줄이고자 하는 사이즈가 현재 들어가있는 값들보다 작을 경우
- 컬럼의 모든 값이 널 값일 경우 컬럼의 타입을 변경 가능하다.
        char를 varchar2 형태로 바꿀 때는 타입 변경 가능.
- cahr to varchar2, varchar2 to char 변환은 컬럼이 널값만 가지고 있거나 사이즈 변경이 없을 경우만.
- 디폴트 값은 다음 입력부터 반영

3. 컬럼 드랍
    alter table 테이블이름
    drop (컬럼이름);

    ex) alter table any_table drop (any_column1);

- 컬럼에 데이터 존재 유무에 무관하게 드랍 가능
- 한번에 한 컬럼만 삭제 가능하다.
- 테이블은 적어도 한개의 컬럼은 가지고 있어야 한다.
- 드랍하고 나면 복구 불가능
- 제약의 일부이거나 인덱스의 일부일 경우 삭제할 수 없다.
 cascade옵션을 추가한다.
- 레코드가 많은 경우 드랍 칼럼은 옳지 않다. 락을 피하기 위해 유저가 적을때 unused를 쓰고 드랍하자.

4. set unused 옵션

- 더이상 사용하지 않는 컬럼에 대해 set unused를 사용한다.

    alter table 테이블 이름
    set unused (컬럼 이름);
or
    alter table 테이블 이름
    set unused column (컬럼 이름);    

then

    alter table 테이블이름
    drop unused columns;

set unused 옵션도 복구가 불가능하다.
딕셔너리의 USER_UNUSED_COL_TABS 에 저장된다.

5. 제약 추가

- 제약을 추가하거나 드랍할 수 있지만 존재하는 제약을 수정할 수는 없다.
- 제약을 활성화, 비활성화 할 수 있다.
- 낫널 제약을 추가할 때는 반드시 modify를 함께 사용한다.

    alter table 테이블명
    add [constraint 제약명]
    타입 (컬럼명);

- 낫널은 테이블이 비어있거나 해당 컬럼의 모든 레코드가 값을 가질 경우 가능하다.

6. on delete cascade


    alter table Emp2
    add constraint emp_dt_fk
    foreign key (Department_id)
    references departments on delete cascade);

    on delete cascade
- 부모 테이블의 레코드가 삭제되면 같이 삭제될것

7. 제약 드랍

    alter table emp2
    drop constraint emp_mgr_fk;


    - pk를 참조하는 fk도 함께 삭제하기 위해 cascade를 사용한다.
    alter table dept2
    drop primary key cascade;


!! 제약을 드랍하기 위해 제약 이름을 USER_CONSTRAINRS와 USER_CONS_COLUMNS에서 확인할 수 있다.

8. 제약 비활성화/활성화

제약 비활성화

- disable 절을 이용해 비활성화
- cascade 옵션으로 종속적인 constraints도 함께 비활성화

    alter table emp2
    disable  constraint emp_dt_fk;

- pk나 uk를 비활성화 할 경우 내부적으로 uk를 삭제해버린다.


제약 활성화

    alter table emp2
    enable  constraint emp_dt_fk;

- 활성화할 경우 모든 데이터에 대해 제약 조건 검사를 한다.
- pk, uk가 활성화 될 경우 uk가 자동으로 생성된다.
- enable은 create table, alter table에 모두 사용할 수 있다.
- cascade 로 비활성화된 포린 키는 활성화되지 않는다.
- uk, pk를 활성화하기 위해 create index 권한이 필요하다.

반응형
Posted by 친절한 웬디양~ㅎㅎ
|