안녕하세요.
델파이에 ㄷ도 모르다가 이번에 졸업 작품을 델파이로 만들어보게 되어서 이곳에도 가입을 하게되었네요.
매일 모르는 코딩을 찾아가며 봐오다가, 오늘은 한가지 고수님들께 여주어볼것이 있어서 이렇게 글을 남깁니다.
참고로 저는 델파이로 프로그램에 손을 댄지는 한달이 조금 지난 초보입니다.
제가 졸업 작품으로 만들고 있는것은 자재 관리 프로그램입니다.
제가 여쭈어보고 싶은것은..
자재 발주 작성폼(A폼)에 DBGrid를 사용하여 데이터를 입력한 후,
그 데이터를 1차적으로 A폼 테이블에 임시 저장을 했다가,
그 데이터를 자재 발주 폼(B폼) DBGrid로 저장하고, 다시 A폼에서는 임시 저장한 데이터를 삭제하는 하는 것입니다.
설명이 제대로 된건지는 모르겠지만..;; 밑에 소스를 보시면 대충 이해가 가실것이라 생각합니다.
우선 여기까지는 문제가 되지 않습니다.
하지만 A폼에 DBGrid 한줄만 입력하면 문제가 없지만 여러줄을 입력하면 에러가 생깁니다.
A폼에 DBGrid 상에 3~4줄을 입력해서 한꺼번에 B폼 DBGrid 로 저장하는 방법이 없을까요?
고수님들 도와주세요.
------------------------------------------------------------------------------------------------------------------------
자재 발주 작성폼(A폼) 코딩
procedure TfrmOrderWrite.BtnOrderClick(Sender: TObject);
begin
//테이블에 각 필드별로 데이터를 입력합니다.
OWTable.FieldByName('품목').Value:= DBGrid1.Fields[0].AsString;
OWTable.FieldByName('규격').Value:= DBGrid1.Fields[1].AsString;
OWTable.FieldByName('폭').Value:= DBGrid1.Fields[2].AsString;
OWTable.FieldByName('길이').Value:= DBGrid1.Fields[3].AsString;
OWTable.FieldByName('재질').Value:= DBGrid1.Fields[4].AsString;
OWTable.FieldByName('수량').Value:= DBGrid1.Fields[5].AsInteger;
OWTable.FieldByName('단위').Value:= DBGrid1.Fields[6].AsString;
OWTable.FieldByName('중량').Value:= DBGrid1.Fields[7].AsInteger;
OWTable.FieldByName('단가').Value:= DBGrid1.Fields[8].AsCurrency;
OWTable.FieldByName('비고').Value:= DBGrid1.Fields[9].AsString;
end;
------------------------------------------------------------------------------------------------------------------------
자재 발주폼(B폼)
procedure TfrmOrder.BtnOOrderClick(Sender: TObject);
var
n : Integer;
begin
frmOrderWrite:=TfrmOrderWrite.Create(Application);
try
if frmOrderWrite.ShowModal = mrOK then
begin
//입력된 데이터를 저장합니다.
OTable.Active :=False;
if frmOrderWrite.OWTable.State in [dsInsert] then
frmOrderWrite.OWTable.Post;
with OQuery do
begin
Close;
SQL.Clear;
SQL.Add('Insert into jajaeorder');
SQL.Add('( 발주번호, 공사번호, 공사명, 공사내용, 발주처, 착지, 정산사항,발주일, 입고요청일, 품목, 규격, 폭, 길이, 재질, 수량, 단위, 중량, 단가, 금액, 비고 ) ');
SQL.Add(' Values (:V1, :V2, :V3, :V4, :V5, :V6, :V7, :V8, :V9, :V10, :V11, :V12, :V13, :V14, :V15, :V16, :V17, :V18, :V19, :V20)');
ParamByName('V1').AsString:= frmOrderWrite.Edit1.Text;
ParamByName('V2').AsString:= frmOrderWrite.Edit2.Text;
ParamByName('V3').AsString:= frmOrderWrite.Edit3.Text;
ParamByName('V4').AsString:= frmOrderWrite.Edit4.Text;
ParamByName('V5').AsString:= frmOrderWrite.Edit5.Text;
ParamByName('V6').AsString:= frmOrderWrite.Edit6.Text;
ParamByName('V7').AsString:= frmOrderWrite.Edit7.Text;
ParamByName('V8').AsString:= DateToStr(frmOrderWrite.DateTimePicker1.Date);
ParamByName('V9').AsString:= DateToStr(frmOrderWrite.DateTimePicker2.Date);
ParamByName('V10').AsString:= frmOrderWrite.OWTable.FieldByName('품목').AsString;
ParamByName('V11').AsString:= frmOrderWrite.OWTable.FieldByName('규격').AsString;
ParamByName('V12').AsString:= frmOrderWrite.OWTable.FieldByName('폭').AsString;
ParamByName('V13').AsString:= frmOrderWrite.OWTable.FieldByName('길이').AsString;
ParamByName('V14').AsString:= frmOrderWrite.OWTable.FieldByName('재질').AsString;
ParamByName('V15').AsInteger:= frmOrderWrite.OWTable.FieldByName('수량').AsInteger;
ParamByName('V16').AsString:= frmOrderWrite.OWTable.FieldByName('단위').AsString;
ParamByName('V17').AsInteger:= frmOrderWrite.OWTable.FieldByName('중량').AsInteger;
ParamByName('V18').AsCurrency:= frmOrderWrite.OWTable.FieldByName('단가').AsCurrency;
ParamByName('V19').AsCurrency := frmOrderWrite.OWTable.FieldByName('중량').AsInteger
*frmOrderWrite.OWTable.FieldByName('단가').AsCurrency;
ParamByName('V20').AsString:= frmOrderWrite.OWTable.FieldByName('비고').AsString;
end;
if not OQuery.Prepared then OQuery.Prepare;
OQuery.ExecSQL;
BtnOSearchClick(Sender);
OQuery.Last;
if frmOrderWrite.OWTable.RecordCount > 0 then
begin
frmOrderWrite.OWTable.First;
for n:=1 to frmOrderWrite.OWTable.RecordCount do
begin
frmOrderWrite.OWTable.Delete;
if frmOrderWrite.OWTable.Eof then
break
else
frmOrderWrite.OWTable.Next;
end;
end;
end;
finally
frmOrderWrite.Free;
end;
end;
------------------------------------------------------------------------------------------------------------------------
A폼에는 테이블 1개(OWTable), 데이터소스 1개
B폼에는 테이블 1개(OTable), 쿼리 1개(OQuery), 테이터소스 2개가 있습니다.
위에와 같이 코딩하면 말씀드린바와같이 에러없이 잘 실행됩니다.
하지만. DBGrid상에 한줄씩만 입력이 가능합니다. 여러줄 입력이 불가능합니다.
저 코딩에서 여러줄 입력이 가능하게 하려면 어떻게 수정을 하야 하는지 도무지 감히 잡히지 않아서요 ;;
도와주세요~