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 시 나는 에러메세지 인데.. 도무지 원인을 모르겠습니다.
도움 다시 부탁드립니다.
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-->
답이 되셨으면 하네요..