오라클 7.3을 쓰고요, 델파이 4를 씁니다.
전에는 파라독스를 써왔는데, 오라클로 바꿨습니다.
폼은 MDI형식을 사용합니다.
오라클 설정도 잘 됐고, 잘 돌아가는데 문제는 12개 칼럼까지 데이터가
입력되지 않습니다. 파라독스때는 stringlist를 써서 해결을 봤는데
오라클은 왜 안되는 지 알 수가 없습니다.
12개 이상 데이터를 입력해야하는데 걱정입니다.
폼은 MDI형식을 사용합니다. db관련 컴포넌트는 Seletion이라는 MDIChid에 있고
sql 구문은 RP200001이라는 MDIChid에 있습니다.
다음은 제가 사용한 insert 문장입니다.
보시고 어떻게 해야 하는지 부탁합니다.
var
StringList: TStrings;
i : integer;
begin
StringList := TStringList.Create;
try
with StringList do
begin
Add('insert into 고추'+Selection.edit2.text+Selection.edit3.text+' ');
Add('(ID,이름,지역번호,전화번호,도,시,군,응답1차,');
Add('작년총재배면적,금년총재배면적,작년멀칭재배면적,금년멀칭재배면적,');
Add('작년터널재배면적,금년터널재배면적,작년하우스재배면적,작년하우스재배면적,');
Add('현재건고추보유량,작년건고추보유량) ');
Add('values ');
Add('(:p1,:p2,:p3,:p4,:p5,:p6,:p7,:p8,:p9,:p10,:p11,:p12,');
Add(':p13:p14,:p15,:p16,:p17,:p18) ');
end;
with Selection.query2 do
begin
close;
sql.clear;
sql:=StringList;
parambyname('p1').asstring := edit1.text+edit2.text+edit3.text+edit4.text;
parambyname('p2').asstring := edit5.text;
parambyname('p3').asstring := edit6.text;
parambyname('p4').asstring := edit7.text;
parambyname('p5').asstring := edit8.text;
parambyname('p6').asstring := edit9.text;
parambyname('p7').asstring := edit10.text;
parambyname('p8').asstring := edit11.text;
parambyname('p9').asinteger := StrToInt(edit12.text);
parambyname('p10').asinteger := StrToInt(edit13.text);
parambyname('p11').asinteger := StrToInt(edit14.text);
parambyname('p12').asinteger := StrToInt(edit15.text);
parambyname('p13').asinteger := StrToInt(edit16.text);
parambyname('p14').asinteger := StrToInt(edit17.text);
parambyname('p15').asinteger := StrToInt(edit18.text);
parambyname('p16').asinteger := StrToInt(edit19.text);
parambyname('p17').asinteger := StrToInt(edit20.text);
parambyname('p18').asinteger := StrToInt(edit21.text);
execsql;
end;
finally
stringlist.free;
end;
> 오라클 7.3을 쓰고요, 델파이 4를 씁니다.
> 전에는 파라독스를 써왔는데, 오라클로 바꿨습니다.
> 폼은 MDI형식을 사용합니다.
>
> 오라클 설정도 잘 됐고, 잘 돌아가는데 문제는 12개 칼럼까지 데이터가
> 입력되지 않습니다. 파라독스때는 stringlist를 써서 해결을 봤는데
> 오라클은 왜 안되는 지 알 수가 없습니다.
> 12개 이상 데이터를 입력해야하는데 걱정입니다.
> 폼은 MDI형식을 사용합니다. db관련 컴포넌트는 Seletion이라는 MDIChid에 있고
> sql 구문은 RP200001이라는 MDIChid에 있습니다.
> 다음은 제가 사용한 insert 문장입니다.
> 보시고 어떻게 해야 하는지 부탁합니다.
>
> var
> StringList: TStrings;
> i : integer;
> begin
> StringList := TStringList.Create;
> try
> with StringList do
> begin
> Add('insert into 고추'+Selection.edit2.text+Selection.edit3.text+' ');
> Add('(ID,이름,지역번호,전화번호,도,시,군,응답1차,');
> Add('작년총재배면적,금년총재배면적,작년멀칭재배면적,금년멀칭재배면적,');
> Add('작년터널재배면적,금년터널재배면적,작년하우스재배면적,작년하우스재배면적,');
> Add('현재건고추보유량,작년건고추보유량) ');
> Add('values ');
> Add('(:p1,:p2,:p3,:p4,:p5,:p6,:p7,:p8,:p9,:p10,:p11,:p12,');
> Add(':p13:p14,:p15,:p16,:p17,:p18) ');
> end;
>
> with Selection.query2 do
> begin
> close;
> sql.clear;
> sql:=StringList;
> parambyname('p1').asstring := edit1.text+edit2.text+edit3.text+edit4.text;
> parambyname('p2').asstring := edit5.text;
> parambyname('p3').asstring := edit6.text;
> parambyname('p4').asstring := edit7.text;
> parambyname('p5').asstring := edit8.text;
> parambyname('p6').asstring := edit9.text;
> parambyname('p7').asstring := edit10.text;
> parambyname('p8').asstring := edit11.text;
> parambyname('p9').asinteger := StrToInt(edit12.text);
> parambyname('p10').asinteger := StrToInt(edit13.text);
> parambyname('p11').asinteger := StrToInt(edit14.text);
> parambyname('p12').asinteger := StrToInt(edit15.text);
> parambyname('p13').asinteger := StrToInt(edit16.text);
> parambyname('p14').asinteger := StrToInt(edit17.text);
> parambyname('p15').asinteger := StrToInt(edit18.text);
> parambyname('p16').asinteger := StrToInt(edit19.text);
> parambyname('p17').asinteger := StrToInt(edit20.text);
> parambyname('p18').asinteger := StrToInt(edit21.text);
> execsql;
> end;
> finally
> stringlist.free;
> end;
>
>
잘은 모르지만,
한가지 귀뜸을 하자면,
에러메세지가 sql문의 잘못으로 나는 것이라면
예로, 열명에러, 위 같은 에러등은
델파이에 있는 sqlmon.exe를 실행후 그곳에 기록되는 내용을 복사하여
plus32.exe 또는 plus33w.exe를 실행하면
친절하게 잘못된 부분을 집어 줍니다.
눈을 부릅뜨고, 소스를 검사하는 고통을 덜어줍니다.
처음에는 저도 소스르 하나하나 검사 하다보면 왕짜증이 나는데
위방을 사용하면 편리합니다.
그리고, 아래 답변들중에 입력후 다시 검사하기 위하여 select를 하는데,
TQuery.rowsaffected 를 검사하면 됩니다.
반영된 갯수를 돌려줍니다.
query1.execsql;
showmessage(format('%d 개의 행이 추가되었습니다',[query1.rowsaffected]));
도움이 되셨는지...