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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2013, 19:55   #1
anghela
Пользователь
 
Регистрация: 21.05.2013
Сообщений: 42
По умолчанию найти ошибку в коде

Пожалуйста, помогите найти ошибку в коде. При компиляции сложение и вычитание не работает, работает только в том случае, если выделяешь поле в таблице. Проблема в том, что таблица должна быть невидима.
Вот код:
Код:
procedure TForm5_perevod.Button1Click(Sender: TObject);
var nom,nom2:string;
    sum,sum_zap,new_sum,new_sum2:integer;
begin
  ADOQuery1.Active:=false;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('SELECT * from Tbl_schet Where Nomer LIKE '+Edit1.Text+'');
  ADOQuery1.Active:=true;
  ADOQuery1.Open;
  nom:= ADOQuery1.Fields[0].AsString;
  ADOQuery1.Active:=false;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('SELECT * from Tbl_schet Where Nomer LIKE '+Edit3.Text+'');
  ADOQuery1.Active:=true;
  ADOQuery1.Open;
  nom2:= ADOQuery1.Fields[0].AsString;
  ADOQuery1.Active:=false;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('SELECT * from Tbl_schet Where Nomer LIKE '+nom+'');
  ADOQuery1.Active:=true;
  ADOQuery1.Open;
  sum_zap:=StrToInt(ADOQuery1.Fields[6].AsString);
  sum:=StrToInt(Edit2.Text);
  if sum_zap>sum then
    begin
       new_sum:=sum_zap-sum;
       ADOTable1.Edit;
       if ADOTable1.FieldByName('Nomer').AsString=nom then
         begin
           ADOTable1.FieldByName('Summa').AsString:=IntToStr(new_sum);
           ADOTable1.Post;
         end;

          ADOQuery1.Active:=false;
       ADOQuery1.SQL.Clear;
       ADOQuery1.SQL.Add('SELECT * from Tbl_schet Where Nomer LIKE '+nom2+'');
       ADOQuery1.Active:=true;
       ADOQuery1.Open;
       sum_zap:=StrToInt(ADOQuery1.Fields[6].AsString);
       sum:=StrToInt(Edit2.Text);
       new_sum2:=sum_zap+sum;
       ADOTable1.Edit;
       if ADOTable1.FieldByName('Nomer').AsString=nom2 then
         begin
           ADOTable1.FieldByName('Summa').AsString:=IntToStr(new_sum2);
           ADOTable1.Post;
         end;

    end
    else ShowMessage('На вашем счете недостаточно средств для перевода желаемой суммы. Пожалуйста, введите меньшую сумму');


end;

Последний раз редактировалось Stilet; 27.05.2013 в 20:26.
anghela вне форума Ответить с цитированием
Старый 27.05.2013, 20:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Отладчиком конечно же не проходил?
Вот что для начала в глаза бросилось так это :
Цитата:
new_sum:=sum_zap-sum;
ADOTable1.Edit;
if ADOTable1.FieldByName('Nomer').AsSt ring=nom then
begin
ADOTable1.FieldByName('Summa').AsSt ring:=IntToStr(new_sum);
ADOTable1.Post;
end;
ADOTable1.Edit; поставь лучше непосредственно перед операцией внесения в поле.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.05.2013, 20:46   #3
anghela
Пользователь
 
Регистрация: 21.05.2013
Сообщений: 42
По умолчанию

Спасибо, но безрезультатно)))

Программа выполняет сложение и вычитание при нажатии на кнопку, но только в том случае, если фокус находится в редактируемой строке

Последний раз редактировалось Stilet; 27.05.2013 в 22:17.
anghela вне форума Ответить с цитированием
Старый 27.05.2013, 21:29   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,544
По умолчанию

чтобы изменить запись ее сначала надо найти (сделать текущей)
это можно
1.вручную выбрав в DBgrid
Цитата:
если фокус находится в редактируемой строке
2.воспользоваться функцией программного поиска нужного Locate
Код:
if AdoTable1.Locate('nomer', nom, []) then begin
  adotable1.Edit;
  adotable.Fieldby('summa')....
  adotable1.Post;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 28.05.2013, 15:51   #5
