На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Добавление в базу в цикле
    Доброго времени суток всем)
    Никак не могу разобраться. подскажите, пожалуйста, как лучше сделать?
    на форме Есть две Даты. еще Цена и Инфляция. мне нужно записать в таблицу в поле "цена с инфл" цену с учетом инфляцией по месяцам за период между этими датами. надеюсь, понятно объяснила) за ранее спасибо)
      что-то типа?

      while @Date1 < @Date2 begin
      insert into Tab(Month, Price)
      select datepart(month, @Date1), @Price
      select @Price = @Price + @Inflation
      select @Date1 = dateadd(month, 1, @Date1)
      end
        спасибо большое!!

        Все оказалось проще, чем казалось)
        ExpandedWrap disabled
          while (DateStart < DateEnd)
          {
            SqlDataSource1.InsertCommand = "INSERT into Prices (Price,period) VALUES ('" + Price+ "','" + DateStart + "')";
            SqlDataSource1.Insert();
            DateStart= DateStart.AddMonths(1);
            Price= Math.Round(Price* (infl / 100 + 1),2);
          }


        Целые числа добавляет, но когда цена становится дробным числом, выдает ошибку при выполнении команды SqlDataSource1.Insert(); "Ошибка при преобразовании типа данных varchar к float."
        тип столбца "Price" - float, переменной Price тоже. Подскажите, пожалуйста, в чем дело.

        и вообще, рационально ли делать так? просто мне нужно оооочень много данных вносить таким образом. может есть какой-то более рациональный способ?
          Возможно, БД и приложение работают в разнфх локалях с разными разделителями дробной части: точка одной локали и запЯтая в другой. Используй запрос с рарамеграми и проблема будет решена.
          [FONT=Times]
            Цитата nikolka707 @
            и вообще, рационально ли делать так? просто мне нужно оооочень много данных вносить таким образом. может есть какой-то более рациональный способ?

            Нерационально. Стоит посмотреть на это или типа того.
              ExpandedWrap disabled
                SqlCommand cmd = new SqlCommand(
                  "begin tran\n" +
                  "while @DateStart < @DateEnd begin\n" +
                  "INSERT into Prices (Price,period)\n" +
                  "select datepart(month, @DateStart), @Price\n" +
                  "select @Price = Round(@Price* (@Infl / 100 + 1), 2)\n" +
                  "select @DateStart = dateadd(month, 1, @DateStart)\n" +
                  "end; commit;");
                cmd.Parameters.Add(new SqlParameter("@DateStart", DateStart));
                cmd.Parameters.Add(new SqlParameter("@DateEnd", DateEnd));
                cmd.Parameters.Add(new SqlParameter("@Price", Price));
                cmd.Parameters.Add(new SqlParameter("@Infl", infl));
                cmd.ExecuteNonQuery();
              Сообщение отредактировано: Relaxander -
                Цитата Relaxander @

                Спасибо большой!! все работает))

                Добавлено
                большое*
                  помогите, пожалуйста еще раз! не много усложнилась задачка, никак не могу разобраться в этих сложных запросах.
                  есть таблица с амортизацией
                  наименованиесумма амортизациидата начала амортизациидата окончания амортизации
                  станок160001.02.201301.03.2013
                  станок240001.03.201301.04.2013


                  эти значения нужно добавить в ту же таблицу Prices
                  чтобы получилось

                  периодценаамортизация
                  01.01.2013100
                  01.02.2013105600
                  01.03.20131101000
                  01.04.2013116400


                  это можно реализовать в предыдущем запросе? или нужно апдейтом добавлять амортизацию.
                  помогите, пожалуйста, недавно начала программировать, а тут такие сложные задачки...
                    ну хотяб подкиньте идею как это сделать. у меня что-то ничего не выходит
                      ExpandedWrap disabled
                        INSERT into Prices (Price,period, Amortization)
                        SELECT datepart(month, @DateStart), @Price,
                        (
                        SELECT ISNULL(SUM(SummaAmotrizacii), 0)
                        FROM AmortizationTable at
                        WHERE at.AmotrizationStart >= @DateStart
                        AND at.AmortizationEnd<=@DateStart
                        )
                        спасибо!! все получилось))
                          поторопилась немного.. для промежутка дат не получается, работает только на конкретную дату (WHERE at.AmotrizationStart = @DateStart).
                          запрос с циклом, параметр DataStart увеличивается на один месяц. поэтому, когда накладывается условие на запрос интервал начисления амортизации не входит в заданный интервал и амортизация не записывается в таблицу Prices. как-то по-другому нужно сделать..
                            Дык в коде баг. Nado tak:
                            ExpandedWrap disabled
                                  INSERT into Prices (Price,period, Amortization)
                                  SELECT datepart(month, @DateStart), @Price,
                                  (
                                  SELECT ISNULL(SUM(SummaAmotrizacii), 0)
                                  FROM AmortizationTable at
                                  WHERE at.AmotrizationStart <= @DateStart
                                  AND at.AmortizationEnd>=@DateStart
                                  )
                              все равно не получается. :no-sad: теперь в этот промежуток вообще дата амортизации не входит.
                              как-то, наверно, я не правильно объяснила.
                              в этом же запросе
                              ExpandedWrap disabled
                                begin tran while @DateStart < @DateEnd begin
                                  INSERT into Prices (Price,period)
                                  select datepart(month, @DateStart), @Price
                                  select @Price = Round(@Price* (@Infl / 100 + 1), 2)
                                  select @DateStart = dateadd(month, 1, @DateStart)
                                  end; commit;

                              нужно добавлять амортизацию.
                                ExpandedWrap disabled
                                  while @DateStart < @DateEnd begin
                                    INSERT into Prices (period,price,amortization)
                                    select datepart(month, @DateStart), @Price,
                                      (select AmortizSum
                                      from Amortization
                                      where @DateStart = StartDate and EndDate = dateadd(month, 1, @DateStart))
                                    select @Price = Round(@Price* (@Infl / 100 + 1), 2)
                                    select @DateStart = dateadd(month, 1, @DateStart)
                                  end
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0395 ]   [ 15 queries used ]   [ Generated: 19.05.24, 11:34 GMT ]