저는 Delphi 5에서 Delphi XE2로 응용 프로그램을 변환하고 BDE를 사용하여 상황을 보았습니다. 그는 다음과 외래 키가있는 필드의 패스 널 (null)을 허용하지 않습니다 델파이 XE2에서Delphi XE2 : null 값이있는 필드를 전달하는 방법은 무엇입니까?
는 방법이 현재 델파이 5에서 작업 : BDE와 델파이 XE2에서 발생
ParamByName('id').datatype: = ftInteger;
오류 : 에서
같은 오류와 함께 다음과 같은 방법으로 테스트 테이블 YY에서 외래 키 'XX'에 대한 기본 키 값 :
ParamByName('id').datatype: = ftInteger;
ParamByName('id').value: = NULL;
ParamByName('id').DataType: = ftstring;
ParamByName('id').clear;
ParamByName('id').DataType: = ftstring;
ParamByName('id').Bound: = true;
ParamByName('id').Value: = null;
ParamByName('id').IsNull;
어떻게 전달 null 값을 가진 필드?
UPDATE :
데이터베이스 :
CREATE TABLE TEST_1 (
ID_1 INTEGER NOT NULL,
ID_TEST_2 INTEGER NULL,
DESC_1 VARCHAR(10) NULL,
PRIMARY KEY (ID_1)
);
CREATE TABLE TEST_2 (
ID_2 INTEGER NOT NULL,
DESC_2 VARCHAR(10) NULL,
PRIMARY KEY (ID_2)
);
ALTER TABLE TEST_1 ADD FOREIGN KEY FK_TEST(ID_TEST_2) REFERENCES TEST_2(ID_2);
델파이 XE2 :
Close;
SQL.Clear;
SQL.Add('insert into test_1 (id_1, id_test_2, desc_1) values (:id_1, :id_test_2, :desc_1)');
ParamByName('ID_1').AsInteger := 1;
ParamByName('ID_TEST_2').DataType := ftInteger;
ParamByName('ID_TEST_2').Clear;
ParamByName('ID_TEST_2').Bound := True;
ParamByName('DESC_1').AsString := 'DESCRIPTION TEST';
ExecSQL;
결과 : 키 위반.
네, 조만간 BDE를 바꿀 생각입니다. 오류가 계속 발생합니다. "XX"필드가 알 수없는 유형입니다. 하지만 오류는 BDE가 아니라 Delphi입니다. Null이 삽입되지 않았 으면 공백을 삽입하십시오. FreePascal에서와 동일한 논의가 있습니다. http://free-pascal-general.1045716.n5.nabble.com/How-to-clear-the-value-of-a-field-in-a-table-using- parameters-td5716247.html – user3565792
이 게시물에서 Delphi XE4 및 Dbexpress와 동일한 오류가 발생했습니다. http://stackoverflow.com/questions/17042429/passing-null-value-into-parameterized-delphi-sql-server-query?rq= 1 – user3565792
내가 게시 한 작품. NULL이나 문자열을 전달해야한다면 'if..else' 블록이 필요합니다.이 블록은 AsString을 사용하여 문자열을 할당하거나 NULL 인 경우 Clear를 사용합니다. (BDE가 아니더라도 항상 사용하고 있습니다. 오류가 델파이에있는 경우 ** 정확한 ** 오류 메시지를 게시하십시오. –