Здравствуйте! Сегодня: Вт, 1 Дек 2020, Ваш IP: 18.232.146.10 Войти через loginza
 
Вход | Регистрация | Забыли пароль?
Мой Kbyte.Ru
> Список форумов Kbyte.Ru - - Базы данных
+ Создать новую тему Страница: 1
Тема: Тип DataTime в SQL-запросе · +  +  дата добавления: 27.11.2011 / 12:04
Автор темы:
GreatTalker
GreatTalker
тем: 11 / ответов: 25 / благодарностей: 1 / репутация: 0
ответов: 25
создал(а) тем: 11


Всем доброго времени суток.Есть таблица Accounting из базы данных access Library.База данных подключена через OleDB 4.0 и созранена в DataTable.В таблице столбцы:[Код выдачи], [Фамилия читателя], [Книга],[ Автор], [Дата выдачи], [Срок возврата].Мне необходимо составить запрос на должников-т.е. если,по отношению к сегодняшней дате разница между [Дата выдачи] и [Срок возврата] больше 7 дней,то вывести в запросе [Код выдачи], [Фамилия читателя], [Книга],[ Автор], [Дата выдачи], [Срок возврата] в DataGridView.Есть тип DataTime,но я не знаю как с ним работать и как прописать это на языке запросов.в Access формат даты такой:(dd,MM,yyyy).Помогите,плиз или посоветуйте литературу,где это подробно описывается.
Технологии: C#, Microsoft Access, Microsoft SQL Server
 
Ответ # 1 # · +  +  дата добавления: 27.11.2011 / 21:19
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Можно использовать функцию DateDiff:
SELECT * FROM таблица WHERE DateDiff('y',  [Дата выдачи], [Срок возврата]) > 7
(порядок расположения полей может быть обратным, нужно смотреть по потребностям)
 
Ответ # 2 # · +  +  дата добавления: 28.11.2011 / 18:24
Автор ответа:
GreatTalker
GreatTalker
тем: 11 / ответов: 25 / благодарностей: 1 / репутация: 0
ответов: 25
создал(а) тем: 11


Алексей,а почему указано 'y',ведь должно быть указано 'dd'?
 
Ответ # 3 # · +  +  дата добавления: 28.11.2011 / 18:32
Автор ответа:
GreatTalker
GreatTalker
тем: 11 / ответов: 25 / благодарностей: 1 / репутация: 0
ответов: 25
создал(а) тем: 11


SELECT        [Код выдачи], [Фамилия читателя], Книга, Автор, [Дата выдачи], [Срок возврата]
FROM            Accouting
WHERE        (DateDiff('y', [Дата выдачи], [Срок возврата]) > 7)
с таким кодом не получается сохранить запрос...выходит окно:
 
Ответ # 4 # · +  +  дата добавления: 28.11.2011 / 18:48
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


GreatTalker:
Алексей,а почему указано 'y',ведь должно быть указано 'dd'?
В Access функция DateDiff работает как в Visual Basic 6.0:
Параметр Interval может принимать одно из следующих значений:
Yyyy - год;
Q - квартал;
M - месяц;
Y - день в году;
D - число месяца;
W - день недели;
Ww - неделя;
H - час;
N - минута;
S - секунда;
GreatTalker:
с таким кодом не получается сохранить запрос...выходит окно:
Сложно сказать в чем ошибка, но DateDiff тут наверняка не причем
Возможно что-то где-то осталось открыто и не дает изменить запрос. Можно попробовать создать новый запрос..
 
Ответ # 5 # · +  +  дата добавления: 03.12.2011 / 12:45
Автор ответа:
GreatTalker
GreatTalker
тем: 11 / ответов: 25 / благодарностей: 1 / репутация: 0
ответов: 25
создал(а) тем: 11


Я не совсем понял,как сохранить этот запрос и как вывести его результаты в DataGridView....В разделе представления я выбрал новый запрос,он работает,но как перенести результат в форму deptors с datagridview, я не знаю...можете помочь?
Технологии: C#, Microsoft Access, Microsoft SQL Server
 
Ответ # 6 # · +  +  дата добавления: 03.12.2011 / 13:08
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


