안녕하세요..
허접한 초봅니다..
다름이 아니오라 ADOQuery를 쓰려니깐
도대체 어떻게 쓰는건지 감이 안잡혀서 이렇게 문의 드립니다..
질문....
컨포넌트 속성중 Active가 처음에는 True로 잡히지 않던데
나중에 SQL속성에 SQL문장을 써준후 Active를 True로 해 줘야 하나요?
ADOTable 이나 ADOQuery에도 속성중에 .SORT 항목이 있어서
도움말을 따라 해보았으나 에러만 뜹니다..
소트속성은 어떻게 사용해야 하는지요..
ADOQuery에 DataSource 부분과 Conection(디비파일연결?)
부분이 있던데
두 군데 다 설정을 해야 하는건가요?
왜 두군데 일까? 이해가 잘 안갑니다...
ADOQuery를 이용하여 레코드를 입력하려고 합니다.
SQL문에 Insert 문을 쓰는건 알겠는데
Insert ...........
어떻게 써야죠? 검색해보니깐 파람을 이용하라고 나와있던데
무슨 예긴지 감이 안잡힙니다.....
그럼 이만..
그래서 몇자 적어봅니다.
우선 님의 경우 공부을 목적으로 하는 것같으니....
이와 공부을 할거라면 DB쪽은 트랜잭션까지 생각하면서 공부을 겸하는
것이 낳을거라 생각이 듭니다.
ADOQuery도 트랜잭션 처리가 있긴 하지만 저도 아직까진 알아보지 못했슴
ADOConnection을 이용하면 트랜잭션이 가능한 걸로 다른님의 글에서
보았습니다.
그리 어려운것 같진않더군요.
우선 님이 쿼리에 대해서 물었으니 답변을 드리자면..
2가지 방법이 있습니다.
첫번째 방법은 대부분의 서적에 지필대여 있는 부분이며 님이 물어본 글귀에도 있는 내용이지만..
Adoquery 컴포넌트 속성에서 사용자가 직접 지정을 하는 방법
두번째는 코딩상에서 ADOQuery컴포넌트 속성을 지정해주는 방법이 있습니다.
서문이 많지요..저도 초보이며 님처럼 궁금점이 많아서서 그런지 알고있는것만 말씀드리자니 글이 길어지는 군요.
첫번째 방법:
Active부분이 있습니다. 처음에는 False로 되어있지요..
이부분을 True로 하면 100% Error가 납니다.
속성 하단부분에 보면 SQL이란 속성이 있는데
이부분에서 최소한 Select * From ??등은 해줘야 합니다.
당연히 모든필드(*)을 표시하면 좋지 않은 습관이 됩니다.
참고하시구요..
최소 속성설정 항목은 Connection이나ConnectionString으로
해당 DB을 연결합니다. 그리구 SQL속성에 Select명령으로 최소
한의 명령을 몇자 적어주시구요.윗처럼..
Active을 True로 설정하시면 ADOQuery설정은 끝납니다.
참고적으로 CurrsorType와CurrsorLocation설정은 책을 보시면
자세히 나와있는데, 간단히 말씀드리자면 두가지의 설정도
AdoQuery사용 용도에 따라 설정을 변환하여 사용하시면 속도도
마찬가지며, 여러측면에서 유리하지요.. 이것은 어떤님의 말씀과
책에 적혀져 있더라구요.
그다음 DataSource부분 입니다. 그다지 설정은 없구요.
DataSet에 위에서 사용된 ADOQuery컴포넌트을 설정 하시면
됩니다.
그리고 정보을 표현하고자 하시는 컴포넌트에 DataSource부분에
DataSource컴포넌트을 지정하시면 됩니다.
되게는 DBgrid을 사용하지만요..DBgrid도 속성을 설정에 따라
표현하고자 하는 필드만 보여지게 할수도 있고 디테일..등등 설정
도 가능하지요..
두번째 방법:
그다음 방법으로 코딩상에서 속성을 설정하여 님께서 원하시는
일을 수행할수 있습니다.
위하고 같구요.. 다만 코딩 상에서 이뤄진다는 것이죠..
별로 좋은 방법 같진 않나요..
하지만 두번째 방법이 더 좋은것 같은데요.. 수행을 원할때만
사용할수 있고 ADOQuery컴포넌트을 여러게 사용할 필요도
없어질테니 말이죠..예외는 있고 저도 초보다 보니 미처 생각
못한 부분 빼고는 좋다고 생각합니다.
그리고 Parmeters 말씀 하셨죠.. 그부분은 처음에 진짜 이해가 가지 않은
부분중에 하나였는데 제가 머리가 조금 나쁘거든요..하지만 알고보니 너무도
쉬운것 있죠..이해가 가지 않았다는 생각이 부끄러울 정도로 말이죠...
우선 아래 Query문을 본다음 말씀드리죠..
Ex>A반의 홍길동을 찾을때
1) Select Name, Ban From Member Where Ban=:NA and Name=:NB
Parmeters.ParamByName(NA).Value:='A';
Parmeters.ParamByName(NB).Value:='홍길동';
2) Select Name,Ban From Member where Ban='"+'A'+'" and
Name='"+'홍길동'+"''
1과2의 차이점이 뭘까요.. 당연이 조건문을 Parmeter로 주느냐 아님 뭐라
구해야 하나 명칭이 잘모르겠지만 Query문에 문자을 이용해 주는 것이죠
참고로 위을 쓰는법은 AdoQuery1.sql(가로안에 쿼리문);
마지막에 AdoQuery1.Open 이겠죠...
그럼 마지막으로 AdoQuery로 Insert는 ....
Ex>과일 상회에서 사과 2Box와 금일 단과 및 금액을 입력 하는 부분
필드명
Office ->회사명
Pum ->품목
Dan -> 단가
Mn -> 금액
입력할 데이터(A상회,사과,100,1000)
Insert문
With AdoQuery1 do begin
Parmeter.clear;
Sql.clear;
Sql.Add('Insert Into Etable(Office,Pum,Dan,Mn');
Sql.Add('Value('A상회','사과','100','1000')');
Sql.ExecSql;
End;
Insert : 새로운 레코드를 추가 등록시사용
형식) Insert into 테이블명
(필드명, ....)
Values
(필드값, ....);
그리구 위처럼 Query로 Insert할때 트랜잭션 사용하기..
우선 컴포넌트는 AdoConnection,AdoQuery 사용함.
AdoConnection속성을 이렇게 하세요.ConnectionString을 선택하여 DB을 선택 하십시요.CursorLocation=clUseClient,KeepConnection=True,LoginPrompt=False,
Mode=cmShareDenyNone 마지막으로 Connected을 True로 하시면 됩니다.
Connected을 True로 하실때 Error나면 설정이 잘못된 겁니다.
AdoQuery 속성은 맨위처럼 하시는데 ADOQuery 속성에서 Connection을
AdoConnection을 선택 하세요.
위처럼 Insert Into명령으로 Query을 날리면 되는데 몇가지 추가해야할
부분이 있습니다.
트랜잭션 시작명령
트랜잭션 종료명령
트랜잭션 취소명령
롤백처리
지금까지 적느라 무려 2시간에 걸쳐 썼네요....뛰엄뛰엄쓰다보니... 시간이 없어 우선 이부분은 다음에 알려드리겠습니다..
아님 고수님께서..몇자 적어주십시요...
님께 도움이 되길 바랍니다...
위 내용은 절대 초보용이니 중/고수님은 보지 않았으면 하는데 챙피하니깐요
위내용이 틀렸으면 몇자 적어주십시요...
추가적으로 좋은 내용도 부탁드립니다.