Помогите с SQL запросом!
UPDATE table_name SET my_field = false WHERE my_field = true,
Я реализовал его в своей программе, но он работает со всеми полями в таблице, а мне нужно чтоб он работал во всех полях равных ключевому полю родительской таблице, т.е., скорей всего нужно использовать вложенный запрос, который возвращал бы значение ключевого поля(я всячески пытался это сделать, но безрезультатно), или ещё лучше, создать переменную I типа integer, загружать в неё значение ключевого поля и в дальнейшем использовать её в запросе, т.е. попросту:
UPDATE table_name SET my_field = false WHERE my_field2 = I
В общем если бы мне нужно было переименовывать поле my_field, только если поле my_field2, к примеру равно10, то я бы так и написал в запросе ..… my_field2=10.
Update C_H set Glava=false WHERE ID_C_H in (select ID from scheta)- такой запрос работает так же как и первый. Как мне быть?
UPDATE table_name SET my_field = false WHERE my_field2 = I
А попробовать приведённый код не суждено?
Вот и пиши.
Обратиться к специалисту для прошивки ДНК с функцией логического мышления. Где в запросе указано конкретное значение?
Если требуется обновление одного поля по значению поля из родительской таблицы, не являющегося ключом в обновляемой, пишем так:
(SELECT key_for_my_field2 FROM parent_table WHERE parent_key = 'AA')
Если значение ключа уже известно и хранится в переменной, желательно вкрутить параметр:
Из программы в этом случае запрос выполняется так:
begin
Params[0].AsInteger := 10;
ExecSQL;
end;
[/CODE]
Спасибо огромное за советы, надеюсь всё-таки до прошивки ДНК дело не дойдет!
Я создал переменную key: integer, в неё гружу ключ, и делаю так:
Update C_H set Glava=false WHERE ID_C_H = :key, а мне в ответ ошибка(я прикрепил её если что). Наверно она выскакивает из-за того, что я не знаю что это такое:
with Query1 do
begin
Params[0].AsInteger := 10;
ExecSQL;
end;
Вообще, я по CheckBox’у кликаю и выполняется это(с ошибкой и не выполняется из-за неё):
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text:='Update C_H set Glava=false WHERE ID_C_H = :key';
Query1.ExecSQL;
Что это: Params[0].AsInteger := 10 и почему 10, я 10 писал например, если бы знал что поле равно 10-ти(в этом случае я б и не распинался тут)!
В общем, как мне в условии запроса(where) сравнить поле с переменной key?
Ответ прошить ДНК не принимается!:)
Откуда запрос
Query1.SQL.Clear;
Query1.SQL.Text:='Update C_H set Glava=false WHERE ID_C_H = :key';
Query1.ExecSQL;
может понять, что означает твоё :key ?
Должно как минимум выглядеть так:
Query1.SQL.Clear;
Query1.SQL.Text:='Update C_H set Glava=false WHERE ID_C_H = :key';
Query1.Params[0].AsInteger := 10;
Query1.ExecSQL;
Query1.Params[0].AsInteger := 10, ну а почему 10?!
Query1.Params[0].AsInteger := 10, ну а почему 10?!
Хэлпы пишут на примитивном уровне с грузинско-китайским акцентом. Делается это специально, чтобы они были понятны всем. Не нужно быть семи пядей во лбу в англицком, чтобы понимать, что там написано.
Query1.Params[0].AsInteger := 10; как я понял, это нужно чтоб переменную запрос понял, но почему [0] и всему этому присваивается 10?
В общем написав так:
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text:='Update C_H set Glava=false WHERE ID_C_H = :key';
Query1.Params[0].AsInteger := 10;
Query1.ExecSQL;
стала только одна запись переименовываться.
Наконец-то я сделал это!
Query1.Params[0].AsInteger := 10;
Вместо 10 я присвоил свою переменную, в которую грузил значение ключа и все заработало! Вот когда так на пальцах объяснил, я и понял. Спасибо большущее!