Имя: Пароль:
IT
Админ
Чертов Firebird не умеет выполнять простейшие запросы...
,
0 DEVIce
 
24.01.12
14:08
Я в шоке. Не могу заставить это чудо отсортировать выборку если в ней есть левое соединение. Причем если соединения нет, то сортирует только по возрастанию. Попытка отсортирвать по убыванию приводит к ошибке транзакции no wait. А отсортировать очень надо, потому что "умные" товарищи в 1С запретили таблицы значений в тонком клиенте, а писть сортировку самому - как-то по костыльски получается.
1 DEVIce
 
24.01.12
14:10
Пример запроса:
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 Ненавижу 1С
 
гуру
24.01.12
14:10
(0)
1. сортировать можно ТЗ на сервере
2. какая версия Firebird?
3. сколько данных в таблице?
4. если через внешние источники, то может 1С тупо неправильно для FB генерит запрос?
3 Ненавижу 1С
 
гуру
24.01.12
14:11
(1) где тут сортировка?
4 DEVIce
 
24.01.12
14:11
Любые попытки запихнуть в него order by приводит к ошибке транзакции no wait. Причем DSN как раз настроен на только чтение и без ожидания.
5 DEVIce
 
24.01.12
14:14
(2).
1. Ага, а потом результат сортировки на клиента надо вернуть однако.
2. 1.5
3. В самой таблице до фига, в примере на котором проверяю выборка возвращает 4 строки
4. Делаю через COMОбъект

(3). Это без сортировки, но попытка воткнуть сортировку приводит к проблемам.
6 DEVIce
 
24.01.12
14:17
Похоже что все придется гнать на сервер и на нем самом настраивать DSN и доступ до сервера Firebird.
7 orefkov
 
24.01.12
14:17
стрОтдел - это строка или число?
Может надо
 Invoices.DepNo = '" + стрОтдел + "')
8 DEVIce
 
24.01.12
14:19
(7). Число там. Конкретно это запрос работает. В транзакцию валится запрос:

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 DEVIce
 
24.01.12
14:20
Причем валится всегда, даже если в базе нет никого больше. Если убрать левое соединение, то начинает работать, но только по возрастанию, с параметром DESC снова ничание валиться. Чертовы версионники. :)
10 tridog
 
24.01.12
14:24
(6) Вот помойму тут внешние источники - то что доктур прописал...
11 DEVIce
 
24.01.12
14:26
(10). Какая разница? Запрос поедет через КОМ или через внешний источник от 1С? Запрос выполняется сервером в итоге который находится черте где вообще.
12 Ненавижу 1С
 
гуру
24.01.12
15:38
возможно 1.5 и не умел этого делать, надо ставить 2.1, а лучше 2.5
13 MMF
 
24.01.12
15:50
бред какой-то. Проблемы либо в тебе, либо в настройках источника данных. Поставь IBExpert и выполни запрос в нем - увидишь, что никаких проблем с левым соединением нет
14 Defender aka LINN
 
24.01.12
15:55
(5) "Ага, а потом результат сортировки на клиента надо вернуть однако." - куда и зачем вернуть?
15 H A D G E H O G s
 
24.01.12
15:58
(14) Ну может он из Тонкого цепляется к Огнептице?
16 H A D G E H O G s
 
24.01.12
15:59
Но я помогу ему, не дружащему с СП.

ДанныеФормыСтруктураСКоллекцией.Сортировать (FormDataStructureAndCollection.Sort)
ДанныеФормыСтруктураСКоллекцией (FormDataStructureAndCollection)
Сортировать (Sort)
Синтаксис:

Сортировать(<Колонки>, <ОбъектСравнения>)
Параметры:

<Колонки> (необязательный)

Тип: Строка.
Список имен колонок, разделенных запятыми, по которым производится сортировка таблицы. После каждого имени колонки через пробел может быть указано направление сортировки. Направление определяется: "Убыв" ("Desc") - упорядочивать по убыванию; "Возр" ("Asc") - упорядочивать по возрастанию. По умолчанию сортировка производится по возрастанию. Порядок указания имен колонок таблицы определяет порядок сортировки. Это означает, что сначала таблица сортируется по колонке, указанной первой. Затем группы строк с одинаковым значением в этой колонке сортируются по колонке, которая указана второй, и так далее.
<ОбъектСравнения> (необязательный)

Тип: Строка; СравнениеЗначений.
Объект для сравнения элементов, либо имя типа объекта для сравнения. Если объект сравнения или имя типа не задано, сравнение выполняется по следующим правилам:
элементы, чьи типы не совпадают, сравниваются по коду типа;
элементы простых типов сравниваются по значению;
элементы остальных типов сравниваются по строковому представлению.
Примечание: объекты для сравнения элементов недоступны на клиенте, поэтому там необходимо задавать имя типа объекта.
Описание:

Сортирует коллекцию в соотвествии с указанными правилами сортировки.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент.
Вызов метода выполняет обращение к серверу.
17 H A D G E H O G s
 
24.01.12
16:00
Вызов метода выполняет обращение к серверу...

Походу он все же отправит "ТЗ" на сервер.
18 Defender aka LINN
 
24.01.12
16:00
(15) Я уверен, в медицине и для этого название есть :)
19 H A D G E H O G s
 
