Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / Запрос через COMConnector - длина поля / 11 сообщений из 11, страница 1 из 1
27.03.2012, 14:50
    #37725487
_Cepera_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос через COMConnector - длина поля
Соединяюсь в Delphi с 1С через COM, выполняю запросы. Получаю РезультатЗапроса.Колонки у которых есть свойства Ширина, но в ней число меньше настоящего размера поля - подозреваю, что это отображаемая длина, как получить полную?

Код Delphi:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
function TdmlC.DataSetBy1CQuery(AText: string; Params: Variant): TClientDataSet;
var
  lCQuery, lCQueryResult, lCColumns, lCColumn :Variant;
  lCResultSelection :Variant;
  lCColTypes, lCDataType :Variant;
  StrDataType :string;
  i :Integer;
  FieldIsLink: array of Boolean;
begin
  Result := nil;

  if VarIsEmpty(lCDb) then // = Unassigned
    ConnectTo1C;

  lCQuery := lCDb.NewObject('Запрос');
  try
    lCQuery.Текст := AText;

    if (not VarIsNull(Params)) then
    begin
      for i := VarArrayLowBound(Params, 1) to VarArrayHighBound(Params, 1) do
      begin
        lCQuery.УстановитьПараметр(
          Params[i][0],
          lCDb.ЗначениеИзСтрокиВнутр(Params[i][1])
        );
      end;
    end;

    lCQueryResult := lCQuery.Выполнить();

    Result := TClientDataSet.Create(self);
    Result.FieldDefs.Clear;

    lCColumns := lCQueryResult.Колонки;
    if lCColumns.Количество > 0 then
    begin
      i := lCColumns.Количество;
      SetLength(FieldIsLink, i);

      for i := 0 to lCColumns.Количество - 1 do
      begin
        lCColumn := lCColumns.Получить(i);
        with Result.FieldDefs.AddFieldDef do
        begin

          Name := lCColumn.Имя;

          FieldIsLink[i] := False;

          lCColTypes := lCColumn.ТипЗначения.Типы();
          if lCColTypes.Count() <> 0 then
          begin
              lCDataType := lCColTypes.Get(0);
              if not VarIsNull(lCDataType) then
              begin
                strDataType := lCDb.String(lCDataType);

                if strDataType = 'Булево' then
                  DataType := ftBoolean
                else if strDataType = 'Дата' then
                  DataType := ftDateTime
                else if strDataType = 'Число' then
                  DataType := ftFloat
                else if strDataType = 'Строка' then
                begin
                  DataType := ftString;
                  Size := 256; //Size := Column.Ширина; ????
                end
                else
                begin
                  DataType := ftString;
                  FieldIsLink[i] := True;
                  Size := 256; //ссылка
                end;

              end;
          end;

        end; //adddef

      end; //for

    end; //if count > 0

    Result.CreateDataSet;
    lCResultSelection := lCQueryResult.Выбрать();
    while lCResultSelection.Next do
    begin
      Result.Append;
      for i := 0 to Result.FieldCount - 1 do
        if FieldIsLink[i] then
          Result.Fields[i].Value :=
            lCDb.ЗначениеВСтрокуВнутр(lCResultSelection.Получить(i))
        else
          Result.Fields[i].Value := lCResultSelection.Получить(i);
      Result.Post;
    end;

    Result.First;

  finally
    lCQuery := Unassigned;
    lCQueryResult := Unassigned;
    lCColumns := Unassigned;
    lCColumn := Unassigned;
    lCColTypes := Unassigned;
    lCDataType := Unassigned;
    lCResultSelection := Unassigned;
  end;

end;
...
Рейтинг: 0 / 0
27.03.2012, 16:00
    #37725647
Zerro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос через COMConnector - длина поля
_Cepera_,

а какой тип элемента "Ширина" и если страка какой длины он в конфе стоит.
...
Рейтинг: 0 / 0
27.03.2012, 17:05
    #37725794
_Cepera_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос через COMConnector - длина поля
Zerro,
Ширина - это "Число", в запросе равно 32-м

В конфигурации стоит:
Тип = Строка
Длина = 0
Допустимая длина = переменная
...
Рейтинг: 0 / 0
28.03.2012, 06:53
    #37726675
Zerro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос через COMConnector - длина поля
_Cepera_Zerro,
Ширина - это "Число", в запросе равно 32-м

В конфигурации стоит:
Тип = Строка
Длина = 0
Допустимая длина = переменная
обрезай пробелы..переводи в число.
...
Рейтинг: 0 / 0
28.03.2012, 09:23
    #37726771
_Cepera_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос через COMConnector - длина поля
Zerroобрезай пробелы..переводи в число.
Ты не понял. Я выполняю запрос и не могу понять какой длины столбец, т.е. на 1С код будет что-то вроде этого
Код: javascript
1.
2.
РезультатЗапроса = Запрос.Выполнить();
ДлинаПоля = РезультатЗапроса.Колонки[0].Ширина; //равно 30-ти, а должно быть больше
...
Рейтинг: 0 / 0
28.03.2012, 09:42
    #37726797
pail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос через COMConnector - длина поля
_Cepera_,
В текстовом поле неограниченной длины может быть все что угодно - от "пустая строка" до огромного текста.
Так что заранее максимальную длину оценить можно только в частном случае - если заранее знать, что именно хранится в таком поле конкретной таблицы.
...
Рейтинг: 0 / 0
28.03.2012, 09:52
    #37726811
_Cepera_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос через COMConnector - длина поля
pail, а как то можно узнать что данная колонка запроса с переменной длиной?
...
Рейтинг: 0 / 0
28.03.2012, 10:07
    #37726837
The Dim!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос через COMConnector - длина поля
Это не колонка с результатом запроса с переменной длинной, а реквизит объекта, который выбирается запросом имеет переменную длину. Узнать это можно через метаданные.
...
Рейтинг: 0 / 0
28.03.2012, 10:08
    #37726839
pail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос через COMConnector - длина поля
_Cepera_,
у запроса - никак. А у объекта-источника данных спросить можно, через Метаданные().
...
Рейтинг: 0 / 0
28.03.2012, 10:14
    #37726849
The Dim!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос через COMConnector - длина поля
В запросе можно только базовый тип значения узнать - "Строк", "Число"... - но не длину/точность. Вообще конечно странно, что 1С не включило в набор функций элементарные "СтрДлина" ...
...
Рейтинг: 0 / 0
28.03.2012, 10:20
    #37726861
_Cepera_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос через COMConnector - длина поля
ясно, спасибо всем
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / Запрос через COMConnector - длина поля / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]