Q&A

  • Query에서 order by와 insert문 충돌 문제


안녕하세요..

DBGrid 와 Query를 사용하여 데이터를 삽입하고, 정렬하는 문제인데요.

모.. 정보처리기사 문제에 흔한 거죠..

근데 제가 책대로 따라해봤는데. 안 돼는거 있죠..

내용인 즉은.

if not Query1.Active then

Query1.Open;

try

Query1.RequestLive := True;

Query1.insert;

Query1.FieldByName('EmpNo').value := strtoint(edtEmpNo.text);

Query1.FieldByName('DeptCode').value := edtDeptCode.text;

...



이렇게 하면, query1.insert 하는 부분에서 '... Query1: Cannot modify a read-only dataset' 이라는 메세지의 에러가 납니다.

문제는 query component 에서 sql 구문에 'select * from salary.db order by EmpNo' 라고 넣었기 때문인데, order by 가 dataset을 read-only 속성으로 만드는 것 같더군요.

그래서 order by 부분을 삭제하면 insert 가 아주 잘 됩니다..

버뜨.... 정렬을 해야 하는데.. 잘 안되네여...

이런 경우에는 query 를 두개를 사용하면 될까요?



답변을 부탁드립니다..

수고하세요.



3  COMMENTS
  • Profile
    맹주형 1999.09.18 23:51
    맹주형 wrote:

    >

    > 안녕하세요..

    > DBGrid 와 Query를 사용하여 데이터를 삽입하고, 정렬하는 문제인데요.

    > 모.. 정보처리기사 문제에 흔한 거죠..

    > 근데 제가 책대로 따라해봤는데. 안 돼는거 있죠..

    > 내용인 즉은.

    > if not Query1.Active then

    > Query1.Open;

    > try

    > Query1.RequestLive := True;

    > Query1.insert;

    > Query1.FieldByName('EmpNo').value := strtoint(edtEmpNo.text);

    > Query1.FieldByName('DeptCode').value := edtDeptCode.text;

    > ...

    >

    > 이렇게 하면, query1.insert 하는 부분에서 '... Query1: Cannot modify a read-only dataset' 이라는 메세지의 에러가 납니다.

    > 문제는 query component 에서 sql 구문에 'select * from salary.db order by EmpNo' 라고 넣었기 때문인데, order by 가 dataset을 read-only 속성으로 만드는 것 같더군요.

    > 그래서 order by 부분을 삭제하면 insert 가 아주 잘 됩니다..

    > 버뜨.... 정렬을 해야 하는데.. 잘 안되네여...

    > 이런 경우에는 query 를 두개를 사용하면 될까요?

    >

    > 답변을 부탁드립니다..

    > 수고하세요.

    >



    안녕하세요..

    무려 두분이나 답변해주신 것 감사드리고요.

    제가 잘 몰라서. 책 쓰신 분(한국인프라이즈 델파이 SE 백운기씨)에게도 메일을 보냈습니다.

    그래서 답변해주신 내용 모두를 다 적용해 봤는데 잘 안되더라구요..

    제가 왕초보이거든요.. RequestLive 속성도 잘 모르고, 그리고 Sql 구문을 쓰면 다 좋은데 파라독스에서는 Number가 실수라 integer로 하면, type mismatch error

    가 난다고 게시판에 나와 있더군요..

    결국은 백운기씨가 두번째로 보내주신 메일대로 차라리 query를 두개 만들어서 했더니 (하나는 데이터 입력용, 다른 하나는 데이터 정렬용) 되더군요.



    물론 제 방법은 썩 좋은 방법은 아닌데, sql 을 다루지 못하니까 나름대로 해결은 되더라구요.. 언발에 오줌누기라고나 할까 ^^;;;



    암튼 열씨미 해서 저도 다른 사람에게 도움 줄 수 있는 사람이 되고 싶습니다.

    감사합니다.

  • Profile
    mute 1999.09.18 00:28
    맹주형 wrote:

    >

    > 안녕하세요..

    > DBGrid 와 Query를 사용하여 데이터를 삽입하고, 정렬하는 문제인데요.

    > 모.. 정보처리기사 문제에 흔한 거죠..

    > 근데 제가 책대로 따라해봤는데. 안 돼는거 있죠..

    > 내용인 즉은.

    > if not Query1.Active then

    > Query1.Open;

    > try

    > Query1.RequestLive := True;

    > Query1.insert;

    > Query1.FieldByName('EmpNo').value := strtoint(edtEmpNo.text);

    > Query1.FieldByName('DeptCode').value := edtDeptCode.text;

    > ...

    >

    > 이렇게 하면, query1.insert 하는 부분에서 '... Query1: Cannot modify a read-only dataset' 이라는 메세지의 에러가 납니다.

    > 문제는 query component 에서 sql 구문에 'select * from salary.db order by EmpNo' 라고 넣었기 때문인데, order by 가 dataset을 read-only 속성으로 만드는 것 같더군요.

    > 그래서 order by 부분을 삭제하면 insert 가 아주 잘 됩니다..

    > 버뜨.... 정렬을 해야 하는데.. 잘 안되네여...

    > 이런 경우에는 query 를 두개를 사용하면 될까요?

    >

    > 답변을 부탁드립니다..

    > 수고하세요.

    >





    SQL문법에서 order by 때문에 read-only 속성을 만들지는 않습니다.



    위에서 보시면 Query를 Open하고 RequestLive속성을 True로 하셨는데



    그러면 RequestLive속성은 전혀 먹히지 않습니다.



    반드시 Query를 Open 전에 변경 하셔야 합니다.



    그럼...







  • Profile
    박홍석 1999.09.17 20:11
    맹주형 wrote:

    >

    > 안녕하세요..

    > DBGrid 와 Query를 사용하여 데이터를 삽입하고, 정렬하는 문제인데요.

    > 모.. 정보처리기사 문제에 흔한 거죠..

    > 근데 제가 책대로 따라해봤는데. 안 돼는거 있죠..

    > 내용인 즉은.

    > if not Query1.Active then

    > Query1.Open;

    > try

    > Query1.RequestLive := True;

    > Query1.insert;

    > Query1.FieldByName('EmpNo').value := strtoint(edtEmpNo.text);

    > Query1.FieldByName('DeptCode').value := edtDeptCode.text;

    > ...

    >

    > 이렇게 하면, query1.insert 하는 부분에서 '... Query1: Cannot modify a read-only dataset' 이라는 메세지의 에러가 납니다.

    > 문제는 query component 에서 sql 구문에 'select * from salary.db order by EmpNo' 라고 넣었기 때문인데, order by 가 dataset을 read-only 속성으로 만드는 것 같더군요.

    > 그래서 order by 부분을 삭제하면 insert 가 아주 잘 됩니다..

    > 버뜨.... 정렬을 해야 하는데.. 잘 안되네여...

    > 이런 경우에는 query 를 두개를 사용하면 될까요?

    >

    > 답변을 부탁드립니다..

    > 수고하세요.

    >



    안녕하세요. 홍세빕니다.

    Query 컴포넌트를 사용하면서 RequestLive속성을 사용하면 일관성문제가 발생할 수 있습니다.



    차라리 삽입시 아래처럼 코드를 사용하세요.



    with Query1 do begin

    Close;

    SQL.Clear;

    SQL.Add('INSERT INTO 테이블이름');

    SQL.Add('(EmpNo, DeptCode)');

    SQL.Add('VALUES ');

    SQL.Add('(:p1, :p2)');

    ParamByName('p1').AsInteger := StrToInt(edtEmpNo.Text);

    ParamByName('p2').AsString := edtDeptCode.Text;

    ExecSQL;

    end;



    이런식으로 하는 것이 제대로된 SQL 삽입구문입니다.

    INSERT INTO 테이블이름 [필드이름1, 필드이름2, ....] VALUES [필드값1, 필드값2, ...]



    삽입, 삭제, 수정등의 간단한 SQL을 익혀두시면 DB프로그램을 작성하는데 훨씬

    수월합니다.



    참고가 되셨기를 바랍니다.

    • 박형진
    • 1999.09.18 02:13
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.09.18 02:23
      델파이에서 작성된 프로그램은 어떠한 DLL도 필요없습니다. 하지만 만약 델파이로 데이타베이스 어플리...
    • camplus
      1999.09.18 20:37
      델에 포함되어있는 인스톨쉴드 익스프레스를 사용하세요.. 좀더 고급적인 기능을 원하신다면 인스톨쉴드 ...
    • 이상준
    • 1999.09.18 01:17
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.09.18 02:20
      컴포트를 직접 제어하실 줄 아신다면 그냥 전화걸기 스트링을 보내시면 됩니다. ATDT + 전화번호 + ^M ...
    • 신호성
      1999.09.18 18:32
      임병우 wrote: > 안녕하세요.. > 엑셀로 된 우편번호.xls 를 sql6.5로 import할려고 했는데 7.0은 기능이...
    • 구창민
      1999.09.17 20:09
      유시니 wrote: > A 드라이브가 3.5인치 인지 5.25인치 인지 디스켓이 없어도 판별할수 있나요? 유시니...
    • 맹주형
    • 1999.09.17 19:45
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 맹주형
      1999.09.18 23:51
      맹주형 wrote: > > 안녕하세요.. > DBGrid 와 Query를 사용하여 데이터를 삽입하고, 정렬하는 문제인...
    • mute
      1999.09.18 00:28
      맹주형 wrote: > > 안녕하세요.. > DBGrid 와 Query를 사용하여 데이터를 삽입하고, 정렬하는 문제인...
    • 박홍석
      1999.09.17 20:11
      맹주형 wrote: > > 안녕하세요.. > DBGrid 와 Query를 사용하여 데이터를 삽입하고, 정렬하는 문제인...
    • 최수영
      1999.09.18 17:03
      서지훈 wrote: > 알려 주세요.. > 제발.. 크리스탈레포트 7.0에는 기본으로 제공되는 기능이지죠.. 이...
    • 윤상식
    • 1999.09.17 18:04
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 해마지
      1999.09.22 02:25
      윤상식 wrote: > 안녕하세요. > 저는 모뎀을 이용해서 전화를 건 후 다이얼링중에 상대방이 전화를 받았...
    • 홍길동
    • 1999.09.17 10:22
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 정계훈
      1999.09.18 02:11
      홍길동 wrote: > 델파이3.0의 BDE에 보면 > > Configuration/Drivers에서 > > Oracle Vendor init...
    • 정계훈
      1999.09.18 02:06
      이정현 wrote: > 안녕하세요... > > 쿼리시 특정 개수 만큼의 데이터를 가져오려면 어떻게 해야 ...
    • 황선희
      1999.09.27 20:34
      정계훈 wrote: > 이정현 wrote: > > 안녕하세요... > > > > 쿼리시 특정 개수 만큼의 데이터를 ...
    • 김민정
    • 1999.09.17 05:41
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.09.17 10:55
      일단 묶는방법은 이렇게 하시면 됩니다. 온라인상에서 작성하는 코드라 수정이 필요할 수 있습니다. fu...
    • 초보
    • 1999.09.17 05:04
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 강민주
      1999.09.17 07:35
      초보 wrote: > dbgrid에서 각 record의 각 컬럼의 색깔을 다른게 칠하는 방법은 없나요 ? > > dbgrid1...
    • 최재원
      2000.01.22 19:40
      수고 많으십니다. 우하하, 왕초보입니다. 자세히 갈켜 주신데로 했는데요, 변하질 않아요.. 헐 i...
    • 강태완
    • 1999.09.17 04:18
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 박성훈
      1999.12.03 20:31
      강태완 wrote: > > [질문1]gif animation 화일을 델파이 이미지 컴포넌트로 불러오는 방법을 알고자 ...
    • 이정욱
      1999.09.18 16:00
      첫번째에 대한 답변을 드리죠~ ^^ Gif 컴포넌트를 한델 자료실에 오늘 다시 업로드 해놓았습니다. 받...
    • David
    • 1999.09.17 02:40
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 표경나
      1999.09.22 05:08
      David wrote: > 안녕하십니까? > > 이런 Component는 없습니까? > > 즉, Panel과 Panel을 연결하는 ...
    • 안치봉
      1999.09.17 04:19
      굳이 쓰스자면 CGI 를 만들때 써먹을수가 있습니다. ISAPI 같은것... 곽경래 wrote: > 안녕하세요....
    • 이철수
    • 1999.09.17 04:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.09.17 04:21
      그림을 보여주는 방법은 아시겠죠? Timer를 사용하시면 됩니다. 1000 인터벌이 1초라고 생각하시고 ...
    • 싸나이
    • 1999.09.17 01:04
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 박홍석
      1999.09.17 07:09
      싸나이 wrote: > Bitmap이미지를 출력하려는데요, > BitMap를 제대로 얻어서 Width와 Height도 이상없이 ...
    • 안치봉
      1999.09.17 02:53
      프린터와 모니터의 해상도는 많은 차이가 있습니다. 일반적으로 프린터의 해상도가 더 높습니다. 그러므로 ...
    • sjd
      1999.09.17 18:38
      김경아 wrote: > 현재 델파이 4.0으로 개발을 하고 있습니다. 그런데 퀵레포트를 1번이상 > 실행을 하면 ...
    • 이재식
      1999.09.17 18:33
      그런 경우는 흔한 경우입니다. 사실 보아야 정확히 알 수 있지만, 대략 설명으로 판단해보면 이런경우중...