24.01.12
16:00
Надо мерить байты.
20 el-gamberro
 
24.01.12
16:10
(17) Дык кто мешает выгрузить коллекцию в ТЗ, отсортировать и обратно загрузить?
Просто метод делает это все одним движением
21 DGorgoN
 
24.01.12
16:17
Firebird уг - имхо..
22 Зеленый Кот
 
24.01.12
16:20
вот министерство обороны сша не знает - оно им пользуется
23 el-gamberro
 
24.01.12
16:35
(22) Вот оно что. Теперь понятно кто виноват в проблеме (0)
24 DEVIce
 
24.01.12
17:17
(12). Версией сервера руля не я, приходится работать с тем что есть.
(13). Согласен, хрень какая-то, IBExpress почему-то не дает возможности запросы делать, кноки эти погашены.
(14). Да уже пересмотрел концепцию, теперь сортировка уже не нужна и плюс к этому выполняться модули будут на сервере, но вопрос остался интересным.
(15). Так и есть, было решено, что на север будут установлены дрова и доступ к серверу скуля. Опять же это не мой каприз - работаю с тем что есть.

И все же ближе к вопросу. Что же это могет быть, что элементарнейшую сортировку скуль делает только в идеальных условиях.
25 milan
 
24.01.12
17:25
ORDER BY 1
26 Diversus
 
24.01.12
17:28
Попробуй в IBExpert с базой этот запрос выполнить. Должен работать...
27 Diversus
 
24.01.12
17:32
(21) Нет FireBird не УГ это точно...
Сама СУБД достаточно мощная и многое может. По производительности тоже как бы все нормально. Видел даже программу, в которой ЖЭУ рассчитывает начисления за квартиры в городе с населением в 150 тыщ человек и кстати в качестве СУБД была FireBird. Так что не надо гнать...

А лучшего инструмента с базами чем IBExpert я вообще не видел и тот же MS SQL Server Managment Studio нервно курит в сторонке.
28 DGorgoN
 
24.01.12
17:37
(27) Я лично знаю что на пне-1 серверном у нас в электросбыте рассчитывается весь город и все подрядчики и субподрядчики это больше 700 000 контрагентов. База mysql. И чо собственно?
29 bizon2008
 
24.01.12
17:40
(21)если руки из жо..
30 bizon2008
 
24.01.12
17:42
(0)у тебя проблема не в запросе, в параметрах транзакций.
31 Diversus
 
24.01.12
17:43
(28) А то, что FireBird не УГ, это и значит
32 acsent
 
24.01.12
17:45
(28) майскл не уг стал только начиная с версии 5, а до этого даже транзакций не было
33 DEVIce
 
24.01.12
17:54
(25). Пробовал, ничего не меняется :)
(26). У меня какая-то странная версия, неактивны кнопки позволяющие запрос выполнить.
(30). Воооот, про это дело читал, но так и не понял как до этих параметров достучаться.
34 DEVIce
 
24.01.12
17:55
(30). В самом источнике данных, который и указывается в строке подключения, стоит READ и NOWAIT.
35 bizon2008
 
24.01.12
17:57
(34)Пиши как подключался.
36 DEVIce
 
24.01.12
17:58
(35). Да подключался просто :) DSN=SO2006
37 Jofa
 
24.01.12
18:01
СТроку подключения в студию
38 Jofa
 
24.01.12
18:02
Я тоже думал что птица не робит не фига а потом оказалась что руки не из того места растут ..)
39 Jofa
 
24.01.12
18:03
С "Птичка" рулит ! ! !
40 Torquader
 
24.01.12
18:45
Таки попробовать задать план выполнения запроса.
Кроме того, как можно выполнять запрос с сортировкой с конца, в режиме выборки сразу - всё равно надо сначала всё перебрать, а потом выполнять ORDER или нужно указывать, какой индекс можно использовать для ORDER, если, конечно, он есть.
Птичка, она совсем другая - она умеет то, что другие не умеют - и, соответственно, наоборот.
41 DEVIce
 
25.01.12
07:31
(37). Смотри (36). Настроен внешний источник данных.
(40). "Кроме того, как можно выполнять запрос с сортировкой с конца, в режиме выборки сразу - всё равно надо сначала всё перебрать" - ЧЕ? :)
42 Torquader
 
25.01.12
20:14
(41) Чтобы сервер мог выполнить сортировку, нужно, чтобы по этому полю был индекс и его можно было использовать в запросе - иначе запрос нужно выполнить до конца, чтобы потом можно было выполнить сортировку результата.
43 DEVIce
 
26.01.12
07:46
(42). Что значит "выполнить запрос до конца"? Да и какая мне разница, по индексу отсортируется или пройдет по всей таблице и отсортируется, ORDER BY команда древняя и почему на простейшем запросе у файрберда проблема с ней мне не понятно.
44 ЧеловекДуши
 
26.01.12
07:49
Эта птичка не летает, 1С куда приятней :)
45 smartu
 
26.01.12
08:07
а так?

(Invoices.InvN = '" + стрСчет + "' AND
 Invoices.DepNo = '" + стрОтдел + "')
46 smartu
 
26.01.12
08:08
суперокна ?
47 Torquader
 
26.01.12
17:28
(43) Птичка делает всё честно - для возможности сортировки требует буферизацию.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.