Q&A

  • sql문에 대해...따옴표의 쓰임..
쿼리문을 작성하면서(오라클) 따옴표때문에 많이 실수하고 있습니다.

form 에서 maskedit 와 edit 에서 입력받은 값을 데이터베이스에 insert 시키는 쿼리문입니다. sql.text 와 sql.add 둘중 하나를 쓰려합니다.

일단 저는 sql.text 를 이용해서 쿼리문을 작성했습니다.

예외처리도 맞는지 모르겠네여.

함 봐주세여



procedure Tfrm_sul.SpeedButton1Click(Sender: TObject);

var

date1,date2,i : string;



begin

i := 'I';

date1 := copy(maskedit2.Text,1,4) + copy(maskedit2.Text,6,2) +

copymaskedit2.Text,9,2);

date2 := copy(maskedit3.Text,1,4) + copy(maskedit3.Text,6,2) +

copy(maskedit3.Text,9,2);

try

with frm_main.Query1 do

begin

close;

sql.Clear;

sql.Text := 'insert into pos_설치(브랜드구분,매장코드,매장명,대표자명,

사업자번호,담당자,전화번호,접수일,설치예정일) '+

' values( ' + '''' + I + ''',' + '''' + maskedit4.Text + ''',' +

'''' +edit1.Text + ''',' + '''' + edit2.Text + ''',' +

'''' + maskedit1.Text + ''',' + '''' + edit3.Text + ''',' +

'''' + maskedit5.Text + ''',' + '''' + date1 + ''',' + '''' + date2 + '''' + ')' ;

open;

end;

except

showmessage('해당조건의 Data가 존재하지 않아여.');



end;



end;