На скрине показан SQL Server, а в теме идет речь об Access. Это абсолютно разные СУБД, у них разный SQL (язык структурированных запросов). Функция DateDiff в SQL Server работает по-другому. В Sql Server вместо 'y' нужно писать Day.
SELECT    [Код выдачи], [Фамилия читателя], Книга, Автор, [Дата выдачи], [Срок возврата]
FROM      Accouting
WHERE    DateDiff(Day, [Дата выдачи], [Срок возврата]) > 7
Я не совсем понял,как сохранить этот запрос
Сохранить? Т.е. нужно сделать хранимую процедуру?
Если хранимую процедуру, то примерно так:
CREATE PROCEDURE MyProcedure 
AS
BEGIN
  -- SET NOCOUNT ON added to prevent extra result sets from
  -- interfering with SELECT statements.
  SET NOCOUNT ON;
  -- запрос
  SELECT    [Код выдачи], [Фамилия читателя], Книга, Автор, [Дата выдачи], [Срок возврата]
  FROM      Accouting
  WHERE    DateDiff(Day, [Дата выдачи], [Срок возврата]) > 7
END
В SQL Server можно вызвать так:
exec MyProcedure
В C# кодом примерно так:
using (System.Data.SqlClient.SqlConnection myConn = new System.Data.SqlClient.SqlConnection("Строка соединения с бд"))
{
  myConn.Open();
  System.Data.SqlClient.SqlCommand myCmd = new System.Data.SqlClient.SqlCommand();
  myCmd.Connection = myConn;
  myCmd.CommandType = CommandType.StoredProcedure;
  myCmd.CommandText = "MyProcedure";
  System.Data.SqlClient.SqlDataAdapter DA = new System.Data.SqlClient.SqlDataAdapter(myCmd);
  DataTable DT = new DataTable();
  DA.Fill(DT);
  //DT - таблица данных
  DataGridView1.DataSource = DT; // передаем данные в DataGridView1
}

PS: русские имена колонок использовать не рекомендую.
 
Ответ # 7 # · +  +  дата добавления: 03.12.2011 / 13:20
Автор ответа:
GreatTalker
GreatTalker
тем: 11 / ответов: 25 / благодарностей: 1 / репутация: 0
ответов: 25
создал(а) тем: 11


Не могу создать хранимую процедуру-нет кнопки "новая хранимая процедура".А ее можно прописать отдельно в коде как независимый класс?и код си#,что вы указали прописывать в форме deptors?
 
Ответ # 8 # · +  +  дата добавления: 03.12.2011 / 13:36
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Только сейчас заметил, что расширение файла mdb, тогда все верно, это Access. Рекомендую забыть о существовании убого менеджера данных Visual Studio и пользоваться нормальными средами управления данными В данном случае, нужно использовать MS Access (который входит в состав MS Office), там и интерфейс по проще и все более логично и понятно и даже справка есть на русском языке. Про мой ответ #6 тоже можно забыть, он не по теме
 
Ответ # 9 # · +  +  дата добавления: 03.12.2011 / 13:41
Автор ответа:
GreatTalker
GreatTalker
тем: 11 / ответов: 25 / благодарностей: 1 / репутация: 0
ответов: 25
создал(а) тем: 11


Мне нужно это сделать в C#-задание для курсовой такое-вывести в таблице запрос по должникам.Поэтому мне необходимо сделать это именно так((
 
