Q&A

  • access DB에서 SQL로 조회할 때.
안녕하십니까.

access db에 몇 개의 테이블을 만들어서 델파이로 프로그램을 작성하다가

SQL 문으로 조회를 하는 부분에서 난감한 상황이 발생해서 좀 여쭤볼까 하고

게시물을 작성하게 되었습니다.



텍스트로 입력한 숫자들을 실수로 변환해서 총합을 내려고



select sum(float("텍스트 필드명")) from "테이블명"



이런 식으로 sql문을 작성해서 프로그램 내에 삽입하고 실행시켰더니

float()를 지원하지 않는다는 뜻의 메시지가 뜨면서 실행이 중지되더군요.

int("텍스트 필드명")은 잘 실행됩니다만

실수로 변환하려고만 하면 sql문이 실행되지가 않는군요.

뭐 group by가 빠졌다거나 그런 건 아닙니다. 위의 sql 문장에 있는 테이블명과 필드명을

다른 테이블명과 그 테이블의 실수값 필드명으로 바꾸면 답이 나오는걸요.

그리고 저 텍스트 필드에는 숫자 아닌 값은 하나도 없습니다. 전부 숫자이지요.

위에 쓴 sql문장에서는 빼뒀습니다만 where 조건을 써서 숫자 텍스트가 아닌 값은 sum에 넣질 않게 하고 있습니다.

원래부터 실수 필드로 만들면 좋겠지만 몇몇 필드가 텍스트 값이 필요한 것이 있어서

그것도 안되겠군요..



real()도 해봤고.. float4, float8도 해봤는데 아무것도 안되는군요.

원래 access db에서 그런식의 변환을 지원하지 않는 것입니까?

int로 변환하는 것은 잘 되던데..



엄밀히 말하면 델파이 관련은 아닙니다만..

혹시나 하고 지푸라기 잡는 심정으로 올려봅니다.

아시는 것이 있으시면 답변 부탁드립니다.

