• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Удаление записи из таблицы

  • Автор темы MishaMW
  • Дата начала
M

MishaMW

Данные в DBGrid выводятся из связанных таблиц в хранимой процедуре через TADOStoredProc.

При удалении записи через DBNavigator выскакивает ошибка
"Недостаточно сведений ключевого поля для обновления".

Как в этом случае можно удалять записи?
 
M

MishaMW

Для: MishaMW
Сколько раз уже говорилось ... никогда не используй ADOTable, ADOQuery и ADOStoredProc
только ADOCommand и ADODataSet

Да я бы с удовольствием.
Но это уже готовый проект, в котором все завязано на более чем сотни компонентов ADOStoredProc.
И все переписывать не вариант. Поэтому хотелось бы решить этот вопрос с данными условиями.
 
M

MishaMW

в компонент ADOStoredProc загружена вот такая процедура:
Код:
Create Procedure DBO.dpGetProbShablonsList
@OperationID int
as
begin
Select 
OPSH.ProblemNumberInOperation,
OPSH.ProblemID,
PSH.ProblemName,
PSH.TimeBegin,
PSH.ProblemLength,
PSH.IsControlProblem,
PSH.ControlCriterionID,
ControlCriterionName = CC.Name, 
PSH.ControlPostID, 
ControlPostName = CE.Name
from [b]dbo.OperationsProblems_Shablons[/b] OPSH,[b]dbo.Problems_Shablons[/b] PSH
Left Join dbo.ControlCriterions CC ON (PSH.ControlCriterionID = CC.ControlCriterionID)
Left Join dbo.Posts CE ON (PSH.ControlPostID = CE.PostID)
Where OPSH.ProblemID = PSH.ProblemID AND OPSH.OperationID = @OperationID AND @OperationID is not null
AND IsNull(OPSH.DateDelete,0) = 0 AND IsNull(PSH.DateDelete,0) = 0
Order By OPSH.ProblemNumberInOperation
end

Данные из ADOStoredProc через DataSource выводятся в DBGridEh. К DataSource соответственно подкючен DBNavigator.

При выделении строки в DBGridEh и нажатии на nbDelete выскакивает ошибка
"Недостаточно сведений ключевого поля для обновления",
что естественно для связанных таблиц.

В DataSet есть свойства Unique Table и Resync Command и там это хорошо решается.
А вот что нужно здесь, чтобы удалить строку в Problems_Shablons и соответствующую ей в OperationsProblems_Shablons ?
 
B

Barmutik

Стоит просто не использовать встроенные средства аля TDBNavigatora а удалятьручками .. потому как он криво работает с таблицами без ключей или со множественными ключами...
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!