Dim RS As Recordset

strQUERY = "  SELECT * FROM TEST"

RS = TBOpen(strQUERY, False)

.RowCount = RS.RecordCount '전체레코드를 구하는 방법

처음에 이것도 잘 못찾아서 해맸다. 사경을...

저작자 표시
신고
레퍼런스만 뒤지다뒤지다 안돼서 스프레드 속성값을 찾아보니 protect 라는 속성이 보여서 false로 변경하니 바로 풀린다. 역시 사람은 경험을 해야 하는구나 하는 생각이 든다.

저작자 표시
신고
-------------makeCookie.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<html>
<head>
<title>쿠키를 생성하는 예제</title>
</head>
<%
 String cookieName = "myCookie";
 Cookie cookie = new Cookie(cookieName, "hongkd");
 cookie.setMaxAge(60*2);
 cookie.setValue("kimkd");
 response.addCookie(cookie);
%>
<body>
<h2>쿠키를 생성하는 예제</h2>
<p>
"<%=cookieName %>" 쿠키가 생성되었습니다.<br>
<input type="button" value="쿠키의 내용확인"
onclick="javascript:window.location='useCookie.jsp'">
</p>
</body>
</html>

-------------useCookie.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<html>
<head>
<title>웹 브라이저에 저장된 쿠키를 가져오는 예제</title>
</head>
<body>
<h2>웹 브라저에 저장된 쿠키를 가져오는 예제</h2>
 <%
  Cookie[] cookies = request.getCookies();
  if(cookies != null){   
   for(int i=0; i<cookies.length;++i){
    if(cookies[i].getName().equals("myCookie")){
 %>
     쿠키의 이름은 : "<%=cookies[i].getName()%>" 이고,
     쿠키의 값은      : "<%=cookies[i].getValue()%>" 입니다.
      
 <%
             }
   }
  }
 %>
</body>
</html>

쿠키를 생성하고 사용하는 방법이다. 진하게 표시된 부분을 유념해야 한다. 저부분이 틀리면 파라미터를 제대로 전달받지 못해서 노가다하기 싶상이다. 처음이라 그런지 나도 10여분정도 저 부분 찾느라 훈줄이 났다. 책에 있는 데로 그대로 쳤는데 역시 책에 오타였다. 정말 찢어버리고 싶다. 그래도 그책으로 꿋꿋히 버티면서 열공중이다.
저작자 표시
신고

아래소스는 사용자가 주민번호를 입력할때 생일이 자동으로 입력되도록 해주라는 요구사항이였는데 아래와 같이 만들면 되겠다. 포커스를 이해하자.

Private Sub Jumin_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles mskJumin.LostFocus
    Dim strSex As String
    Dim strBirth As String

    strSex = Mid(mskJumin.CtlText, 8, 1)
    Select Case strSex
        Case "1", "3"
            cboSex.SelectedIndex = 1
        Case "2", "4"
            cboSex.SelectedIndex = 2
    End Select

    If mskJumin.CtlText <> "" Then '주민번호 자동생성
        mskBirth.CtlText = Format(Val("19" + MSVB.Left(mskJumin.CtlText, 6)), "####-##-##")
    End If
End Sub

저작자 표시
신고

mskindate.CtlText = Format(Now(), "yyyy-MM-dd") '날짜표현
mskBirth.CtlText = Format(Val(RS.Fields("birth").Value), "####-##-##") '생일
mskJumin.CtlText = Format(Val(RS.Fields("jumin").Value), "000000-0000000") '주민번호
txtB_surungyak.Text = Format(Val(Replace(txtB_surungyak.Text & "", ",", "")), "#,##0") '금액표현

사무용 프로그램에서는 주민번호나 생일, 금액표현 같은 부분이 세심하게 표현되어야 할때가 자주 있는데 이와 관련된 함수들을 외워두고 정리해 둔다면 유지보수 및 개발에 많은 도움이 될것이고 개발시간도 단축될것이다.
저작자 표시
신고

문자를 추출하는 함수는 여러가지가 있지만 이런 기법적인 함수는 외워두자. 가장 빈번하게 사용되는것 같다.

nowYear = MSVB.Left(mskDateYM.CtlText, 4) '년 추출
nowMonth = MSVB.Left(MSVB.Mid(mskDateYM.CtlText, 6), 2) '월 추출
nowDay = MSVB.Right(mskDateYM.CtlText, 2) '일 추출

저작자 표시
신고

