Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.149.243.130] |
|
Страницы: (2) [1] 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 |
Сообщ.
#3
,
|
|
|
спасибо большое!!
Все оказалось проще, чем казалось) 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 тоже. Подскажите, пожалуйста, в чем дело. и вообще, рационально ли делать так? просто мне нужно оооочень много данных вносить таким образом. может есть какой-то более рациональный способ? |
Сообщ.
#4
,
|
|
|
Возможно, БД и приложение работают в разнфх локалях с разными разделителями дробной части: точка одной локали и запЯтая в другой. Используй запрос с рарамеграми и проблема будет решена.
[FONT=Times] |
Сообщ.
#5
,
|
|
|
Цитата nikolka707 @ и вообще, рационально ли делать так? просто мне нужно оооочень много данных вносить таким образом. может есть какой-то более рациональный способ? Нерационально. Стоит посмотреть на это или типа того. |
Сообщ.
#6
,
|
|
|
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(); |
Сообщ.
#7
,
|
|
|
Цитата Relaxander @ Спасибо большой!! все работает)) Добавлено большое* |
Сообщ.
#8
,
|
||||||||||||||||||||||||||||
|
помогите, пожалуйста еще раз! не много усложнилась задачка, никак не могу разобраться в этих сложных запросах.
есть таблица с амортизацией
эти значения нужно добавить в ту же таблицу Prices чтобы получилось
это можно реализовать в предыдущем запросе? или нужно апдейтом добавлять амортизацию. помогите, пожалуйста, недавно начала программировать, а тут такие сложные задачки... |
Сообщ.
#9
,
|
|
|
ну хотяб подкиньте идею как это сделать. у меня что-то ничего не выходит
|
Сообщ.
#10
,
|
|
|
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 ) |
Сообщ.
#11
,
|
|
|
спасибо!! все получилось))
|
Сообщ.
#12
,
|
|
|
поторопилась немного.. для промежутка дат не получается, работает только на конкретную дату (WHERE at.AmotrizationStart = @DateStart).
запрос с циклом, параметр DataStart увеличивается на один месяц. поэтому, когда накладывается условие на запрос интервал начисления амортизации не входит в заданный интервал и амортизация не записывается в таблицу Prices. как-то по-другому нужно сделать.. |
Сообщ.
#13
,
|
|
|
Дык в коде баг. Nado tak:
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 ) |
Сообщ.
#14
,
|
|
|
все равно не получается. теперь в этот промежуток вообще дата амортизации не входит.
как-то, наверно, я не правильно объяснила. в этом же запросе 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; нужно добавлять амортизацию. |
Сообщ.
#15
,
|
|
|
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 |