anghela
Пользователь
 
Регистрация: 21.05.2013
Сообщений: 42
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
чтобы изменить запись ее сначала надо найти (сделать текущей)
это можно
1.вручную выбрав в DBgrid
2.воспользоваться функцией программного поиска нужного Locate
Код:
if AdoTable1.Locate('nomer', nom, []) then begin
  adotable1.Edit;
  adotable.Fieldby('summa')....
  adotable1.Post;



НЕ ПОМОГАЕТ(((
anghela вне форума Ответить с цитированием
Старый 28.05.2013, 16:03   #6
anghela
Пользователь
 
Регистрация: 21.05.2013
Сообщений: 42
По умолчанию

Если запускаешь отладчик, он говорит, что во 2 запросе не до конца написан LIKE. Помогите разобраться, плиз!!!
Код:
procedure TForm5_perevod.Button1Click(Sender: TObject);
var nom,nom2:string;
sum,sum_zap,new_sum,new_sum2:intege r;
begin
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * from Tbl_schet Where Nomer LIKE '+Edit1.Text+'');
ADOQuery1.Active:=true;
ADOQuery1.Open;
nom:= ADOQuery1.Fields[0].AsString;
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * from Tbl_schet Where Nomer LIKE '+Edit3.Text+'');
ADOQuery1.Active:=true;
ADOQuery1.Open;
nom2:= ADOQuery1.Fields[0].AsString;
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * from Tbl_schet Where Nomer LIKE '+nom+'');
ADOQuery1.Active:=true;
ADOQuery1.Open;
sum_zap:=StrToInt(ADOQuery1.Fields[6].AsString);
sum:=StrToInt(Edit2.Text);
if sum_zap>sum then
begin
new_sum:=sum_zap-sum;
//ADOTable1.Edit;
if ADOTable1.FieldByName('Nomer').AsSt ring=nom then
begin
if ADOTable1.Locate('Nomer',nom,[]) then
begin
ADOTable1.Edit;
ADOTable1.FieldByName('Summa').AsSt ring:=IntToStr(new_sum);
ADOTable1.Post;
end;
end;

ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * from Tbl_schet Where Nomer LIKE '+nom2+'');
ADOQuery1.Active:=true;
ADOQuery1.Open;
sum_zap:=StrToInt(ADOQuery1.Fields[6].AsString);
sum:=StrToInt(Edit2.Text);
new_sum2:=sum_zap+sum;
ADOTable1.Edit;
if ADOTable1.FieldByName('Nomer').AsSt ring=nom2 then
begin

ADOTable1.FieldByName('Summa').AsSt ring:=IntToStr(new_sum2);
ADOTable1.Post;
end;

end
else ShowMessage('На вашем счете недостаточно средств для перевода желаемой суммы. Пожалуйста, введите меньшую сумму');


end;

end.
anghela вне форума Ответить с цитированием
Старый 28.05.2013, 16:12   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
ADOQuery1.SQL.Add('SELECT * from Tbl_schet Where Nomer LIKE '''+Edit1.Text+'''');
или
ADOQuery1.SQL.Add('SELECT * from Tbl_schet Where Nomer='''+Edit1.Text+'''');
Аналогично и другие

ADD

Код:
ADOQuery1.Active:=true;
ADOQuery1.Open;
Вместе не надо, достаточно одного из них
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 28.05.2013 в 16:21.
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти ошибку в коде Oksik_ Помощь студентам 9 05.11.2012 23:59
Найти ошибку в коде,С++ ! Aaaaaa111 Помощь студентам 1 16.02.2012 11:10
Нужно найти ошибку в коде (C++) lot555 Помощь студентам 4 27.05.2011 09:05
не могу найти ошибку в коде pavelstraut Общие вопросы C/C++ 5 24.07.2009 23:20