|
v7: Регистр букв в прямом запросе. | ☑ | ||
---|---|---|---|---|
0
Andreyyy
30.03.15
✎
15:24
|
Есть запрос:
ТекстЗапроса = " |select DISTINCT |$СпрТовары." + Реквизит + " as [Артикул] |from $Справочник.Товары as СпрТовары"; Если Поставщик.ТекущаяСтрока() <> 1 Тогда ВыбПоставщик = Поставщик.ПолучитьЗначение(Поставщик.ТекущаяСтрока()); ТекстЗапроса = ТекстЗапроса + " |WHERE |СпрТовары.ParentExt = :ВыбПоставщик"; КонецЕсли; RecordSet.УстановитьТекстовыйПараметр("ВыбПоставщик", ВыбПоставщик); RecordSet.SetDatabase(DataBase); RecordSet.Отладка(0); Если RecordSet.Открыть(ТекстЗапроса) = 0 Тогда Ошибка = RecordSet.ПолучитьОписаниеОшибки(); Если ПустоеЗначение(Ошибка) = 0 Тогда Сообщить(Ошибка); КонецЕсли; КонецЕсли; RecordSet.ПолучитьРезультатыВ_ТЗ(ТаблицаАртикулов, 1); Если есть товары с артикулами "ТРУСЫ" и "Трусы", то попадают в таблицу только "Трусы". Можно как-то еще "ТРУСЫ" достать ? |
|||
1
kosts
30.03.15
✎
15:25
|
Попробуй использовать Подобно.
|
|||
2
Ёпрст
30.03.15
✎
15:26
|
А где в этом запросе условие на артикул ?
И где ты видишь, что попадает не всё ? |
|||
3
Salimbek
30.03.15
✎
15:27
|
(0) А как к базе подключаешься? И откуда эта база взялась? Коллейшн на ней правильный стоит?
|
|||
4
Ёпрст
30.03.15
✎
15:27
|
А вообще, товары подчиненные поставщику...это зачет.
|
|||
5
Salimbek
30.03.15
✎
15:29
|
(2) А... внимательней посмотрел - дык все правильно, база запускается с игнорированием регистра букв. В том числе это значит, что Трусы и ТРУСЫ для базы - одно и то же, вот оно тебе Дистинктом и сворачивает их в одно
|
|||
6
Ёпрст
30.03.15
✎
15:34
|
(5) ага точняк..
|
|||
7
Salimbek
30.03.15
✎
15:36
|
+(5) У меня была подобная задачка, но только с одним символом (КодОперации), решил через Группировку по коду символа. Тут задача аналогичная - надо получить небуквенный идентификатор. Для SQL2005 можно попробовать решить через CHECKSUM($СпрТовары." + Реквизит + " )
|
|||
8
Ёпрст
30.03.15
✎
15:38
|
ну.. тут то проще, просто получить id справочника в запросе
|
|||
9
Andreyyy
30.03.15
✎
15:38
|
(1) Вместо "DISTINCT" так и написать "ПОДОБНО" ?
(2) В итоговой таблице вижу. (3) DataBase = СоздатьОбъект("ODBCDatabase"); RecordSet = СоздатьОбъект("ODBCRecordset"); Путь = КаталогИБ(); Состояние("Подключаемся к базе данных"); Рез = DataBase.Соединение("DRIVER=Microsoft Visual FoxPro Driver;Deleted=Yes;Null=Yes;Collate=RUSSIAN;BackgroundFetch=Yes;Exclusive=No;SourceType=DBF;SourceDB=" + Путь); (4) 10 лет назад казалось хорошей идеей) (3) Как запустить без игнорирования ? (если вообще возможно) |
|||
10
Andreyyy
30.03.15
✎
15:45
|
(8) Можно для чайников разжевать ?
|
|||
11
Ёпрст
30.03.15
✎
15:47
|
(10)
|select DISTINCT |СпрТовары.id [Элементик $Справочник.Товары], |$СпрТовары." + Реквизит + " as [Артикул] |from $Справочник.Товары as СпрТовары"; |
|||
12
Andreyyy
30.03.15
✎
16:05
|
(11) Может еще смекалку нужно было проявить, но:
State 42S22, native 806, message [Microsoft][ODBC Visual FoxPro Driver]SQL: Column 'ЭЛЕМЕНТИК_1C_TYPE_СПРАВОЧНИК_1C_DOT_ТОВАРЫ' is not found. |
|||
13
Salimbek
30.03.15
✎
16:06
|
(11) Дык, оно же все равно свернет все МаЛость отличающиеся реквизиты у одного элемента и не свернет 100% одинаковые реквизиты по разным элементам.
|
|||
14
Andreyyy
30.03.15
✎
16:14
|
(13) Вариант (7) только для SQL ? У меня без вариантов ?
|
|||
15
Ёпрст
30.03.15
✎
16:18
|
(12) запрос к левой базе что ле ?
Ну выкини типизацию, сделай просто |select DISTINCT |СпрТовары.id , |$СпрТовары." + Реквизит + " as [Артикул] |from $Справочник.Товары as СпрТовары"; |
|||
16
Ёпрст
30.03.15
✎
16:18
|
хотя не пойдет.. тебе же разные артикулы нужны.. а тут тебе всех выдаст, вообще.
|
|||
17
Ёпрст
30.03.15
✎
16:25
|
Так спробуй
|select DISTINCT |$СпрТовары." + Реквизит + " Collate Cyrillic_General_CS_AS as [Артикул] |from $Справочник.Товары as СпрТовары"; |
|||
18
Andreyyy
30.03.15
✎
16:35
|
State 42000, native 219, message [Microsoft][ODBC Visual FoxPro Driver]Command contains unrecognized phrase/keyword.
|
|||
19
Andreyyy
30.03.15
✎
16:35
|
(18) к (17)
|
|||
20
Salimbek
30.03.15
✎
16:36
|
(18) Поставь драйвер оледб 9-й
|
|||
21
Andreyyy
30.03.15
✎
16:37
|
(20) Страшно, как бы не сломать. Можно правильную ссылку ?
Строка подключения поменяется ? |
|||
22
Andreyyy
30.03.15
✎
16:37
|
ОС Server 2003
|
|||
23
Andreyyy
30.03.15
✎
16:37
|
x32
|
|||
24
Ёпрст
30.03.15
✎
16:38
|
(18) к какой базе подключаешься ? к дбф что ле ?
|
|||
25
Andreyyy
30.03.15
✎
16:39
|
(24) Да.
|
|||
26
Ёпрст
30.03.15
✎
16:39
|
:))
|
|||
27
Andreyyy
30.03.15
✎
16:39
|
||||
28
Andreyyy
30.03.15
✎
16:40
|
(26) Типа бесполезно ?
|
|||
29
Ёпрст
30.03.15
✎
16:40
|
заместо odbc рекомендовано использовать oledb
|
|||
30
Ёпрст
30.03.15
✎
16:40
|
это для начала
|
|||
31
Andreyyy
30.03.15
✎
16:41
|
(29) Я не осилю запрос переписать)))) Что нашел на просторах, то и впилил.
|
|||
32
Salimbek
30.03.15
✎
16:41
|
(29) Кстати да...
|
|||
33
Salimbek
30.03.15
✎
16:43
|
(31) Драйвер ODBC просто древнейший и с кучей ошибок и тормозов. Обновлялся у мелкософтов только OLE DB.
|
|||
34
Andreyyy
30.03.15
✎
16:44
|
Подскажите какие мануалы читать, начиная с подключения, заканчивая запросом ?
|
|||
35
Andreyyy
30.03.15
✎
16:52
|
Оно ? ADODBConn = CreateObject("ADODB.Connection");
ConnectString = " |Provider=VFPOLEDB.1; |Deleted=-1; |Null = Yes; |Exclusive = No; |SourceType = DBF; |Data Source=D:\LeOV\_Bases1C_\TIS\DemoDB; |Mode=ReadWrite; |Extended Properties=""""; |User ID=""""; |Password=""""; |Mask Password=False; |Collating Sequence=MACHINE; |DSN="""""; ADODBConn.ConnectionString = ConnectString; ADODBConn.Open(); Для i=0 по ADODBConn.Properties().Count-1 Цикл Сообщить(СокрЛП(i)+" | Property.Name: " + ADODBConn.Properties(i).Name+ "| Property.Type: " + ADODBConn.Properties(i).Type); Если ADODBConn.Properties(i).Type = 19 Тогда //Сообщить("Property.Value: " + СокрЛП(ADODBConn.Properties(i).Value)); Сообщить("Property.Attributes: " + Число(ADODBConn.Properties(i).Attributes)); Иначе Сообщить("Property.Value: " + ADODBConn.Properties(i).Value); Сообщить("Property.Attributes: " + ADODBConn.Properties(i).Attributes); КонецЕсли; КонецЦикла; ADODBConn.Close(); ADODBConn = 0; Вместо юзерID и пассворд указать логин и пароль к базе ? Или так надо, что пусто. |
|||
36
Salimbek
30.03.15
✎
16:53
|
(35) Жуть какая...
|
|||
37
Ёпрст
30.03.15
✎
16:53
|
Сам провайдер:
http://www.microsoft.com/downloads/details.aspx?FamilyId=E1A87D8F-2D58-491F-A0FA-95A3289C5FD4&displaylang=en подключение: ОлеДБ = СоздатьОбъект("OLEDBData"); Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Collating Sequence=MACHINE"; Рез = ОлеДБ.Соединение(Соединение); Запрос = ОлеДБ.СоздатьКоманду(); Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')"); Запрос.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')"); Запрос.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')"); Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')"); |
|||
38
Salimbek
30.03.15
✎
16:55
|
Еще полезно почитать: http://www.1cpp.ru/forum/YaBB.pl?num=1148038411/24#24
|
|||
39
Andreyyy
30.03.15
✎
16:57
|
Спасибо, буду разбираться.
|
|||
40
Ёпрст
30.03.15
✎
16:57
|
+ сам запрос будет как в (0)..
будет регистрозависимым.. |
|||
41
Ёпрст
30.03.15
✎
16:58
|
ну и выполнение -
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); ТЗ.ВыбратьСтроку() |
|||
42
Andreyyy
30.03.15
✎
17:18
|
Работает !
|
|||
43
Ёпрст
30.03.15
✎
17:19
|
аминь
|
|||
44
varelchik
31.03.15
✎
09:42
|
(42)Еще бы!
Чтоб у Ёпрст не работало... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |