Есть БД SQL Server, название полей в которой заданы на Шведском языке. Когда в EXCEL формирую запрос к этой базе данных, то в зависимости от кодировки системы запрос либо обрабатывается или нет. На компьютерах пользователей используется и русская и английская кодировка системы. Как запрос сделать универсальным - не зависимым от кодировки системы. Пример что во что превращается на скрепке.
Запрос к полям БД SQL Server при разных кодироках систем.
05.01.2012 14:01:49
|
|
|
|
05.01.2012 18:25:42
Было бы замечательно загнать название полей в массив зная логику последовательности запонения (по алфавиту, индексу или пр.) массива.
|
|
|
|
05.01.2012 18:38:29
{quote}{login=kls}{date=05.01.2012 06:25}{thema=}{post}Было бы замечательно загнать название полей в массив зная логику последовательности запонения (по алфавиту, индексу или пр.) массива.{/post}{/quote}
Ну так загоняйте с помощью ADO: arrData = rs.GetRows
KL
|
|
|
|
05.01.2012 18:44:34
Вот тут примеры использования ADO, если что:
Ole P. Erlandsen's Web Site Ron de Bruin Ron de Bruin
KL
|
|
|
|
05.01.2012 18:45:34
Кирилл, добрый день или вечер :)
Так он может recordset в массив загнать, а он же, не может его открыть, так как SQL синтаксис не верный. --------------------- Как еще один вариант можно прописывать через код символа, хотя и не уверен что это поможет :(
|
|||
|
|
05.01.2012 18:49:43
{quote}{login=R Dmitry}{date=05.01.2012 06:45}{thema=}{post}Кирилл, добрый день или вечер :)
Так он может recordset в массив загнать, а он же, не может его открыть, так как SQL синтаксис не верный. --------------------- Как еще один вариант можно прописывать через код символа, хотя и не уверен что это поможет :({/post}{/quote} Почему не сможет? А SELECT * FROM на что? Другое дело - если база дюже большая, то тяжко будет.
KL
|
|
|
|
05.01.2012 18:57:41
Теоретически, еще можно попробовать
HDR=No и потом SELECT F1, F3, F10 FROM ... но боюсь, что если и сработает, то тип данных будет везде стринг (лишнюю строку потом отфильтровать - не проблема).
KL
|
|
|
|
05.01.2012 19:00:20
Ну да если таблица одна а если много.... и большие...
все же наверное лучший вариант положить VIEW
|
|||
|
|
05.01.2012 19:04:26
{quote}{login=R Dmitry}{date=05.01.2012 07:00}{thema=}{post}Ну да если таблица одна а если много.... и большие...
все же наверное лучший вариант положить VIEW{/post}{/quote} Ну да, это если ты дружишь с DB админом :)
KL
|
|
|
|
06.01.2012 10:32:10
{quote}{login=R Dmitry}{date=05.01.2012 07:00}{thema=}{post}Ну да если таблица одна а если много.... и большие...
все же наверное лучший вариант положить VIEW{/post}{/quote} Спасибо всем за ответы - буду пробывать после праздников - надо добро у вышестоящих получить на VIEW - не я администрирую БД. Основная таблица БД с которой работаю - около 50 тыс. записей и 90 столбцов, из которых использую около 10. Хорошо что название этой таблицы без шведских букв :), хотя есть и такие. Остальные таблицы поменьше. Есть правда еще одно обращение к другой БД - там несколько миллионов записей, но 3 столбца и название по стандарту - проблем не возникает. Кроме того у меня еще задача, чтоб весь код не занимал много времени на обработку. Сейчас до 3 секунд в зависимости от ПК, максимум что можно позволить до 5-6 секунд. |
|
|
|
06.01.2012 10:53:08
Думал еще попробовать, как вариант, номера символов в названии полей БД вычислить и найти закономерность смещения номеров в зависимости от кодировки, но не хочется городить - ищу более "красивые" решения.
|
|
|
|
06.01.2012 15:30:47
Попробовал через Recordset:
Сделал запрос SELECT * FROM dbo.XXXXXXX WHERE (1 = 0) ... Потом из этого запроса получаю названия полей Set FirstRecordset.Source = FirstCmd FirstRecordset.Open For Each fld In FirstRecordset.Fields Debug.Print fld.Name Next Постоянно разная очередность и название коверкает, похоже но не то, например, вот так [Malat Intrullnr] - если сравнить с картинкой вторая буква без шапочки. Пошел дальше - при тупом копировании названия этого поля с SQL Servera получается при вставке в коде [M?lat Intrullnr] (сейчас я работаю под русской кодировкой). Может кто знает как здесь быть? |
|
|
|
07.01.2012 00:31:01
В порядке бреда можно попробовать конвертировать заголовки в запросе так:
StrConv("text",vbFromUnicode) StrConv("text",vbUnicode) и даже так: Unihex$("text") Function Unihex$(s$) Dim sr() As Byte, i& sr = StrConv(s, 64) For i = 0 To UBound(sr) Step 4 If sr(i + 2) Then Unihex$ = Unihex$ & "\u0" & sr(i + 2) & LCase(Hex(sr(i))) Else Unihex$ = Unihex$ & Chr(sr(i)) End If Next End Function
KL
|
|
|
|
10.01.2012 13:19:51
{quote}{login=KL}{date=07.01.2012 12:31}{thema=}{post}В порядке бреда можно попробовать конвертировать заголовки в запросе так:
StrConv("text",vbFromUnicode) StrConv("text",vbUnicode) и даже так: Unihex$("text") Function Unihex$(s$) Dim sr() As Byte, i& sr = StrConv(s, 64) For i = 0 To UBound(sr) Step 4 If sr(i + 2) Then Unihex$ = Unihex$ & "\u0" & sr(i + 2) & LCase(Hex(sr(i))) Else Unihex$ = Unihex$ & Chr(sr(i)) End If Next End Function{/post}{/quote} Спасибо за попытку. К сожалению все 3 варианта не прошли конкурс :). 1-ый превращает все в ????, 2-ой расставляет пробелы между символами а шведский символ превращает непонятно во что, третий выдает, например, такой результат: "[M\u0435lat Intrullnr]". Тем не менее второй вариант оказался ближе всех к цели. |
|
|
|
10.01.2012 13:32:41
пробелы можно и удалить так же программно )
|
|
|
|
10.01.2012 15:42:50
{quote}{login=}{date=10.01.2012 01:32}{thema=}{post}пробелы можно и удалить так же программно ){/post}{/quote}
Можно конечно - перевести еще во что-то (еще какую-нибудть интерпритацию Юникода). Функция Trim пробелы не уберет, т.к. с пробелами должно быть. Все равно будет что-то типа того: [ M 5l a t I n t r u l l n r ] вместо [Målat Intrullnr]. |
|
|
|
10.01.2012 15:47:23
Упс. К предыдущему коментарию дополнение. Как должно быть видно на картинке от 05.01.2012, 14:01, а то пишу одно - получаю третье.
|
|
|
|
11.01.2012 15:40:58
Спасибо всем. Сегодня создали представление (VIEW) с "правильными" именами полей - это решение закрыло данную тему.
|
||||
|
|
|||
Читают тему