Q&A

  • 소스에서 잘못된 점을 지적해 주세요
안녕하세요...

추운 날씨에 고생들 많으십니다.

SQL로 Update하려고 하는데 에러가 발생하네요

그리고 이렇게 해도 Update가 되는 건지요...

~~~알고 싶어요



여기에서 Head.ObCheck = SmallInt이고

Head.No는 LongInt로 프라이머리 키이고요

Studysave.No = LongInt

Studysave.Obcheck = SmallInt

Query.Close;

Query.Sql.Clear;

Query.Sql.add('Update Head.db');

Query.Sql.Add('set ObCheck = 0');

Query.Sql.Add('WHERE Head."No" =');

Query.Sql.Add('(SELECT Studysave."No"');

Query.Sql.Add('FROM "StudySave.db" Studysave');

Query.Sql.Add('WHERE Studysave.ObCheck = 0)');

Query.ExecSQL;

Query.Close;

Query.Open;





1  COMMENTS
  • Profile
    박진선 2000.02.02 06:16
    안대규 wrote:

    > 안녕하세요...

    > 추운 날씨에 고생들 많으십니다.

    > SQL로 Update하려고 하는데 에러가 발생하네요

    > 그리고 이렇게 해도 Update가 되는 건지요...

    > ~~~알고 싶어요

    >

    > 여기에서 Head.ObCheck = SmallInt이고

    > Head.No는 LongInt로 프라이머리 키이고요

    > Studysave.No = LongInt

    > Studysave.Obcheck = SmallInt

    > Query.Close;

    > Query.Sql.Clear;

    > Query.Sql.add('Update Head.db');

    > Query.Sql.Add('set ObCheck = 0');

    > Query.Sql.Add('WHERE Head."No" =');

    > Query.Sql.Add('(SELECT Studysave."No"');

    > Query.Sql.Add('FROM "StudySave.db" Studysave');

    > Query.Sql.Add('WHERE Studysave.ObCheck = 0)');

    > Query.ExecSQL;

    > Query.Close;

    > Query.Open;

    >

    음....위의 코딩을 제식대로하면 하면 이런거 같군요..

    (cSql 은 스트링변수)



    cSql := 'update Head set ObCheck = :HObCheck ';

    cSql := cSql+'where Head.No = (select Studysave.No from Studysave ';

    cSql := cSql+'where Studysave.ObCheck = :SObCheck) ';



    with Query do

    begin

    close;

    sql.clear;

    sql.add(cSql);

    ParamByName('HObCheck').AsInteger := 0;

    ParamByName('SObCheck').AsInteger := 0;

    ExecSql;

    end;



    저는 주로 ParamByName을 많이 쓰는데요..필드타입이 맞는지는 모르겠지만..

    어쨌든, ''(따옴표) 사용이 잘못 된것 같네요.

    필드명에 ''가 들어간거 같은데요..

    글구, 서브쿼리의 결과값이 하나여야 오류가 안납니당...



    제대로 답변이 됐는지 모르겠네요..^^...