Здрасьте.
Проблема такая: есть две связные таблицы Clients и Оrders. Связь один ко многим, по полям Clients.ID и Orders.ID_Client.
Нужно получить все записи из Clients, которым удовлетворяют Orders где значение поля Orders.Date_Order = текущей дате.
База акцессовская, а всю жизнь делал все на MySQL, да и в C# недавно,
Это вызывает подозрение. Сначала вы открываете соединение (переменная conn у вас глобальная?), а потом — создаете новое, которое уже не открываете.
B>Пишет такую лажу: An unhandled exception... и т.д.
Расшифруйте свое и т.д.
Re[2]: Помогите с запросом.
От:
Аноним
Дата:
16.09.05 10:00
Оценка:
Насчет conn.Open()
Это я просто ошибся когда копировал, на самом деле все так:
Ошибку пишет такую An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in system.data.dll.
Что еще могу сказать?
Для простого запроса SELECT * FROM Clients этот код работает, так что, как мне кажется проблема в запросе.
Пробовал писать по всякому.
ID, Name, Phone, Address, Email, Type — это поля таблицы Clients
ID_Clients, Date_Order — это поля таблицы Orders (которые используются).
Здравствуйте, GlebZ, Вы писали:
GZ>Передавай дату через параметр.
Дело точно не в этом, потому что даже просто без даты (Без WHERE) не работает.
Если нетрудно, подскажите ссылку где можно откопать SQL c синтаксисом для C# (или ADO.NET), а то для разных баз и языков они все-таки отличаются.
Здравствуйте, Bitz, Вы писали:
B>Дело точно не в этом, потому что даже просто без даты (Без WHERE) не работает. B>Если нетрудно, подскажите ссылку где можно откопать SQL c синтаксисом для C# (или ADO.NET), а то для разных баз и языков они все-таки отличаются.
Нет "SQL c синтаксисом для C# (или ADO.NET)". Используемый SQL зависит от провайдера. А провайдер зависит от БД. Обычно провайдер поддерживает синтаксис своей базы данных.
1. Посмотри кто умирает
что-нибудь типа:
Дело похоже действительно в запросе. По-моему, нужно написать явно "INNER JOIN", а просто JOIN не прокатывает: есть там какие-то глупости в JetSQL. А вообще, открой базу в акцессе и вополни на ней свой запрос: там тебе куда информативнее инструмент объяснит, что не так
КП>Дело похоже действительно в запросе. По-моему, нужно написать явно "INNER JOIN", а просто JOIN не прокатывает: есть там какие-то глупости в JetSQL. А вообще, открой базу в акцессе и вополни на ней свой запрос: там тебе куда информативнее инструмент объяснит, что не так
Тогда уж:
SELECT ID, Name, Phone, Address, Email, Type, Data_Order, ID_Client
from Clients, Orders where Clients.ID=Orders.ID_Client and Date_Order=?
Здравствуйте, Козьма Прутков, Вы писали:
КП>Дело похоже действительно в запросе. По-моему, нужно написать явно "INNER JOIN", а просто JOIN не прокатывает: есть там какие-то глупости в JetSQL. А вообще, открой базу в акцессе и вополни на ней свой запрос: там тебе куда информативнее инструмент объяснит, что не так
Ты прав, дел действительно в запросе, надо колбасить так:
SELECT Clients.ID, Clients.Name, Clients.Phone, Clients.Address, Clients.Email, Clients.Type, Orders.ID_Client, Orders.Date_Order
FROM Clients INNER JOIN Orders ON Clients.ID = Orders.ID_Client
WHERE (((Orders.Date_Order)=Date()));
Спасибо всем, буду знать.
Вообщем оказывается вначале надо запросы конструировать прямо в акцессе, а потом уже их вставлять.
B>WHERE (((Orders.Date_Order)=Date()));
ну, такое количество скобок конечно перебор, даже для акцесса B>Вообщем оказывается вначале надо запросы конструировать прямо в акцессе, а потом уже их вставлять.
да, жизнь учит, порой жестоко. И даже учитывая все убожество редактора запросов, его использовать удобнее нежели гадать, что там за ошибка, при использовании из клиентского приложения.