VB로 실무를 하다보면 사용자 요구사항 중에 빈번하게 나오는 요구사항들은 편리성인데 그중 하나가 파일을 저장할때 다이얼로그 박스가 나오면서 파일명이 기입되게 하는 부분인데 무심코 만든 코딩보다는 신경써서 만들어 놓아야 할것이다. 아래는 해당코드인데 자신에 맡게 변경해서 사용하면 된다.

    Private Sub SaveFile()

        SaveFileDialog1.Title = "TEST"
        SaveFileDialog1.DefaultExt = "xls"
        SaveFileDialog1.Filter = "Excel Files|*.xls|All Files|*.*"
        SaveFileDialog1.FilterIndex = 1
        SaveFileDialog1.FileName = Format(Now(), "yyyyMMdd") + "_" + "Titel명"
        SaveFileDialog1.ShowDialog()

        If SaveFileDialog1.FileName = "" Then Exit Sub

        Dim strExt As String
        strExt = System.IO.Path.GetExtension(SaveFileDialog1.FileName)
        strExt = strExt.ToUpper()


        If strExt = ".XLS" Then
            파일저장 함수 호출
        End If

    End Sub

p.s 모든 언어가 마찬가지 겠지만 이런 섬세한 부분까지 챙겨준다면 사용자는 프로그램을 만들어준 개발자를 계속 찾을것이다.

저작자 표시
신고


Dim RS As Recordset

RS = TBOpen(strQUERY, True)

If Not RS.EOF Then
    Try
        Dim img As Object = RS.Fields("IMG").Value
        If img Is Nothing Then
   
        ElseIf IsDBNull(img) Then
            .Cells(35, 14).CellType = Nothing
        Else
            Dim strm As System.IO.Stream = New System.IO.MemoryStream(CType(img, Byte()))
            Dim img1 As Bitmap = New Bitmap(strm)
            Dim imgType As New FarPoint.Win.Spread.CellType.GeneralCellType
            imgType.BackgroundImage = New FarPoint.Win.Picture(img1, FarPoint.Win.RenderStyle.Stretch, Color.White, FarPoint.Win.HorizontalAlignment.Center, FarPoint.Win.VerticalAlignment.Center)  ' img1 
'New Picture(Image.FromStream(s))
            .Cells(35, 14).CellType = imgType
        End If
   
    Catch ex As Exception
   
    End Try

End If

밑줄그은 부분이 중요하다. 스트림으로 저장된 데이터를 이미지 타입인 비트맵으로 변환하는 과정이므로 유심히 보고 실행해 보자.

저작자 표시
신고

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlServerCe; // SQL Server Compact 3.5 사용시 추가하시오

namespace Genealogy
{
    public class DB_Management
    {
        #region DB 전역변수 선언
        private string connentionString = @"Data Source=C:\Documents and Settings\Administrator\My Documents\DB.SDF;" +
                "Password=1234;";

        private SqlCeConnection con = null;
        private SqlCeCommand cmd = null;
        private SqlCeTransaction trn = null;

        public Boolean ExecuteQueryFlag;
        #endregion
       
        #region 생성자(초기화
        public DB_Management()
        {
            // 데이터베이스 연결
            SqlCeConnection con = new SqlCeConnection(connentionString);
            // 데이터베이스 커맨드 생성
            SqlCeCommand cmd = new SqlCeCommand();
            // 트랜잭션 생성
            SqlCeTransaction trn = con.BeginTransaction();
            ExecuteQueryFlag = false;
        }
        #endregion

        #region DB 연결
        public void DB_Connection()
        {
            con.Open();
        }
        #endregion

        #region Command Connection
        private void CommConnection(string Commandtext)
        {
            // 커맨드에 커넥션을 연결
            cmd.Connection = con;

            cmd.Transaction = trn;

            // 쿼리 생성 : Insert 쿼리
            cmd.CommandText = Commandtext;

            // 쿼리 실행
            cmd.ExecuteNonQuery();
        }
        #endregion
      
        #region Insert
        public void DB_Record_Insert(string TableID, string RecordName)
        {
            string InsertRecordName = "INSERT INTO" + TableID + "VALUES('" +
                                      RecordName + "')";
           
            CommConnection(InsertRecordName);

            if(ExecuteQueryFlag == true)
            {
                // 커밋
                trn.Commit();
            }
            else
            {
                // 롤백
                trn.Rollback();
            }

            con.Close();
           
        }
        #endregion

        #region Select
        public void DB_Record_Select(int Indexnumber, params string[] args)
        {
            string SelectRecordName = string.Empty;
            
            if (Indexnumber < 0)
            {
                // select 쿼리로 변경
                SelectRecordName = "SELECT * FROM" + args[0];
            }
            con.Close();
        }
        #endregion
    }
}

비번은 마음에 드는걸로 바꾸면 될듯 하다.
commit과 rollback이 되기때문에 compact db를 자주 사용하는 편이다. 꽤 쓸만하다.

저작자 표시
신고

저작자 표시
신고