Ответ # 10 # · +  +  дата добавления: 03.12.2011 / 14:16
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Поэтому мне необходимо сделать это именно так((
Это примерно тоже самое что на велосипеде слетать на Луну
Для проектирования БД лучше использовать родную среду.

См. пример программы загружающей данные в грид, написанный мышкой, во вложении.

+ AccessDataGridExample.zip (66,2 Кб)  
Ответ # 11 # · +  +  дата добавления: 03.12.2011 / 15:04
Автор ответа:
GreatTalker
GreatTalker
тем: 11 / ответов: 25 / благодарностей: 1 / репутация: 0
ответов: 25
создал(а) тем: 11


Спасибо,конечно за красочный эпитет,описывающий тугоухость моего препода по проганью,но у меня не запускается эта программа-у меня студио 2008А тогда я бы хотел спросить:значит,запрос создать в access и просто его в проекте вывести как табл?и еще как сделать так,чтобы при редактировании таблицы результаты сохранялись и в access и в форме,и,при этом,не терялся тип данных нововведенных строк или измененных старых(например-дата,количество книг и т. п.).И ,напоследок:как сделать формуляр читателя?Это должно быть изображение на котором написаны значения столбцов таблиц.Например-имя,фамилия,адрес,какие книги на руках.Я немного работал в методе Graphics-там возможно перевести шрифт в изображения?
 
Ответ # 12 # · +  +  дата добавления: 04.12.2011 / 12:19
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


у меня студио 2008
у меня нет 2008 студии.
значит,запрос создать в access и просто его в проекте вывести как табл?
Загрузить данные можно программно, как я показывал выше, только вместо классов SqlClient использовать OleDb.
using (System.Data.OleDb.OleDbConnection myConn = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\example.mdb;Persist Security Info=True"))
{
  myConn.Open();
  System.Data.OleDb.OleDbCommand myCmd = new System.Data.OleDb.OleDbCommand();
  myCmd.Connection = myConn;
  myCmd.CommandText = "SELECT * FROM table1";
  System.Data.OleDb.OleDbDataAdapter DA = new System.Data.OleDb.OleDbDataAdapter(myCmd);
  DataTable DT = new DataTable();
  DA.Fill(DT);
  //DT - таблица данных
  dataGridView1.DataSource = DT; // передаем данные в DataGridView1
}
аналогично, можно обновить, добавить и удалить любые данные, соответствующими SQL-запросами.

При использовании типизированных DataSet (где нужно "программировать" мышкой) нужно прописать SQL-запросы для SelectCommand, InsertCommand, UpdateCommand, DeleteCommand.
Также в DataSet можно добавить любые другие запросы, как показано ниже:





В коде можно использовать этот запрос так:
dataGridView1.DataSource = table1TableAdapter.GetDataBy();
Изменять данные по умолчанию можно в самом DataGridView (двойной клик мышкой по ячейке активирует режим редактирования). Либо можно закинуть на форму элементы управления для изменения данных (например, TextBox) и указать у каждого элемента DataBindings, из того источника данных, что и DataGridView. Чтобы изменения записались в базу, нужно выполнить следующий код:
this.exampleDataSet.AcceptChanges(); // вместо exampleDataSet поставить свой DataSet
this.table1TableAdapter.Update(this.exampleDataSet); //вместо table1TableAdapter поставить свой TableAdapter
Вся эта визуальная ерунда создана для секретарш, в реальности никто подобные методы не использует. Более ли менее нормальные примеры, разве что в специализированных книжках можно найти. Правда многие начинающие программисты, начитавшись таких книжек, потом еще долго не используют базы, хотя это довольно просто, если делать все руками. Типизированные DataSet, которые предлагает Visual Studio по умолчанию, слишком громоздкие, много лишнего кода, код не гибкий, много подводных камней об которые спотыкаются "программисты" из-за не желания писать код самостоятельно.

Программно, т.е. написанием своего кода руками, все будет относительно проще. По крайней мере тупиковых ситуаций из-за того что забыл куда-то кликнуть мышкой, точно возникать не будет
Graphics-там возможно перевести шрифт в изображения?
"Перевести" - т.е. рисовать текст с использованием определенного шрифта? Возможно, более того, без указания шрифта нарисовать текст не получится.
Это уже другой вопрос, который не имеет отношения к данной теме и следовательно его лучше задать в отдельной ветке.
 
Ответ # 13 # · +  +  дата добавления: 07.12.2011 / 14:49
Автор ответа:
GreatTalker
GreatTalker
тем: 11 / ответов: 25 / благодарностей: 1 / репутация: 0
ответов: 25
создал(а) тем: 11


Спасибо большое!На Ваших примерах сообразил,как все это сделать.Как Вам репутацию отметить,я что-то не понял?))
 
Страница: 1 + Создать новую тему