Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запрос длиннее 255 символов 
:(
    Опции темы
djnv
Дата 28.10.2010, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


техноадепт



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

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



При выполнении непосредственно через клиент БД запрос выполняется прекрасно. Проблема в следующем моменте:
Код

 DBConn.ZQueryService.SQL.Text:='SELECT repair.*,osn.name AS techname,podr.name as otdel,places.place_name,workers.surname FROM repair 
LEFT JOIN osn ON(repair.inv_number=osn.inv_number)
LEFT JOIN places ON(repair.id_place=places.id_place)
LEFT JOIN workers ON(repair.t_id=workers.t_id)
LEFT JOIN podr ON(osn.podr=podr.id)WHERE repair.inv_number=osn.inv_number';

Вылетает ошибка о превышении длины строки в 255 символов. Подскажите как решить эту проблему или, возможно, оптимизировать запрос.

Это сообщение отредактировал(а) djnv - 28.10.2010, 07:58
PM MAIL WWW ICQ Skype GTalk   Вверх
Frees
Дата 28.10.2010, 08:16 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

 DBConn.ZQueryService.SQL.Text:='SELECT repair.*,osn.name AS techname,podr.name as otdel,places.place_name,workers.surname FROM repair '+
'LEFT JOIN osn ON(repair.inv_number=osn.inv_number)'+
'LEFT JOIN places ON(repair.id_place=places.id_place)'+
'LEFT JOIN workers ON(repair.t_id=workers.t_id)'+
'LEFT JOIN podr ON(osn.podr=podr.id)WHERE repair.inv_number=osn.inv_number';

?

Добавлено через 1 минуту и 13 секунд
или
Код

DBConn.ZQueryService.SQL.Clear;
DBConn.ZQueryService.SQL.Add('SELECT repair.*,osn.name AS techname,podr.name as otdel,places.place_name,workers.surname FROM repair ');
DBConn.ZQueryService.SQL.Add('LEFT JOIN osn ON(repair.inv_number=osn.inv_number)');
DBConn.ZQueryService.SQL.Add('LEFT JOIN places ON(repair.id_place=places.id_place)');
DBConn.ZQueryService.SQL.Add('LEFT JOIN workers ON(repair.t_id=workers.t_id)');
DBConn.ZQueryService.SQL.Add('LEFT JOIN podr ON(osn.podr=podr.id)WHERE repair.inv_number=osn.inv_number');


Добавлено через 3 минуты и 38 секунд
Цитата(djnv @  28.10.2010,  10:57 Найти цитируемый пост)
возможно, оптимизировать запрос.

сократить можно

Код

SELECT r.*,o.name AS techname,pd.name as otdel,pl.place_name,w.surname FROM repair r
LEFT JOIN osn o ON(r.inv_number=o.inv_number)
LEFT JOIN places pl ON(r.id_place=pl.id_place)
LEFT JOIN workers w ON(r.t_id=w.t_id)
LEFT JOIN podr pd ON(o.podr=pd.id)WHERE r.inv_number=o.inv_number



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


техноадепт



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

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



Frees, большое спасибо за ответ smile У меня не хвататило опыта или упорства додуматься самостоятельно. 
PM MAIL WWW ICQ Skype GTalk   Вверх
Deniz
Дата 28.10.2010, 09:26 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

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



А зачем повторения?
Код
...
LEFT JOIN osn ON(repair.inv_number=osn.inv_number)
...
WHERE repair.inv_number=osn.inv_number
судя по всему нужно left join заменить на inner join (просто join) и убрать where


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
djnv
Дата 28.10.2010, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


техноадепт



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

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



Цитата(Deniz @ 28.10.2010,  09:26)
А зачем повторения?
Код
...
LEFT JOIN osn ON(repair.inv_number=osn.inv_number)
...
WHERE repair.inv_number=osn.inv_number
судя по всему нужно left join заменить на inner join (просто join) и убрать where

вообще действительно и без where работает. Это остаток первоначального запроса.
PM MAIL WWW ICQ Skype GTalk   Вверх
djnv
Дата 29.10.2010, 06:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


техноадепт



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

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



интересно, а как сделать UPDATE такого запроса из проги?
PM MAIL WWW ICQ Skype GTalk   Вверх
Frees
Дата 29.10.2010, 07:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



делать UPDATE каждой таблицы отдельно

Это сообщение отредактировал(а) Frees - 29.10.2010, 07:06


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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

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



Цитата(djnv @  29.10.2010,  08:57 Найти цитируемый пост)
а как сделать UPDATE такого запроса из проги?
А ты расскажи что должен сделать update такого запроса? Как ты это видишь?


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
djnv
Дата 29.10.2010, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


техноадепт



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

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



Цитата(Deniz @ 29.10.2010,  09:14)
Цитата(djnv @  29.10.2010,  08:57 Найти цитируемый пост)
а как сделать UPDATE такого запроса из проги?
А ты расскажи что должен сделать update такого запроса? Как ты это видишь?

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

Это сообщение отредактировал(а) djnv - 29.10.2010, 12:31
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0452 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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