엑세스 mdb에 상품테이블, 고객테이블, 판매 테이블이 있습니다.
판매테이블은 상품과 고객의 코드로 FOREIGN KEY 관계가 있으며, 판매테이블에서 상품코드와 고객코드는 null 값 가능으로 설정 되어있습니다.
질문은..
with query1 do
begin
close;
sql.clear;
sql.add(' insert into 판매 '
+' (판매코드, 상품코드, 고객코드) '
+' values '
+' (:판매코드, :상품코드, :고객코드) ';
paramsbyname('판매코드').asstring := 판매코드값;
paramsbyname('상품코드').asstring := 상품코드값;
paramsbyname('고객코드').asstring := 고객코드값;
ExecSql;
end;
위 실행에서 상품코드나 고객코드의 값이 빈문자열('') 이라면
"Key violation 고객 테이블에 관련 레코드가 필요하기 때문에 레코드를
추가하거나 변경할 수 없습니다."
라고.. 뜨네요.
위 문장에서 상품코드나 고객코드 필드를 아예 없애고 삽입을 하면
그러니까.. 고객코드가 빈문자열일시..
sql.add(' insert into 판매 '
+' (판매코드, 상품코드) '
+' values '
+' (:판매코드, :상품코드) ';
로 하면 잘 실행이 됩니다.
테이블을 쿼리로 열고 업데이트 컴포를 쓸때도 업데이트 컴포의 쿼리로
아무 문제가 없이 잘 되는데.. 어쩨.. 직접 쿼리로 Execsql을 하니
에러가 걸리는지..
델파이 버젼은 6 이고, 패치 1, 2 전부 해준 상태입니다.
고수님들 답변 꼭 부탁드립니다.
참고로.. 판매테이블의 생성쿼리는 아래와 같고, 문제의 필드는
ch_code, c_code 입니다.
CREATE TABLE MarketingM2003
(
mk_date TEXT(10) NOT NULL,
mk_cnt SMALLINT NOT NULL,
ch_code TEXT(5) NULL,
c_code TEXT(10) NULL,
mk_pointbigo TEXT(30) NULL,
mk_point1 INTEGER NULL,
mk_point2 INTEGER NULL,
mk_point3 REAL NULL,
mk_OldPrice MONEY NULL,
mk_pointsale INTEGER NULL,
mk_Price MONEY NULL,
sw_code TEXT(3) NULL
, CONSTRAINT PK_MarketingM2003 PRIMARY KEY (mk_date, mk_cnt)
, CONSTRAINT FK_MarketingM2003_TO_charge FOREIGN KEY (ch_code)
REFERENCES charge (ch_code)
, CONSTRAINT FK_MarketingM2003_TO_customer FOREIGN KEY (c_code)
REFERENCES customer (c_code)
, CONSTRAINT FK_MarketingM2003_TO_sale_way FOREIGN KEY (sw_code)
REFERENCES sale_way (sw_code)
);
윗 질문과 차이는 없습니다만.. 엑세스에서 실제 아래 테이블로 실행을 해보니
insert into MarketingM2003
(mk_date, mk_cnt, ch_code, c_code, mk_pointbigo)
values
('1', 1, null, null, '')
하면 입력이 잘되는데..
insert into MarketingM2003
(mk_date, mk_cnt, ch_code, c_code, mk_pointbigo)
values
('1', 1, null, '', '')
로 실행을 하면 에러가 나네요.. 엑세스에서 null과 ''을 차이를 두는건지..
c_code는 널 허용이면서 외래키로 연결된 필그이고, mk_pointbigo는 그냥 널 허용인 필드인데... 왜 차이가 나는건지.. 헐...
아시느분 꼭좀 답변 부탁드립니다.