개인의 인사기록카드를 프로그램으로 만들었습니다.(간단하게)
인사기록프로그램의 실행환경을 말씀드리자면
1. delphi의 버전은 7.0
2. MySQL의 버전은 4.0.23
3. MySQL의 연결은 Zeosdbo로 버전은 5.5.0
4. MySQL이 설치된 컴퓨터(서버)의 OS는 윈도우 XP Pro
5. MySQL이 설치된 컴퓨터(서버)의 연결은 고정IP
여러 컴퓨터(크라이언트)에서 인사기록프로그램을 실행하여,
고정IP로 MySQL이 설치된 컴퓨터(서버)로 접속을 해서
자료를 입력,수정... 을 합니다.
문제: 사진을 입력해야 하는데, MySQL의 자료에 직접입력하고 싶은데, 하다하다 못하고, 도저히 모르겠써서,
선택한 방법은 사진을 MySQL이 설치된 컴퓨터(서버)의 임의의 폴더에 저장하고,
읽어와서 보여주는 방법으로 할려고 하는데,
여러 컴퓨터(크라이언트)쪽에서 어떻게 MySQL이 설치된 컴퓨터(서버)쪽의 사진을
읽어 올 수 있는지 모르겠습니다.
참고: (사진의 화일이름을 주민번호로 하고, 레코드가 이동될때마다 해당하는 주민번호의 사진을
MySQL이 설치된 컴퓨터(서버)의 임의의 폴더에서 찾아서 Image컴포넌트에 사진을 보여줍니다.
결론: 개인의 인사기록자료는 MySQL이 설치된 컴퓨터(서버)의 MySQL의 자료에 들어가 있고,
사진은 MySQL이 설치된 컴퓨터(서버)의 임의의 폴더에 존재하는데,
어떻게 여러 컴퓨터(크라이언트)쪽에서 읽어와서 보여 줄 수 있을까요.
첨부: MySQL자료에 직접 사진을 넣을 수 있으면 좋겠습니다.
사진이 따로 있으면 관리가 힘들어 질거 같아요.(인원수가 1,000여명 됩니다.)
이상입니다.
끝가지 읽어 주셔서 고맙습니다.
질문이 난해하고 어렵진 않은신지요. 죄송합니다.
조언 부탁드립니다.
제 메일은 thefirst67@korea.com입니다.
그럼
오늘도 많이 웃는 좋은 하루 되세요. 고맙습니다.
물론 입력폼도 만들어야 겠지만요
아래소스는 제가 쓰던것인데 알아서 바꾸어서 쓰세요(DbExpress 입니다)
<!--CodeS-->
function TDataModuleSpec.GetGoodsImage(GoodsCD: string; Data : TMemoryStream): Boolean;
begin
ADODataSetDynamic.Close;
ADODataSetDynamic.CommandText := 'Select Count(*) As Cnt from Table_Goods_Image Where GoodsCD = ''' +
Trim(GoodsCD) + '''';
ADOErrorFlag := 0;
try
ADODataSetDynamic.open;
except
on E: Exception do
begin
MessageDlg('Error Opening Table ' + E.ClassName,
mtError, [mbOK], 0);
Result := false;
ADOErrorFlag := -1;
end;
end;
if ADODataSetDynamic.Fields[0].AsInteger = 0 then
begin
ADODataSetDynamic.Close;
result := false;
exit;
end;
ADODataSetDynamic.Close;
ADODataSetDynamic.CommandText := 'Select ImageData from Table_Goods_Image Where GoodsCD = ''' +
Trim(GoodsCD) + '''';
ADOErrorFlag := 0;
try
ADODataSetDynamic.open;
except
end;
result := True;
TBlobField(
ADODataSetDynamic.Fields[0]
).SaveToStream(Data);
ADODataSetDynamic.Close;
end;
// 입력
var TM : TMemoryStream;
begin
DataModuleSpec.ADOCommandCommon.Close;
DataModuleSpec.ADOCommandCommon.CommandText := 'Delete From Table_Goods_Image ' +
'Where ' +
'GoodsCD = ''' + trim(panGoodsCD.Caption) + ''' ';
try
DataModuleSpec.ADOCommandCommon.Execute;
except
end;
DataModuleSpec.ADOCommandCommon.Close;
TM := TMemoryStream.Create;
m_frmImageAccess.m_layer.BitMap.SaveToStream(TM);
TM.Position := 0;
DataModuleSpec.ADODataSetDynamic.CommandText := 'Insert Into Table_Goods_Image ' +
'(GoodsCd, ImageYN, ImageData) ' +
' Values(''' + trim(panGoodsCD.Caption) + ''', 1, :ImageData )';
DataModuleSpec.ADODataSetDynamic.ParamCheck := True;
if DataModuleSpec.ADODataSetDynamic.Params.Count = 1 then
begin
DataModuleSpec.ADODataSetDynamic.Params[0].DataType := ftGraphic;
DataModuleSpec.ADODataSetDynamic.Params[0].ParamType := ptInput;
DataModuleSpec.ADODataSetDynamic.Params[0].Size := TM.Size;
DataModuleSpec.ADODataSetDynamic.Params[0].SetBlobData(TM.Memory, TM.Size );
try
DataModuleSpec.ADODataSetDynamic.ExecSQL(False);
except
end;
end;
TM.Free;
DataModuleSpec.ADODataSetDynamic.Close;
<!--CodeE-->
고치기는 그래서 그냥 수정없이 쓰던거 올립니다.
알아서 이해하시고 판단하시면 됩니다.