Страница 1 из 1

Драйвер ODBC

Добавлено: 05 Октябрь 2009, 16:58
Алексей- Софт-Центр
Есть прога на С6, через ODBC общается с MySQL. Все работает.
Вопрос: Можно ли как-нибудь встроить драйвер ODBC в программу? ЧТобы не создавать источник ODBC, и т.д.

Спасибо за ответы)))

Re: Драйвер ODBC

Добавлено: 06 Октябрь 2009, 12:55
Andrew Listiev
Использовать connection string:

Например:

В описании файла OWNER(ConnectionString)

Код: Выделить всё

ConnectionString = 'Driver={{SQL Native Client}; Server=sql-server; Database=MyDB; Trusted_Connection=yes'

Re: Драйвер ODBC

Добавлено: 08 Октябрь 2009, 16:22
Алексей- Софт-Центр
Спасибо)
Буду пробовать.

Re: Драйвер ODBC

Добавлено: 08 Октябрь 2009, 16:43
George
Я попробовал. Все прекрасно работает.

Re: Драйвер ODBC

Добавлено: 09 Октябрь 2009, 14:13
БАИ
Во-первых здравствуйте. Я ,вообще говоря, начинающий программист, а в clarion тем более, но вот есть чем поделиться.

Также пользуюсь connection string-работает :). Но вообще-то я не об этом хочу рассказать.
У меня версия mysql 5.1, драйвер myodbc 5.1. Версия Сlarion 6.3 9059-хотя в данном вопросе это не важно-судя по форумам подобная проблема и у 1с ников есть.
Так вот, если в такой связке сделать некую базу данных, то первое во что выльется компиляция простого примера с доступом к текстовому полю-это gpf.Опытным путем было установлено, что приложение создается лишь при установке всех текстовых полей в мускуле в кодировку utf8.(Как вариант можно перегнать и всю базу в utf-тоже помогает). Однако при таком решении есть один минус- сортировка русских слов становится чуть более чем странной, тем не менее кракозябр нет, гпф пропадает. В драйвере myodbc 3 была возможность послать после подключения команду set names, которая решала все проблемы с кодировками, в myodbc 5 ее убрали, однако если в коннекшене прописывать самостоятельно, то вроде бы даже работает(можно добиться возвращения кракозябр :) ) Но проблемы сортировки это не решает. Конвертация базы в ср1251 и вписывание в коннекшн ср1251 возвращает гпф.

Довольно долго я с этим жил, а потом зачем-то(читайте "от безысходности") попробовал следующее:
Удалил свой коннекшн стринг, сделал самый "умолчательный" источник данных и сконвертил базу в дефолтный для мускуля чарсет latin1 и выставил коллейшн latin1_bin. Теперь в базе лежат кракозябры, но из клариона всё видно очень симпатично, сортировка заработала. (Вобщем это как бы первое решение проблемы подключения через myodbc 5- в инернетах глядел-люди просто советуют переходить на myodbc 3).
Собственно вопрос: есть ли такое решенеие, чтобы база оставалась в ср1251 или "это фантастика"?

Re: Драйвер ODBC

Добавлено: 09 Октябрь 2009, 15:46
kreator
А можно поподробнее об 'Driver={{SQL Native Client}'. Надо ставить SQL Native Client для определенного SQL сервака?

Re: Драйвер ODBC

Добавлено: 09 Октябрь 2009, 17:22
Andrew Listiev
Зависит от драйвера

например для MS SQL 2005 'Driver={{SQL Native Client}'
для MS SQL 2000 'Driver={{SQL Server}'

Re: Драйвер ODBC

Добавлено: 09 Октябрь 2009, 17:38
kreator
То есть драйвер ODBC все равно приходиться ставить?

Re: Драйвер ODBC

Добавлено: 09 Октябрь 2009, 18:38
Andrew Listiev
конечно

Re: Драйвер ODBC

