Q&A

  • 무엇이 문제인지 도움부탁합니다. (SQL)
             t_sql := 'insert into '+t_tablename+' ( '+t_column1+' ';
              if t_column2 <> '' then
                t_sql := t_sql + ', '+t_column2+' ';
              if t_column3 <> '' then
                t_sql := t_sql + ', '+t_column3+' ';
              if t_column4 <> '' then
                t_sql := t_sql + ', '+t_column4+' ';
              if t_column5 <> '' then
                t_sql := t_sql + ', '+t_column5+' ';
                t_sql := t_sql + ' ) values  ( '''+sglist.cells[1, x]+''' ';
              if t_column2 <> '' then
                t_sql := t_sql + ', '+QuotedStr(sglist.cells[2, x])+' ';
              if t_column3 <> '' then
                t_sql := t_sql + ', '+QuotedStr(sglist.cells[3, x])+' ';
              if t_column4 <> '' then
                t_sql := t_sql + ', '+QuotedStr(sglist.cells[4, x])+' ';
              if t_column5 <> '' then
                t_sql := t_sql + ', '+QuotedStr(sglist.cells[5, x])+' ) ';
//              t_sql := t_sql + t_gualho;
              SQL.ADD(' '+QuotedStr(t_sql)+' ');
              Showmessage(SQL.Text);
{
              Parameters.ParamByName('tcell1').value := sglist.cells[1, x];
              Parameters.ParamByName('tcell2').value := sglist.cells[2, x];
              Parameters.ParamByName('tcell3').Value := sglist.cells[3, x];
              Parameters.ParamByName('tcell4').Value := sglist.cells[4, x];
              Parameters.ParamByName('tcell5').Value := sglist.cells[5, x];
}
              execsql;
여기까지가 코딩된 부분이고

위 그림이 Showmessage로 본 sql문장입니다.

그리고 위 그림이 execsql 시 나는 에러메세지 인데.. 도무지 원인을 모르겠습니다.
도움 다시 부탁드립니다.
4  COMMENTS
  • Profile
    착한천사 2006.07.13 05:23
    착한천사 김경록입니다.
    coding된 내역을 보면 column이 없다면, insert 구문에 해당컬럼을 명시하지 않겠다는 것이군요...
    이것을 역으로 해석하면, 명시하지 않은 컬럼은 모두 null로 하겠다는 뜻과 같습니다.
    이럴 경우 님처럼 구문을 어렵게 하시지 마시고..
    insert 구문을 완벽하게 구사하고, 파라미터로 값을 넣어주는 형식으로 하십시오..
    즉,
    sql.txt를 아래와 같이 구성하시는게 어떨까 합니다..

    <!--CodeS-->
    query1.sql.add(' insert into 테이블명                     ');
    query1.sql.add('(컬럼1,컬럼2,컬럼3,컬럼4,컬럼5)    ');
    query1.sql.add(' values                                       ');
    query1.sql.add(' (:컬럼1값,:컬럼2값,:컬럼3값,:컬럼4값,:컬럼5값) ');

    query1.sql.ParamName('컬럼1값').asString := 값1;
    .
    .
    query1.sql.ParamName('컬럼5값').asString := 값5;
    query1.execsql;
    <!--CodeE-->

    답이 되셨으면 하네요..



  • Profile
    박홍재 2006.07.12 03:18
    t_sql := 'insert into '+t_tablename+' ( '''+t_column1+'''';
                  if t_column2 <> '' then
                    t_sql := t_sql + ', '''+t_column2+'''';
                  if t_column3 <> '' then
                    t_sql := t_sql + ', '''+t_column3+'''';
                  if t_column4 <> '' then
                    t_sql := t_sql + ', '''+t_column4+'''';
                  if t_column5 <> '' then
                    t_sql := t_sql + ', '''+t_column5+'''';
                    t_sql := t_sql + ' ) values  ( '''+sglist.cells[1, x]+''' ';
                  if t_column2 <> '' then
                    t_sql := t_sql + ', '''+QuotedStr(sglist.cells[2, x])+'''';
                  if t_column3 <> '' then
                    t_sql := t_sql + ', '''+QuotedStr(sglist.cells[3, x])+'''';
                  if t_column4 <> '' then
                    t_sql := t_sql + ', '''+QuotedStr(sglist.cells[4, x])+'''';
                  if t_column5 <> '' then
                    t_sql := t_sql + ', '''+QuotedStr(sglist.cells[5, x])+'''';
                   t_sql := t_sql + ')';
                  SQL.ADD(t_sql);
                  Showmessage(SQL.Text);
    {
                  Parameters.ParamByName('tcell1').value := sglist.cells[1, x];
                  Parameters.ParamByName('tcell2').value := sglist.cells[2, x];
                  Parameters.ParamByName('tcell3').Value := sglist.cells[3, x];
                  Parameters.ParamByName('tcell4').Value := sglist.cells[4, x];
                  Parameters.ParamByName('tcell5').Value := sglist.cells[5, x];
    }
                  execsql;

    아마도 위와 같이 바뀌어야 하지 않을 까 합니다. 그리고 만약 중간에 한 컬럼이라도 널이라면 문장의 오류가 있겠네요. 만약 Column5번이 널이면 마지막 괄호가 들어가지 않는 문장이 됩니다. 문자를 입력하실 때는 ' 표시 주의하셔야 하구요. 항상 갯수에 맞도록 입력이 되었는지 확인하시고 문장을 구성하시길....
    그래서 위와 같이 바꾸어 봤는데 잘 되려나..애궁...그럼.

                 t_sql := t_sql + t_gualho;
  • Profile
    일그니 2006.07.12 01:27
    제가 볼때에는
    쿼리는 특별히 문제 가 없는것 같습니다.
    입력하시는 타입이 전부 문자형인지요? 타입을 함 체크해보심도 4번째 숫자이심 쌍따옴표를 빼심이 맞는것 같은디

    아님 다섯번째에 널값을.. 넣을수 없던지..

    일단 예상은 이케 해봅니다.

    도움이 되셨기를.
  • Profile
    문혜윤 2006.07.12 02:26
    DB는 모두 VARCHAR로 잡혀있고 변수는 스트링그리드에서 가져오기 때문에 모두 STRING 타입입니다.

    그런데 SQL.TEXT를 화면에서 보면 문장이 끝에 ) 까지 다 나타나는데 에러메세지에는 끝에 ) 가 왜 안나타나는

    지 이상하네요.. 하여튼 답변감사합니다...