Имя: Пароль:
1C
1С v8
ADODB.Command .как узнать длину поля
0 zladenuw
 
31.01.14
14:43
Сейчас вот такой запросик. как узнать длину поля ?
Command = Новый COMОбъект("ADODB.Command");
        Command.ActiveConnection = Connection;
        Command.CommandText = "Select LEFT(["+ИмяТаблицы+"].[Part-no],5)+'-'+RIGHT(["+ИмяТаблицы+"].[Part-no], 5) AS Part,
        |LEFT(["+ИмяТаблицы+"].[Former part no],5)+'-'+RIGHT(["+ИмяТаблицы+"].[Former part no], 5) AS Part2,
        |LEFT(["+ИмяТаблицы+"].[New Part no],5)+'-'+RIGHT(["+ИмяТаблицы+"].[New Part no], 5) AS Part3,["+ИмяТаблицы+"].[Service type] AS Type from "+ИмяТаблицы;
1 zladenuw
 
31.01.14
14:47
Select LEFT(["+ИмяТаблицы+"].[Part-no],5)+'-'+RIGHT(["+ИмяТаблицы+"].[Part-no], 5) AS Part

Оказалось что правая часть может быть как 5 символов так и более. как узнать длину поля ?
2 Torquader
 
31.01.14
14:47
Так команду нужно выполнить, и тогда, у результата появится длина поля.
В некоторых особо продвинутых серверах команду достаточно только "подготовить" (prepare), чтобы узнать данные результата
ResultSet.Fields(номер).Length насколько помню.
3 Torquader
 
31.01.14
14:48
А у таблицы вообще можно структуру запросить (но это зависит от того, кто у тебя в качестве SQL-сервера - их по разному надо спрашивать).
4 zladenuw
 
31.01.14
14:48
(2) мне надо в запросе.
так как дальше делаю вот так

    Command.CommandType = 1;
        RecordSet = Новый COMОбъект("ADODB.RecordSet");
        RecordSet = Command.Execute();
        
        ТЗ = ADOUtils.ADORecordsetToValueTable(RecordSet);
5 zladenuw
 
31.01.14
14:49
да это mdb таблица
6 Torquader
 
31.01.14
14:50
(4) Вот это RecordSet = Новый COMОбъект("ADODB.RecordSet");
явно лишнее, так как оно перезапишется потом.
7 zladenuw
 
31.01.14
14:51
(6) так я же туда помешаю результат команды и выполняю ее. а потом помешаю в тз.
8 Torquader
 
31.01.14
14:51
(5) Ну, к каждой таблице можно обратиться в запросе или в команде указав просто имя таблицы - и сразу в ответе мы получим RecordSet, связанный с ней, где через поля узнаем всё, что хочется.
9 Torquader
 
31.01.14
14:52
Сравни:
        RecordSet = Новый COMОбъект("ADODB.RecordSet");
        RecordSet = Command.Execute();
И
A=2;
A=3;
10 Torquader
 
31.01.14
14:57
recordset.Open Source, ActiveConnection, CursorType, LockType, Options
Source - это имя таблицы.
Options = 2 - означает, что мы открываем таблицу.
Закрыть только нужно не забыть.
11 zladenuw
 
31.01.14
15:01
спасиб. буду разбираться
12 Jaap Vduul
 
31.01.14
15:15
http://msdn.microsoft.com/en-us/library/windows/desktop/ms676566(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/ms675824(v=vs.85).aspx

Ну, и если надо структуру таблицы до выполнения запроса получить, то ADOX надо использовать:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms676554(v=vs.85).aspx