프로그래밍 노트

[델파이]Interbase 컴포넌트를 이용하여 Firebird DB 사용하는 초 간단 예제 본문

데이터베이스/Firebird

[델파이]Interbase 컴포넌트를 이용하여 Firebird DB 사용하는 초 간단 예제

띠리 2008. 11. 25. 14:42
델파이에서 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컴포넌트랑
연결해서 쓰는것이 익숙치가 않다.


Comments