Добавлено: 13 Октябрь 2009, 20:27
kreator
А вот бы обойтись без установки драйвера. Приходится обойти все компы. А если их 100? Поэтому прописать источник ODBC - это уже ерунда по времени.

Re: Драйвер ODBC

Добавлено: 14 Октябрь 2009, 10:31
Andrew Listiev
Если вы админ в сети, то можно использовать vbs-скрипт, который регистрирует необходимые ODBC. Вот например скрипт регистритующий ODBC запись MSSQL сервера:

В качестве аргумента имя машины, куда хотим поставить

Код: Выделить всё

On Error Resume Next
const HKEY_LOCAL_MACHINE = &H80000002

Set Registry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & WScript.Arguments(0) & "\root\default:StdRegProv")

Call CreateValue("SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources", "MySQLServer", "SQL Server")

DSNName = "SOFTWARE\ODBC\ODBC.INI\MySQLServer"
Call CreateKey  (DSNName)

Call CreateValue(DSNName, "Driver", GetSystemDirectory(WScript.Arguments(0)) & "\SQLSRV32.dll")
Call CreateValue(DSNName, "Server", "MySQLServer")
Call CreateValue(DSNName, "UseProcForPrepare", "0")
Call CreateValue(DSNName, "QuotedId", "No")
Call CreateValue(DSNName, "AnsiNPW", "No")
Call CreateValue(DSNName, "LastUser", "Rescue")
Call CreateValue(DSNName, "AutoTranslate", "No")

DSNName = "SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo"
Call CreateKey  (DSNName)
Call CreateValue(DSNName, "MySQLServer", "DBMSSOCN,MySQLServer,1433")

Sub CreateValue(KeyPath, ValueName, Value)
   Return = Registry.SetStringValue(HKEY_LOCAL_MACHINE, KeyPath, ValueName, Value)
   If (Return <> 0) And (Err.Number <> 0) Then 
       WriteOutput("SetValue failed. Error = " & Err.Number & " Key: " & Keypath & " Name: " & ValueName & " Value: " & Value)
   End If
End Sub 

Sub CreateKey(KeyPath)
   Return = Registry.CreateKey(HKEY_LOCAL_MACHINE, KeyPath)
   If (Return <> 0) And (Err.Number <> 0) Then 
       WriteOutput("SetValue failed. Error = " & Err.Number & " Key: " & Keypath)
   End If
End Sub 

Function GetSystemDirectory(Computer)
   Set objWMIService = GetObject("winmgmts:\\" & Computer & "\root\CIMV2")
   Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem")
   For Each objItem In colItems
      GetSystemDirectory = objItem.SystemDirectory
   Next
End Function

Sub WriteOutput(InputString)
  Dim FileSystemObject, OutputFile
  Set FileSystemObject = CreateObject("Scripting.FileSystemObject")
  Set OutputFile = FileSystemObject.OpenTextFile("Install.log", ForAppending, True)
  OutputFile.WriteLine Date & " - " & Time & ": " & InputString
  OutputFile.Close
End Sub
Ну и как вариант могу предложить использовать ADO, но придется переписывать приложение.

Re: Драйвер ODBC

Добавлено: 14 Октябрь 2009, 13:00
StillZero
апример для MS SQL 2005 'Driver={{SQL Native Client}'
для MS SQL 2000 'Driver={{SQL Server}'
можно для 2005 и 2008 писать Driver={{SQL Server}

Re: Драйвер ODBC

Добавлено: 14 Октябрь 2009, 17:01
Алексей- Софт-Центр
Вопрос изначально звучал в смысле : как НЕ устанавливая ODBC на комп , работать с MySql.
Задача тревиальная - есть прога, лежащая на сайте, которую скачивает и запускает пользователь.
Для ее решения и ставился вопрос. Собственно вывод: невозможно?

Для БАИ : С 5-м драйвером тоже не сраслось, поэтому спокойно использую 3. Там есть где определить set names... :)