Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема DBF, Почему то не выбераются все поля из таблицы. (число прочтений - 2830 )
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
DBF, Почему то не выбераются все поля из таблицы.
29. Января 2009 :: 20:43
Печать  
Прилагаю таблицу, в ней есть поле SP1804, это реквизит с типом справочник (строка,9), когда файл открывать и смотреть через Wdbview (Гендальф) - то видим что поля заполнены. Когда же открыть файл через OLE DB, то поле пустое:
Код
Выбрать все
SELECT
	SP1804
FROM
	C:\temp\1C\DH3.DBF 



В чем не прав?
Вот полный код:
Код
Выбрать все
	OLEDB = СоздатьОбъект("OLEDBData");
	OLEDB.Connect("Provider=VFPOLEDB.1; Set Deleted=Yes;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Extended Properties="";User ID="";Password="";Mask Password=False;Collating Sequence=RUSSIAN;DSN=""");
	Command = OLEDB.CreateCommand();
    Command.Debug(1);

ТЗ = СоздатьОбъект("ТаблицаЗначений");
	Попытка
		ТЗ = Command.ExecuteStatement(ТекстЗапросаSQL);
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;
 


где ТекстЗапросаSQL - указанный выше запрос.
  

DH3.rar ( 0 KB | Загрузки )
Наверх
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF, Почему то не выбераются все поля из таблицы.
Ответ #1 - 29. Января 2009 :: 22:24
Печать  
Поле пустое во всех программах.
Видимо перепутал таблицы при открытии
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: DBF, Почему то не выбераются все поля из таблицы.
Ответ #2 - 30. Января 2009 :: 06:48
Печать  
Да это зжимал таблицу в OpenOffice, вот он и подчистил. В оригинале там есть данные. Как можно зжать таблицу через OLE DB командой? (wrap table когда то было, но уже не работает), а то 26 МБ даже в зжатом виде много, но придеться выложить. Выкладываю отдельно полную таблицу (оригинал) и файл DD чтобы было видно что это документ и поле - это справочник (т.е. даже если оно и пустое, то должно быть '     0   '):

Код
Выбрать все
SELECT
	COUNT(SP1804)
FROM
	C:\temp\1C\DH958.DBF 


возвращает 26777 записей, а вот:
Код
Выбрать все
SELECT
	SP1804
FROM
	C:\temp\1C\DH958.DBF 



ни одной строки.
  

dh958.rar ( 1240 KB | Загрузки )
Наверх
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF, Почему то не выбераются все поля из таблицы.
Ответ #3 - 30. Января 2009 :: 08:52
Печать  
Поле SP936 содержит 700 символов(хорошо что не 15 000 Улыбка).
FoxPro читает до 255. Все что больше должно располагаться в Мемо-полях
Все что правее этого столбца соответственно идет с искажениями.
  
Наверх
 
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: DBF, Почему то не выбераются все поля из таблицы.
Ответ #4 - 30. Января 2009 :: 09:46
Печать  
Цитата:
Поле SP936 содержит 700

в начале работы с прямыми запросами у меня была такая байда.
на сколько я понимаю фокс на поддерживает символьные колонки более 255 символов, а с Цитата:
Мемо-полями
1с не работает.
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: DBF, Почему то не выбераются все поля из таблицы.
Ответ #5 - 31. Января 2009 :: 08:08
Печать  
Понятно, спасибо. Хотя сама 1С работает с полями длиной больше 255 символов без проблем.
Как вы обычно работаете с неограниченными строками? Можт есть примеры? Надо в выборке для всех записей получить значения.
  
Наверх
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF, Почему то не выбераются все поля из таблицы.
Ответ #6 - 31. Января 2009 :: 17:47
Печать  
Как получить Id реквизита справочника (fieldid) ?

глМД = СоздатьОбъект("MetaDataWork");
ИДЮрАдрес = Прав(_IDToStr(глМД.ИДРеквизитаСправочника("ЮрЛица","ЮрАдрес")),4);

В таблицах 1SBLOB и 1SCONST есть поле blockno – длинные строки разбиваются на строки одинаковой длины и в этом поле пишется номер блока. Первые 9 символов нулевого блока задают длину строки.

1SBLOB
fieldid -   ИДЮрАдрес
  objid -   id справочника ЮрЛица
  blockno - номер блока

Отдельным запросом получается ТЗ длинных наименований, при печати извлекается из нее.

P.S>
Т.к. 95% полей у меня длины меньше 130 символов, то в базовый запрос добавляю 2 поля (блока)

Цитата:
| SELECT
|   СпрЮрЛица.id as [Объект_ЮрЛицо $Справочник.ЮрЛица]
|      ,TabЮрАдрес0.Block  as ЮрАдресБлок1
|      ,TabЮрАдрес1.Block  as ЮрАдресБлок2
//... другие поля
| FROM
|      $Справочник.ЮрЛица as СпрЮрЛица
| LEFT JOIN  1SBLOB as TabЮрАдрес0 ON  рЛица.id+'   0'
| LEFT JOIN  1SBLOB as TabЮрАдрес1 ON  рЛица.id+'   1'

(здесь соединение по индексу)
При печати , если длина больше - извлекаю стандартныс способом 1С (1С использует индекс, тоже достаточно быстро)
« Последняя редакция: 01. Февраля 2009 :: 17:44 - kiruha »  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать