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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2008, 17:23   #1
Rio309
Форумчанин
 
Регистрация: 06.02.2008
Сообщений: 140
По умолчанию Редактирование таблицы

Есть 2 поля, нужно сделать так, что б от одного поля отнялся второй, и результат записался в 3е поле.
Тоесть что то типа
for i:=1 to конец таблицы do
begin
значение поля 3[i]:=значение поля1[i]-значение поля2[i]
end;

Как возпроизвести это в код.
Исспользую ADOtable, DataSource, dbgrid.
Rio309 вне форума Ответить с цитированием
Старый 15.11.2008, 18:41   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

в AdoQuery в текст SQL пишете текст update'а:
Код:
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('UPDATE MyTABLE SET FIELD3 = FIELD1 - FIELD2');
 ADOQuery1.ExecSQL;
добавлено это в том случае, если задача стоит, просто получить в таблице БД новые значения.

Последний раз редактировалось Serge_Bliznykov; 15.11.2008 в 19:02.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.11.2008, 18:59   #3
Rio309
Форумчанин
 
Регистрация: 06.02.2008
Сообщений: 140
По умолчанию

А не через ADOQuery можно как то?
А то я им не умею пользоватся .
Rio309 вне форума Ответить с цитированием
Старый 15.11.2008, 19:08   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Можно, да ты сам все и написал:
Код:
for i:=1 to конец таблицы do
begin
ADOTable1.Fields[3]:=ADOTable1.Fields[1]-ADOTable1.Fields[2];
end;
А еще лучше вычисляемые поля примени.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.11.2008, 19:13   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

можно и через AdoTable - но это крайне неэффективно ;-(

Код:
  AdoTable1.First;// перейти на первую запись
  while not AdoTable1.Eof do  // пока не дошли до последней записи
  begin
    AdoTable1.Edit;
    AdoTable1.FieldByName('Field3')..AsVariant  :=  AdoTable1.FieldByName('Field1')..AsVariant - AdoTable1.FieldByName('Field2')..AsVariant;
    AdoTable1.Post;
    AdoTable1.Next; // переходим на следующую запись
  end;
вместо .AsVariant лучше поставить нужный тип поля
(например, AsInteger - если целые числа или AsDouble - если вещественное число )

А вообще - лучше воспользуйтесь AdoQuery - тут и уметь ничего не надо. Киньте его на форму, укажите ему ConnectionString (или AdoConnection) точно так же, как Вы это сделали для AdoTable!
в нужном месте (например, в событии нажатия на кнопку) напишите тот код, который я привёл в пост #2
всё!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.11.2008, 11:28   #6
Rio309
Форумчанин
 
Регистрация: 06.02.2008
Сообщений: 140
По умолчанию

вроде ставлю во всех полях .asfloat, а ответ выдается integer'oм.

Может потому что число которое отнимаю в базе данный находится в текстовом поле? Но вроде не должно быть так.
Rio309 вне форума Ответить с цитированием
Старый 16.11.2008, 12:28   #7
Rio309
Форумчанин
 
Регистрация: 06.02.2008
Сообщений: 140
По умолчанию

Все, сделал, спасибо.
Rio309 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтровка и редактирование БД rainbow БД в Delphi 1 17.10.2008 12:44
Редактирование Корзины injhdc Софт 1 30.09.2008 15:20
редактирование ячейки SveSve Microsoft Office Excel 2 11.04.2008 10:16
Редактирование документа Rend1 Общие вопросы Delphi 3 27.01.2008 10:24
Редактирование AntiZero Помощь студентам 2 12.11.2007 18:02