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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2013, 19:11   #1
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию Не правильные значения при добавлении даных

ДОбрый вечер, у меня не понятная ошибка
База MySQL, Delphi XE4, ADQuery

на форме есть 4 едита, 3 из них используются для создания изменения и отображения данных записи. Запись при нажатии кнопки открыть, изменить отображается в новой форме, так же есть запись приход, которая служит для того что бы отрывалась эта же форма и показывался 4 эдит в который вводится колличество прихода материала.

Код:
procedure TfrmItemsCard.btSaveClick(Sender: TObject);
begin
  qRecord.SQL.Text := 'CALL items_ins_up(:id, :name, :unit, :pay, :count)';

  if OpenStatus = ItemsCreate then
  begin // Insert
    qRecord.ParamByName('id').Value := -1;
  end
  else
    qRecord.ParamByName('id').Value := ItemID;
  qRecord.ParamByName('count').Value := 0;
  qRecord.ParamByName('name').Value := edName.Text;
  qRecord.ParamByName('unit').Value := edUnit.Text;
  qRecord.ParamByName('pay').Value := AddDote(edPay.Text);

  if OpenStatus = ItemsAddition then
  begin
    qRecord.ParamByName('count').Value := StrToInt(edCounts.Text);
    if MessageBox(Handle, PWideChar('Увеличить `' + edName.Text + '` на ' +
      edCounts.Text + '  ' + edUnit.Text + ' ?'), 'Изменение',
      MB_ICONINFORMATION + MB_YESNO + MB_DEFBUTTON2) = IDNO then
      Exit; // Выдти если введено не верное число!!
  end;
  qRecord.ExecSQL;
  frmItems.ItemsView(0);// Отображение таблицы
  Close;
end;

Код:
DELIMITER $$

USE `hairsalon`$$

DROP PROCEDURE IF EXISTS `items_ins_up`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `items_ins_up`(IN id INT(11), IN name_i VARCHAR(50), IN unit_i VARCHAR(10), IN pay DECIMAL(10,2), IN count_i INT(11))
BEGIN
    IF(id < 0) THEN
       INSERT INTO `hairsalon`.`items` (name_item, unit, pay_item, counts) VALUES (name_i, unit_i, pay, count_i);
    ELSE
       UPDATE `hairsalon`.`items` SET  `name_item` = name_i, `unit` = unit_i, `pay_item` = pay, `counts` = `counts` + count_i WHERE `id_item` = id;
    END IF;
    END$$

DELIMITER ;
Код:
CREATE TABLE `items` (
  `id_item` INT(11) NOT NULL AUTO_INCREMENT,
  `name_item` VARCHAR(50) DEFAULT NULL COMMENT 'Название материала',
  `unit` VARCHAR(10) DEFAULT NULL COMMENT 'Единица измерения',
  `pay_item` DECIMAL(10,2) DEFAULT NULL COMMENT 'Стоимость материала',
  `counts` INT(11) DEFAULT NULL COMMENT 'Текущее количество',
  PRIMARY KEY (`id_item`)
) ENGINE=INNODB AUTO_INCREMENT=16 DEFAULT CHARSET=cp1251

Ну так вот проблема в том что если я ввожу приход 100, 200 то всё нормлаьно,а если ввжу допустим 500 то в базу добавлется 232 вообще не понятно

Прошу подскажите изза чего такое может быть?

шас вот добавлял было 0 стало 244, но я вводил в едит 500 проверял в дебаге параметр равен 500, не пойму что это такое)
Dozent вне форума Ответить с цитированием
Старый 19.10.2013, 19:23   #2
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Заносится не верно количество...
Dozent вне форума Ответить с цитированием
Старый 19.10.2013, 19:35   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Заносится не верно количество...
Крайне мало вероятно. Заносится то, что заносит прога. Нужно смотреть как заносится и куда и что и как отображается.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.10.2013, 20:15   #4
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

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

Код:
procedure TfrmItemsCard.btSaveClick(Sender: TObject);
begin
  qRecord.SQL.Text := 'CALL items_ins_up(:id, :name, :unit, :pay, :count)';

  if OpenStatus = ItemsCreate then
  begin // Insert
    qRecord.ParamByName('id').Value := -1;
  end
  else
    qRecord.ParamByName('id').Value := ItemID;

  if OpenStatus = ItemsAddition then
    qRecord.ParamByName('count').Value := StrToInt(edCounts.Text)
  else
    qRecord.ParamByName('count').Value := 0;

  qRecord.ParamByName('name').Value := edName.Text;
  qRecord.ParamByName('unit').Value := edUnit.Text;
  qRecord.ParamByName('pay').Value := AddDote(edPay.Text);

  if OpenStatus = ItemsAddition then
  begin
    if MessageBox(Handle, PWideChar('Увеличить `' + edName.Text + '` на ' +
      edCounts.Text + '  ' + edUnit.Text + ' ?'), 'Изменение',
      MB_ICONINFORMATION + MB_YESNO + MB_DEFBUTTON2) = IDNO then
      Exit; // Выдти если введено не верное число!!
  end;
  qRecord.ExecSQL;
  frmItems.ItemsView(0);
  Close;
end;
вот так вот работает норм, перенёс присваение выше
Dozent вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при добавлении компанентов SlayerLiving C++ Builder 1 26.04.2013 23:34
Как связать значения на разных листах при добавлении строк? onitro Microsoft Office Excel 4 25.01.2013 14:54
Восстановить правильные значения CMYK при изменение одного из значений hon Мультимедиа в Delphi 14 19.08.2012 13:43
Ошибка при добавлении в базу 622089 PHP 3 29.02.2012 22:55
Проблема при добавлении в БД Oleg Romanchuk БД в Delphi 2 12.01.2009 12:21