У вас есть несколько проблем.
Во-первых, у вас есть два предложения WHERE, когда у вас может быть только одно (хотя в подзапросе может быть предложение where). ГДЕ ожидает от выражения выражение true или false (1 или больше или 0), вы можете использовать AND или OR для получения результата true или false из двух результатов, поэтому вам следует использовать
WHERE result_of_expression AND result_of_the_other_expression
или ГДЕ result_of_expression И result_of_the_other_expression
Вторая проблема заключается в том, что вы затем пытаетесь использовать подзапрос. Подзапрос должен быть заключен в круглые скобки ( в начале и ) в конце.
Третья проблема заключается в том, что EXIST - это не ключевое слово, это EXISTS .
Так что выше может быть: -
String updt = "UPDATE " + TABLE_NAME4 +
" SET " + COLUMN_TAKEAWAY_PK_COST + " = ( " + //<<<<<<<<<< OPEN PARENTHESIS FOR SUBQUERY
" SELECT " + COLUMN_PACK_COST +
" FROM " + TABLE_NAME6 +
" WHERE " +COLUMN_PACK_TYPE+" = " + COLUMN_TAKEAWAY_PK_TYPE +
" AND EXISTS " + //<<<<<<<<<< AND INSTEAD OF WHERE and EXISTS INSTEAD OF EXISTS
"(" + //<<<<<<<<<< OPEN PARENTHESIS FOR SUB-SUBQUERY
" SELECT * " +
" FROM " + TABLE_NAME6 +
" WHERE " + COLUMN_PACK_TYPE + " = " + COLUMN_TAKEAWAY_PK_TYPE +
" ) " + //<<<<<<<<<< CLOSE PARENTHESIS FOR SUB-SUBQUERY
")" //<<<<<<<<<<< CLOSE PARENTHESIS FOR SUBQUERY
);
Согласно вашему комментарию Вы хотели менее сложный запрос согласно: -
String updatePack = "UPDATE FP_Master SET TakeAwayPkCost = (SELECT Pack_Cost FROM Take_Away_Pack_Details WHERE Pack_Type = TakeAwayPkType)";
У нас есть эта проблема в нашем приложении также. Проверка только стреляет, когда привязка обновляет, таким образом, необходимо обновить их вручную. Мы делаем это в событии Loaded Окна :
public void Window_Loaded(object sender, RoutedEventArgs e)
{
// we manually fire the bindings so we get the validation initially
txtName.GetBindingExpression(TextBox.TextProperty).UpdateSource();
txtCode.GetBindingExpression(TextBox.TextProperty).UpdateSource();
}
Это сделает ошибочный шаблон (красная схема) появляются и устанавливают Проверка. Свойство HasError, которое у нас есть инициирование кнопки OK для отключения:
<Button x:Name="btnOK" Content="OK" IsDefault="True" Click="btnOK_Click">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="IsEnabled" Value="false" />
<Style.Triggers>
<!-- Require the controls to be valid in order to press OK -->
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=txtName, Path=(Validation.HasError)}" Value="false" />
<Condition Binding="{Binding ElementName=txtCode, Path=(Validation.HasError)}" Value="false" />
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="true" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
В 3.5SP1 / 3.0SP2, они также добавили новое свойство к основе ValidationRule, а именно, ValidatesOnTargetUpdated = "Верный" . Это назовет проверку, как только исходный объект связывается, а не только когда целевое управление обновляется. Это не может быть точно, что Вы хотите, но это не плохо для наблюдения первоначально всего материала, который необходимо зафиксировать.
Работы что-то вроде этого:
<TextBox.Text>
<Binding Path="Amount" StringFormat="C">
<Binding.ValidationRules>
<validation:RequiredValidationRule
ErrorMessage="The pledge amount is required."
ValidatesOnTargetUpdated="True" />
<validation:IsNumericValidationRule
ErrorMessage="The pledge amount must be numeric."
ValidationStep="ConvertedProposedValue"
ValidatesOnTargetUpdated="True" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>