Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
조회중 프로그램이 먹통
StringGrid에 오라클DB를 조회하는데 Open명령 후
덩치가 큰 Query를 하게되면 엄청나게 오랜시간이 걸리고
조회가 완료될 때까지 다른작업은 하나도 할 수 가 없습니다.
SQL_PLUS와 같이 User Cancel을 일으킬 수 있는 방법이 없는지요
(예 : Visual C++에서는 Ctl+C를 누르면 DB의 연결을 해제하면서 조회가
중단되는데 델파이도 이와같은 방법이 있는지요)
많은 조언 부탁드립니다.
2
COMMENTS
류미희
•
1999.07.31 02:43
다시 류미희입니다.
> StringGrid에 오라클DB를 조회하는데 Open명령 후
> 덩치가 큰 Query를 하게되면 엄청나게 오랜시간이 걸리고
> 조회가 완료될 때까지 다른작업은 하나도 할 수 가 없습니다.
> SQL_PLUS와 같이 User Cancel을 일으킬 수 있는 방법이 없는지요
> (예 : Visual C++에서는 Ctl+C를 누르면 DB의 연결을 해제하면서 조회가
> 중단되는데 델파이도 이와같은 방법이 있는지요)
> 많은 조언 부탁드립니다.
> DBGRID와 DataSet을 사용하지 않고 TQuery와 StringGrid를 사용한 상태
>
0
0
삭제
수정
댓글
김영대
•
1999.07.30 05:16
류미희 께서 말씀하시기를...
> StringGrid에 오라클DB를 조회하는데 Open명령 후
> 덩치가 큰 Query를 하게되면 엄청나게 오랜시간이 걸리고
> 조회가 완료될 때까지 다른작업은 하나도 할 수 가 없습니다.
> SQL_PLUS와 같이 User Cancel을 일으킬 수 있는 방법이 없는지요
> (예 : Visual C++에서는 Ctl+C를 누르면 DB의 연결을 해제하면서 조회가
> 중단되는데 델파이도 이와같은 방법이 있는지요)
> 많은 조언 부탁드립니다.
>
// 아래 예제는 INPRISE TI 에 있는 내용입니다
// 예제만 조금 바꾸었습니다
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DBTables, Db, StdCtrls, Grids, DBGrids, ComCtrls;
type
TForm1 = class(TForm)
Database1: TDatabase;
Query1: TQuery;
Query2: TQuery;
Query3: TQuery;
DataSource1: TDataSource;
DataSource2: TDataSource;
DataSource3: TDataSource;
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
DBGrid3: TDBGrid;
Button1: TButton;
ProgressBar1: TProgressBar;
Session1: TSession;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TQueryThread = class(TThread)
private
FDatabase: TDataBase;
FQuery: TQuery;
FDatasource: TDatasource;
FQueryException: Exception;
procedure ConnectDataSource;
procedure ShowQryError;
protected
procedure Execute; override;
public
constructor Create(Session: TSession; DataBase:
TDatabase; Query: TQuery; DataSource: TDataSource); virtual;
end;
var
Form1: TForm1;
implementation
constructor TQueryThread.Create(Session: TSession; DataBase:
TDatabase; Query: TQuery; Datasource: TDataSource);
begin
// thread object의 instance를 생성한다
// Create의 파라미터가 False이면 thread를 생성한후 즉시 Execute를 호출하여 실행한다
// " True이면 Resume을 호출하기 전까지 실행하지 않는다(suspended)
inherited Create(True);
FDatabase := DataBase;
FQuery := Query;
FDataSource := Datasource;
// thread의 실행이 종료하면 자동으로 free되게 설정
FreeOnTerminate := True;
// 실행이 일시 중지된(suspended) thread를 실행한다
Resume;
end;
procedure TQueryThread.Execute;
begin
try
// Query를 open하고 DataSource를 연결한다
FQuery.Open;
// thread간의 충돌을 피하여 ConnectDataSource 를 호촐한다
Synchronize(ConnectDataSource);
except
// Handle the exception
FQueryException := ExceptObject as Exception;
// thread간의 충돌을 피하여 ShowQryError 를 호촐한다
Synchronize(ShowQryError);
end;
end;
procedure TQueryThread.ConnectDataSource;
begin
// DataSource를 연결한다
FDataSource.DataSet := FQuery;
end;
procedure TQueryThread.ShowQryError;
begin
// Handle the exception
Application.ShowException(FQueryException);
end;
procedure RunBackgroundQuery(Session: TSession; DataBase: TDataBase;
Query: TQuery; DataSource: TDataSource);
begin
{thread instance 생성}
TQueryThread.Create(Session, Database, Query, DataSource);
end;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
{병렬처리: 3개의 Query를 thread를 사용하여 open한다}
RunBackgroundQuery(Session1, DataBase1, Query1, Datasource1);
RunBackgroundQuery(Session1, DataBase1, Query2, Datasource2);
RunBackgroundQuery(Session1, DataBase1, Query3, Datasource3);
(* 순차처리: 일반적인 Query Open
Query1.Open;
Query2.Open;
Query3.Open;
*)
for i := 1 to 100 do
ProgressBar1.Position := i;
end;
end.
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
바보
1999.07.30 23:26
0
COMMENTS
/
0
LIKES
DBGrid에서 멀티선택시 문제점에 대해...
리디아
•
1999.07.30 23:20
1
COMMENTS
/
0
LIKES
폼을 맨뒤로 위치하는 방법은?
김영대
•
1999.07.31 03:14
리디아 께서 말씀하시기를... > 하나의 폼(어플) A를 만들었습니다. > 그 폼에서 다른 프로그램 B를 실행...
이무순
•
1999.07.30 23:19
1
COMMENTS
/
0
LIKES
티스켓저장
구창민
•
1999.07.31 00:32
이무순 께서 말씀하시기를... > 텍스트 파일을 읽어서 값들을 디스켓에 저장하는 방식에 관해서 소스코드 ...
문승진
•
1999.07.30 23:11
2
COMMENTS
/
0
LIKES
TImage를 사용해서 불이 들어오는 버튼 만들기
구창민
•
1999.07.31 01:10
문승진 께서 말씀하시기를... > 제목과 같이 하려고 TImage에서 상속받아 콤포넌트를 하나 만들었습니다. ...
문승진
•
1999.07.31 18:45
구창민님 고맙습니다. 잘 되네요. 그런데 CM_... 메시지들은 도움말 Index에 나타나지를 않네요. ...
김대환
1999.07.30 22:06
0
COMMENTS
/
0
LIKES
TImage를 이용해서 화면에 그림을 그릴때...
김명호
•
1999.07.30 21:54
3
COMMENTS
/
0
LIKES
directory에서 화일 copy하기
구창민
•
1999.07.31 00:26
김명호 께서 말씀하시기를... > 임의의 directory에서 abc***.doc 화일 copy하기 > directory에서 abc로 ...
김명호
•
1999.07.31 01:08
구창민 께서 말씀하시기를... > 김명호 께서 말씀하시기를... > > 임의의 directory에서 abc***.doc 화일...
구창민
•
1999.07.31 01:21
김명호 께서 말씀하시기를... > 구창민 께서 말씀하시기를... > > 김명호 께서 말씀하시기를... > > > ...
이용일
1999.07.30 21:32
0
COMMENTS
/
0
LIKES
델파이를 시작시키면...컴포넌트 팔레트에..
한근수
1999.07.30 21:10
0
COMMENTS
/
0
LIKES
Invalid field type 에러
문보석
1999.07.30 20:54
0
COMMENTS
/
0
LIKES
CheckListBox에 대해서...
델초보
•
1999.07.30 20:20
1
COMMENTS
/
0
LIKES
메인폼이전에 로그인폼출력 어떻게 ?
구창민
•
1999.07.31 00:16
델초보 께서 말씀하시기를... > 안녕하세요. > 메일같이 질문만 하는군요. 저두 언젠가 답변하는 날이 오...
뻐꾸기
1999.07.30 19:13
0
COMMENTS
/
0
LIKES
select 되어온 값 update
이정석
•
1999.07.30 17:29
1
COMMENTS
/
0
LIKES
MIDAS, DCOM연결 문제...
정근수
•
1999.07.31 17:17
이정석 께서 말씀하시기를... > 3 Tier 개발을 하려고 합니다. > 환경 : NT 4.0 서버(서비스팩 3) > ...
장경석
1999.07.30 17:17
0
COMMENTS
/
0
LIKES
MS ACCESS 데이타 베이스
이용일
•
1999.07.30 08:38
3
COMMENTS
/
0
LIKES
서브디렉토리와 파일을 찾는 루틴에서 디렉토리가 잡히지 않는군요
유시니
•
1999.07.30 11:43
이용일 께서 말씀하시기를... > 'C:'에 있는 서브와 파일을 검색해서 리스트에 출력하는 루틴이 있습니다....
이용일
•
1999.07.30 21:21
유시니 께서 말씀하시기를... > 이렇게 해보세요. > ------------------------------------------- > pr...
유시니
•
1999.08.06 11:56
이용일 께서 말씀하시기를... > 유시니 께서 말씀하시기를... > > 이렇게 해보세요. > > --------------...
이주흥
•
1999.07.30 06:56
1
COMMENTS
/
0
LIKES
퀴리 여러줄 쓰기가...
한
•
1999.07.30 08:43
문법이 틀렸군요...이렇게... 괄호는 처음과 끝에만 넣습니다. 몇줄이 되더라도... > with query1 d...
박홍석
1999.07.30 06:27
0
COMMENTS
/
0
LIKES
ComboBox에서 이벤트
나기향
•
1999.07.30 04:11
1
COMMENTS
/
0
LIKES
탐색기에서 선택된 파일목록을 델프로그램에서 얻기
김영대
•
1999.07.30 05:13
나기향 께서 말씀하시기를... > 안녕하세요? > 여기는 참 많은 량의 고급정보가 있네요. > 델을 이제 마...
류미희
•
1999.07.30 04:05
2
COMMENTS
/
0
LIKES
조회중 프로그램이 먹통
StringGrid에 오라클DB를 조회하는데 Open명령 후 덩치가 큰 Query를 하게되면 엄청나게 오랜시간이 걸리고 조회가 완료될 때까지 다른작업은 하나도 할 수 가 없습니다. SQL_PLUS와 같이 User Cancel을 일으킬 수 있는 방법이 없는지요 (...
류미희
•
1999.07.31 02:43
다시 류미희입니다. > StringGrid에 오라클DB를 조회하는데 Open명령 후 > 덩치가 큰 Query를 하게되면 ...
김영대
•
1999.07.30 05:16
류미희 께서 말씀하시기를... > StringGrid에 오라클DB를 조회하는데 Open명령 후 > 덩치가 큰 Query를 ...
최수영
1999.07.30 03:52
0
COMMENTS
/
0
LIKES
Decision Cube의 사용예제부탁
장경석
1999.07.30 03:35
0
COMMENTS
/
0
LIKES
query한 결과를 ms access 에 넣는 법
류미희
1999/07/30 04:05
Views
251
Likes
0
Comments
2
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
> StringGrid에 오라클DB를 조회하는데 Open명령 후
> 덩치가 큰 Query를 하게되면 엄청나게 오랜시간이 걸리고
> 조회가 완료될 때까지 다른작업은 하나도 할 수 가 없습니다.
> SQL_PLUS와 같이 User Cancel을 일으킬 수 있는 방법이 없는지요
> (예 : Visual C++에서는 Ctl+C를 누르면 DB의 연결을 해제하면서 조회가
> 중단되는데 델파이도 이와같은 방법이 있는지요)
> 많은 조언 부탁드립니다.
> DBGRID와 DataSet을 사용하지 않고 TQuery와 StringGrid를 사용한 상태
>