![]() |
![]() |
![]() |
|
Как получить строку коннекта к SQL через ADO? Ø |
☑ | ||
---|---|---|---|---|
0
Sl
01.03.05
✎
14:58
|
по разным соображениям не хочется прописывать строку явно в коде: надо переписывать при подключении к другой базе, безопасность...
|
|||
1
Дяпти
01.03.05
✎
15:02
|
с=СоздатьОбъект("DataLinks");
с.PromptEdit(Connect); СтрокаСоединенияСБазой=с.ConnectionString; |
|||
2
Денис2
01.03.05
✎
15:03
|
Function XOR(Val ParA, Val ParB)
Res = 0; Koef = 1; For BitNumber = 1 To 8 Do BitA = ParA % 2; BitB = ParB % 2; ParA = Int(ParA / 2); ParB = Int(ParB / 2); BitC = (BitA + BitB) % 2; Res = Res + BitC * Koef; Koef = Koef * 2; EndDo; Return Res; EndFunction //***** Procedure OnOpen() Var CurDir, SQLKeyCode[36], ConnectCode[200]; FilePath(CurDir); ConnectFile = IBDir() + "1Cv7.DBA"; If FS.ExistFile(ConnectFile) = 0 Then Message("Это не SQL - база!", "!"); Form.Close(); Return; EndIF; FSO = CreateObject("Scripting.FileSystemObject"); F = FSO.OpenTextFile(ConnectFile, 1); ConnectLen = 0; While F.AtEndOfLine = 0 Do ConnectLen = ConnectLen + 1; ConnectCode[ConnectLen] = Asc(F.Read(1)); EndDo; F.Close(); FSO = 0; SQLKey = "19465912879oiuxc ensdfaiuo3i73798kjl"; For i = 1 To 36 Do SQLKeyCode[i] = Asc(Сред(SQLKey, i, 1)); EndDo; Connect = ""; For i = 1 To ConnectLen Do Connect = Connect + Chr(XOR(ConnectCode[i], SQLKeyCode[(i - 1) % 36 + 1])); EndDo; Message(Connect); EndProcedure |
|||
3
Sl
01.03.05
✎
15:10
|
(1),(2) спасибо
только вот незадача, как в (1) получить "connect", а в (2) непонятно куда это прицепить в 1С :) |
|||
4
Дяпти
01.03.05
✎
15:12
|
Ой, не смотри ты на (1). Но если интересно, то надо вот так:
Connect=СоздатьОбъект("adodb.connection"); +(1) еще раз сорри за тупняк. |
|||
5
Денис2
01.03.05
✎
15:16
|
(3) Вообще-то это на языке 1с :-)) И цепляй куда надо :-)))))))))
|
|||
6
Sl
01.03.05
✎
15:21
|
(4) Вы меня наверно не так поняли,
у меня есть SQL-ные базы, рабочая, тестовые. мне хочется использовать прямые запросы через ADO для отчетов. чтоб соединится с SQL надо писать строку соединения, нельзя ли получить строку из текущего соединения 1С? может я что то неправильно говорю, я пока не силен в этом |
|||
7
Sl
01.03.05
✎
15:29
|
(6) :)
после Вашего кода я написал: Соединение = СоздатьОбъект("ADODB.Connection"); Попытка Соединение.Open(Connect); Предупреждение("ОК"); Исключение Предупреждение("Невозможно установить соединение"); Возврат; КонецПопытки; пишет что невозможно установить соединение, что то не так :( |
|||
8
Дяпти
01.03.05
✎
15:30
|
(5) Читать (2). Если это работает - это то, что тебе надо: дешифрует файл 1cv7.dba и выводит информацию о сервере, базе, логине и пароле, через которые работает 1С.
|
|||
9
Sl
01.03.05
✎
15:36
|
(8)
Connect=СоздатьОбъект("adodb.connection"); с=СоздатьОбъект("DataLinks"); с.PromptEdit(Connect); СтрокаСоединенияСБазой=с.ConnectionString; После с.PromptEdit(Connect); у меня вызывается некое диалоговое окно... :) а хотелось бы получить строку текущего соединения, но все равно спасибо, интересно |
|||
10
Gloom
01.03.05
✎
15:43
|
(7)
Connect=СтрЗаменить(Connect,"""},{""",";"); Connect=СтрЗаменить(Connect,"{{""",""); Connect=СтрЗаменить(Connect,"""}}",""); Connect=СтрЗаменить(Connect,""",""","="); Соединение = СоздатьОбъект("ADODB.Connection"); Попытка Соединение.Open("Driver=SQL Server;"+Connect); Предупреждение("ОК"); Исключение Предупреждение("Невозможно установить соединение"); Возврат; КонецПопытки; |
|||
11
Sl
01.03.05
✎
15:53
|
(10) В итоге получилась строка:
"Driver=SQL Server;Server=ps-3;DB=RTest;UID=Rob" не получается соединения, хоть ты тресни! может пароля не хватает? |
|||
12
dralex
01.03.05
✎
16:00
|
(11)Если проблемы со строкой соединения, тебе сюда: http://www.connectionstrings.com/
|
|||
13
Gloom
01.03.05
✎
16:10
|
(11)Значит (2) криво работает...
|
|||
14
Денис2
01.03.05
✎
16:16
|
(13) (2) придумал не я, кто-то прислал мне энту обработку...
Я обычно делаю так Сервер = ConSQL.GetParam(КаталогБазы,"server"); База = ConSQL.GetParam(КаталогБазы,"base"); Пользователь = ConSQL.GetParam(КаталогБазы,"uid"); Пароль = ConSQL.GetParam(КаталогБазы,"psw"); СтрСоединения=""""+ConSQL.GetConnectStr(КаталогБазы)+""""; используя ConnectSQL |
|||
15
Fynjy
01.03.05
✎
16:20
|
как вариант ...
Пуск-Настройка-ПУ Администрирование - Источники данных Files DSN создаем что надо и смотрим строку наш файлик |
|||
16
Sl
01.03.05
✎
16:24
|
(14) а что за объект ConSQL, если не секрет )?
|
|||
17
dralex
01.03.05
✎
16:25
|
Я тут что-то торможу. 1С подключается к SQL через ODBC? А в вопросе было - как подключиться через ADO? Ведь это не одно и тоже?
|
|||
18
Денис2
01.03.05
✎
16:29
|
(16)
Библиотека ConnectSQL. Описание. Библиотека предназначена для расшифровки файла-описания подключения к SQL-серверу 1Cv7.dba. Библиотека раелизует алгоритм программы unsql. Просто мне показалось несколько неудобным, что параметры возвращаются в виде файла, который будет лежать на диске, и к нему будет доступ всем желающим. Функция из этой библиотеки возвращает в строковом виде один из четырех параметров необходимых для соединения с SQL-сервером. (17) а ADO через ODBC сама работает :-))))))) |
|||
19
Sl
01.03.05
✎
16:31
|
(17) да, я спрашивал как получить строку для подключения через ADO, т.е. надо каким то образом из текущего подключения 1С получить сервер, базу, пользователя, пароль
|
|||
20
Sl
01.03.05
✎
16:34
|
(18) не подскажете где взять упомянутую библиотеку и подключить к 1С?
|
|||
21
dralex
01.03.05
✎
16:34
|
(18)Т.е. ты хочешь сказать, что ConnectionString для работы через ADO и для работы через ODBC - одна и та же?
|
|||
22
Денис2
01.03.05
✎
16:35
|
(20) могу прислать
(21) да |
|||
23
Sl
01.03.05
✎
16:38
|
(22) нашел) надо регистрировать( Получается надо регистрировать на всех машинах сети?
|
|||
24
dralex
01.03.05
✎
16:38
|
(19)Где посмотреть какая должна быть строка подключения я тебе написал в (12). Пользователь в 1С с точки зрения SQL - один. Он же является владельцем базы 1С (Data Base Owner - DBO). Очень часто это - sa.
|
|||
25
Денис2
01.03.05
✎
16:39
|
(23) А зачем? База на сервере? Вот там и регистри и запускай. Прописывай в константу (хоть каждые полчаса) :-)
|
|||
26
Sl
01.03.05
✎
16:47
|
(25) спасибо. но честно говоря как то не слишком удобно получается, надо заводить константу, заполнять, только после этого можно прописывать в отчетах и соединятся с сервером... как то извращенчески :)))
|
|||
27
Денис2
01.03.05
✎
16:49
|
(26) Все удобней, чем перелопачивать _все_ отчеты, в случае, если решитесь поставить на sa пароль, или вообще сделать trusted connection
|
|||
28
Gloom
01.03.05
✎
16:50
|
В принципе, можно и без ВК корректно dba распотрошить...
|
|||
30
Кочуров
02.03.05
✎
10:55
|
(2) Может работать некорректно, так как файл dba может после содержать нетекстовые символы и Scripting.FileSystemObject не отработает с ним. Скорее всего, это выразится в том, что файл прочитается на полностью.
То есть с dba надо работать как в двоичным файлом. |
|||
31
Sl
02.03.05
✎
11:01
|
(30) в моем случае именно так и произошло, пользователь обрезался, пароля вообще не было, нет ли у Вас более грамотного разбора файла dba из 1С?
|
|||
32
Кочуров
02.03.05
✎
11:05
|
(31) http://v7backup.narod.ru - исходник на VBS. Там есть расшифровка и разбор файла - все работает. Надо на 1С переписать.
Пользуясь случаем, выражаю признательность Gloom'у за помощь, которую он мне оказал при разработке этого куска. |
|||
33
fisher
02.03.05
✎
11:10
|
2(32) А как в 1С без ВК корректно прочитать двоичный файл?
|
|||
34
Sl
02.03.05
✎
11:11
|
мне это в ближайшее время не под силу (переписать на 1С тексты VBS).
Но все равно спасибо за участие:) |
|||
35
Кочуров
02.03.05
✎
11:17
|
2 (33) Да так же, как и на VB Script, наверно :)
|
|||
36
1cvirus
02.03.05
✎
11:29
|
ConnectString="Driver={SQL Server};Server=192.168.10.115;Database=sklad;Trusted_Connection=yes";
|
|||
37
fisher
02.03.05
✎
11:41
|
2(35) Понял. Наверное и (2) должно заработать без проблем, если переписать чтение dba через ADODB.Stream.
ЗЫ. Вообще говоря, даже не ясно что хуже с точки зрения безопасности (именно это упоминается в сабже) - наличие в коде в открытом виде секретной информации или алгоритма её расшифровки ;) |
|||
38
Gloom
02.03.05
✎
12:00
|
(37)
"Вообще говоря, даже не ясно что хуже с точки зрения безопасности ..." - "Эт, точно" © тов. Сухов ЗЫ. Чтобы (2) работало, надо одно слово исправить... |
|||
39
Sl
02.03.05
✎
12:12
|
(38) у меня не работает, если "Scripting.FileSystemObject"->"ADODB.Stream"
|
|||
40
Gloom
02.03.05
✎
12:14
|
(39)Я сказал одно слово, а у тебя два...
|
|||
41
Sl
02.03.05
✎
12:17
|
насчет безопасности, раз эта информация хранится в dba и ее можно расшифровать, причем в интернете есть готовые программы по расшифровке, это уже не секретная информация. для меня важно чтобы не надо было переписывать код при работе с разными базами.
|
|||
42
Sl
02.03.05
✎
12:22
|
(40) чтоже это за слово, не томи пжалста!)
|
|||
43
Sl
02.03.05
✎
13:58
|
похоже не судьба дождаться ответа)...
|
|||
44
Кочуров
02.03.05
✎
14:06
|
(43) Я верю, что Gloom ответит - он слов на ветер не бросает. Просто ему некогда, наверно - работа от участвия в форуме отвлекает или еще что...
|
|||
45
Sl
02.03.05
✎
14:14
|
Всем спасибо за участие, я нашел что хотел, кому интересно:
Function XOR(Val ParA, Val ParB) Res = 0; Koef = 1; For BitNumber = 1 To 8 Do BitA = ParA % 2; BitB = ParB % 2; ParA = Int(ParA / 2); ParB = Int(ParB / 2); BitC = (BitA + BitB) % 2; Res = Res + BitC * Koef; Koef = Koef * 2; EndDo; Return Res; EndFunction //***** Функция ПолучитьСтрокуСоединения() Var CurDir, SQLKeyCode[36], ConnectCode[200]; FilePath(CurDir); ConnectFile = IBDir() + "1Cv7.DBA"; If FS.ExistFile(ConnectFile) = 0 Then Сообщить("Это не SQL - база!", "!"); Return 0; EndIF; FSO = CreateObject("Scripting.FileSystemObject"); F = FSO.OpenTextFile(ConnectFile, 1); ConnectLen = 0; While F.AtEndOfStream = 0 Do While F.AtEndOfLine = 0 Do ConnectLen = ConnectLen + 1; ConnectCode[ConnectLen] = Asc(F.Read(1)); EndDo; If F.AtEndOfStream = 0 Then F.SkipLine(); ConnectLen = ConnectLen + 1; ConnectCode[ConnectLen] = 10; EndIf; EndDo; F.Close(); FSO = 0; SQLKey = "19465912879oiuxc ensdfaiuo3i73798kjl"; For i = 1 To 36 Do SQLKeyCode[i] = Asc(Сред(SQLKey, i, 1)); EndDo; Connect = ""; For i = 1 To ConnectLen Do Connect = Connect + Chr(XOR(ConnectCode[i], SQLKeyCode[(i - 1) % 36 + 1])); EndDo; Connect=СтрЗаменить(Connect,"""},{""",";"); Connect=СтрЗаменить(Connect,"{{""",""); Connect=СтрЗаменить(Connect,"""}}",""); Connect=СтрЗаменить(Connect,""",""","="); Возврат "Driver=SQL Server;"+Connect; КонецФункции //******************************************* Процедура Сформировать() стрКон=ПолучитьСтрокуСоединения(); Соединение = СоздатьОбъект("ADODB.Connection"); Соединение.ConnectionTimeOut=20; Соединение.CursorLocation=3; Попытка Соединение.Open(стрКон); Предупреждение("Удалось установить соединение"); Исключение Предупреждение("Невозможно установить соединение"); Возврат; КонецПопытки; КонецПроцедуры //******************************************* |
|||
46
Gloom
02.03.05
✎
14:19
|
(45)Молоток!
Правда, достаточно было в (2) AtEndOfLine на AtEndOfStream исправить... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |