Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Как узнать длину поля таблицы? (число прочтений - 3630 )
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Как узнать длину поля таблицы?
30. Апреля 2008 :: 10:43
Печать  
Как узнать размер поля в таблице данных?
Т.е. для реквизита определенного типа и вида = 9, для строки длиной 6 = 6 и т.д.
Ни в "Метаданных", ни в "МетаДатаВорк" ничего подобного не нашёл.   Печаль
База ДБФ.
Подскажите что-нибудь путное и быстрое.  Подмигивание
(Сейчас вижу выход только через XBase и его метод ОписаниеПоля(<НомерПоля>,<НазваниеПоля>,<Тип>,<Длина>,<Точность>))
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как узнать длину поля таблицы?
Ответ #1 - 30. Апреля 2008 :: 10:53
Печать  
Считать в ТЗ одну запись и ПолучитьПараметрыКолонки()  Подмигивание
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как узнать длину поля таблицы?
Ответ #2 - 30. Апреля 2008 :: 11:02
Печать  
Цитата:
Считать в ТЗ одну запись и ПолучитьПараметрыКолонки()  Подмигивание

Принято.  Подмигивание Ещё есть идеи?
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как узнать длину поля таблицы?
Ответ #3 - 30. Апреля 2008 :: 11:33
Печать  
Тут ещё кое-что вылезло.  Печаль
Мне ж надо получить имя колонки в таблице, где хранит 1С мои данные. Делаю:
Код
Выбрать все
текДлина=0;
	рения),,текДлина); 


Ругается, что нет колонки. И вправду:
Цитата:
Синтаксис: ИДИзмеренияРегистра(Регистр, Измерение)

Параметры:

Регистр - тип: Число, Строка. Номер регистра или имя регистра.
Измерение - тип: Число, Строка. Номер измерения регистра или имя измерения регистра.
Возвращает: тип: Число. Внутренний идентификатор измерения регистра.

Описание: позволяет получить внутренний идентификатор измерения регистра.

т.е. метод возвращает мне число = 5960, а в таблице это поле имеет имя = sp5960
как быть?
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как узнать длину поля таблицы?
Ответ #4 - 30. Апреля 2008 :: 12:41
Печать  
Я так делал

Код
Выбрать все
		ТекстЗапроса = "select top 0 * from " + СокрЛП(Конфигурация.БазаДанных) + ".dbo." + ИмяТаблицы + " (nolock)";
		ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
		Если СокрЛП(ТЗ.ПолучитьПараметрыКолонки(1)) = "ROW_ID" Тогда
			ТЗ.УдалитьКолонку(1);
		КонецЕсли;

 




Потом перебирал метаданные и искал поле в таблице (прибавляя sp конечно)
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как узнать длину поля таблицы?
Ответ #5 - 30. Апреля 2008 :: 12:48
Печать  
ну я тож реквизиты по метаданным перебираю. А что, "sp" - это стандартный префикс? Другого быть не может?
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Как узнать длину поля таблицы?
Ответ #6 - 30. Апреля 2008 :: 12:59
Печать  
Во вьювере(ДБФ) http://www.1cpp.ru/forum/YaBB.pl?num=1209123521 есть хранимая процедура -
возвращает ТЗ со строками информацией о колонках, индексах и номер области открытия.
Из всего этого тебе нужно только инф о колонках.
Быстрая.
select top в ДБФ заставит скачать всю таблицу - не думаю что это быстро Улыбка

Вызов процедуры
Код
Выбрать все
ПутьККаталогу=КаталогИБ();
	ИмяФайла=ПутьККаталогу+СокрЛП(ИмяТаблицыДанных)+".dbf";
    локОлеДБКоманда = локОлеДБ.СоздатьКоманду();
    ТЗСведенияОТаблице = локОлеДБКоманда.ВыполнитьИнструкцию("initialtablefield('"+ИмяФайла+"')");  


  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как узнать длину поля таблицы?
Ответ #7 - 30. Апреля 2008 :: 13:03
Печать  
Да, Кирилл, спасибо. Именно на эту "ХП" я и смотрю последний час. Т.к. я в фоксе вообще никакой, то хотел просто по-тупому выдрать:
Код
Выбрать все
FOR nCount = 1 TO AFIELDS(arrayFIELDS,"+ИмяТаблицы+")
   FIELDNAME=arrayFIELDS(nCount,1)
   FIELDTIP=arrayFIELDS(nCount,2)
   FIELDWIDTH=arrayFIELDS(nCount,3)
   FIELDDECIMALPLACE=arrayFIELDS(nCount,4)

  INSERT INTO ResultInit('KEYSTR','VALUEINT','VALUESTR','INDEXKEY','FIELDDECIMAL') VALUES ('FIELD', FIELDWIDTH,FIELDNAME,FIELDTIP,FIELDDECIMALPLACE)

ENDFOR

RETURN SETRESULTSET ('ResultInit') 


и потом выполнить этот запрос через "ВыполнитьИнструкцию"
Но что-то не вышло  Печаль (а Фокс - он же очень многословен и всегда указывает чётко на твою ошибку: Цитата:
Во время выполнения процедуры произошла одна или несколько ошибок
  Улыбка
Ладно, будем выполнять всю процедуру.  Подмигивание
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как узнать длину поля таблицы?
Ответ #8 - 30. Апреля 2008 :: 13:21
Печать  
Кто-нибудь скажет:
"sp" - это стандартный префикс для полей таблиц? Другого быть не может? (исключая служебные поля типа DATE, ID, IDDOC...)
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как узнать длину поля таблицы?
Ответ #9 - 30. Апреля 2008 :: 13:25
Печать  
Да, но есть много еще чего Улыбка
Смотря где юзать
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как узнать длину поля таблицы?
Ответ #10 - 30. Апреля 2008 :: 13:27
Печать  
Да, это стандартный префикс всех пользовательских полей, кроме граф отбора в журнале расчетов - у них префикс "FF".
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как узнать длину поля таблицы?
Ответ #11 - 30. Апреля 2008 :: 13:31
Печать  
Спасибо!
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать