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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2014, 13:32   #1
govorun1
Форумчанин
 
Регистрация: 08.11.2013
Сообщений: 137
По умолчанию условие в цикле

В таблице ADOTable6 есть поля AAA, SSS, XXX.
Нужно пробежаться по таблице и в зависимости от значения поля AAA заполнить поле XXX.
s - значение поля SSS

Код:
var
//    i:integer;
    k1:real;
    k2:real;
    k3:real;
    s:real;
    p1:string;
    p2:string;
    p3:string;
begin
    k1:=Datamodule3.ADOTable9.Fields.Fields[2].AsFloat;
    k2:=Datamodule3.ADOTable9.Fields.Fields[3].AsFloat;
    k3:=Datamodule3.ADOTable9.Fields.Fields[4].AsFloat;
    s:=Datamodule3.ADOTable6.Fields.Fields[3].AsFloat;
    p1:=floatToStr(Round(k1*s));
    p2:=floatToStr(Round(k2*s));
    p3:=floatToStr(Round(k3*s));

    Datamodule3.ADOTable6.First;

    while not Datamodule3.ADOTable6.eof do
//    for i:=0 to Datamodule3.ADOTable6.RecordCount-1 do
    begin
    Datamodule3.ADOTable6.Edit;

    if Datamodule3.ADOTable6.Fields.FieldByName('AAA').AsString='11' then
    Datamodule3.ADOTable6.Fields.FieldByName('XXX').AsString:=p1;
    if Datamodule3.ADOTable6.Fields.FieldByName('AAA').AsString='22' then
    Datamodule3.ADOTable6.Fields.FieldByName('XXX').AsString:=p2;
    if Datamodule3.ADOTable6.Fields.FieldByName('AAA').AsString='33' then
    Datamodule3.ADOTable6.Fields.FieldByName('XXX').AsString:=p3;

    Datamodule3.ADOTable6.Next;
    end;
//    Datamodule3.ADOTable6.Post;
end;
Не работает.
Насколько я понял при выполнении цикла берется либо первое либо последнее значение 's' из ADOTable6 и расставляется в таблице согласно формуле, т.е. p1 - всегда одинаковые, p2 - всегда одинаковые, p3 - всегда одинаковые.
govorun1 вне форума Ответить с цитированием
Старый 12.01.2014, 13:39   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Правильно поняли - значение берется из какой-то одной записи. В цикл нельзя что-ли перетащить присвоение в s,p1,p2,p3?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.01.2014, 13:47   #3
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
AsString='11'
у вас все поля в таблице литерального типа? а зачем?
eval вне форума Ответить с цитированием
Старый 12.01.2014, 14:15   #4
govorun1
Форумчанин
 
Регистрация: 08.11.2013
Сообщений: 137
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Правильно поняли - значение берется из какой-то одной записи. В цикл нельзя что-ли перетащить присвоение в s,p1,p2,p3?
Не понял....
govorun1 вне форума Ответить с цитированием
Старый 12.01.2014, 14:19   #5
govorun1
Форумчанин
 
Регистрация: 08.11.2013
Сообщений: 137
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
у вас все поля в таблице литерального типа? а зачем?
Помоему это не критично. Да, там число, но оно НИКОГДА не участвует в расчетах
govorun1 вне форума Ответить с цитированием
Старый 12.01.2014, 14:34   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

при чем тут расчеты? и почему собственное участие в расчетах должно на что-то влиять?

если число значит и работать с числом, простое сравнение как у вас с целочисленными данными отработает на порядок быстрее и что самое главное правильно, нежели как со строками

вы простоите но это индуский код
типа как if true = true then result := true else result := false;
eval вне форума Ответить с цитированием
Старый 12.01.2014, 15:26   #7
govorun1
Форумчанин
 
Регистрация: 08.11.2013
Сообщений: 137
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
при чем тут расчеты? и почему собственное участие в расчетах должно на что-то влиять?

если число значит и работать с числом, простое сравнение как у вас с целочисленными данными отработает на порядок быстрее и что самое главное правильно, нежели как со строками

вы простоите но это индуский код
типа как if true = true then result := true else result := false;
Я Вас прощаю за индусский код. А теперь дайте ответ на два вопроса:
1. Asinteger='11' вмнсто AsString='11' повлияет на правильность работы цикла?
2. Вы можете помочь сделать цикл рабочим, почему значение 's' не меняется при проходе цикла по таблице?
govorun1 вне форума Ответить с цитированием
Старый 12.01.2014, 15:35   #8
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
1. Asinteger='11' вмнсто AsString='11' повлияет на правильность работы цикла?
ну скорее всеже так Asinteger= 11, при чем тут влияние? переводить число в строку, потом сравнивать строки, это очень долго, и та и другая операция достаточно тяжелая, по сравнению с этим сравнение чисел как пуля и черепаха, разницу понимаете? да и потом у вас AsString:=p1 - просто алес..

Цитата:
Вы можете помочь сделать цикл рабочим, почему значение 's' не меняется при проходе цикла по таблице?
у вас в коде нигде не меняется она, один раз инициализировали и всё, что тут еще говорить, оно и не вооруженным глазом видно

вы бы задачу рассказали, потому как есть подозрение что это все тут совсем не надо, хватит простого запроса на обновление
eval вне форума Ответить с цитированием
Старый 12.01.2014, 15:39   #9
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

и еще если у вас ADOTable6 привязана к визуальным контролам то надо временно отключать связь эту, иначе этот код будет работать и долго и ефекты странные наблюдать будете..
eval вне форума Ответить с цитированием
Старый 12.01.2014, 17:00   #10
govorun1
Форумчанин
 
Регистрация: 08.11.2013
Сообщений: 137
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
и еще если у вас ADOTable6 привязана к визуальным контролам то надо временно отключать связь эту, иначе этот код будет работать и долго и ефекты странные наблюдать будете..
Привязки нет, только на стадии написания кода...
govorun1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Условие в цикле HiDunay Общие вопросы C/C++ 2 29.11.2013 19:03
бабочка в цикле mixon-21 Общие вопросы C/C++ 3 06.03.2013 11:54
условие в цикле с блокировкой колонок KSTeeen Microsoft Office Excel 9 18.11.2012 22:15
Цикл в цикле SkyL1ne Помощь студентам 7 02.04.2010 07:36
условие в цикле Николай Сергеевич Общие вопросы C/C++ 8 24.12.2009 14:25