4  COMMENTS
  • Profile
    stoney 2001.08.31 04:28
    QuotedStr(Maskedit1.Text) 이런식으로 사용하면 스트링 앞뒤로 따옴표 붙여 주거든요.



    위에 함수 이용해서 하셔두 보기 편해요..



    초보임돠 wrote:

    > 쿼리문을 작성하면서(오라클) 따옴표때문에 많이 실수하고 있습니다.

    > form 에서 maskedit 와 edit 에서 입력받은 값을 데이터베이스에 insert 시키는 쿼리문입니다. sql.text 와 sql.add 둘중 하나를 쓰려합니다.

    > 일단 저는 sql.text 를 이용해서 쿼리문을 작성했습니다.

    > 예외처리도 맞는지 모르겠네여.

    > 함 봐주세여

    >

    > procedure Tfrm_sul.SpeedButton1Click(Sender: TObject);

    > var

    > date1,date2,i : string;

    >

    > begin

    > i := 'I';

    > date1 := copy(maskedit2.Text,1,4) + copy(maskedit2.Text,6,2) +

    > copymaskedit2.Text,9,2);

    > date2 := copy(maskedit3.Text,1,4) + copy(maskedit3.Text,6,2) +

    > copy(maskedit3.Text,9,2);

    > try

    > with frm_main.Query1 do

    > begin

    > close;

    > sql.Clear;

    > sql.Text := 'insert into pos_설치(브랜드구분,매장코드,매장명,대표자명,

    > 사업자번호,담당자,전화번호,접수일,설치예정일) '+

    > ' values( ' + '''' + I + ''',' + '''' + maskedit4.Text + ''',' +

    > '''' +edit1.Text + ''',' + '''' + edit2.Text + ''',' +

    > '''' + maskedit1.Text + ''',' + '''' + edit3.Text + ''',' +

    > '''' + maskedit5.Text + ''',' + '''' + date1 + ''',' + '''' + date2 + '''' + ')' ;

    > open;

    > end;

    > except

    > showmessage('해당조건의 Data가 존재하지 않아여.');

    >

    > end;

    >

    > end;

  • Profile
    시여이 2001.08.31 03:19
    #39 = ''''



    와 같아여...'''' 보단 #39 사용하시이 어떻신지여...

  • Profile
    초보 2001.08.31 02:16
    가장 좋은 방법은 파라미터을 이용해서 하는 것인데...

    일단 이렇게 하셨으니까...흑흑



    procedure Tfrm_sul.SpeedButton1Click(Sender: TObject);

    var

    date1,date2,i : string;



    begin

    i := 'I';

    date1 := copy(maskedit2.Text,1,4) + copy(maskedit2.Text,6,2) +

    copymaskedit2.Text,9,2);

    date2 := copy(maskedit3.Text,1,4) + copy(maskedit3.Text,6,2) +

    copy(maskedit3.Text,9,2);

    try

    with frm_main.Query1 do

    begin

    close;

    sql.Clear;

    sql.Text := 'insert into pos_설치(브랜드구분,매장코드,매장명,대표자명,

    사업자번호,담당자,전화번호,접수일,설치예정일) '+

    ' values( ' + '''' + I + ''',' + '''' + maskedit4.Text + ''',' +

    '''' +edit1.Text + ''',' + '''' + edit2.Text + ''',' +

    '''' + maskedit1.Text + ''',' + '''' + edit3.Text + ''',' +

    '''' + maskedit5.Text + ''',' + '''' + date1 + ''',' + '''' + date2 + '''' + ')' ;



    ==> 이 부분을요...

    sql.add('insert into pos_설치(브랜드구분,매장코드,매장명,대표자명,사업자번

    호, 담당자,전화번호,접수일,설치예정일');

    sql.add(' values(''' + i + ''',''' + maskedit4.text + ''',''');

    이런식으로 붙여주시구요....



    open; ==> 여기는 execsql

    end;

    except

    showmessage('해당조건의 Data가 존재하지 않아여.');

    ==>여기는 데이타 검색이 아니구 insert이니까 insert오류 메세지...



    end;



    end;



    저 같은 경우는 text가 아니라 add를 쓰는데...

    문법은 같겠죠?? ^^;;

    따옴표가 하도 많아서...흑흑

    일단 변수 i에 "|" 을 대입하셨으니 "|" 를 직접 쓰실게 아니라 변수 i를

    쓰셔야 겠네요... values 다음에요...

    그리구...insert에서는 open을 쓰지않고 execsql을 씁니다..

    select에서는 open을 쓰고요...insert,update,delete에서는 execsql을 쓰니까

    바꿔주셔야 겠구요...

    예외처리는 맞는것 같은데...insert문장이니까...

    except 에는 "insert 오류" 이런 문장이 맞을 것 같아요...

    참고로 싱클 쿼테이션 마크를 쓸때는 보통...따로 써주지 않고 문자안에 같이 표시하거든요...

    가령

    'values (' + '''' + i .....이런식으로 님께는 문자임을 나타내는 싱클쿼테이션 마크를

    따로 붙이셨는데 그러지 마시구요...

    'values (''' + i + ''',.....이렇게 연결해서 쓰시는게 좋을것 같아요..문장이 길어지니까요

    첨엔 좀 헷갈려도...계속 하시다 보면 익숙해 지실꺼여요...저도 초보거든요...

    그럼 즐거운 하루 되세요

  • Profile
    최영환 2001.08.31 02:01
    으헉~ 꽤 복잡하게 하시네염....ㅡㅡ;;



    저더 코딩은 거의 DB관련만 하는데염...전 글케는 안 해봐서 몰겠구염..



    제가 쓰는 방식은 대충 이래염..



    ex) X 라는 테이블에 필드가 A,B,C 라는 필드가 있다구 할때..A , B = char 이고



    C = number 타입에 필드라면..



    with Query1 do begin

    close;

    sql.clear;

    sql.add(' INSERT INTO X ');

    sql.add(' ( A , B , C ) ');

    sql.add(' VALUES ');

    sql.add(' ( :A , :B , :C ) ');



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

    ParamByName('B').AsString := Trim(MaskEdit1.Text);

    ParamByName('C').AsInteger := StrToInt(Trim(Edit2.Text));



    ExecSQL;

    end;



    위와 같이 쓰는게 젤루 보기도 좋구..쓰기도 편하던데..괜히 따옴표로 이것저것



    생각하지 마시고 파라미터값을 사용하시는게 좋아염...