Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите с SQL запросом!

12K
27 апреля 2007 года
yura-007
45 / / 03.04.2007
В теме которую я создал пару дней назад, для решения задачи мне посоветовали(спасибо добрым людям) использовать, вот такой запрос:
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)- такой запрос работает так же как и первый. Как мне быть?
10
27 апреля 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: yura-007
или ещё лучше, создать переменную I типа integer, загружать в неё значение ключевого поля и в дальнейшем использовать её в запросе, т.е. попросту:
UPDATE table_name SET my_field = false WHERE my_field2 = I


А попробовать приведённый код не суждено?

Цитата: yura-007
В общем если бы мне нужно было переименовывать поле my_field, только если поле my_field2, к примеру равно10, то я бы так и написал в запросе ..… my_field2=10.


Вот и пиши.

 
Код:
UPDATE table_name SET my_field = false WHERE my_field2 = 10


Цитата: yura-007
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 =
  (SELECT key_for_my_field2 FROM parent_table WHERE parent_key = 'AA')


Если значение ключа уже известно и хранится в переменной, желательно вкрутить параметр:
 
Код:
UPDATE table_name SET my_field = false WHERE my_field2 = :my_field2

Из программы в этом случае запрос выполняется так:
 
Код:
with Query1 do
begin
  Params[0].AsInteger := 10;
  ExecSQL;
end;
12K
27 апреля 2007 года
yura-007
45 / / 03.04.2007
Цитата: Freeman

[/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?
Ответ прошить ДНК не принимается!:)

8
27 апреля 2007 года
mfender
3.5K / / 15.06.2005
Что-то мне подсказывает, что ты хэлпы плохо читаешь...
Откуда запрос
 
Код:
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text:='Update C_H set Glava=false WHERE ID_C_H = :key';
Query1.ExecSQL;

может понять, что означает твоё :key ?

Должно как минимум выглядеть так:
 
Код:
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;
12K
27 апреля 2007 года
yura-007
45 / / 03.04.2007
Да я хелпы вобще не читаю, я всё думаю они на инглише, я книжки читаю, спасибо за подсказку, сейчас займусь исправлением!:)
Query1.Params[0].AsInteger := 10, ну а почему 10?!
8
27 апреля 2007 года
mfender
3.5K / / 15.06.2005
Цитата: yura-007
Да я хелпы вобще не читаю, я всё думаю они на инглише, я книжки читаю, спасибо за подсказку, сейчас займусь исправлением!:)
Query1.Params[0].AsInteger := 10, ну а почему 10?!


Хэлпы пишут на примитивном уровне с грузинско-китайским акцентом. Делается это специально, чтобы они были понятны всем. Не нужно быть семи пядей во лбу в англицком, чтобы понимать, что там написано.

12K
28 апреля 2007 года
yura-007
45 / / 03.04.2007
Так что это такое:
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;

стала только одна запись переименовываться.
8
28 апреля 2007 года
mfender
3.5K / / 15.06.2005
Считай слева-направо по строке запроса. Сколько у тебя параметров в SQL-строке, столько Params ты должен определить. В данной строке у тебя один только :key, соответственно Query1.Params.AsInteger[0] - это его значение. Какое тыт там поставишь - твоя проблема. Также и приведение типов - тоже твоя головная боль (это я сейчас про AsInteger).
12K
28 апреля 2007 года
yura-007
45 / / 03.04.2007
Цитата: mfender
Считай слева-направо по строке запроса. Сколько у тебя параметров в SQL-строке, столько Params ты должен определить. В данной строке у тебя один только :key, соответственно Query1.Params.AsInteger[0] - это его значение. Какое тыт там поставишь - твоя проблема. Также и приведение типов - тоже твоя головная боль (это я сейчас про AsInteger).



Наконец-то я сделал это!
Query1.Params[0].AsInteger := 10;
Вместо 10 я присвоил свою переменную, в которую грузил значение ключа и все заработало! Вот когда так на пальцах объяснил, я и понял. Спасибо большущее!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог