Консультация № 159517
03.02.2009, 18:04
0.00 руб.
0 1 1
Здравствуйте.

В базе данных одна из таблиц (ReceivedDocument) имеет три внешних ключа,

связывающих её с двумя другими таблицами (DocumentType, Organization).
В Delphi для работы с таблицами используются компоненты IBDataSet.
В свойстве InsertSQL IBDataSet'а, связанного с таблицей ReceivedDocument

вызывается хранимая процедура, добавляющая в таблицу новую запись.

Проблема в следующем: при попытке добавить запись в таблицу ReceivedDocument

выдаётся сообщение:

"validation error for column NUMDOCTYPE, value "*** null ***"".

NUMDOCTYPE - внешний ключ для связи с таблицей DocumentType.

При этом в таблице есть два внешних ключа, связывающих её с таблицей Organization - сдесь всё нормально.

Посмотрел SQL монитором что на самом деле передаётся на сервер - оказалось, что процедура вставки не вызывается, исключение возникает раньше.

При тестировании процедуры в IBExpert записи нормально добавляются - значит ошибка где-то в приложении. Вопрос: где её следует искать?

Обсуждение

Неизвестный
03.02.2009, 22:10
общий
это ответ
Здравствуйте, Hells!

Представить код
1. Процедуры в IB
2. Код добавления записи на Delphi

Сами понимаете - телепаты в отпуске.

Я бы на вашем месте поставил бы break на нажатие, к примеру, кнопки "Занести" и проверил бы все значения полей.
Еще можно так (телепаты в отпуске, начинаем отгадывать):

procedure Form1.btnAddRecordClick(Sender: TObject);
var X: Integer;
S: string;
begin
S := '';
for X := 0 to IBDataSet1.Fields.Count-1 do begin
S := S + IBDataSet1.Fields[X].FieldName + ' = ';
if IBDataSet1.Fields[X].AsVariant = null then S := S + 'null'
else S := S + IBDataSet1.Fields[X].AsString;
S := S + #13#10;
end;
ShowMessage(S);
end;

Но лучше оттрасировать самостоятельно. Если не получится - пишите в почту, попробую помочь.
Форма ответа