Guest
07-11-2003, 10:07
Народ помогите кто чем может. Приму крассмотрению даже самые бредовые идеи.
Суть проблемы такова.
Есть функция
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 выполняется без проблем.
Вот вроди все что я пробовал сделать. Обойти это все конечно можно, но хотелось бы до сути докопаться.
Суть проблемы такова.
Есть функция
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 выполняется без проблем.
Вот вроди все что я пробовал сделать. Обойти это все конечно можно, но хотелось бы до сути докопаться.