Имя: Пароль:
1C
1C 7.7
v7: Самая длинная строка в таблице значений
0 DCKiller
 
16.11.11
11:35
Имеется таблица значений, полученная в результате выполнения прямого запроса к некоторому справочнику, и содержащая значения всех реквизитов этого справочника (база SQL, так что строки неогр. длины тоже будут тут же). Вопрос: можно ли как-то среди этих самых строк в одной колонке определить самую длинную, без перебора строк ТЗ, или нет?
1 Ёпрст
 
гуру
16.11.11
11:38
можно. В самом прямом запросе.
2 SnarkHunter
 
16.11.11
11:38
Возможно.
3 DCKiller
 
16.11.11
11:39
(1) что за функция?
4 DCKiller
 
16.11.11
11:39
+3 или скрипт на скуле ваять
5 Origin
 
16.11.11
11:40
в запросе, 2 источника, и сравнение строк по длине
6 Origin
 
16.11.11
11:41
таблицу саму с собой сравнивай
7 Ёпрст
 
гуру
16.11.11
11:41
(3) LEN ( string_expression )
8 Ёпрст
 
гуру
16.11.11
11:41
+7 ну и + Max и привет.
9 SnarkHunter
 
16.11.11
11:46
(5)Месье знает толк в извращениях...
10 DCKiller
 
16.11.11
12:00
(7), (8) спс, нашел уже.
11 DCKiller
 
16.11.11
12:16
Почему ругается 'Argument data type text is invalid for argument 1 of len function'?

Из-за того, что строка пустая?
12 skunk
 
16.11.11
12:19
Datalength()
13 DCKiller
 
16.11.11
12:21
(12) Неожиданно! Сэнкс...
14 Mikeware
 
16.11.11
12:34
(13) открой для себя BOL
15 skunk
 
16.11.11
12:50
16 DCKiller
 
16.11.11
13:06
(14) Открывал, там про эту функцию почему-то ни слова.
17 Ёпрст
 
гуру
16.11.11
13:07
18 trad
 
16.11.11
13:14
(8)
т.к. определить нужно не длину самой длинной строки, а саму строку,
то нужно не max(), а top 1 и order by
19 Ёпрст
 
гуру
16.11.11
13:17
(18) Да ? хз, я понял как именно длину..
:(
С тобой на бентли не насобираешь
20 DCKiller
 
16.11.11
13:26
(18) Вообще-то нужно было узнать именно длину самой длинной строки :) Возможно, я в топике не совсем понятно выразился. Тем не менее, тоже спасибо за совет.
21 trad
 
16.11.11
13:57
вот так вот часто.
один спрашивает не то что спросить хотел.
другой отвечает не то что спрашивали.
... так и живем :(
22 trad
 
16.11.11
13:57
минус на минус = плюс
23 DCKiller
 
18.11.11
09:10
Теперь возник такой вопрос. И опять-таки про длину строк...

В базе1 делается запрос к таблице _1SConst, результаты которого выгружаются в ТЗ.
Затем производится прямое подключение к базе2, создается еще один объект типа ODBCRecordSet "Запрос1" для записи данных в нее.

Идет создание и подготовка ВТ:

ТекстЗапросаСоздатьТаблицу = "CREATE TABLE #TConst(OBJID char(9), ID int, DATE datetime, VALUE varchar(255), DOCID char(9), TIME int, ACTNO int, LINENO_ int, TVALUE char(3))";
Рез = Запрос1.Выполнить(ТекстЗапросаСоздатьТаблицу);
ТекстЗапросаПодготовить = "INSERT INTO #TConst(OBJID, ID, DATE, VALUE, DOCID, TIME, ACTNO, LINENO_, TVALUE) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)"
Рез = Запрос1.Подготовить(ТекстЗапросаПодготовить);

Обе команды выполняются успешно, и в первом, и во втором случае Рез = 1.
НО! Когда идет выполнение    

Запрос1.ВыполнитьSQL_ИзТЗ(РезультатЗапроса);

Вываливается ошибка "Усечение данных строки справа".

Что за глюк?
24 Ёпрст
 
гуру
18.11.11
09:34
разве что номер строки имеет тип tinyint
25 Ёпрст
 
гуру
18.11.11
09:36
или smallint, не помню ужо
26 DCKiller
 
18.11.11
09:36
(24) Думаешь, дело в нем? SQL 2000 этот тип понимает?
27 DCKiller
 
18.11.11
09:37
(25) нет, tinyint
28 Ёпрст
 
гуру
18.11.11
09:40
и это, нафига тебе 2 запроса, когда надо всё делать в одном !
Без выгрузки ТЗ.
Если че.
29 DCKiller
 
18.11.11
10:01
(28) Даже если данные выбираются из одной базы, а записываются в другую?!
30 Ёпрст
 
гуру
18.11.11
10:05
(29) ну да.
31 DCKiller
 
18.11.11
10:07
(30) Ну покажи, как это в одном сделать. Или в запросах 1С++ есть что-то вроде восьмерочных пакетов?
32 Mikeware
 
18.11.11
10:08
(31) Это стандартная возможность SQL.
33 DCKiller
 
18.11.11
10:10
(32) Как он поймет, что таблица _1SConst, в которую производится запись - это таблица базы2, а не базы1, если все делаться будет одним запросом?
34 Ёпрст
 
гуру
18.11.11
10:12
(33) :)))
в тексте запроса укажешь имя базы схему и нужную табличку в ней.
35 DCKiller
 
18.11.11
10:14
(34) Это как "[Database2].[dbo]._1SConst"? не?
36 Ёпрст
 
гуру
18.11.11
10:15
догадливый
37 DCKiller
 
18.11.11
10:15
(36) :)))
38 DCKiller
 
18.11.11
10:16
(36) И тогда проблема усечения строки отпадет?
39 Ёпрст
 
гуру
18.11.11
10:16
мот еще правда прилинковать сервак придется
40 Ёпрст
 
гуру
18.11.11
10:16
(38) да
41 DCKiller
 
18.11.11
10:16
(39) Сервер один и тот же
42 Ёпрст
 
гуру
18.11.11
10:18
тока лучше вообще DTS использовать
43 Ёпрст
 
гуру
18.11.11
10:19
(41) тем проще.
44 DCKiller
 
18.11.11
10:19
(42) Где почитать?
45 Ёпрст
 
гуру
18.11.11
10:25
46 DCKiller
 
18.11.11
10:31
(45) Благодарю, посмотрим :)
47 DCKiller
 
18.11.11
10:48
А вот еще вопрос: как в файловой базе с помощью 1С++ таким же образом переносить данные? Многие SQL-фишки тут уже не прокатят, по типу тех, о которых шла сейчас речь. Или может, лучше будет АДО использовать?
48 Ёпрст
 
гуру
18.11.11
12:26
(47) всё тоже самое, используешь фоксовый провайдер и привет..
Те же запросы к любым базам в 1 запросе. Те же update\insert
49 DCKiller
 
18.11.11
13:22
(48) ну там я так понял, диалект другой несколько?
50 Ёпрст
 
гуру
18.11.11
13:23
(49) синтаксис немного другой. и всё.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший