ADOQuery에서 Update명령을 사용해서 MS-Acess를 제어하는데
발생하는 에러이네요 현재 Delphi 7을 사용중입니다.
얼마전 똑같은 질문을 드렸는데, 관심가지고 답해주신분이 계셧지만
그 문제는 아닌듯하여 다시 질문드립니다.
분명 Access에서는 Null허용필드인 c_jong, c_year 필드에 아래와
같이 Update, Insert시 이 필드에 입력하는 값인 edt_CJong_02.Text,
edt_CYear_02.Text에 값이 없으면 제목과 같은 에러메시기자 발생하네요
물론 SQL Explorer에서는 에러가 발생하지 않습니다. ADOQuery컴퍼넌트의
문제인지? 대체 감이 안오네요...
요건 SQL Exploere에서 Insert문장인데 전혀 문제없이 Insert가 되네요
insert into car_mst (c_no, c_jong, c_year) values ('1234', null, '')
insert into car_mst (c_no) values ('12345')
procedure TF_Main.btn_Update_02Click(Sender: TObject);
begin
{
With DM.ADO_Q do
begin
Close;
SQL.Clear;
SQL.Add('update car_mst set');
SQL.Add(' c_no = "' + edt_CNo_02.Text + '" ');
SQL.Add(', c_jong = "' + edt_CJong_02.Text + '" ');
SQL.Add(', c_year = "' + edt_CYear_02.Text + '" ');
SQL.Add(' where c_key = ' + lbl_CKey_02.Caption);
ExecSQL;
end; // end of with...
}
With DM.ADO_Q do
begin
Close;
SQL.Clear;
SQL.Add('update car_mst set');
SQL.Add(' c_no = :c_no ');
SQL.Add(', c_jong = :c_jong ');
SQL.Add(', c_year = :c_year ');
SQL.Add(' where c_key = :c_key ');
Parameters.ParamByName('c_no').Value := edt_CNo_02.Text;
Parameters.ParamByName('c_jong').Value := edt_CJong_02.Text;
Parameters.ParamByName('c_year').DataType := ftString;
Parameters.ParamByName('c_year').Value := edt_CYear_02.Text;
Parameters.ParamByName('c_key').Value := lbl_CKey_02.Caption;
ExecSQL;
end; // end of with...
end;
여기서 ParamByName('c_jong').DataType = ftString을 모두 설정해줘도 에러가 발생합니다.
물론 Acess에는 c_no이외에는 모두 데이타형식은 [텍스트] 이고 Null값허용이구요 Index도 안잡혀있구...
그리고 주석 안쪽 코드를 실행시켜보면 Too few Parameters...뭐라뭐하면서 에러가 발생하네요... 이건 또 뭔지..ㅠㅠ
뭔 이유인지요?