ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [공유] 델파이 FirebirdDB 사용 예제
    기타 정보/정보공유 2016. 8. 24. 13:06
    반응형
    델파이에서 DB를 써본적이 한번도 없어서
    Interbase 컴포넌트를 이용하여 Firebird DB 사용하는 간단한 예제를 하나 만드는데
    너무 시간이 많이 걸렸다. -.-;;

    이렇게 간단한 예제를 만들기 위해서 몇일이나 허비했다.
    정말 간단한 예제인데...

    역시 델파이 예제는 구하기가 쉽지 않은 것같다.
    더우기 파이어버드라는 DB를 쓰는 사람도 많지 않고
    더군다나 Interbase 컴포넌트를 사용하는 사람도 그리 많지 않아보인다.

    아니 델파이로 파이어버드를 Interbase 컴포넌트를 사용해서 쓰는 사람이
    인터넷에 자료를 올려놓은 사람이 별로 없어 보인다.
    나중에 찾다 찾다. 영어가 아닌 유럽말(프랑스어이려나?)로 씌여진 사이트에
    아주 친절하게 만들어진 예제들이 있어서 그것을 보고 조금이나마 사용법을 알게되었다.

    혹시 나같이 또 삽질하는 사람이 없길 바라며 정말 간단한 예제를 적어본다.
    Insert나 Update, Delete같은 SQL문을 실행하는 예제와 
    Select문으로 Query를 보내서 돌아온 값을 표시하는 예제이다.
    이 두 예제만 있으면 우선은 정말 기초적(초보적으로?)으로 DB를 사용하는데는 문제가 없을 것같다.

    uses
      IBQuery, IBDatabase; 추가할 것

    ■ SQL문 실행
    procedure TfrmMainIbx.btnSqlExecClick(Sender: TObject);
    var
      idFbDb : TIBDatabase;
      itTrans : TIBTransaction;
      iqSql : TIBQuery;
    begin
      // 데이터베이스 설정
      idFbDb := TIBDatabase.Create(nil);

      idFbDb.SQLDialect := 3;
      idFbDb.Params.Add('USER "sysdba"');
      idFbDb.Params.Add('PASSWORD "masterkey"');
      idFbDb.DatabaseName := '..\data\testFB.gdb';
      idFbDb.LoginPrompt := false;
      idFbDb.Open;

      // Transaction 설정
      itTrans := TIBTransaction.Create(nil);
      itTrans.DefaultDatabase := idFbDb;

      idFbDb.DefaultTransaction := itTrans;

      // Query 설정
      iqSql := TIBQuery.Create(nil);
      iqSql.Database := idFbDb;
      iqSql.Transaction := itTrans;

      //iqSql.SQL.Add('INSERT INTO members');
      //iqSql.SQL.Add('  (mid, m_name)');
      //iqSql.SQL.Add('  VALUES (1, ''Jhon'')');
      //iqSql.SQL.Add(memSql.Lines);

      iqSql.SQL.AddStrings(memSql.Lines);

      Try
        if not itTrans.InTransaction then itTrans.StartTransaction;

        // SQL문 실행
        iqSql.ExecSQL;
        itTrans.Commit;
      except
        on e: Exception do
      end;

      iqSql.Close;
      iqSql.Free;
      itTrans.Free;
      idFbDb.Free;
    end;

    ■ SELET문 질의내용 표시
    procedure TfrmMainIbx.btnSeletClick(Sender: TObject);
    var
      idFbDb : TIBDatabase;
      itTrans : TIBTransaction;
      iqSql : TIBQuery;
    begin
      // 데이터베이스 설정
      idFbDb := TIBDatabase.Create(nil);

      idFbDb.SQLDialect := 3;
      idFbDb.Params.Add('USER "sysdba"');
      idFbDb.Params.Add('PASSWORD "masterkey"');
      idFbDb.DatabaseName := '..\data\testFB.gdb';
      idFbDb.LoginPrompt := false;

      // Transaction 설정
      itTrans := TIBTransaction.Create(nil);
      itTrans.DefaultDatabase := idFbDb;

      idFbDb.DefaultTransaction := itTrans;

      // Query 설정
      iqSql := TIBQuery.Create(nil);
      iqSql.Database := idFbDb;
      iqSql.Transaction := itTrans;

      iqSql.SQL.Add('Select * from members');
      iqSql.Open;

      lstMember.Clear;

      // 테이블의 한 필드의 값을 리스트 박스에 표시
      while not iqSql.EOF do
      begin
        lstMember.Items.Add(iqSql.FieldByName('m_name').AsString);
        iqSql.Next;
      end;

      iqSql.Close;
      iqSql.Free;
      itTrans.Free;
      idFbDb.Free;
    end;

    주로 델파이에서는 DB에서 질의해온 내용은 DB컨트롤을 많이 쓰나보다.
    예전에 아니 옛날에 VB로 DB를 쓸때는 그냥 일일이 컨트롤에 레코드셋 자료를 
    넣어서 썼는데 옛날 버릇이 남아서 그런지 델파이에서 DataSource와 DB컴포넌트랑
    연결해서 쓰는것이 익숙치가 않다.



    반응형

    댓글

Designed by Tistory.