Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.09.2019, 01:21
Maks19 Maks19 вне форума
Начинающий
 
Регистрация: 19.06.2019
Сообщения: 113
Версия Delphi: Delphi7
Репутация: 10
По умолчанию Не понятно что не так

Здравствуйте!
Не понятно почему условие else наступает только на 4 - е нажатие кнопки?
хотя условие false.
Код:
if   Table3.Locate('Rezid',Table1.FieldByName('Projid').AsInteger,[]) then
    begin
   for i:=0 to m  do
       begin
   StringGrid1.Cells[1,i+1]:=Table3.FieldByName('Alfa1').AsString;
   StringGrid1.Cells[2,i+1]:=Table3.FieldByName('Alfa2').AsString;
   StringGrid1.Cells[3,i+1]:=Table3.FieldByName('Alfa3').AsString;
   StringGrid1.Cells[4,i+1]:=Table3.FieldByName('Alfa4').AsString;
   StringGrid1.Cells[5,i+1]:=Table3.FieldByName('Alfa5').AsString;
   StringGrid1.Cells[6,i+1]:=Table3.FieldByName('Alfa6').AsString;
       Table3.Next;
    c7_[i]:=StrtoFloat(Table3.FieldByName('Alfa1').AsString);
    c8_[i]:=StrtoFloat(Table3.FieldByName('Alfa2').AsString);
    c9_[i]:=StrtoFloat(Table3.FieldByName('Alfa3').AsString);
    c10_[i]:=StrtoFloat(Table3.FieldByName('Alfa4').AsString);
    c11_[i]:=StrtoFloat(Table3.FieldByName('Alfa5').AsString);
    c12_[i]:=StrtoFloat(Table3.FieldByName('Alfa6').AsString);
    end;
ysum1_[0]:=c7_[14];
  ........
   Chart1.Series[0].Clear;
   for i:=0 to n  do
       begin
   alfa1[i]:=(10+5*i);
 Chart1.Series[0].AddXY(alfa1[i],ysum1_[i]);
 end;
 end
else
begin
for i:=1 to m+1 do
begin
StringGrid1.Cells[1,i]:='';
StringGrid1.Cells[2,i]:='';
StringGrid1.Cells[3,i]:='';
StringGrid1.Cells[4,i]:='';
StringGrid1.Cells[5,i]:='';
StringGrid1.Cells[6,i]:='';
end;
Chart1.Series[0].Clear;
end;
Т. е при false должно произойти
Код:
for i:=1 to m+1 do
begin
StringGrid1.Cells[1,i]:='';
StringGrid1.Cells[2,i]:='';
StringGrid1.Cells[3,i]:='';
StringGrid1.Cells[4,i]:='';
StringGrid1.Cells[5,i]:='';
StringGrid1.Cells[6,i]:='';
end;
Chart1.Series[0].Clear;
А это происходит только после 4-го подряд нажатия на кнопку.
Ответить с цитированием
  #2  
Старый 11.09.2019, 18:13
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 173
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Вопрос поставлен в стиле "милый мой, хороший, догадайся сам". Про какую кнопку речь - непонятно. По идее код - обработчик нажатия той самой кнопки? Ветка с Else не работает, потому что метод Locate находит нужную запись в таблице, вот и весь ответ. Если не должен находить - смотрите, что в таблице, и какие конкретно данные передаются функции Locate. Бросьте Memo на форму, и добавляйте эти данные туда, чтобы наглядно увидеть, что происходит на первых трёх нажатиях кнопки, и что - на четвёртом.
Ответить с цитированием
  #3  
Старый 12.09.2019, 00:59
Maks19 Maks19 вне форума
Начинающий
 
Регистрация: 19.06.2019
Сообщения: 113
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Проверил так
Код:
Memo1.Text:=FloatToStr(Table1.FieldByName('Projid').AsInteger);
Получается что,сначала выводит номер предыдущего Projid тот который был ранее выбран и только на 4 раз Projid того кто выбран следующим. А почему так ? Остается не понятно.
Ответить с цитированием
  #4  
Старый 13.09.2019, 00:22
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

может быть ты где-то делаешь First или переоткрываешь таблицу. Соответственено, Locate ищет с первой записи. Или ты ищешь в таблице, где есть несколько записей, удовлетворяющих ключу поиска. По мне, так было бы надежнее просто сделать SQL запрос и работать только с записями соотв. Projid.
Ответить с цитированием
  #5  
Старый 13.09.2019, 01:40
Maks19 Maks19 вне форума
Начинающий
 
Регистрация: 19.06.2019
Сообщения: 113
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Maks19
Проверил так
Код:
Memo1.Text:=FloatToStr(Table1.FieldByName('Projid').AsInteger);
Получается что,сначала выводит номер предыдущего Projid тот который был ранее выбран и только на 4 раз Projid того кто выбран следующим. А почему так ? Остается не понятно.
А если наоборот, если сначала искать в табл 3 запись которой нет, а затем которая есть находит правильно.
Ответить с цитированием
  #6  
Старый 13.09.2019, 18:10
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 173
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Скорее всего, как уже говорилось выше, в таблице есть несколько одинаковых записей (в смысле с одинаковым кодом). Потому и такие результаты. Является ли эта ситуация нормой, я не знаю, т.к. логику построения Вашей БД не знаю. Проверьте содержимое таблицы на предмет записей с повторяющимися кодами.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:39.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter