SQLite를 FireDAC을 이용해서 그림파일을 DB파일에 입력을 하였습니다.
DB에서 읽어서 Timage 에 넣는 기능을 작성 중입니다.
코드는 아래와 같이 작성을 하였습니다.
*****첫번째 문의:
그런데, 여러개 자료를 입력을 했는데, 그림을 읽으면, 첫번째 레코드(Row)에 입력된 이미지만 불러 옵니다.
FDMainTable에서 읽을 레코드 번호(Row) 를 설정을 하지 않아서 맨 처음 레코드 만 읽어오는 것 같은데....
어떻게 수정을 해야 하나요?
FormMain->FDMainTable->Active = false;
FormMain->FDMainTable->TableName = "User";
FormMain->FDMainTable->Connection = FormMain->FDConnection1;
FormMain->FDMainTable->Active = true;
FormMain->FDMainTable->Open();
TStream* BStream = new TStream(); // 그림 읽고 저장을 위한 스트림
BStream = FormMain->FDMainTable->CreateBlobStream((FormMain->FDMainTable->FieldByName("B_Sig")), bmRead);
BStream->Position = 0;
imgUser->Picture->LoadFromStream(BStream);
BStream->Free();
FormMain->FDMainTable->Close();
////자답
아래와 같이 ID로 해당 레코드를 검색을 해서 그림을 읽으니 문제 없이 되는 군요.
LabelUserID->Caption = DBGridUser->Fields[0]->Text;
edtBelog->Text = DBGridUser->Fields[1]->Text;
edtName->Text = DBGridUser->Fields[2]->Text;
edtNote->Text = DBGridUser->Fields[3]->Text;
// 그림은, DB에서 읽어서 Timage 컨트롤에 보이게 한다.
// DBGrid 에서 읽은 ID 값으로 검색을 해서 그림만 따로 읽는다.
FormMain->FDMainTable->Active = false;
FormMain->FDMainTable->TableName = "User";
FormMain->FDMainTable->Connection = FormMain->FDConnection1;
FormMain->FDMainTable->Active = true;
FormMain->FDMainTable->Open();
// http://skql.tistory.com/2 DB기초설명 아주좋음
// ID로 검색해서 그림을 보여줌
FormMain->FDMainTable->SetKey();
FormMain->FDMainTable->FieldByName("I_UserID")->AsString = LabelUserID->Caption;
if (FormMain->FDMainTable->GotoKey()) {
TStream* BStream = new TStream(); // 그림 읽고 저장을 위한 스트림
BStream = FormMain->FDMainTable->CreateBlobStream((FormMain->FDMainTable->FieldByName("B_Sig")), bmRead);
BStream->Position = 0;
imgUser->Picture->LoadFromStream(BStream);
BStream->Free();
}
FormMain->FDMainTable->Close();
*****두번째 문의:
특정 레코드 의 그림 column 에 그림을 변경 하려면, SQL query 를 어떻게 해야 하나요?
예를 들어 10번 레코드의 그림칼럼에 그림을 변경 하려 합니다.
FireDAC을 사용해도 되는데,, 아직 어쩧게 해야 하는지 잘 몰라서 문의 드립니다.
미리 감사 드립니다.
|