Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2013, 20:06   #1
ST@LKER
Пользователь
 
Регистрация: 25.10.2007
Сообщений: 38
По умолчанию распределить записи по id

этот код насчитывает одно значение для всех запсей под атрибутом "пенсия", какое задать условие что бы все записи индивидуально записывались каждая по своему id.
База данных mysql

Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
     with sqlquery1 do
    begin

    active:=false;
    sql.Clear;
   SQL.Add('UPDATE base SET пенсия="'+FloatToStr(dbgrid1.Fields[2].AsFloat+dbgrid1.Fields[4].AsFloat)+'" WHERE id= ???');
ExecSQL;

    end;
end;

Последний раз редактировалось ST@LKER; 23.10.2013 в 11:32.
ST@LKER вне форума Ответить с цитированием
Старый 23.10.2013, 00:32   #2
maLoy*508
Форумчанин
 
Аватар для maLoy*508
 
Регистрация: 28.03.2008
Сообщений: 672
По умолчанию

Цитата:
должно WHERE id= вот здесь и вопрос
ну если я правильно понял, то напишите вместо вот здесь и вопрос запрос который будет выбирать нужные id-шники
maLoy*508 вне форума Ответить с цитированием
Старый 23.10.2013, 01:15   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, скорее всего в dbgrid (или в датасете, который он отражает есть поле с ID, вот его и укажите.

во-вторых, так делать вообще НЕ НАДО!
судя по всему, Вы в поле пенсия хотите записать сумму двух других полей из этой же записи(строки) таблицы?!
это делается ОДНИМ простым запросом:
Код:
    sqlquery1.Close;
    sqlquery1.SQL.Text := 'UPDATE base SET пенсия=Поле2 + Поле4');
    sqlquery1.ExecSQL;
и всё. поле обновлено.

третье. И последнее. На самом деле, и это Вам, скорее всего, не нужно!
Проверьте очень внимательно свою структуру. Если поле в таблице всегда содержит в себе сумму двух других полей, то это поле в таблице вообще не нужно! (ведь его всегда легко выбрать в select'е, если оно понадобится!)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.10.2013, 11:29   #4
ST@LKER
Пользователь
 
Регистрация: 25.10.2007
Сообщений: 38
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
во-первых, скорее всего в dbgrid (или в датасете, который он отражает есть поле с ID, вот его и укажите.

во-вторых, так делать вообще НЕ НАДО!
судя по всему, Вы в поле пенсия хотите записать сумму двух других полей из этой же записи(строки) таблицы?!
это делается ОДНИМ простым запросом:
Код:
    sqlquery1.Close;
    sqlquery1.SQL.Text := 'UPDATE base SET пенсия=Поле2 + Поле4');
    sqlquery1.ExecSQL;
и всё. поле обновлено.

третье. И последнее. На самом деле, и это Вам, скорее всего, не нужно!
Проверьте очень внимательно свою структуру. Если поле в таблице всегда содержит в себе сумму двух других полей, то это поле в таблице вообще не нужно! (ведь его всегда легко выбрать в select'е, если оно понадобится!)
Код:
    sqlquery1.Close;
    sqlquery1.SQL.Text := 'UPDATE base SET пенсия=Поле2 + Поле4');
    sqlquery1.ExecSQL;
если так сделать то оно пишет сумму одного поля для всех, везде одна и та же сумма когда значения везде разные

Цитата:
Сообщение от maLoy*508 Посмотреть сообщение
ну если я правильно понял, то напишите вместо вот здесь и вопрос запрос который будет выбирать нужные id-шники
выбрать нужные не проблема так как на данный момент всего несколько записей, а если их десятки тысяч, каждый id туда отдельно вписывать?

перефразирую вопрос, какое условие записать что бы сумму считало по всем полям а не для одного(первого)

Последний раз редактировалось Stilet; 23.10.2013 в 11:32.
ST@LKER вне форума Ответить с цитированием
Старый 23.10.2013, 11:53   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
если так сделать то оно пишет сумму одного поля для всех, везде одна и та же сумма когда значения везде разные
это что за ересь?!
допустим, у Вас есть таблица base
в ней есть поля:
Код:

поле1     поле2  поле3   поле4    пенсия 
Иванов     34     м       150      0
Лукич      45     м       1000     0
Шнурова    5     ж        10       0
после выполнения кода
Код:
UPDATE base SET пенсия=Поле2 + Поле4
получите значения в таблице base
Код:

поле1     поле2  поле3   поле4    пенсия 
Иванов     34     м       150       184
Лукич      45     м       1000     1045
Шнурова    5     ж        10        15

что не так то?!



Цитата:
перефразирую вопрос, какое условие записать что бы сумму считало по всем полям а не для одного(первого)
по каким "всем" полям?!
нет, чем дальше, тем меньше я понимаю, что Вы делаете и что Вам надо..
извините...

Последний раз редактировалось Serge_Bliznykov; 23.10.2013 в 11:56.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.10.2013, 11:55   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

как уже сказали, надо выбросить поле пенсия
eval вне форума Ответить с цитированием
Старый 23.10.2013, 11:56   #7
ST@LKER
Пользователь
 
Регистрация: 25.10.2007
Сообщений: 38
По умолчанию

проблема решена надо было просто записать
Код:
SQL.add('UPDATE base SET пенсия=стаж+зарплата');
ST@LKER вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как распределить звуковые данные? vovken1997 Компьютерное железо 14 05.08.2012 10:56
Ка распределить память ноутбука по дискам Зёма Помощь студентам 23 03.08.2012 17:57
Распределить данные по критерию. Алексей001 Microsoft Office Excel 4 06.06.2011 11:39
Нужно распределить 3 слова slawok HTML и CSS 8 29.06.2010 01:16
Распределить покрытие заказа AleksandrH Microsoft Office Excel 0 15.02.2010 15:49