Q&A

  • Query한 결과셋 INT형을 Edit에 뿌리기?
안녕하세요..

테이블 2개를 조인한 Query의 결과셋중에서 INT(CstmrID field)형을 Edit에 뿌리려고 하는데

에러가 출력됩니다.. 그리고 INT형을 INSERT할때도 변환과정이 필요합니다

소스는 아래에...



procedure TForm1.Button1Click(Sender: TObject);

var

ls_cnt : Integer;

begin

with Query2 do begin

Close;

SQL.Clear;

SQL.Add(' SELECT * ');

SQL.Add(' FROM Customers AS a INNER JOIN Customers_Detail AS b ');

SQL.Add(' ON a.CstmrID = b.CstmrID ');

SQL.Add(' WHERE a.CstmrName = :v_nm ');

ParamByName('v_nm').AsString := Trim(Edit1.Text);

Open;

end; //CstmrID가 INT형임

Edit2.Text := IntToStr(Query2.FieldByName('CstmrID').Value); //여기서 변환을

Edit3.Text := Query2.FieldByName('CstmrP').Value; //어케 해야하는지?

Edit4.Text := Query2.FieldByName('CstmrName').Value;

Edit5.Text := Query2.FieldByName('C_No').Value;

Edit6.Text := Query2.FieldByName('Tlphn').Value;

Edit7.Text := Query2.FieldByName('Fx').Value;

Edit8.Text := Query2.FieldByName('ZpCd').Value;

Edit9.Text := Query2.FieldByName('Sub_Adrss').Value;

Edit10.Text := Query2.FieldByName('C_Dscrptn').Value;

Edit11.Text := Query2.FieldByName('E_Mail').Value;



ls_cnt := Query2.RecordCount;

if ls_cnt < 1 then

MessageBox(handle, '검색된 내용이 없습니다', '확 인', MB_OK or $0040)

else

PageControl1.ActivePageIndex := 1;

end;



procedure TForm1.Button2Click(Sender: TObject);

begin

with Query3 do begin

Close;

SQL.Clear;

SQL.Add(' INSERT INTO Customers_detail (d_Nm,D_Pstn,D_tel,D_E_mail, ');

SQL.Add(' CstrmID) VALUES( :v_d_Nm, :v_D_Pstn, :v_D_tel, ');

SQL.Add(' :v_D_E_mail, :v_CstmrID) ');

ParamByName('v_d_Nm').AsString := Trim(Edit12.Text);

ParamByName('v_D_Pstn').AsString := Trim(Edit13.Text);

ParamByName('v_D_tel').AsString := Trim(Edit14.Text);

ParamByName('v_D_E_mail').AsString := Trim(Edit15.Text);

ParamByName('v_cstmrID').AsString := Trim(Edit2.Text); //여기서 Error가

Open; // 발생할것 같은데?

end;

end;



end.



위의 소스를 어
3  COMMENTS
  • Profile
    블랙봉 2001.07.10 18:44
    > Edit2.Text := IntToStr(Query2.FieldByName('CstmrID').Value);

    윗 부분은 다음과 같이 변환하시면 되겠네요.

    Edit2.Text := IntToStr(Query2.FieldByName('CstmrID').AsInteger);

    또는

    Edit2.Text := Query2.FieldByName('CstmrID').AsString;

    두 문장이 거의 비슷하지만 필드의 값이 NULL일 때는 아마 차이가 날 겁니다.

    첫 번째 문장은 NULL이더라도 0이 에디트 박스에 들어가고 2번째 문장은

    에디트 박스에 아무 것도 안들어갈 겁니다.(맞나...)



    > ParamByName('v_cstmrID').AsString := Trim(Edit2.Text);

    위 문장의 에러는 Edit2.Text의 값이 '' 이거나 숫자가 아닐때 날 것 같은데요.

    숫자인지 체크를 먼저 하심이 어떨지.



    김대훈 wrote:

    > 안녕하세요..

    > 테이블 2개를 조인한 Query의 결과셋중에서 INT(CstmrID field)형을 Edit에 뿌리려고 하는데

    > 에러가 출력됩니다.. 그리고 INT형을 INSERT할때도 변환과정이 필요합니다

    > 소스는 아래에...

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > ls_cnt : Integer;

    > begin

    > with Query2 do begin

    > Close;

    > SQL.Clear;

    > SQL.Add(' SELECT * ');

    > SQL.Add(' FROM Customers AS a INNER JOIN Customers_Detail AS b ');

    > SQL.Add(' ON a.CstmrID = b.CstmrID ');

    > SQL.Add(' WHERE a.CstmrName = :v_nm ');

    > ParamByName('v_nm').AsString := Trim(Edit1.Text);

    > Open;

    > end; //CstmrID가 INT형임

    > Edit2.Text := IntToStr(Query2.FieldByName('CstmrID').Value); //여기서 변환을

    > Edit3.Text := Query2.FieldByName('CstmrP').Value; //어케 해야하는지?

    > Edit4.Text := Query2.FieldByName('CstmrName').Value;

    > Edit5.Text := Query2.FieldByName('C_No').Value;

    > Edit6.Text := Query2.FieldByName('Tlphn').Value;

    > Edit7.Text := Query2.FieldByName('Fx').Value;

    > Edit8.Text := Query2.FieldByName('ZpCd').Value;

    > Edit9.Text := Query2.FieldByName('Sub_Adrss').Value;

    > Edit10.Text := Query2.FieldByName('C_Dscrptn').Value;

    > Edit11.Text := Query2.FieldByName('E_Mail').Value;

    >

    > ls_cnt := Query2.RecordCount;

    > if ls_cnt < 1 then

    > MessageBox(handle, '검색된 내용이 없습니다', '확 인', MB_OK or $0040)

    > else

    > PageControl1.ActivePageIndex := 1;

    > end;

    >

    > procedure TForm1.Button2Click(Sender: TObject);

    > begin

    > with Query3 do begin

    > Close;

    > SQL.Clear;

    > SQL.Add(' INSERT INTO Customers_detail (d_Nm,D_Pstn,D_tel,D_E_mail, ');

    > SQL.Add(' CstrmID) VALUES( :v_d_Nm, :v_D_Pstn, :v_D_tel, ');

    > SQL.Add(' :v_D_E_mail, :v_CstmrID) ');

    > ParamByName('v_d_Nm').AsString := Trim(Edit12.Text);

    > ParamByName('v_D_Pstn').AsString := Trim(Edit13.Text);

    > ParamByName('v_D_tel').AsString := Trim(Edit14.Text);

    > ParamByName('v_D_E_mail').AsString := Trim(Edit15.Text);

    > ParamByName('v_cstmrID').AsString := Trim(Edit2.Text); //여기서 Error가

    > Open; // 발생할것 같은데?

    > end;

    > end;

    >

    > end.

    >

    > 위의 소스를 어
  • Profile
    김대훈 2001.07.10 20:36
    다시 한번 답변 부탁드리겠습니다..

    아래의 소스를 보면 퀴리가 조인으로 결과셋이 나왔는데

    필드를 구별하는 구별자 같은것이 필요할것 같은데.. 그런것을 처리하는것은

    어케 합니까...

    CstmrID, CstmrP...등이 없다는 에러 메세지가 발생합니다..



    그리고 INSERT시에 아래와 같은 에러가 발생합니다..

    Project Project_DS.exe raised exception class ENoResultSet with message

    'Error creating cursor handle'



    그리고 제가 구현하려는 것은 거래업체의 기본정보가 출력되고 출력된 거래업체의

    담당자들의 이력을 Dbgrid에 나타내려고 합니다 기본정보는 에디트에 나타납니다..





    블랙봉 wrote:

    > > Edit2.Text := IntToStr(Query2.FieldByName('CstmrID').Value);

    > 윗 부분은 다음과 같이 변환하시면 되겠네요.

    > Edit2.Text := IntToStr(Query2.FieldByName('CstmrID').AsInteger);

    > 또는

    > Edit2.Text := Query2.FieldByName('CstmrID').AsString;

    > 두 문장이 거의 비슷하지만 필드의 값이 NULL일 때는 아마 차이가 날 겁니다.

    > 첫 번째 문장은 NULL이더라도 0이 에디트 박스에 들어가고 2번째 문장은

    > 에디트 박스에 아무 것도 안들어갈 겁니다.(맞나...)

    >

    > > ParamByName('v_cstmrID').AsString := Trim(Edit2.Text);

    > 위 문장의 에러는 Edit2.Text의 값이 '' 이거나 숫자가 아닐때 날 것 같은데요.

    > 숫자인지 체크를 먼저 하심이 어떨지.

    >

    > 김대훈 wrote:

    > > 안녕하세요..

    > > 테이블 2개를 조인한 Query의 결과셋중에서 INT(CstmrID field)형을 Edit에 뿌리려고 하는데

    > > 에러가 출력됩니다.. 그리고 INT형을 INSERT할때도 변환과정이 필요합니다

    > > 소스는 아래에...

    > >

    > > procedure TForm1.Button1Click(Sender: TObject);

    > > var

    > > ls_cnt : Integer;

    > > begin

    > > with Query2 do begin

    > > Close;

    > > SQL.Clear;

    > > SQL.Add(' SELECT * ');

    > > SQL.Add(' FROM Customers AS a INNER JOIN Customers_Detail AS b ');

    > > SQL.Add(' ON a.CstmrID = b.CstmrID ');

    > > SQL.Add(' WHERE a.CstmrName = :v_nm ');

    > > ParamByName('v_nm').AsString := Trim(Edit1.Text);

    > > Open;

    > > end; //CstmrID가 INT형임

    > > Edit2.Text := IntToStr(Query2.FieldByName('CstmrID').Value); //여기서 변환을

    > > Edit3.Text := Query2.FieldByName('CstmrP').Value; //어케 해야하는지?

    > > Edit4.Text := Query2.FieldByName('CstmrName').Value;

    > > Edit5.Text := Query2.FieldByName('C_No').Value;

    > > Edit6.Text := Query2.FieldByName('Tlphn').Value;

    > > Edit7.Text := Query2.FieldByName('Fx').Value;

    > > Edit8.Text := Query2.FieldByName('ZpCd').Value;

    > > Edit9.Text := Query2.FieldByName('Sub_Adrss').Value;

    > > Edit10.Text := Query2.FieldByName('C_Dscrptn').Value;

    > > Edit11.Text := Query2.FieldByName('E_Mail').Value;

    > >

    > > ls_cnt := Query2.RecordCount;

    > > if ls_cnt < 1 then

    > > MessageBox(handle, '검색된 내용이 없습니다', '확 인', MB_OK or $0040)

    > > else

    > > PageControl1.ActivePageIndex := 1;

    > > end;

    > >

    > > procedure TForm1.Button2Click(Sender: TObject);

    > > begin

    > > with Query3 do begin

    > > Close;

    > > SQL.Clear;

    > > SQL.Add(' INSERT INTO Customers_detail (d_Nm,D_Pstn,D_tel,D_E_mail, ');

    > > SQL.Add(' CstrmID) VALUES( :v_d_Nm, :v_D_Pstn, :v_D_tel, ');

    > > SQL.Add(' :v_D_E_mail, :v_CstmrID) ');

    > > ParamByName('v_d_Nm').AsString := Trim(Edit12.Text);

    > > ParamByName('v_D_Pstn').AsString := Trim(Edit13.Text);

    > > ParamByName('v_D_tel').AsString := Trim(Edit14.Text);

    > > ParamByName('v_D_E_mail').AsString := Trim(Edit15.Text);

    > > ParamByName('v_cstmrID').AsString := Trim(Edit2.Text); //여기서 Error가

    > > Open; // 발생할것 같은데?

    > > end;

    > > end;

    > >

    > > end.

    > >

    > > 위의 소스를 어
  • Profile
    블랙봉 2001.07.11 02:23
    > > > SQL.Add(' SELECT * ');

    > > > SQL.Add(' FROM Customers AS a INNER JOIN Customers_Detail AS b ');

    > > > SQL.Add(' ON a.CstmrID = b.CstmrID ');

    > > > SQL.Add(' WHERE a.CstmrName = :v_nm ');

    > > > ParamByName('v_nm').AsString := Trim(Edit1.Text);



    이 부분을 말씀하시는건가요?

    음... Customers와 Customers_Detail 테이블에 같은 이름을 가진 필드가 있으면 문제가 되겠네요. 일단 CstmrID가 그렇군요. 이런 경우에는 Select 에서 명시적으로 필드 이름을 나열해 주시면 해결 될 것 같군요.

    SELECT a.CstmrID, .........

    등으로요..



    김대훈 wrote:

    > 다시 한번 답변 부탁드리겠습니다..

    > 아래의 소스를 보면 퀴리가 조인으로 결과셋이 나왔는데

    > 필드를 구별하는 구별자 같은것이 필요할것 같은데.. 그런것을 처리하는것은

    > 어케 합니까...

    > CstmrID, CstmrP...등이 없다는 에러 메세지가 발생합니다..

    >

    > 그리고 INSERT시에 아래와 같은 에러가 발생합니다..

    > Project Project_DS.exe raised exception class ENoResultSet with message

    > 'Error creating cursor handle'

    >

    > 그리고 제가 구현하려는 것은 거래업체의 기본정보가 출력되고 출력된 거래업체의

    > 담당자들의 이력을 Dbgrid에 나타내려고 합니다 기본정보는 에디트에 나타납니다..

    >

    >

    > 블랙봉 wrote:

    > > > Edit2.Text := IntToStr(Query2.FieldByName('CstmrID').Value);

    > > 윗 부분은 다음과 같이 변환하시면 되겠네요.

    > > Edit2.Text := IntToStr(Query2.FieldByName('CstmrID').AsInteger);

    > > 또는

    > > Edit2.Text := Query2.FieldByName('CstmrID').AsString;

    > > 두 문장이 거의 비슷하지만 필드의 값이 NULL일 때는 아마 차이가 날 겁니다.

    > > 첫 번째 문장은 NULL이더라도 0이 에디트 박스에 들어가고 2번째 문장은

    > > 에디트 박스에 아무 것도 안들어갈 겁니다.(맞나...)

    > >

    > > > ParamByName('v_cstmrID').AsString := Trim(Edit2.Text);

    > > 위 문장의 에러는 Edit2.Text의 값이 '' 이거나 숫자가 아닐때 날 것 같은데요.

    > > 숫자인지 체크를 먼저 하심이 어떨지.

    > >

    > > 김대훈 wrote:

    > > > 안녕하세요..

    > > > 테이블 2개를 조인한 Query의 결과셋중에서 INT(CstmrID field)형을 Edit에 뿌리려고 하는데

    > > > 에러가 출력됩니다.. 그리고 INT형을 INSERT할때도 변환과정이 필요합니다

    > > > 소스는 아래에...

    > > >

    > > > procedure TForm1.Button1Click(Sender: TObject);

    > > > var

    > > > ls_cnt : Integer;

    > > > begin

    > > > with Query2 do begin

    > > > Close;

    > > > SQL.Clear;

    > > > SQL.Add(' SELECT * ');

    > > > SQL.Add(' FROM Customers AS a INNER JOIN Customers_Detail AS b ');

    > > > SQL.Add(' ON a.CstmrID = b.CstmrID ');

    > > > SQL.Add(' WHERE a.CstmrName = :v_nm ');

    > > > ParamByName('v_nm').AsString := Trim(Edit1.Text);

    > > > Open;

    > > > end; //CstmrID가 INT형임

    > > > Edit2.Text := IntToStr(Query2.FieldByName('CstmrID').Value); //여기서 변환을

    > > > Edit3.Text := Query2.FieldByName('CstmrP').Value; //어케 해야하는지?

    > > > Edit4.Text := Query2.FieldByName('CstmrName').Value;

    > > > Edit5.Text := Query2.FieldByName('C_No').Value;

    > > > Edit6.Text := Query2.FieldByName('Tlphn').Value;

    > > > Edit7.Text := Query2.FieldByName('Fx').Value;

    > > > Edit8.Text := Query2.FieldByName('ZpCd').Value;

    > > > Edit9.Text := Query2.FieldByName('Sub_Adrss').Value;

    > > > Edit10.Text := Query2.FieldByName('C_Dscrptn').Value;

    > > > Edit11.Text := Query2.FieldByName('E_Mail').Value;

    > > >

    > > > ls_cnt := Query2.RecordCount;

    > > > if ls_cnt < 1 then

    > > > MessageBox(handle, '검색된 내용이 없습니다', '확 인', MB_OK or $0040)

    > > > else

    > > > PageControl1.ActivePageIndex := 1;

    > > > end;

    > > >

    > > > procedure TForm1.Button2Click(Sender: TObject);

    > > > begin

    > > > with Query3 do begin

    > > > Close;

    > > > SQL.Clear;

    > > > SQL.Add(' INSERT INTO Customers_detail (d_Nm,D_Pstn,D_tel,D_E_mail, ');

    > > > SQL.Add(' CstrmID) VALUES( :v_d_Nm, :v_D_Pstn, :v_D_tel, ');

    > > > SQL.Add(' :v_D_E_mail, :v_CstmrID) ');

    > > > ParamByName('v_d_Nm').AsString := Trim(Edit12.Text);

    > > > ParamByName('v_D_Pstn').AsString := Trim(Edit13.Text);

    > > > ParamByName('v_D_tel').AsString := Trim(Edit14.Text);

    > > > ParamByName('v_D_E_mail').AsString := Trim(Edit15.Text);

    > > > ParamByName('v_cstmrID').AsString := Trim(Edit2.Text); //여기서 Error가

    > > > Open; // 발생할것 같은데?

    > > > end;

    > > > end;

    > > >

    > > > end.

    > > >

    > > > 위의 소스를 어