Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Помогите! Проблемы с ADO OLE DB


Автор: Fenrir 16.5.2006, 19:49
Народ, помогите пожалуйста. Пишу значит клиент к Базе данных и застопорился на динамическом запросе... Проблема вот в чем: нужно сделать запрос к таблице так что бы на основании введеных в форму значений select выбирал только нужное. Создал первый параметр EMail, и прописал его в SQL (... where MailFrom = :EMail...), Работает все хорошо, ну вроде бы... 
Как только добавляю второй параметр DateFrom, заполняю свойства вылазиет ошибка - "project ... raised exception class EOleException with message 'Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности проверьте значения всех состояний OLE DB. Работа не выполнена'. Process stoped." 
Если еще и дописать в SQL (...and where SendDate = :DateFrom ...) вылазиет еще и другая ошибка - "project ... raised exception class EOleException with message '[Microsoft][ODBC SQL Server Driver] Дополнительная возможность не реализованна'." Вот... И что теперь делать ваабще незнаю... 
Может кто сталкивался с подобным знаете решение? Или может есть какая нибуть альтернатива? Пожалуйста помогите!!
SQL 2000, Win XP, Builder 6, связь через ADO, и руки вроде откуда надо растут... 

Автор: Fenrir 16.5.2006, 21:39
Я тут еще немного поэксперементировал и кажется понял как оно есть...  Проблему вызывает "SendDate >= :DateFrom". Без этого все вроде работает, а с этой частью при активации ADOQuery выскакивает ошибка "[Microsoft][ODBC SQL Server Driver] Дополнительная возможность не реализованна". SendDate это поле в моей таблице (тип: datetime, размер 8), ну а DateFrom это имя задумываемого параметра. 
По идее будет ещё и "SendDate <= :DateTill", это соответственно мне нужно что бы выбирать данные за определенный период. Ну вроде бы должно быть яснее... У кого какие идеи? 

Автор: Oberon83 17.5.2006, 07:44
По ворме записи запроса: MailFrom = :EMail, можно предположить, что ты используешь в запросе параметры. Возможно из-за того что эти параметры у тебя неопределены и возникает ошибка. Сделай проще - создай функцию, которая у тебя будет строить запрос. Т.е. я например делаю обработчики визуальных компонентов (Edit, Memo, ComboBox), которые генерируют необходимый текст запроса:
Например для Edit'a:

Код

//int& delim - Наличие оператора WHERE в запросе (если 0 - дописывается WHERE, если 1 дописывается AND)
//TEdit* edit - это просто Edit
//char* text - поле таблицы с которым связан Edit
AnsiString obrabotka::gen_where_edit(int& delim,TEdit* edit,char* text){
AnsiString output;
if(edit->Text != ""){
if(delim == 1) output = " and ";
        else{
        output = " WHERE ";
        delim = 1;
        }
output += AnsiString(text) + " = '" + edit->Text + "'";
}
return output;
}

И так для основных компонентов, которые у тебя есть на форме.

Так вот для генерации поискового запроса:

Код

AnsiString sql;
int delimiter;//Указывет на то, что оператор SQL запроса WHERE присутствует

sql = "SELECT * FROM table";
sql += gen_where_edit(int& delim,TEdit* edit,char* text);
//и т.д.

 

Автор: Estuark 19.2.2023, 19:50
Модератор: Сообщение скрыто.

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