1 (изменено: lisichka-best, 2015-08-10 16:21:55)

Тема: js: чтение информации из sql

Необходимо получить часть строки  (с первого символа по четвертый) из таблицы table колонки name, не используя в запросе sql оператор where. Использовать что то типа substr.         

var Connect=WScript.CreateObject("ADODB.Connection");
           var SConnect="DSN=SQL;UID=user;PWD=password";
          var SSource="Select * From table";
          Connect.Open(SConnect);
           var RS=Connect.Execute(SSource);
          Stroka=RS.Fields("name");
          WScript.Echo(Stroka.substr(0,4));

2

Re: js: чтение информации из sql

Не совсем понял - Вам нужно их получить результатом запроса (т.е чтобы уже в Recordset вернулись обрезанные значения) или обрезать значение из поля средствами JavaScript ?

P.S Проще говоря - обрезать на SQL сервере и вернуть или вернуть полностью, а обрезать уже в скрипте ?

Для SQL вариант такой:


SELECT substring(FIELD_NAME,1,4) FROM TABLE
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

3

Re: js: чтение информации из sql

Обрезать в скрипте

4

Re: js: чтение информации из sql

lisichka-best, тогда не понял для чего уточнение "...в запросе sql оператор where" ? И чем не подходит уже написанный код ? Что не получается то ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

5

Re: js: чтение информации из sql

Подразумевалось не в запросе sql

6

Re: js: чтение информации из sql

Не подходит..потому что выдает ошибку

7

Re: js: чтение информации из sql

Понял о чём речь. У вас из Recordset возвращается объект Field. Т.е объект поля. А он не имеет методов substr и подобных ему, поэтому и происходит ошибка. Для того чтобы код правильно сработал вам подойдут варианты:

Stroka = RS.Fields("name").Value;

либо

Stroka = String(RS.Fields("name"));

Причина в различном способе обработки присвоения в VBScript и JavaScript.
В выражении:

A = B

B может быть любым типом данных (строкой / числом / объектом / датой и т.п.).
Когда в VBScript выполняется такое выражение, то если B это число или строка или дата, то присваивается само значение из переменной, а когда B это объект, то происходит попытка найти его Default свойство / метод. Т.е свойство / метод возвращаемое(ый) по умолчанию. А для того чтобы вернуть сам объект используется оператор Set. В случае с Recordset, цепочка такая:

Recordset -> Fields (коллекция полей) -> Field (конкретное поле) -> Value (значение в нём)

В JavaScript оператора Set нет, поэтому при присвоении происходит возврат того, что есть (при этом происходит конвертация в объект понятный яваскрипту String, Number и т.п). А если B это объект, то он и вернётся.

Когда же мы используем String(RS.Fields("name"));, то мы явно указываем, что хотим забрать Default значение у объекта и преобразовать его к типу строки, понимаемой в JavaScript. Практически аналогично произойдёт и в коде RS.Fields("name").Value, только при этом JavaScript сам решит в какой тип данных, знакомый ему, конвертировать возвращаемое значение.

В Вашем случае, вариант используемого кода зависит от ситуации. Если поле содержит именно текстовые данные, то конвертация через String не обязательна и достаточно использовать свойство Value. Если же в поле будут числовые данные, то в Вашем коде опять же произойдёт ошибка. Так как при преобразовании получится объект, который не имеет методов работы со строкой. И тогда будет логичнее использовать конвертацию через String, чтобы получить строковую интерпретацию данных из поля.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !