![]() |
Народ помогите кто чем может. Приму крассмотрению даже самые бредовые идеи.
Суть проблемы такова. Есть функция bool Tf_Main::DiscardingFromAvailability(int ProductID,float &Count,AnsiString AvailabilityTableName){ q_DiscardingFromAvailability->Active=false; q_DiscardingFromAvailability->SQL->Clear(); q_DiscardingFromAvailability->SQL->Add("SELECT mrt.ProductID,mrt.prCount"); q_DiscardingFromAvailability->SQL->Add("FROM \""+AvailabilityTableName+".db\" mrt"); q_DiscardingFromAvailability->SQL->Add("WHERE (mrt.ProductID="+IntToStr(ProductID)+")"); q_DiscardingFromAvailability->Active=true; . . . И вот эта функция 3 месяца работала без проблем и вот буквально вчера начала вылетать с сообщением "Invalid parameter.". Причем ругается именно на открытие данных q_DiscardingFromAvailability->Active=true;. Функция до ошибки функция выполняется многоо раз. Текст запроса выглядит следующим образом SELECT mrt.ProductID,mrt.prCount FROM "C:\ASH\DISCARDING\EXEDLL\_QTT_0.db" mrt WHERE (mrt.ProductID=351) Вот что я уже перепробовал: 1) Изначально проект был написан на BCB5. Я переконвертил под BCB6 ... результат тот же. 2) Изначально Каждый раз при заходе в функцию создавался новый объект класса TQuery, а в конце функции этот объект разрушался. TQuery *Q=new TQuery(NULL); Q->Active=false; Q->SQL->Clear(); Q->SQL->Add("SELECT mrt.ProductID,mrt.prCount"); Q->SQL->Add("FROM \""+AvailabilityTableName+".db\" mrt"); Q->SQL->Add("WHERE (mrt.ProductID="+IntToStr(ProductID)+")"); Q->Active=true; . . . delete Q; Я описал указатель на объект в объявлении класса формы и создал его один раз (получилось как написал в самом начале сообщения) ... результат тот же. 3)Пробовал ловить исключение вот что из него вытянул: ClassName="EDBEngineError" HelpContext="" Message="Invalid parameter." Мне както этой информации оказалось мало чтоб понять где собака порылась ... 4)Было подозрение что в строке FROM "C:\ASH\DISCARDING\EXEDLL\_QTT_0.db" mrt кто то глючит и воспринимает ":" как параметр в запросе и оставил только имя файла таблицы без полного пути. Результат тот же кромего у запроса свойство ParamCount=0 5)Повторные попытки выполнить SQL запрос после ошибки оканчиваются той же ошибкой не зависимо этоим же объектом или создается другой, но в это же время тот же запрос из скажем SQL Explorer выполняется без проблем. Вот вроди все что я пробовал сделать. Обойти это все конечно можно, но хотелось бы до сути докопаться. |
Цитата:
Когда я использовал BDE напрямую (без алиасов), делал сдедующим образом: У TQuery есть свойство DatabaseName, в него записывал путь к файлам базы. Q->Close(); Q->DatabaseName = "C:\\ASH\\DISCARDING\\EXEDLL\\"; Q->SQL->Clear(); Q->SQL->Add("SELECT * FROM \"_QTT_0\";"); Q->Open(); Причем разширение db указывать необязательно, если у темя тамже не лежит такой же файл с раширением dbf. Мне кажется у тебя все из-за mrt, что это? [s]Исправлено: Megabizon, 12:16 7-11-2003[/s] |
mrt - это погремуха таблицы "C:\ASH\DISCARDING\EXEDLL\_QTT_0.db" в контексте запроса. Крайне необходимая штука когда тянешь данные из нескольких таблиц (особенно если у них есть одинаковые имена полей)
Загляни в синтаксис SQL. а насчет расширения ты абсолютно прав его можно не указывать, а можно указывать разницы нет. |
Так я не понял ты поборол беду или нет?
А про mrt сообразил, что-то сначала тормознул. |
нет не поборол.
самая фигня в том что пару десятков раз эта функция выполняется, а только потом вылетает. а с mtr все нормально. |
Спосибо всем отозвавшимся особенно Megabizon проблема решилась можно ссказать сама собой.
Умерла виндоза и после ее перестановки (и не только виндозы) перекомпилил программу и все нормально заработало.:o |
Время: 10:20. |
Время: 10:20.
© OSzone.net 2001-