Поиск:

Ответ в темуСоздание новой темы Создание опроса
> зависание параметризованного запроса 
:(
    Опции темы
marhatter
Дата 2.12.2009, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 8.5.2008

Репутация: нет
Всего: нет



Здравствуйте. База данных dBase, способ доступа - BDE. Пишу слудующий простой запрос- 
Код

while not Query1.Eof do
begin
   Query2.Close;
   Query2.SQL.Clear;
   Query2.Sql.Add('SELECT '''+tab+'''.CHET AS ST');
   Query2.Sql.Add('FROM ''' + tab + ''' AS t1');
   Query2.Sql.Add('WHERE t1.CHET = '''+ s +''' ');
   Query2.Open;
   st := Query2.FieldByName('ST').AsString;
end;

где s - значения предудушего запроса (12345,42170,45678, .....) (просматриваю из в цикле).
Проблема в том, что для числа 42170 запрос зависает и не выдает никаких результатов(есть несколько таких "плохих" чисел). Для остальных чисел запрос работает.
PM MAIL   Вверх
Frees
Дата 2.12.2009, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



что в tab зачем в апострофах?

Код


while not Query1.Eof do
begin
   Query2.Close;
   Query2.SQL.Clear;
   Query2.Sql.Add('SELECT tl.CHET AS ST');
   Query2.Sql.Add('FROM ' + tab + ' AS t1');//если tab не меняется внутри цикла, то нужно вынести за цикл
   Query2.Sql.Add('WHERE t1.CHET = :stt');
   Query2.ParamByName('stt').AsString := s;
   Query2.Open;
   st := Query2.FieldByName('ST').AsString;
   Query1.Next;
end;


а так?


а это реальный запрос? а то ты выбираешь и в условие пишешь одно и тоже поле...

Это сообщение отредактировал(а) Frees - 2.12.2009, 19:52


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Данкинг
Дата 2.12.2009, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



"select TAB from TAB" ? smile Т.е. название таблицы совпадает с названием поля?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
marhatter
Дата 2.12.2009, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 8.5.2008

Репутация: нет
Всего: нет



Цитата(Frees @ 2.12.2009,  19:46)
что в tab зачем в апострофах?

Код


while not Query1.Eof do
begin
   Query2.Close;
   Query2.SQL.Clear;
   Query2.Sql.Add('SELECT tl.CHET AS ST');
   Query2.Sql.Add('FROM ' + tab + ' AS t1');//если tab не меняется внутри цикла, то нужно вынести за цикл
   Query2.Sql.Add('WHERE t1.CHET = :stt');
   Query2.ParamByName('stt').AsString := s;
   Query2.Open;
   st := Query2.FieldByName('ST').AsString;
   Query1.Next;
end;


а так?


а это реальный запрос? а то ты выбираешь и в условие пишешь одно и тоже поле...


в tab - путь к таблице, типа 'C:\...'. Да это реальный запрос. Проверить так это или не так пока нет возможности, как проверю отпишусь.

Добавлено через 45 секунд
Цитата(Данкинг @ 2.12.2009,  19:51)
"select TAB from TAB" ? smile Т.е. название таблицы совпадает с названием поля?

Название таблицы не совпадает с названием поля

Добавлено через 1 минуту и 59 секунд
спасибо что откликнулись на мой вопрос

Добавлено через 12 минут и 8 секунд
С параметром тоже пробывал, безрезультатно. C большинством вот этих меняющихся значений S запрос работает,  не работает при определенных значениях. Даже если просто выбирать из таблицы вот так: 
Код

   Query2.Close;
   Query2.SQL.Clear;
   Query2.Sql.Add('SELECT tl.CHET');
   Query2.Sql.Add('FROM ' + tab + ' AS t1');//если tab не меняется внутри цикла, то нужно вынести за цикл
   Query2.Sql.Add('WHERE t1.CHET = 42170');
   Query2.Open;

он также зависает. 
PM MAIL   Вверх
Данкинг
Дата 2.12.2009, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(marhatter @  2.12.2009,  20:08 Найти цитируемый пост)
Название таблицы не совпадает с названием поля

Ну да, попутал я. smile 

Цитата(marhatter @  2.12.2009,  20:08 Найти цитируемый пост)
не работает при определенных значениях. 

Попробуй оставь в таблице одно это "глючное" значение - тоже зависать будет?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
marhatter
Дата 2.12.2009, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 8.5.2008

Репутация: нет
Всего: нет



Цитата(Данкинг @ 2.12.2009,  20:32)
Цитата(marhatter @  2.12.2009,  20:08 Найти цитируемый пост)
Название таблицы не совпадает с названием поля

Ну да, попутал я. smile 

Цитата(marhatter @  2.12.2009,  20:08 Найти цитируемый пост)
не работает при определенных значениях. 

Попробуй оставь в таблице одно это "глючное" значение - тоже зависать будет?

Дело в том оно не одно в таблице. Я методом "проб и ошибок" их вычленил из таблицы, если я их исключаю в запросе то все норм работает, если с ними то зависает. Ну попробую завтра оставить одно из таких значений , для проверки. 
PM MAIL   Вверх
Frees
Дата 2.12.2009, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



Цитата(marhatter @  2.12.2009,  23:39 Найти цитируемый пост)
если с ними то зависает

что значит зависает? на чем вичит? может у тебя просто селект ничего не возвращает и поэтому "зависает"?


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
marhatter
Дата 2.12.2009, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 8.5.2008

Репутация: нет
Всего: нет



Цитата(Frees @ 2.12.2009,  20:41)
Цитата(marhatter @  2.12.2009,  23:39 Найти цитируемый пост)
если с ними то зависает

что значит зависает? на чем вичит? может у тебя просто селект ничего не возвращает и поэтому "зависает"?

"зависает" на  Query2.Open. Приложение после этого ни как не реагирует. В таблице существуют записи с  такими нехорошими значениями.
PM MAIL   Вверх
Frees
Дата 2.12.2009, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



может их ООчень много? ждать пробовал?
или запрос написать для выбора только 1 записи 

Код

Query2.Sql.Add('SELECT First 1 tl.CHET');



--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
marhatter
Дата 2.12.2009, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 8.5.2008

Репутация: нет
Всего: нет



Цитата(Frees @ 2.12.2009,  20:56)
может их ООчень много? ждать пробовал?
или запрос написать для выбора только 1 записи 

Код

Query2.Sql.Add('SELECT First 1 tl.CHET');

Их, например значения как в примере выше (421701),  5 штук в таблице. Ждал... Нет не пробывал выбирать только  1 запись, попробуем.
PM MAIL   Вверх
marhatter
Дата 3.12.2009, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 8.5.2008

Репутация: нет
Всего: нет



Здравствуйте. Вот в общем более полный код:
Код

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT t1.LCHET AS CHET, t1.SV VAL, t1.MESYAC, t1.GOD, t1.SUMMAPAY AS SUMMA, t1.DBEGPERIOD, t1.IST AS IST, t1.TYPEGRAF ');
Query1.SQL.Add('FROM '''+ tab + ''' AS t1');
Query1.SQL.Add('WHERE (t1.SV IN (1,2,7)) and (t1.MESYAC = ''' + IntToStr(num) + ''') and (t1.GOD = ''' + god + ''') and (t1.TYPEGRAF = 6) and (t1.DBEGPERIOD < ''' + data + ''')');
Query1.Open;
Query1.First;
while not Query1.Eof do
begin
   l1 := Query1.FieldByName('CHET').AsString;
   Query2.Close;
   Query2.SQL.Clear;
   Query2.SQL.Add('SELECT  t2.LCHET AS CHET');
   Query2.Sql.Add('FROM '''+ tab2 +''' AS t2');
   Query2.SQL.Add('WHERE (t2.LCHET = :stt) and (t2.SV IN (1,2,6,7))');
   Query2.ParamByName('stt').AsString := l1;
   Query2.Open;
   l2 := Query2.FieldByName('CHET').AsString;
   Query1.Next;
end;

Выдает ошибку  'Type micmatch in expression'
PM MAIL   Вверх
Frees
Дата 3.12.2009, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



Цитата(marhatter @  3.12.2009,  10:54 Найти цитируемый пост)
Выдает ошибку  'Type micmatch in expression'

где?

 зы сборку запроса надо за цикл!


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
marhatter
Дата 3.12.2009, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 8.5.2008

Репутация: нет
Всего: нет



Делаю так 
Код

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT t1.LCHET AS CHET, t1.SV VAL, t1.MESYAC, t1.GOD, t1.SUMMAPAY AS SUMMA, t1.DBEGPERIOD, t1.IST AS IST, t1.TYPEGRAF ');
Query1.SQL.Add('FROM '''+ tab + ''' AS t1');
Query1.SQL.Add('WHERE (t1.SV IN (1,2,7)) and (t1.MESYAC = ''' + IntToStr(num) + ''') and (t1.GOD = ''' + god + ''') and (t1.TYPEGRAF = 6) and (t1.DBEGPERIOD < ''' + data + ''')');
Query1.Open;
Query1.First;
while not Query1.Eof do
begin
   l1 := Query1.FieldByName('CHET').AsString;
   Query2.Close;
   Query2.SQL.Clear;
   Query2.SQL.Add('SELECT  t2.LCHET AS CHET');
   Query2.Sql.Add('FROM '''+ tab2 +''' AS t2');
   Query2.SQL.Add('WHERE (t2.LCHET = ''' + l1 +''') and (t2.SV IN (1,2,6,7))');
   Query2.Open;
   l2 := Query2.FieldByName('CHET').AsString;
   Query1.Next;
end;


зависает))).

Добавлено через 5 минут и 41 секунду
Цитата(Frees @ 3.12.2009,  08:00)
Цитата(marhatter @  3.12.2009,  10:54 Найти цитируемый пост)
Выдает ошибку  'Type micmatch in expression'

где?

 зы сборку запроса надо за цикл!

Ошибку выдает на Query2.Open. 
PM MAIL   Вверх
Frees
Дата 3.12.2009, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54




Цитата(marhatter @  3.12.2009,  10:54 Найти цитируемый пост)
Выдает ошибку  'Type micmatch in expression'

LCHET какого типа

ЗЫ может BDE в печь!?


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
marhatter
Дата 3.12.2009, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 8.5.2008

Репутация: нет
Всего: нет



Цитата(Frees @ 3.12.2009,  08:14)
Цитата(marhatter @  3.12.2009,  10:54 Найти цитируемый пост)
Выдает ошибку  'Type micmatch in expression'

LCHET какого типа

ЗЫ может BDE в печь!?

LCHET - NUMERIC, раньше проблем с BDE не было, да и сейчас думаю не в нем дело(может ошибаюсь), для некоторых значений то работает все норм, а для некоторых никак не хочет
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0627 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.