1  COMMENTS
  • Profile
    델 초보맨 2001.02.24 07:15
    초보 wrote:

    > 안녕하십니까.

    > access db에 몇 개의 테이블을 만들어서 델파이로 프로그램을 작성하다가

    > SQL 문으로 조회를 하는 부분에서 난감한 상황이 발생해서 좀 여쭤볼까 하고

    > 게시물을 작성하게 되었습니다.

    >

    > 텍스트로 입력한 숫자들을 실수로 변환해서 총합을 내려고

    >

    > select sum(float("텍스트 필드명")) from "테이블명"

    >

    > 이런 식으로 sql문을 작성해서 프로그램 내에 삽입하고 실행시켰더니

    > float()를 지원하지 않는다는 뜻의 메시지가 뜨면서 실행이 중지되더군요.

    > int("텍스트 필드명")은 잘 실행됩니다만

    > 실수로 변환하려고만 하면 sql문이 실행되지가 않는군요.

    > 뭐 group by가 빠졌다거나 그런 건 아닙니다. 위의 sql 문장에 있는 테이블명과 필드명을

    > 다른 테이블명과 그 테이블의 실수값 필드명으로 바꾸면 답이 나오는걸요.

    > 그리고 저 텍스트 필드에는 숫자 아닌 값은 하나도 없습니다. 전부 숫자이지요.

    > 위에 쓴 sql문장에서는 빼뒀습니다만 where 조건을 써서 숫자 텍스트가 아닌 값은 sum에 넣질 않게 하고 있습니다.

    > 원래부터 실수 필드로 만들면 좋겠지만 몇몇 필드가 텍스트 값이 필요한 것이 있어서

    > 그것도 안되겠군요..

    >

    > real()도 해봤고.. float4, float8도 해봤는데 아무것도 안되는군요.

    > 원래 access db에서 그런식의 변환을 지원하지 않는 것입니까?

    > int로 변환하는 것은 잘 되던데..

    >

    > 엄밀히 말하면 델파이 관련은 아닙니다만..

    > 혹시나 하고 지푸라기 잡는 심정으로 올려봅니다.

    > 아시는 것이 있으시면 답변 부탁드립니다.











    형변환을 잘못하시것 같은데

    저도 왕초보이지만 혹시 도움이 될까 제소스를 보여드립니다.

    저도 처음에는 형변환을 하지 않고 string으로만 하다가 고생했거든







    DB에 저장시에 strto____



    DB에서 가져올 경우 ___tostr



    --- 저장시에 -----





    with qry_input do

    begin

    Active:=False;

    SQL.Clear;

    vv_inputSql := 'Insert into input(i_order,i_gubun,i_blnum,i_invoice'+

    ',i_date,i_customer,i_saler,i_product,i_promount,i_dollar'+

    ',i_rate,i_won,i_talwon,i_saleyn,i_etc)'+

    ' Values(:i_order,:i_gubun,:i_blnum,:i_invoice'+

    ',:i_date,:i_customer,:i_saler,:i_product,:i_promount,:i_dollar'+

    ',:i_rate,:i_won,:i_talwon,:i_saleyn,:i_etc)';

    SQL.Add(vv_inputSql);

    // 테이블에 데이터를 저장합니다.

    Parambyname('i_order').AsString := trim(ed_order.Text); // 발주번호

    Parambyname('i_gubun').AsString := trim(cb_i_gubun.Text); // 입고구분

    Parambyname('i_blnum').AsString := trim(ed_i_blnum.Text); // BL번호

    Parambyname('i_date').AsDateTime := (date_insale.DateTime); // 발주일자

    Parambyname('i_customer').AsInteger := strtoint(lbl_customer.Caption);

    Parambyname('i_saler').AsInteger := strtoint(lbl_sale.Caption);

    Parambyname('i_product').AsInteger := strtoint(lbl_product.Caption);

    Parambyname('i_promount').AsInteger := strtoint(cb_promount.Text);

    Parambyname('i_dollar').AsFloat := strtofloat(ed_s_dollar.Text);

    Parambyname('i_rate').AsFloat := strtofloat(ed_i_rate.Text);

    Parambyname('i_won').AsFloat := strtofloat(ed_s_won.Text);

    Parambyname('i_saleyn').AsString := trim(insale); // 발주확인

    Parambyname('i_etc').AsString := trim(ed_i_etc.text); // 기타사항





    --- DB에서 가져올 경우 -----





    ed_order.Text := qry_input.Fieldbyname('i_order').AsString;

    cb_i_gubun.Text := qry_input.Fieldbyname('i_gubun').AsString;

    ed_i_blnum.Text := qry_input.Fieldbyname('i_blnum').AsString;

    ed_i_invoice.Text := qry_input.Fieldbyname('i_invoice').AsString;

    date_insale.Date:= qry_input.Fieldbyname('i_date').AsDateTime;

    lbl_customer.Caption := inttostr(qry_input.Fieldbyname('i_customer').AsInteger);

    lbl_sale.Caption :=inttostr(qry_input.Fieldbyname('i_saler').AsInteger);

    lbl_product.Caption := inttostr(qry_input.Fieldbyname('i_product').AsInteger);

    cb_promount.Text := inttostr(qry_input.Fieldbyname('i_promount').AsInteger);

    ed_s_dollar.Text := floattostr(qry_input.Fieldbyname('i_dollar').AsFloat);

    ed_i_rate.Text := floattostr(qry_input.Fieldbyname('i_rate').AsFloat);

    ed_s_won.Text := floattostr(qry_input.Fieldbyname('i_won').AsFloat);

    ed_s_talwon.Text := floattostr(qry_input.Fieldbyname('i_talwon').AsFloat);

    ed_i_etc.text:= qry_input.Fieldbyname('i_etc').AsString;





    도움이 되시길 바랍니다.