Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при изменении значения в базе, Paradox 
:(
    Опции темы
Jey_k
Дата 17.9.2004, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


WEB-командир
****


Профиль
Группа: Комодератор
Сообщений: 4149
Регистрация: 16.11.2003
Где: Москва

Репутация: 1
Всего: 61



По нажатию кнопки проверка совпадений значений поля IZD если совпадает,то пересчитать поле VSEGO если нет то добавить новую запись. Проблема (cм картинку)
возникает именно при совпадении (данные берутся из ST:TStringGrid)

Код
procedure TForm3.SpeedButton2Click(Sender: TObject);
var
i:integer;
begin
For i:= 1 to ST.RowCount-1 do
begin
 Table1.First;
 If Table1.fieldbyname('izd').AsString = ST.Cells[0,i] then
  begin
   Table1.Edit;
   Table1.FieldByName('vsego').AsInteger:=Table1.FieldByName('vsego').AsInteger+strtoint(ST.Cells[2,i]);
   Table1.Post;
  end
 else
 begin
  Table1.Insert;
  Table1.FieldByName('izd').AsString:=ST.Cells[0,i];
  Table1.FieldByName('kart').AsString:=ST.Cells[1,i];
  Table1.FieldByName('vsego').AsString:=ST.Cells[2,i];
  Table1.Post;
 end;
 Table1.Next;
end;
end;


Это сообщение отредактировал(а) Jey_k - 20.9.2004, 09:28

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  334.jpg


--------------------
PM MAIL WWW   Вверх
gray_k
Дата 17.9.2004, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1015
Регистрация: 9.1.2003
Где: Москва

Репутация: 3
Всего: 22



Чегой-то я не пойму. У тебя логическая ошибка. Ты удёшь в цикле до максимального значения в СтрингГриде, а делаешь на каждом шаге Table1.Next. Так можно вылезти за границы НД. На какой именно строчке вылазит ошибка? Какой тип присваемого поля? Какой тип у сравниваемого поля? Не вылазишь ли ты за максимальное значения поля? Какой тип БД?


--------------------
С уважением.
Gray.
PM MAIL   Вверх
Chyslyvchyk
Дата 17.9.2004, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 9.5.2004

Репутация: 1
Всего: 5



навскидку:
Код
...
begin
For i:= 1 to ST.RowCount-1 do
begin
    Table1.First;
    while not Table1.Eof do
    begin
    If Table1.fieldbyname('izd').AsString = ST.Cells[0,i] then  
        begin
        Table1.Edit;
        Table1.FieldByName('vsego').AsInteger:=Table1.FieldByName('vsego').AsInteger+strtoint(ST.Cells[2,i]);
        Table1.Post;
        Table1.Next;
        end
     else
        begin
        Table1.Insert;
        Table1.FieldByName('izd').AsString:=ST.Cells[0,i];
        Table1.FieldByName('kart').AsString:=ST.Cells[1,i];
        Table1.FieldByName('vsego').AsString:=ST.Cells[2,i];
        Table1.Post;
        Table1.Next;
        end;
     end;
end;
end;


Это сообщение отредактировал(а) Chyslyvchyk - 17.9.2004, 15:01


--------------------
Простота - сестра таланта!
PM MAIL   Вверх
Jey_k
Дата 20.9.2004, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


WEB-командир
****


Профиль
Группа: Комодератор
Сообщений: 4149
Регистрация: 16.11.2003
Где: Москва

Репутация: 1
Всего: 61



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



--------------------
PM MAIL WWW   Вверх
Jey_k
Дата 20.9.2004, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


WEB-командир
****


Профиль
Группа: Комодератор
Сообщений: 4149
Регистрация: 16.11.2003
Где: Москва

Репутация: 1
Всего: 61



При таком раскладе
Код

procedure TForm3.SpeedButton2Click(Sender: TObject);
var
i:integer;
begin
For i:= 1 to ST.RowCount-1 do
begin
 Table1.First;
 while not Table1.Eof do
  begin
    If ST.Cells[0,i]=Table1.fieldbyname('izd').AsString   then
     begin
      Table1.Edit;
      Table1Vsego.Value:=Table1vsego.Value+strtoint(ST.Cells[2,i]);
      Table1.Post;
     end
     else
      begin
       Table1.Insert;
       Table1.FieldByName('izd').AsString:=ST.Cells[0,i];
       Table1.FieldByName('kart').AsString:=ST.Cells[1,i];
       Table1.FieldByName('vsego').AsString:=ST.Cells[2,i];
       Table1.Post;
      end;
   Table1.Next;
  end;
 end;
end;

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


--------------------
PM MAIL WWW   Вверх
Jey_k
Дата 20.9.2004, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


WEB-командир
****


Профиль
Группа: Комодератор
Сообщений: 4149
Регистрация: 16.11.2003
Где: Москва

Репутация: 1
Всего: 61



Тема исчерпана. Вышел из положения так:
Код

procedure TForm3.SpeedButton2Click(Sender: TObject);
var
i:integer;
begin

For i:= 1 to ST.RowCount-1 do
begin
 if table1.Locate('izd',ST.Cells[0,i],[]) = false then
  begin
   Table1.Insert;
   Table1.FieldByName('izd').AsString:=ST.Cells[0,i];
   Table1.FieldByName('kart').AsString:=ST.Cells[1,i];
   Table1.FieldByName('vsego').AsString:=ST.Cells[2,i];
   Table1.Post;
  end
  else
  begin
   Table1.Edit;
   Table1.FieldByName('vsego').AsInteger:=Table1.FieldByName('vsego').AsInteger+strtoint(ST.Cells[2,i]);
   Table1.Post;
  end;
end;
end;

скорее всего ошибка была при переборе значений полей таблиц, пусть лучше стандартная функция циклы просчитывает smile.gif


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0468 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.