Q&A

  • 하나의 Query에서 값을 다른쪽으로 옮길때 속도 문제..
날씨가 또 추워졌네요. 다들 건강하세요.

DBGrid의 선택된 값을 다른 DBGrid에 옮기는 작업을 하는데요
옮기기는 하는데,
한 레코드씩 옮기는데  처음에는 빠르다가 점점 속도가 느려져요....
왜 이런가요? 어떻게 해결해야 될까요?

작업을 다시한번 자세히 설명드리면 DBGrid가 2개 있고요 각각은 Query1과 Query2로 연결되어 있습니다. DBGrid1에서 선택된 레코드를 DBGrid2에 추가하는 작업입니다.

제가 사용한 루틴
procedure MoveDBGrid1toDBGrid2;
var i:integer;
begin
  Query1.DisableControls;
  Query2.DisableControls;

  with DBGrid_1.SelectedRows do begin
     for i:=0 to Count -1 do begin
         Query1.BookMark := Items[i];
         Query2.Append;
         Query2.('level2').AsString :=Query1.FieldByName('level2').AsString;
         Query1.Delete;
     end;
  end;

  Query1.EnableControls;
  Query2.EnableControls;

end;

삭제한 Query1 내용을 실제 Table에 ApplyUpdates하지는 않습니다.

