Имя: Пароль:
1C
1С v8
Загрузка из SQL
0 Solveig
 
17.06.14
09:31
Подключаюсь к базе SQL.
ПодключениеКБД = Новый COMОбъект("ADODB.Connection");
ПодключениеКБД.ConnectionString = "Provider=sqloledb;Server=***;UID=***;PWD=***;";
ПодключениеКБД.ConnectionTimeOut = 2400;
ПодключениеКБД.CursorLocation = 3;
ПодключениеКБД.Open();

При загрузке значений полей таблицы результата запроса, вместо русских символов выводятся "вопросики".
Подскажите, пожалуйста, как победить?
1 mehfk
 
17.06.14
09:32
2 Solveig
 
17.06.14
09:43
(1) Написал ПодключениеКБД.ConnectionString = "Provider=sqloledb;Server=***;UID=***;PWD=***;charset=windows-1251"; не помогает.
ПодключениеКБД.ConnectionString = "Provider=sqloledb;Server=***;UID=***;PWD=***;charset=cyrillic"; тоже.
3 Maxus43
 
17.06.14
09:48
а в базе скл какая кодировка у БД?
4 Solveig
 
17.06.14
09:55
(3) Там есть свойство язык, указан английский
5 Maxus43
 
17.06.14
09:56
(4) там есть ещё и кодировка
6 shuhard
 
17.06.14
09:57
(2) Charset is used only with text Stream objects
ни на какие мысли не наводит ?
7 Solveig
 
17.06.14
09:57
(5) Server Collation = Cyrillic_General_CI_AS
8 Solveig
 
17.06.14
09:58
(6) Нет, я 1С-ник, а не SQL-щик )
9 shuhard
 
17.06.14
10:00
(8) повторим вопрос
где код которым из рекордсета извлекаются данные в 1С ?
10 Solveig
 
17.06.14
10:04
(9) ПодключениеКБД = Новый COMОбъект("ADODB.Connection");
    ПодключениеКБД.ConnectionString = "Provider=sqloledb;Server=***;UID=***;PWD=***";
    ПодключениеКБД.ConnectionTimeOut = 2400;
    ПодключениеКБД.CursorLocation = 3;
    ПодключениеКБД.Open();
    Команда  = Новый COMОбъект("ADODB.Command");
    Команда.ActiveConnection = ПодключениеКБД;
    Команда.CommandText = "SELECT тудым-сюдым";
    Результат = Команда.Execute();
11 Solveig
 
17.06.14
10:05
(9) Пока НЕ Результат.EOF() Цикл
    Артикул = Результат.Fields("Artikul_Artikul").Value;
12 Woldemar177
 
17.06.14
10:16
Чисто интересно SQL то какой? MS SQL, Postgresql или Firebird?
13 Solveig
 
17.06.14
10:18
(12) MS 2012
14 fresh_meat
 
17.06.14
10:24
Было подобно при подключении к базе oracle, установка Numeric settings в значение "Use Microsoft regional settings", в настройке DSN помогла.
15 fresh_meat
 
17.06.14
10:24
подобное
16 Solveig
 
17.06.14
12:48
Ап
17 Woldemar177
 
17.06.14
12:49
charset=UTF8
???
18 Woldemar177
 
17.06.14
12:52
+(4) так может они и в базе хранятся в виде вопросиков - если указан английский?
19 Solveig
 
17.06.14
12:57
(17) То же самое
20 Solveig
 
17.06.14
13:01
(9) Я код выложил, посмотри, пожалуйста
21 МихаилМ
 
17.06.14
13:10
(20)
в ssms что возвращает запрос.
22 shuhard
 
17.06.14
13:11
(20) а какая буква не понятна ?
Charset is used only with text Stream objects
23 Solveig
 
17.06.14
13:12
(21) В Query Analyzere все нормально выводиться - на русском.
24 Solveig
 
17.06.14
13:14
(22) Я не понимаю, что такое Stream. Подскажи, пожалуйста, конкретно, что мне нужно написать.
25 shuhard
 
17.06.14
13:15
(24) гугл
26 МихаилМ
 
17.06.14
13:15
(23)
Вы используете Query Analyzer (от ms sql 6,..,2000)

для работы с ms sql 2012 ? я удивлен.
27 Solveig
 
17.06.14
13:17
(26) Нет, SSMS 2012, но смысл от этого не меняется, там на русском выводится.
28 МихаилМ
 
17.06.14
13:18
+(26)
а я думал , что QA не заработает с ms sql 2012 тк он использует CDO, а  ms sql 2012 cdo не поддерживает.
29 Solveig
 
17.06.14
13:18
(25) Это в первую очередь я смотрел. Ты ведь просил код выложить для чего-то...
30 МихаилМ
 
17.06.14
13:26
31 МихаилМ
 
17.06.14
13:33
32 Solveig
 
17.06.14
13:50
(31) И куда мне VALUES(N'имя') вставить? У меня в запросе данные из таблиц SQL берутся.
33 МихаилМ
 
17.06.14
14:06
(32)
да. не досматрел. там про вставку .

поиграйтесь с COLLATE

http://msdn.microsoft.com/ru-ru/library/ms143726.aspx#Locale_Defn

