Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Условие отбора для поля даты (по числу в месяце)


Автор: Doss 26.7.2009, 08:19
Всем боьшой и красочный салют!!! Но мне не до него... smile 
Ситуация такая: Пишу прогу для учета финансовых средств. Есть доход, есть расход. Так вот в конце каждого года нужно закрывать проходящий год и начинать с нуля или с остаточного баланса предыдущего года. Так вот возмем таблицу расходов. Все хорошо когда мы начали в настоящем году заполнять или учитывать, но наступил следующий год и нужно отфильтровать значения, чтобы не видеть за прошлый год расходы, и считать настоящий год. Кажется все просто и легко. Ведь правда нам не важен расход за прошлый год, который к тому же закрыт и посчитан.
Собираюсь все расходы за все года хронить в одной таблице.
Так вот он самый код:
Код

using (OleDbConnection conn = new OleDbConnection(conectingString))
            {
                try
                {
                    conn.Open();
                    daRashod = new OleDbDataAdapter("select id,DataNow,Summa,Nodes,id_Sotrudnicy,id_Statya,NomerStati,NameStaya from Rashod where DataNow between '01.01.2009' and '31.12.2009'", conn);
                    DataSet ds = new DataSet();
                    daRashod.Fill(ds, "Расход");
                    DataView dv = new DataView(ds.Tables["Расход"]);
                    //dv.RowFilter = "DataNow >=" + day+"."+month +"."+yeare ;
                    dv.Sort = "DataNow desc,Summa asc";
                    dgvRashod.DataSource = dv;
                    ds.Dispose();
                    conn.Close();
                }
                catch (SqlException ex)
                {
                    MessageBox.Show(ex.Message, ex.Source);
                    conn.Close();
                }
            }


Вот именно эта часть и шалит
Код

select id,DataNow,Summa,Nodes,id_Sotrudnicy,id_Statya,NomerStati,NameStaya from Rashod where DataNow between '01.01.2009' and '31.12.2009'


 Поле DataNow имеет тип данный "Дата/время", БД Access 2007. 
К примеру беру другое поле из этой таблице под этим же запросом Сумму например- все работает
Пробывал так
Код

select id,DataNow,Summa,Nodes,id_Sotrudnicy,id_Statya,NomerStati,NameStaya from Rashod where DataNow >= '01.01.2009' 


Тоже не идет
Так
Код

select id,DataNow,Summa,Nodes,id_Sotrudnicy,id_Statya,NomerStati,NameStaya from Rashod where DataNow in ('01.01.2009' )


Не получается что-то. Кстати, поле поменял на тип "тестовый", начала отбирать но полный беспредел, диапазон что то не правильно отбирает, задаю с 01 января 2009 по 31.12.2009 он выдает этот диапазо но еще и 31.12.2008,30.12.2008 и 01.01.2010 года захватывает. В общем что то тут не то!
Прощу кто имел дело и разобрался помочь.
Заранее благодарен за помощь.

Автор: jonie 26.7.2009, 10:48
Дата в акцесе пишется вроде бы в #2009-01-31# формате, кроме того есть функции для явной конвертации в дату.

Автор: Doss 27.7.2009, 18:46
Цитата(jonie @ 26.7.2009,  10:48)
 кроме того есть функции для явной конвертации в дату.

А как именно? Пожалуйста если можно на примере
Читать нет времени.

Автор: jonie 27.7.2009, 23:03
Цитата
Читать нет времени.

вы читаете что у нас есть время чтобы за вас читать документацию?!

Автор: Doss 28.7.2009, 20:08
Цитата(jonie @  27.7.2009,  23:03 Найти цитируемый пост)



вы читаете что у нас есть время чтобы за вас читать документацию?!


Так форум для чего создан, что бы указывать только на литеру? Обращался к тем, кто с этой проблемой уже связывался и решил ее. Если вы не решили или не хотите делится знаниями то да и ладно, потрачу время на читку.
Но если бы вы помогли примером или дельным советом, то мож и дискусия и мнения других послушать удалось бы..... smile 

Автор: Rififi 28.7.2009, 22:57
Код
"... where DataNow between ? and ?";

rtfm'ить про параметры команды до просветления.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)