Q&A

  • (질문)오라클에 실수형데이타입력..
오라클에 실수형 데이타를 입력하려합니다. 그럴려면 오라클 필드의 형식은 무엇으로정의해야 합니까?? 참고로 저는 number(13,2)로 정의 했구요. 그리고 여기에 델파이로 작성한 프로그램으로 데이타를 입력하려 합니다. 데이타 입력을 위해 에디트 박스를 사용했습니다. 그런데 데이타가 입력되질 않습니다. 도와주세요...

아래엔 제가 사용한 문장입니다.

sql.add('insert into test');

sql.add('test-1');

sql.add('values(:test-1)');

parambyname('test-1').asfloae := strtofloat((edt_test1).text);

execsql;



에디트 박스이외에 currencyedit 도 사용해 봤습니다. 그런데도 값이 입력될질 않습니다.

도와 주세요...

5  COMMENTS
  • Profile
    여영식 2000.01.12 03:14
    안녕하세요. 여영식이라고 합니다.

    저희 오라클 서버가 다운되어 있어 내일쯤 복구가 가능할 것 같습니

    다. 그전에 먼저 몇가지 사항을 Test 해보세요.

    이것은 프로그램 소스에 문제인지 아니면 외부 환경에 문제가 있는

    것인가를 확인하려는 것입니다.



    먼저 델파이 SQL Explorer 에서 직접 실수형을 입력해 보십시오.



    SQL Explorer에서 해당 테이블을 선택한 후 Data 탭을 선택후 직접

    값을 입력해 봅니다. 1234.00 과 1234.12를 입력해서 에러 여부를

    확인합니다.



    에러가 없다면 Enter SQL 탭에서 SQL 문을 실행합니다.





    insert into test (test-1)

    values (1234.00)



    insert into test (test-1)

    values (1234.12)

    를 실행했을 때 에러여부를 확인합니다.



    이 또한 에러가 없다면 이번에는 프로그램에서 직접 값을 대입합

    니다. ParamByName으로 값을 넘기는것이 아니라 SQL 문에 직접

    값을 입력하는것이지요.



    sql.clear; ---> 이거 반드시 넣어주세요.

    sql.add('insert into test');

    sql.add('(test-1)');

    sql.add('values(1234.00)');

    execsql;





    sql.clear; ---> 이거 반드시 넣어주세요.

    sql.add('insert into test');

    sql.add('(test-1)');

    sql.add('values(1234.12)');

    execsql;

    를 실행해 보십시오.



    이래도 에러가 없으면 값을 ParamByName으로 입력해 보세요.



    sql.add('insert into test');

    sql.add('(test-1)');

    sql.add('values (:test-1)');



    ParamByName('test-1').AsFloat := 1234.00;

    or

    ParamByName('test-1').AsFloat := 1234.12;



    execsql;



    이래도 에러가 없으면 edit 에서 입력을 한 값을 치환해서

    에러 여부를 확인합니다.



    마지막으로 오라클 버전이 8.xx 라면 새로운 BDE 패치버전을 설치하셔야



    합니다.



    이상이 제가 검사할 수 있는 모든 경우가 되겠습니다.



    그리고 검사 결과를 알려주세요. 저도 궁금합니다.



    에러가 발생하면 프로그램 소스를 보내주세요. 제가 확인해

    드리겠습니다.

  • Profile
    서수영 2000.01.12 23:25
    여영식 wrote:

    > 안녕하세요. 여영식이라고 합니다.

    > 저희 오라클 서버가 다운되어 있어 내일쯤 복구가 가능할 것 같습니

    > 다. 그전에 먼저 몇가지 사항을 Test 해보세요.

    > 이것은 프로그램 소스에 문제인지 아니면 외부 환경에 문제가 있는

    > 것인가를 확인하려는 것입니다.

    >

    > 먼저 델파이 SQL Explorer 에서 직접 실수형을 입력해 보십시오.

    >

    > SQL Explorer에서 해당 테이블을 선택한 후 Data 탭을 선택후 직접

    > 값을 입력해 봅니다. 1234.00 과 1234.12를 입력해서 에러 여부를

    > 확인합니다.

    >

    > 에러가 없다면 Enter SQL 탭에서 SQL 문을 실행합니다.

    >

    > 즉

    > insert into test (test-1)

    > values (1234.00)

    > 과

    > insert into test (test-1)

    > values (1234.12)

    > 를 실행했을 때 에러여부를 확인합니다.

    >

    > 이 또한 에러가 없다면 이번에는 프로그램에서 직접 값을 대입합

    > 니다. ParamByName으로 값을 넘기는것이 아니라 SQL 문에 직접

    > 값을 입력하는것이지요.

    >

    > sql.clear; ---> 이거 반드시 넣어주세요.

    > sql.add('insert into test');

    > sql.add('(test-1)');

    > sql.add('values(1234.00)');

    > execsql;

    >

    > 와

    > sql.clear; ---> 이거 반드시 넣어주세요.

    > sql.add('insert into test');

    > sql.add('(test-1)');

    > sql.add('values(1234.12)');

    > execsql;

    > 를 실행해 보십시오.

    >

    > 이래도 에러가 없으면 값을 ParamByName으로 입력해 보세요.

    >

    > sql.add('insert into test');

    > sql.add('(test-1)');

    > sql.add('values (:test-1)');

    >

    > ParamByName('test-1').AsFloat := 1234.00;

    > or

    > ParamByName('test-1').AsFloat := 1234.12;

    >

    > execsql;

    >

    > 이래도 에러가 없으면 edit 에서 입력을 한 값을 치환해서

    > 에러 여부를 확인합니다.

    >

    > 마지막으로 오라클 버전이 8.xx 라면 새로운 BDE 패치버전을 설치하셔야

    >

    > 합니다.

    >

    > 이상이 제가 검사할 수 있는 모든 경우가 되겠습니다.

    >

    > 그리고 검사 결과를 알려주세요. 저도 궁금합니다.

    >

    > 에러가 발생하면 프로그램 소스를 보내주세요. 제가 확인해

    > 드리겠습니다.



    안녕하세요. 서 수영입니다.

    어제 메일 고맙구요. 메일 받고 오늘 열심히 테스트 해 봤거든요.

    다른 모든 테스트에서는 값이 제대로 테이블에 들어갑니다 그런데..

    마지막 parambyname('test-1').Asfloat := 1234.00; 에서는 실행시 에러는 없으나

    값이 테이블에 들어가질 않구요.

    그리고 parambyname('test-1').Asfloat := 1234.12 에서는 실행하면 어제 말씀드린

    에러있죠 ORA-01480 : STR 바인드값에 종료의 널이 없습니다." 가 떨어지거든요.

    왜그렇죠??

    영식님 가르쳐 주세요.

    그리고 오라클 버전이 8.xx 면 무조건 새로운 BDE 패치 버전을 설치해야 합니까??

    가르쳐주세요..









  • Profile
    여영식 2000.01.12 00:10
    execsql 메소드 실행시 오류가 발생하지 않나요?

    발생한다면 오류번호를 알려주십시오.

    그리고 sql.add('test-1'); 문장은 sql.add('(test-1)'); 이 되어야 합니다.

    즉 () 를 추가하셔야 되는데.

    프로그램 소스에 () 이 추가 되었고 이 글을 쓰시면서 잘못 쓴것이라면

    혹시 트랜잭션을 건후 commit 을 하지 않게 되면 저장이 않되는 경우도 확인해볼 필요가

    있습니다.

    일단은 생각나는게 이것밖에 없네요. 좀 더 자세한 정보가 필요합니다.



  • Profile
    서수영 2000.01.12 02:07
    여영식 wrote:

    > execsql 메소드 실행시 오류가 발생하지 않나요?

    > 발생한다면 오류번호를 알려주십시오.

    > 그리고 sql.add('test-1'); 문장은 sql.add('(test-1)'); 이 되어야 합니다.

    > 즉 () 를 추가하셔야 되는데.

    > 프로그램 소스에 () 이 추가 되었고 이 글을 쓰시면서 잘못 쓴것이라면

    > 혹시 트랜잭션을 건후 commit 을 하지 않게 되면 저장이 않되는 경우도 확인해볼 필요가

    > 있습니다.

    > 일단은 생각나는게 이것밖에 없네요. 좀 더 자세한 정보가 필요합니다.

    >



    우선 이렇게 관심을 가져 주셔서 감사합니다.

    여러 게시판에 올린지 여러날이 건만 이렇게 나마 답이 온건 처음이거든요.

    눈물이 다 날려구해요..



    execsql 메소드가 실행되면 에러가 발생하거든요. 그게 두가지 경우가 있는데요.

    edit 박스에 만약에 숫자를 1234.00 이렇게 넣으면 에러가 발생하지 않는 대신

    오라클 테이블 에는 아무 값도 들어가지 않구요. 그리고 1234.12 이렇게 소수점 아래에 00 이외에 값을 넣으면

    "ORA-01480 : STR 바인드값에 종료의 널이 없습니다." 라는 에러가 떨어지거든요.

    아무리 해도 모르겠어요. 그리고 TRAN 관리는 하지않구요 AUTO COMMIT 으로 설정 했거든요..

    부디 가르쳐 주세요. 부탁드릴께요.





  • Profile
    서수영 2000.01.12 02:07
    여영식 wrote:

    > execsql 메소드 실행시 오류가 발생하지 않나요?

    > 발생한다면 오류번호를 알려주십시오.

    > 그리고 sql.add('test-1'); 문장은 sql.add('(test-1)'); 이 되어야 합니다.

    > 즉 () 를 추가하셔야 되는데.

    > 프로그램 소스에 () 이 추가 되었고 이 글을 쓰시면서 잘못 쓴것이라면

    > 혹시 트랜잭션을 건후 commit 을 하지 않게 되면 저장이 않되는 경우도 확인해볼 필요가

    > 있습니다.

    > 일단은 생각나는게 이것밖에 없네요. 좀 더 자세한 정보가 필요합니다.

    >



    우선 이렇게 관심을 가져 주셔서 감사합니다.

    여러 게시판에 올린지 여러날이 건만 이렇게 나마 답이 온건 처음이거든요.

    눈물이 다 날려구해요..



    execsql 메소드가 실행되면 에러가 발생하거든요. 그게 두가지 경우가 있는데요.

    edit 박스에 만약에 숫자를 1234.00 이렇게 넣으면 에러가 발생하지 않는 대신

    오라클 테이블 에는 아무 값도 들어가지 않구요. 그리고 1234.12 이렇게 소수점 아래에 00 이외에 값을 넣으면

    "ORA-01480 : STR 바인드값에 종료의 널이 없습니다." 라는 에러가 떨어지거든요.

    아무리 해도 모르겠어요. 그리고 TRAN 관리는 하지않구요 AUTO COMMIT 으로 설정 했거든요..

    부디 가르쳐 주세요. 부탁드릴께요.