항상 그런건지 몰라도..
동적 SQL을 사용할 때 파라메터의 타입을 적어두지 않으면..
에러가 나더군요..
전에 저도 그러한 적이 있어서..
아래와 같이 했었습니다.
참고 하세요..
전 파라메터의 이름의 첫자를 파라메터 타입으로 사용했습니다..
자동으로 파라메터의 타입을 설정하기 위한 꽁수 -.-
Voice of Delphi, 류..
---------------------------------------
Procedure SetupParameter(Query:TQuery);
Var
Loop : Integer;
stDataType : String;
Begin
// 아직 적용 안된 것들
// ftSmallint, ftWord, ftBCD, ftBytes, ftAutoInc, ftGraphic, ftFmtMemo, ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor
For Loop:= 0 to Query.Params.Count-1 do
Begin
Query.Params.Items[Loop].ParamType:= ptInput;
stDataType:= Copy(Query.Params.Items[Loop].Name, 1, 1)+'X';
Case UpCase(stDataType[1]) of
'S': Query.Params.Items[Loop].DataType:= ftString;
'I': Query.Params.Items[Loop].DataType:= ftInteger;
'B': Query.Params.Items[Loop].DataType:= ftBoolean;
'F': Query.Params.Items[Loop].DataType:= ftFloat;
'C': Query.Params.Items[Loop].DataType:= ftCurrency;
'D': Query.Params.Items[Loop].DataType:= ftDate;
'T': Query.Params.Items[Loop].DataType:= ftTime;
'E': Query.Params.Items[Loop].DataType:= ftDateTime;
'V': Query.Params.Items[Loop].DataType:= ftVarBytes;
'L': Query.Params.Items[Loop].DataType:= ftBlob;
'M': Query.Params.Items[Loop].DataType:= ftMemo;
Else Query.Params.Items[Loop].DataType:= ftUnknown;
End;
End;
End;
Procedure TForm1. ....
Begin
Query.SQL.Text:= 'insert into test ' +
' ( AA, BB, CC, DD, EE) ' +
' values(:sAA, :sBB, :sCC, :sDD, :iEE) ';
SetupParameter(Query);
Query.ParamByName('sAA').AsString:= '1235';
Query.ParamByName('sBB').AsString:= '34';
Query.ParamByName('sCC').AsString:= '34';
Query.ParamByName('sDD').AsString:= '34';
Query.ParamByName('iEE').AsInteger:= 1003;
Query.ExecSQL;
End;
허접한초보.. 님이 쓰신 글 :
: sql.add('insert into test ');
: sql.add(' ( AA, BB, CC, DD, EE) ');
: sql.add('values(:aa, :bb, :cc, :dd, :ee) ');
: parambyname('aa').asstring := '1235';
: parambyname('bb').asstring := '34';
: parambyname('cc').asstring := '34';
: parambyname('dd').asstring := '34';
: parambyname('ee').asinteger := 1003;
:
: 파라독스를 이용하여 테이블에 Insert를 시키려고 하는데
: EE 컬럼에서 에러가 나는 것 같습니다......
: 다른 컬럼들은 전부 Alpha type 이고 EE 컬럼만 Number type 인데..
: EE 컬럼을 빼고 Insert 를 시키면 잘 되는데 EE 컬럼에 데이타만 넣으려고하면
: 무슨 에러 메세지가 나오는 것도 아니고 델파이가 그냥 죽어버립니다.....
: 혹시 원인을 알고 계신분 부탁좀 드리겠습니다.....
: 그리고 가능하다면 간단한 Sample 도 주시면 감사하겠구요...........
:
|