고수님 도와주세요.
4  COMMENTS
  • Profile
    채승호 2002.01.18 22:33
      양쪽다 DBGird인것으로 보니까...

      모두 DB와 연결이 되어 있는 것으로 보니까....

      이런 방법으로 해보시는 것이...

      한건한것씩 옮기면 (10000건이면...) 10000번의 쿼리가 날라가지요...

      그럼 속도면에 가장 큰 문제가 있습니다...

    Insert into 넣을 테이블(필드1,....필드n)
    select 필드1,....필드n from 테이블 where 조건;

    여기서 만약에 두 테이블의 필드가 같다면 (필드1,....필드n) 은 필요가
    없습니다....

    조건은 원테이블에서 넣을테이블의 자료의 조건을 의미합니다...

    이러면 한번에 쿼리와 1번의 트랜잭션으로 속도가 빨라지겠지요.....

  • Profile
    장영철 2002.01.19 02:36
    답변에 감사합니다.

    조건을 정해 넣어 한큐에 밀어 넣어 주면 좋을것 같은데
    초심자라 아직 감이 안오네요.

    DBGrid1에서 선택된 레코드를 어떻게 where 절에
    주어야 하는지요?
    또 테이블이 아닌 Query2에 어떻게 Insert 할 수 있나요?

    죄송하지만 구체적으로 작성된 소스 부탁 할 수 있을까요?





  • Profile
    머슴 2002.01.19 04:00

      --

        


  • Profile
    장영철 2002.01.21 20:09
    Query1에 있는 모든 것을 Query2로 옮기는 문제가 아니라
    DBGrid1에서 선택된 레코드만 DBGrid2(즉 Query2 )로
    옮기는 문제 이지만, 어쨌든 답변 감사 드립니다.^^


    • 전승곤
    • 2002.01.18 20:44
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 채승호
      2002.01.18 22:23
      이렇게 합쳐서 쿼리를 해보세여... report_query.sql.add('where (date_value||time_value  &...
    • 전승곤
      2002.01.19 00:23
      답변감사합니다. 가르켜 주신데로 하였는데요. type mismatch error가 발생합니다. 다시 자세히 좀 부탁...
    • 채승호
      2002.01.19 01:46
        죄송합니다... 저는 당연히 오라클 DB 라고 생각하고 문자형 필드이고   || ...
    • 전승곤
      2002.01.19 18:43
      그러면 paradox db면 사용할 수 있는 방법은 없습니까????? 죄송하지만 한번만 더.......
    • 홍미자
    • 2002.01.18 20:36
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김영범
      2002.01.19 03:15
      답변이 될런지는 모르겠으나 전 현재 델파이 5.0을 쓰고 있습니다. 보통 Resource는 델파이의 특정 콤...
    • 한만교
      2002.01.19 01:50
      프로젝트가 크다면 여러개로 나누세요  Application간 통신을해서 서로 자료를 주고받으면서...
    • 공성환
      2002.01.18 23:02
      정확한 답변은 아니지만... 지금 저도 같은현상으로 리소스를 줄이는 방법을 찾고있죠... 우선 전 델3인...
    • 홍미자
    • 2002.01.18 20:21
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 한만교
      2002.01.19 01:56
      제가 볼때는 Form3이 최초 ShowModal을 잡고있어서 그런거 같은데요.. 그러니까 Form1을 ShowModal...
    • 까비
    • 2002.01.18 20:20
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 채승호
      2002.01.18 23:12
         TBlobField(FieldByName('이미지필드명')).BlobType := ftBlob;    TBlobField(Fi...
    • 이영주
    • 2002.01.18 20:17
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 장영철
    • 2002.01.18 20:16
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 채승호
      2002.01.18 22:33
        양쪽다 DBGird인것으로 보니까...   모두 DB와 연결이 되어 있는 것으로 보니까....
    • 장영철
      2002.01.19 02:36
      답변에 감사합니다. 조건을 정해 넣어 한큐에 밀어 넣어 주면 좋을것 같은데 초심자라 아직 감이 안오...
    • 머슴
      2002.01.19 04:00
        --     
    • 장영철
      2002.01.21 20:09
      Query1에 있는 모든 것을 Query2로 옮기는 문제가 아니라 DBGrid1에서 선택된 레코드만 DBGrid2(즉 Query2...
    • ccang111
      2002.01.19 04:59
      어제 오늘 고심하다가...답변도 해주시지도 않고...쩝... 제 컴말고 다른 컴에서 F9눌러서 실행하고 실행...
    • 김태훈
    • 2002.01.18 19:27
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 버섯
      2002.01.18 20:22
      (1) Stored Procedure 로 여러개의 레코드를 한꺼번에 실행하는방법 (2) 클라이언트쪽에 데몬프로그램을...
    • 성더기
      2002.01.18 20:59
      일단 굳이 재실행을 하실 필요는 없을듯합니다 쿼리나 테이블을 닫았다 열면 적용되어 있을겁니다 단 ...
    • KARA
      2002.01.18 21:37
    • 성더기
      2002.01.18 21:03
      일단 쿼리컴포넌트로 불러온 자료는 ReadOnly입니다 편집이 불가능 하다는 말입져... 꼭 편집을 하고 ...
    • 김영일
      2002.01.19 04:18
    • 하기현
    • 2002.01.18 09:48
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 채승호
      2002.01.18 19:13
      통상 insert가 select에 비해 무척 느린 이유 중 하나로 인덱스의 존재를 들 수 있는 데, 상황에 따라 다...
    • 권희수
      2002.01.18 18:59
      한건 인서트 할때마다 커밋을 하면 당근 시간이 많이 걸림니다. 앞의 분이 지적하신부분도 속도저하를 ...
    • 이중철
      2002.01.18 12:25
      첫째로 기존의 데이타건수가 10만건 이상일때의 대량 데이타 입력은 해당 테이블의 인덱스키를 없애고 ...
    • 전기봉
    • 2002.01.18 07:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이중철
      2002.01.18 07:18
      엑셀시트의 해당영역을 문자로 바꾸면 될거에요 VBSCRIPT는 다음과 같네요.     R...
    • 최영근
      2002.01.18 19:31
      혹시 MS internet explorer 안에 다른 프로그램을 실행하시는 것입니까 ? 아니면 새로운 웹 브라우저를 ...
    • 권동훈
      2002.01.18 20:43
      안녕하세요? 새로운 웹브라우저를 만들기에는 시간이 너무 부족해서 익스플로러안에 윈어플리케이션을 실...
    • 꿈의대화
      2002.01.18 08:46
      .
    • 권동훈
      2002.01.18 20:47
      안녕하세요? 꿈의대화님.. 닷넷... 저도 생각은 해봤었는데 그 분야에 워낙 아는게 없어서..^^ 여기는 ...
    • 최경습
    • 2002.01.18 06:12
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 채승호
      2002.01.18 06:44
      Dbedit는 dataSet만 연결되면 자동으로 DB와 연결이 됩니다... 따라서 DataSet의 절대적인 영향을 받...
    • 강성호
    • 2002.01.18 06:06
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이중철
      2002.01.18 06:44
      아래와 같은경우는 저도 여러번 있었어요.. 디버깅도 안되고 답답하실겁니다. 또한 이런버그는 잡기...
    • 이중철
      2002.01.18 06:47
      form1 := TForm1.Create(self); form1.showmodal; if modalresult = mrOK then    &nbs...
    • 채승호
      2002.01.18 06:35
      이렇게 고치시고요...한번 해보시고요... try     form1 := TForm1.Create(self...
    • 이영주
    • 2002.01.18 05:12
    • 0 COMMENTS
    • /
    • 0 LIKES