Kori 4월 19일, 2022에 포스트됨 공유하기 4월 19일, 2022에 포스트됨 Docwiki에 있는 "Fetching and Populating Questions (FireDAC)"을 번역한 글: 번역일: 2022년 4월 18일 위로 가기: [DocWiki 번역] FAQ (FireDAC) 레코드(record) 가져오기 및 데이터셋(dataset) 채우기 관련 질문과 답변을 정리한 목록이다. Q1: FireDAC에서 결과 데이터셋(dataset)에 앞으로 이동-전용(forward-only), 읽기-전용(read-only)을 통한 빠른 접근을 할 수 있는가? A: FDQuery.FetchOptions를 설정하라: CursorKind = ckDefault 또는 ckForwardOnly Mode = fmOnDemand RowsetSize = 1000 Unidirectional = True 원한다면, fiMeta를 Items 에서 빼낸다. 단, 당신이 데이터셋(dataset)을 편집할 필요가 없을 때만. Q2: FDQuery 하나 또는 FDMemTable 하나에 결과 세트(result set) 여러개를 붙여 넣는 방법은? A: 클라이언트 데이터셋(client dataset)을 사용하려 결과 세트 여러 개를 유지하는 방법이 있다: begin loop // 새 params를 사용하는 SqlQuery를 실행한다 ... ClientDataset.AppendData(SqlQuery.Data) ... end loop 아마 단일 TFDQuery로 교체할 수도 있다. 예를 들면: // 최초로 열기(open)와 가져오기(fetch) FDQuery1.Params[0].AsInteger := 1; FDQuery1.Open; // 명령(command)을 다시 실행, 행(row)을 다시 가져온 후 기존 행(row) 뒤에 덛붙이기 FDQuery1.Command.Close; FDQuery1.Params[0].AsInteger := 2; FDQuery1.Command.Open; FDQuery1.FetchAgain; FDQuery1.FetchAll; // 다른 파라미터 값을 사용하여 계속해서 명령(command)을 다시 실행 FDQuery1.Command.Close; FDQuery1.Params[0].AsInteger := 3; FDQuery1.Command.Open; FDQuery1.FetchAgain; FDQuery1.FetchAll; Q3: 쿼리 하나를 실행하여 가져온 결과 세트를 기존 데이터셋에 덛붙일 때 가져온 레코드를을 삽입하지 않고 수행할 수 있는 방법은? A: TFDDataSet.FetchAgain 메소드의 설명을 참고하라. 그 외에도 대안으로, SQL 명령(command)을 실행하여 추가 레코드를 가져와서 기존 데이터셋에 담아 넣을 수 있다.: FDCommand1.CommandText := 'select ... from ... where id= :id'; FDCommand1.Open; FDCommand1.Fetch(ADQuery1.Table); FDCommand1.Close; Q4: 내 쿼리는 레코드를 800개 반환하는데, RecordCount는 50을 반환한다. 뭐가 잘못되었나? A: 기본 설정에서는, RecordCount는 데이터셋(dataset)의 레코드 캐시(cache)에 있는 레코드 갯수를 보여준다. 레코드 카운팅 모드에 대한 더 자세한 내용은 FetchOptions.RecordCountMode 프로퍼티를 참고하라. 50은 기본 설정된 rowset의 크기이다. 이 숫자는 FireDAC이 한번 요청할 때 가져오는 갯수이다. 따라서 오픈(open)을 한 직후에, 데이터셋의 레코드는 the dataset <= 50 이다. 그 숫자를 RecordCount에서 제공한다. 데이터셋(dataset) 안에 있는 레코드 사이를 옮겨 다닐 때, FireDAC은 추가로 rowset을 더 가져오게 되고 그 결과 레코드 갯수가 증가하게 된다. 쿼리가 반환하는 레코드 총 갯수를 제시하려면, 다음 중 하나를 수행하라: ADQuery1.FetchAll을 수행한다. 그 결과, 모든 데이터를 가져오게 되고, RecordCount는 전체 갯수를 제시한다; FetchOptions.RecordCountMode를 cmTotal로 지정한다. 주의 할 점은 이 경우 성능 저하를 유발할 수 있다. 그 이유는 각 SELECT 쿼리 마다 FireDAC이 추가로 SELECT COUNT(*) 쿼리를 실행하기 때문이다. 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.