опять же непонятно почему Вы используете CursorLocation = 3 ?
хотя это врадли повлияет на client charset = 3
34 Solveig
 
17.06.14
14:27
(33) Пробовал ставить для поля COLLATE Cyrillic_General_CI_AS тоже не помогает, но и на этом спасибо
35 МихаилМ
 
17.06.14
14:43
(34)
что значит "ставить" ?
36 Solveig
 
17.06.14
14:45
(35) SELECT Table.Name OLLATE Cyrillic_General_CI_AS AS Name FROM Table
37 МихаилМ
 
17.06.14
14:52
(0)
попробуйте поиграться

с charset в ConnectionString
или

поменять sqloledb на sqloledb.1

ну и  CursorLocation = 3 уберите
38 МихаилМ
 
17.06.14
15:08
39 Solveig
 
17.06.14
15:21
(38) Это ведь для MySql, в 1С особо не разгуляешься
40 РенеДекарт
 
17.06.14
15:27
(39) там для SQL2000.
41 Serginio1
 
17.06.14
16:23
Попробуй такую строку подключения

ConnectionString ="DRIVER=SQL Server;
|UID=администратор;
|Network=DBMSSOCN;
|LANGUAGE=русский;
|DATABASE="+ДанныеСервера.Ref+";
|WSID="+ДанныеСервера.Srvr+";
|APP=Microsoft® Windows® Operating System;
|Trusted_Connection=Yes;
|SERVER="+ДанныеСервера.Srvr;
42 МихаилМ
 
17.06.14
16:28
+(41)

тоже решение. но это драйвер odbc
43 Serginio1
 
17.06.14
16:40
44 Solveig
 
18.06.14
09:50
(41) Попробовал
ПодключениеКБД = Новый COMОбъект("ADODB.Connection");
ПодключениеКБД.ConnectionString =
"DRIVER=SQL Server;
|UID=***;
|PWD=***;
|Network=DBMSSOCN;
|LANGUAGE=русский;
|WSID=basa;
|APP=Microsoft® Windows® Operating System;
|Trusted_Connection=Yes;
|SERVER=***;";
ПодключениеКБД.ConnectionTimeOut = 2400;
ПодключениеКБД.CursorLocation = 3;
ПодключениеКБД.Open();

На последней строчке "виснет 1С" и все.
45 Ёпрст
 
18.06.14
10:09
(44) выкинь вот это
ПодключениеКБД.ConnectionTimeOut = 2400;
ПодключениеКБД.CursorLocation = 3;
46 Ёпрст
 
18.06.14
10:11
Так хоть соединяется ?
СоединениеБазы = Новый COMОбъект("ADODB.Connection");
driver="SQL Server";
server="192.168....";
login="sa";
password="вася";
base="база васи";
ConnectionString = "driver={"+driver+"}; Server="+server+"; uid="+login+"; Pwd="+password+"; Database ="+base+";";
СоединениеБазы.Open(ConnectionString);
47 Solveig
 
18.06.14
10:17
(45) То же самое
(46) Соединяется
48 Ёпрст
 
18.06.14
10:19
(47) и запрос возвращает кракозябры при этом ?
49 Solveig
 
18.06.14
10:27
(48) Да
50 Ёпрст
 
18.06.14
10:29
(49) перед запросом, попробуй воткнуть
SET LANGUAGE Russian;
51 МихаилМ
 
18.06.14
10:35
(50)
спасибо . не знал.
52 МихаилМ
 
18.06.14
10:37
53 Ёпрст
 
18.06.14
10:38
(52) ага, это для даты и прочей фигни
54 Solveig
 
18.06.14
10:39
(50) Не помогает
55 К_Дач
 
18.06.14
10:46
когда ставили сервер скуль, какие региональные настройки были?

скрипт смены языковых настроек

USE [master]

GO

ALTER LOGIN [sa] WITH DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

GO
56 Solveig
 
18.06.14
10:49
(55) Там был указан язык английский.
Но в самой базе SQL ведь русский нормально отображается...
57 Ёпрст
 
18.06.14
10:55
а так ?

ConnectionString = "driver={"+driver+"}; Server="+server+"; uid="+login+"; Pwd="+password+"; Database ="+base+";CharSet=cp1251";
58 РенеДекарт
 
18.06.14
10:59
(57) может ему, для начала, базу SQL с типовыми настройками поставить? А потом уже колупаться.
59 Ёпрст
 
18.06.14
11:02
(58)это слишком просто
60 Solveig
 
18.06.14
12:07
(57) То же самое
61 Solveig
 
18.06.14
12:11
При получении результата, у поля есть свойства Результат.Fields("Kassir").Properties.
Среди них есть "COLLATINGSEQUENCE" со значением 1 049, а надо, как я понимаю, 1251. Только напрямую оно не меняется, надо либо при подключении к базе либо при выполнении ADO.Command использовать, только как...
62 mxs089
 
18.06.14
14:25
почему не через внешний источник?
63 Solveig
 
18.06.14
16:02
А кто его знает, попробую значит через внешний источник :)
64 Solveig
 
07.07.14
11:00
(62) Через внешний источник на русском выводятся поля корректно.