Чертов Firebird не умеет выполнять простейшие запросы... #591481


#0 by DEVIce
Я в шоке. Не могу заставить это чудо отсортировать выборку если в ней есть левое соединение. Причем если соединения нет, то сортирует только по возрастанию. Попытка отсортирвать по убыванию приводит к ошибке транзакции no wait. А отсортировать очень надо, потому что "умные" товарищи в 1С запретили таблицы значений в тонком клиенте, а писть сортировку самому - как-то по костыльски получается.
#1 by DEVIce
Пример запроса: SELECT   Invoices.InvNo as InvNo,   Invoices.DepNo as DepNo,   Invoices.ItemDiscount as SkidkaIzd,   Invoices.DopDiscount as SkidkaAcc,   Invoices.IzdAmount as SummaIzd,   Invoices.AccAmount as SummaAcc,   Invoices.WrkAmount as SummaRbt,   Invoices.Amount as SummaInv,   Invoices.Ratio as Kurs,   Clients.ClName as Klient,   Clients.ClPhone as KlientTel FROM   Invoices   LEFT JOIN Clients ON    (Clients.ClNum = Invoices.ClNum AND    Clients.ClDep = Invoices.DepNo) WHERE   (Invoices.InvN = " + стрСчет + " AND   Invoices.DepNo = " + стрОтдел + ") Куда уж проще.
#2 by Ненавижу 1С
1. сортировать можно ТЗ на сервере 2. какая версия Firebird? 3. сколько данных в таблице? 4. если через внешние источники, то может 1С тупо неправильно для FB генерит запрос?
#3 by Ненавижу 1С
где тут сортировка?
#4 by DEVIce
Любые попытки запихнуть в него order by приводит к ошибке транзакции no wait. Причем DSN как раз настроен на только чтение и без ожидания.
#5 by DEVIce
. 1. Ага, а потом результат сортировки на клиента надо вернуть однако. 2. 1.5 3. В самой таблице до фига, в примере на котором проверяю выборка возвращает 4 строки 4. Делаю через COMОбъект . Это без сортировки, но попытка воткнуть сортировку приводит к проблемам.
#6 by DEVIce
Похоже что все придется гнать на сервер и на нем самом настраивать DSN и доступ до сервера Firebird.
#7 by orefkov
стрОтдел - это строка или число? Может надо  Invoices.DepNo = '" + стрОтдел + "')
#8 by DEVIce
. Число там. Конкретно это запрос работает. В транзакцию валится запрос: SELECT   Invoices.InvNo as InvNo,   Invoices.DepNo as DepNo,   Invoices.ItemDiscount as SkidkaIzd,   Invoices.DopDiscount as SkidkaAcc,   Invoices.IzdAmount as SummaIzd,   Invoices.AccAmount as SummaAcc,   Invoices.WrkAmount as SummaRbt,   Invoices.Amount as SummaInv,   Invoices.Ratio as Kurs,   Clients.ClName as Klient,   Clients.ClPhone as KlientTel FROM   Invoices   LEFT JOIN Clients ON    (Clients.ClNum = Invoices.ClNum AND    Clients.ClDep = Invoices.DepNo) WHERE   (Invoices.InvN = " + стрСчет + " AND   Invoices.DepNo = " + стрОтдел + ") ORDER BY   Invoices.InvNo
#9 by DEVIce
Причем валится всегда, даже если в базе нет никого больше. Если убрать левое соединение, то начинает работать, но только по возрастанию, с параметром DESC снова ничание валиться. Чертовы версионники. :)
#10 by tridog
Вот помойму тут внешние источники - то что доктур прописал...
#11 by DEVIce
. Какая разница? Запрос поедет через КОМ или через внешний источник от 1С? Запрос выполняется сервером в итоге который находится черте где вообще.
#12 by Ненавижу 1С
возможно 1.5 и не умел этого делать, надо ставить 2.1, а лучше 2.5
#13 by MMF
бред какой-то. Проблемы либо в тебе, либо в настройках источника данных. Поставь IBExpert и выполни запрос в нем - увидишь, что никаких проблем с левым соединением нет
#14 by Defender aka LINN
"Ага, а потом результат сортировки на клиента надо вернуть однако." - куда и зачем вернуть?
#15 by H A D G E H O G s
Ну может он из Тонкого цепляется к Огнептице?
#16 by H A D G E H O G s
Но я помогу ему, не дружащему с СП. ДанныеФормыСтруктураСКоллекцией.Сортировать (FormDataStructureAndCollection.Sort) ДанныеФормыСтруктураСКоллекцией (FormDataStructureAndCollection) Сортировать (Sort) Синтаксис: Сортировать(<Колонки>, <ОбъектСравнения>) Параметры: <Колонки> (необязательный) Тип: Строка. Список имен колонок, разделенных запятыми, по которым производится сортировка таблицы. После каждого имени колонки через пробел может быть указано направление сортировки. Направление определяется: "Убыв" ("Desc") - упорядочивать по убыванию; "Возр" ("Asc") - упорядочивать по возрастанию. По умолчанию сортировка производится по возрастанию. Порядок указания имен колонок таблицы определяет порядок сортировки. Это означает, что сначала таблица сортируется по колонке, указанной первой. Затем группы строк с одинаковым значением в этой колонке сортируются по колонке, которая указана второй, и так далее. <ОбъектСравнения> (необязательный) Тип: Строка; СравнениеЗначений. Объект для сравнения элементов, либо имя типа объекта для сравнения. Если объект сравнения или имя типа не задано, сравнение выполняется по следующим правилам: элементы, чьи типы не совпадают, сравниваются по коду типа; элементы простых типов сравниваются по значению; элементы остальных типов сравниваются по строковому представлению. Примечание: объекты для сравнения элементов недоступны на клиенте, поэтому там необходимо задавать имя типа объекта. Описание: Сортирует коллекцию в соотвествии с указанными правилами сортировки. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент. Вызов метода выполняет обращение к серверу.
#17 by H A D G E H O G s
Вызов метода выполняет обращение к серверу... Походу он все же отправит "ТЗ" на сервер.
#18 by Defender aka LINN
Я уверен, в медицине и для этого название есть :)
#19 by H A D G E H O G s
Надо мерить байты.
#20 by el-gamberro
Дык кто мешает выгрузить коллекцию в ТЗ, отсортировать и обратно загрузить? Просто метод делает это все одним движением
#21 by DGorgoN
Firebird уг - имхо..
#22 by Зеленый Кот
вот министерство обороны сша не знает - оно им пользуется
#23 by el-gamberro
Вот оно что. Теперь понятно кто виноват в проблеме
#24 by DEVIce
. Версией сервера руля не я, приходится работать с тем что есть. . Согласен, хрень какая-то, IBExpress почему-то не дает возможности запросы делать, кноки эти погашены. . Да уже пересмотрел концепцию, теперь сортировка уже не нужна и плюс к этому выполняться модули будут на сервере, но вопрос остался интересным. . Так и есть, было решено, что на север будут установлены дрова и доступ к серверу скуля. Опять же это не мой каприз - работаю с тем что есть. И все же ближе к вопросу. Что же это могет быть, что элементарнейшую сортировку скуль делает только в идеальных условиях.
#25 by milan
ORDER BY 1
#26 by Diversus
Попробуй в IBExpert с базой этот запрос выполнить. Должен работать...
#27 by Diversus
Нет FireBird не УГ это точно... Сама СУБД достаточно мощная и многое может. По производительности тоже как бы все нормально. Видел даже программу, в которой ЖЭУ рассчитывает начисления за квартиры в городе с населением в 150 тыщ человек и кстати в качестве СУБД была FireBird. Так что не надо гнать... А лучшего инструмента с базами чем IBExpert я вообще не видел и тот же MS SQL Server Managment Studio нервно курит в сторонке.
#28 by DGorgoN
Я лично знаю что на пне-1 серверном у нас в электросбыте рассчитывается весь город и все подрядчики и субподрядчики это больше 700 000 контрагентов. База mysql. И чо собственно?
#29 by bizon2008
если руки из жо..
#30 by bizon2008
у тебя проблема не в запросе, в параметрах транзакций.
#31 by Diversus
А то, что FireBird не УГ, это и значит
#32 by acsent
майскл не уг стал только начиная с версии 5, а до этого даже транзакций не было
#33 by DEVIce
. Пробовал, ничего не меняется :) . У меня какая-то странная версия, неактивны кнопки позволяющие запрос выполнить. . Воооот, про это дело читал, но так и не понял как до этих параметров достучаться.
#34 by DEVIce
. В самом источнике данных, который и указывается в строке подключения, стоит READ и NOWAIT.
#35 by bizon2008
Пиши как подключался.
#36 by DEVIce
. Да подключался просто :) DSN=SO2006
#37 by Jofa
СТроку подключения в студию
#38 by Jofa
Я тоже думал что птица не робит не фига а потом оказалась что руки не из того места растут ..)
#39 by Jofa
С "Птичка" рулит ! ! !
#40 by Torquader
Таки попробовать задать план выполнения запроса. Кроме того, как можно выполнять запрос с сортировкой с конца, в режиме выборки сразу - всё равно надо сначала всё перебрать, а потом выполнять ORDER или нужно указывать, какой индекс можно использовать для ORDER, если, конечно, он есть. Птичка, она совсем другая - она умеет то, что другие не умеют - и, соответственно, наоборот.
#41 by DEVIce
. Смотри . Настроен внешний источник данных. . "Кроме того, как можно выполнять запрос с сортировкой с конца, в режиме выборки сразу - всё равно надо сначала всё перебрать" - ЧЕ? :)
#42 by Torquader
Чтобы сервер мог выполнить сортировку, нужно, чтобы по этому полю был индекс и его можно было использовать в запросе - иначе запрос нужно выполнить до конца, чтобы потом можно было выполнить сортировку результата.
#43 by DEVIce
. Что значит "выполнить запрос до конца"? Да и какая мне разница, по индексу отсортируется или пройдет по всей таблице и отсортируется, ORDER BY команда древняя и почему на простейшем запросе у файрберда проблема с ней мне не понятно.
#44 by ЧеловекДуши
Эта птичка не летает, 1С куда приятней :)
#45 by smartu
а так? (Invoices.InvN = '" + стрСчет + "' AND  Invoices.DepNo = '" + стрОтдел + "')
#46 by smartu
суперокна ?
#47 by Torquader
Птичка делает всё честно - для возможности сортировки требует буферизацию.
Тэги: Админ
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С