2017-09-30 6 views
1

ClientDataSet을 파일로 저장하고이 파일을 AdoQuery (AdoQuery.LoadFromFile())에서 열려고합니다. 가능합니까?Delphi, ADOQuery, ClientDataSet

또는 어떻게 pfADTG 파일 형식으로 데이터 집합을 저장할 수 있습니까?

안부

파블

+1

안녕하세요! StackOverflow에 오신 것을 환영합니다! 시도한 코드와 현재 가지고있는 문제를 제공하여보다 효과적으로 도와 드리겠습니다! 건배! –

답변

3

내가 AdoQuery에서이 파일을 파일 다음 열 ClientDataSet에 저장합니다 (AdoQuery.LoadFromFile을()). 가능한가?

아니요. TClientDataSet 및 TAdoQuery와 같은 TCustomAdoDataSet 자손은 바이너리 버전 또는 XML 파일 형식에서 서로 호환되지 않습니다. Delphi의 TXmlTransform을 사용하여 저장된 CDS 파일을 Ado 형식으로 변환하려고 시도해 볼 수는 있지만 직접 해본 적이 없습니다.

또는 어떻게 데이터 세트를 pfADTG 파일 형식으로 저장할 수 있습니까?

"데이터 세트"가 TClientDataSet을 의미하는 경우이를 직접 수행 할 수 없습니다. CDS에서 AdoQuery로 필드별로 행 단위로 복사 한 다음 AdoQuery에서 SaveToFile을 호출하면됩니다.

업데이트 : 나는 거부했다 두려워이 답변에 편집에서, 당신은 당신의 AdoDataSet가 비어와 연결 문자열이없는 경우 어떻게 할 것인지를 물었다; TAdoDataSet을 사용하여 확실히 SaveToFile 및 LoadFromFile을 사용하여 데이터를 로컬에 저장할 수 있습니다. 아래는 ClientDataSet을 생성하고 채우는 미니멀리스트 프로젝트입니다. 그런 다음 구조와 데이터를 AdoDataSet으로 복사합니다.

procedure TForm1.FormCreate(Sender: TObject); 
var 
    i : Integer; 
begin 
    // Note: ClientDataSet1 has had two FieldDefs created in the IDE, 
    // an ID integer field and an AName string field with a size of 20 

    // Create and populate ClientDataSet1 
    ClientDataSet1.CreateDataSet; 
    ClientDataSet1.InsertRecord([1, 'Name1']); 
    ClientDataSet1.InsertRecord([2, 'Name2']); 

    // Copy ClientDataSet1's FieldDefs to AdoDataSet1 
    AdoDataSet1.FieldDefs.Assign(ClientDataSet1.FieldDefs); 

    // Now, copy the data fielf-by-field, row-by-row 
    AdoDataSet1.CreateDataSet; 

    try 
    ClientDataSet1.DisableControls; 
    AdoDataSet1.DisableControls; 
    ClientDataSet1.First; 
    while not ClientDataSet1.Eof do begin 
     AdoDataSet1.Insert; 
     for i := 0 to ClientDataSet1.FieldCount - 1 do begin 
     AdoDataSet1.Fields[i].Value := ClientDataSet1.Fields[i].Value; 
     end; 
     AdoDataSet1.Post; 
     ClientDataSet1.Next; 
    end; 

    // Save Ado data to file, beware of path used! 
    AdoDataSet1.SaveToFile(ExtractFilePath(Application.ExeName) + 'AdoData', pfADTG); 

    finally 
    AdoDataSet1.EnableControls; 
    ClientDataSet1.EnableControls; 
    end; 
end;