Q&A

  • 여러개의 DB의 데이터를 모아서 쿼리문을 날리는데 추천되는 방법이 있나요?

  똑 같은 포맷을 가진 여러개의 Access 파일(EX> 1번 파일에는 1번~5번의 데이터, 2번 파일에는 6번~10번의 데이터, 3번 파일에는 11~15의 데이터)에서 필요한 데이터를 뽑아서 해당 데이터에 Average나 Stdev, group by 등을 날리고 싶습니다.
  현재 진행 중인 것은 5개의 Access파일에서 Select 문으로 뽑은 데이터(모두 같은 포맷)를 FDMemtable에 넣어 하나의 DB로 만드는 것 까지는 진행이 되었는데, Memtable에 쿼리를 날릴 수 있는 방법을 못 찾고 있습니다.
  Memtable을 쓸 수 있다면 좋고 안 쓰더라도 뭔가 방법이 있을까요?

  Access 파일의 수가 가변적이라 여러개의 Query를 가변적으로 만드는 것도 힘들 듯 합니다

3  COMMENTS
  • Profile
    이정욱 2017.01.16 09:47

    메모리 DB에서 SQL문을 사용하시려면 http://aidaim.com/in-memory_sql_database_delphi.htm 같은 써드파티사 제품을 사용해야 합니다.

    사실 제가 FDMemTable은 사용해보지 못했지만, 아마도 TTable 과 마찬가지로 SQL문은 사용하지 못할것 같네요.

  • Profile
    담더기 2017.01.25 20:26

    앗.. 이정욱님.. 실수로 비추천을 눌러 버렸습니다..^^;; 이해 부탁...

  • Profile
    담더기 2017.01.25 20:25

    도움이 될지는 모르겠지만...

    FireDAC을 사용하시는거 같은데요.. 그럼 TFDLocalSQL을 사용하시면 됩니다.

    [이하 코딩으로 처리하는 부분] - 디자인 타임에서 하시려면 그냥 순서대로 미리 연결해 두시면 편합니다.

    var
      FDConnection: TFDConnection;
      FDLocalSQL: TFDLocalSQL;
      FDQuery: TFDQuery;
    begin
      // LocalSQL용 Connection입니다. **SQLITE 고정
      FDConnection := TFDConnection.Create(Self);
      FDConnection.DriverName := 'SQLITE';

      // LocalSQL 생성
      FDLocalSQL := TFDLocalSQL.Create(Self);
      FDLocalSQL.Connection := FDConnection;

      // LocalSQL에 데이터셋 연결
      // 데이터 셋은 AccessDB를 각각 TFDMemTable에 불러온 것을 연결해도 됩니다.
      // FDLocalSQL.DataSets은 각각의 테이블이라고 보시면 됩니다.
      // .Add.Name 부분은 쿼리를 사용할때 테이블이 됩니다.
      // ex) FDLocalSQL.DataSets.Add.Name := 'Temp' 일때 이 데이터셋에서 데이터를 Select하려면
      // select * from Temp가 됩니다.
      with FDLocalSQL.DataSets.Add do
      begin
        DataSet := {AccessDB1};   // <-- 여기가 DataSet
        Name := 'AccessDB1';      // <-- 지정된 DataSet의 별칭을 입력
      end;

      with FDLocalSQL.DataSets.Add do
      begin
        DataSet := {AccessDB2};
        Name := 'AccessDB2;
      end;

      with FDLocalSQL.DataSets.Add do
      begin
        DataSet := {AccessDB3};
        Name := 'AccessDB3;
      end;

      FDQuery := TFDQuery.Create(Self);
      FDQuery.LocalSQL := FDLocalSQL;
      FDLocalSQL.Active := True;

      FDQuery.Close;
      FDQuery.SQL.Clear;
      FDQuery.SQL.Text := '쿼리';
      FDQuery.Open;