C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[2969] Re:[질문] Edit1->Text..
최지수 [] 3760 읽음    2000-02-06 00:00
이상민 님이 쓰신 글 :
:
:  안녕하세요. 저는 빌더 초본데요..
:  간단한 학생관리 데이터베이스 프로그램을 만들어 보려고 하는데
:  입력을 Edit로 받아서 Table의 필드에 추가시키려면 어떻게 해야 되죠?
:  근데 데이터베이스 프로그램을 만들때 그렇게 하는게 보편적인 방법인가요?
:  그럼 답변부탁드릴께요.. 근데 아부가 아니라..
:  국내에도 이런 사이트가 있다는게 정말 기쁘네요..
:
안녕하세요? 최지수입니다.

데이터베이스의 테이블에 Edit의 내용을 받는데는 여러가지 방법이 있습니다.
(정말 많습니다...)

C++Builder의 TTable라는 컴포넌트를 쓰느냐 안쓰느냐에 따라서도 코딩이 달라집니다..
(볼랜드측의 말과 여러 전문가들의 의견을 조합하면 C/S방식의 프로그래밍을 할때는 TTable를 쓰지
않는것이 현명한 방법이라고 합니다.)

상민님께서 초보라고 하셨으니 C/S방식이 아닌것으로 가정하고 말씀드리겠습니다.

상민님께서 만드신 테이블이랑 TTable컴포넌트랑 바운딩을 시키신후
그 테이블의 메소드인 AddNew(), Post()등을 이용하면 해결이 되겠군요..

먼저 테이블의 명을 Student라고 하고 그 테이블의 필드를 아래와 같이 정했다고 가정합니다.

필드명     타입    사이즈   비고
-------------------------------------------------
Sid         +              자동증가(인덱스필드)
Name       Alpha   10      성명필드
Bunho      Alpha   20      번호필드
Phone      Alpha   15      전화번호필드


위의 내용중 번호와 전화번호는 일반적으로 숫자이나 계산을 위한 필드가 아니므로 Alpha로 처리
했습니다.

Name필드의 내용을 받는것이 Edt_Name 에디트박스이고, Bunho의 필드를 입력받는것은 Edt_Bunho,
Phone의 내용을 입력받는것은 Edt_Phone라고 합시다.

바운딩된 테이블은 Tbl_Student라고 하고요...

Tbl_Student->Append();      //---- 1번라인
Tbl_Student->FieldByName("Name")->AsString = Edt_Name->Text; //--- 2번라인
Tbl_Student->FieldByName("Bunho")->AsString = Edt_Bunho->Text; //---3번라인
Tbl_Student->FieldByName("Phone")->AsString = Edt_Phone->Text; //---4번라인
Tbl_Student->Post();  //--5번라인

여기까지입니다. 맨끝의 주석( //를 포함한 그 뒤의문장) 은 설명을 달기위해 임의로 붙인것입니다

1번라인 : Append()는 쉽게 이야기 하면 데이터베이스가 입력을 받기 위해서 레코드에 공간(?)을
만드는 작업입니다. 그러니까 새로운 데이터를 입력받기위해 빈 레코드를 하나 생성한다 라고 아시면
되겠습니다.(여기서 생성되는 레코드가 일반적으로 맨끝에 생성이 되나 그 테이블의 레코드가 빈번하게
삭제가 되었다면 그 삭제된 공간에 들어가게됩니다. 그러니까 결론적으로 테이블의 어느위치에 빈공간을
생성할지는 모릅니다. 참고하십시요)

2번라인 : Edt_Name->Text의 내용을 필드명이 Name이고 타입이 String(데이터베이스 데스크탑에서는
Alpha,SQL Server에서는 Varchar 타입)인 필드에 들어가게 됩니다. 만일 Name필드가 Numeric 타입의
필드라면 Tbl_Student->FieldByName("Name")->AsInteger = Edt_Name->Text;  가 됩니다.
->AsString, ->AsInteger등의 여러가지 타입을 정해줄수 있습니다.(자세한것은 도움말을 참조하시거나
정태영님이 지으신 "볼랜드 C++Builder 4 정복" 책을 참조하십시요)

3번라인, 4번라인 은 위의 2번라인과 설명이 같습니다.

5번라인 : Post(); 는 1번라인의 Append(); 에서 만들어진 빈 레코드에 위의 2,3,4 번라인의 내용을
세이브(?)하는 명령어 입니다.

이렇게 하시면 에디트박스의 내용이 데이터베이스로 옮겨진것을 확인하실수 있습니다.

FieldByName 말고도 FieldValues라는 것과 기억이 가물가물한데... 필드의 인덱스로 데이터베이스로
옮길 수도 있으나 예전에(순전히 제 경험입니다만....)FieldValues를 썼다가 크게 혼난적(?)이 있기
때문에 전 주로 FieldByName을 씁니다.


그리고 제가 권장할 만한 것은 SQL(Structured Query Language)의 Insert문을 써서 바로 입력하는것
입니다
Insert문의 문법은 "Insert Into 테이블명 Values(데이터)" 입니다.

이것역시 자세한것은 도움말을 참조 하시면 되겠군요



데이터베이스 프로그래밍을 하실려면 아무래도 SQL문장을 많이 알고 문법을 많이 아는것이 그 프로그래밍
을 깔끔하고, 좀더 속도감 있게 하실수 있습니다.
다시 말씀드리면 필수!! 라고 생각하시면 되겠습니다.

열심히 공부하셔서 멋진 프로그래밍 하십시요

+ -

관련 글 리스트
2968 [질문] Edit1->Text.. 이상민 3608 2000/02/06
2969     Re:[질문] Edit1->Text.. 최지수 3760 2000/02/06
2989         Re:Re:[질문] Edit1->Text.. 이상민 3591 2000/02/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.