Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Из MSSQL поле binary в integer VFP9  [new]
AMorkovka
Member

Откуда:
Сообщений: 49
Давно крутится 1с (MSSQL6.5). Нужно скачать данные в Фокс так, чтобы ключ.поле бинери стало ключ.полем типа интеджер. Цель-ключ должен быть читабельным в таблицах Фокса для дальнейшего использования, а не путанным. Как такое сделать?
13 сен 07, 19:23    [4665625]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1547
Что значит "ключ.поле бинери"? То есть на сервере оно binary? Точно? Что-то я не припомню у 1С таких полей, тем более ключевых. Для чего ключ делать читабельным? Кто и зачем его будет читать?
13 сен 07, 20:41    [4665876]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
AMorkovka
Member

Откуда:
Сообщений: 49
Я его буду видеть и читать, чтоб корректно и легко пользоваться значениями. В 1с поля ID и ParentID такого типа. Вот интересно, есть ли взаимно однозначное соответствие этих типов? А значит и функции преобразования, которой я не знаю?
14 сен 07, 12:46    [4668577]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
проходящий.
Guest
Покажите ка ID и ParentID таких типов.
Структуру и значения.
И Вы будете ручками эти значения куда-то вводить?
14 сен 07, 12:53    [4668652]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
AMorkovka
Member

Откуда:
Сообщений: 49
Нет же, не вручную. То, что уже введено в 1с, перегоню в Фокс, и здесь мне надо заместить тип бинари на интеджер, а далее программа будет работать с фокстаблицами, где ключ будет автоматич. присваиваться (+1), потому что я не знаю сейчас как формируется новый уникальный ключ типа бинари. Вот для этого мне нужен тип интеджер для ключа. А еще я посмотрел, что ключ в табл 1с действительно не ID, а ROW_ID типа интеджер, тут прошу прощения, но все-равно у меня ключом будет именно ID, а он в 1с типа бинари. Я, конечно, могу просто взять вместо ID ROW_ID, но как тогда быть с ParentID, который согласуется с ID, а не с ROW_ID, и он тоже типа бинари. Например, d 1c таблица SC72: ROW_ID integer (primary key), ID binary, parentid binary,...
14 сен 07, 14:51    [4669696]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
PaulWist
Member

Откуда:
Сообщений: 2236
Ну дык, надо вернуть с сервера конвертированное значение bin в int

create table #t (f1 binary(50))

insert into #t select cast(1 as binary (50))

select * from #t

select cast(f1 as int) from #t

drop table #t
14 сен 07, 15:03    [4669789]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
проходящий.
Guest
Как же все таки тяжко общаться, когда вместо ответов на вопросы сыплется длинная цепь рассуждений, сделанная на основании хоть и одного неправильного утверждения, но не ставшаяся от это истинной. Я просил предоставить значения поля типа binary. Где оно?
То, что поле типа binary еще не делает содержимое такого поля двоичным.
Там хранятся строки. А тип binary сделан для исключения конвертаций содержиого такого поля при неправильных настройках сервера и/или клиента. А для генерации используется 36-ричная система. Только зачем генерировать-то? Чтобы потом обратно в 1С запихать? Чревато! СтОит ли это делать?
14 сен 07, 15:11    [4669860]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
проходящий.
Guest
Паш, вопрошавшему твой совет не поможет. Он просто плохо знает структуру данных 1С и делает неправильный вывод о содержимом идентификаторов. Полученные им числа будут с разрывами, закономерность расположения которых он навряд ли поймет.
14 сен 07, 15:15    [4669904]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
AMorkovka
Member

Откуда:
Сообщений: 49
Это другой же разговор, более веселый. Но попробовав подсказку, получил в ответ "'cast' is not a recognized built-in function name". На беду версия 6.5. Что ж делать, есть ли способы? Или на край сбэкапить и восстановить в MSSQL-2000, а там работает cast?
14 сен 07, 15:20    [4669957]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
AMorkovka
Member

Откуда:
Сообщений: 49
Ах, да, прости, дружище! 0x202031384f202020 0x2020204b71202020 - это ид и парентид.
14 сен 07, 15:23    [4669994]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
проходящий.
Guest
Ну а теперь внимательно посмотри на позанное. Ничего не напоминает?
14 сен 07, 15:24    [4670007]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
AMorkovka
Member

Откуда:
Сообщений: 49
ЗЫ. Согласись, грустно на эти значки смотреть, а как формировать новые такие значения-вообще не знаю.
14 сен 07, 15:26    [4670027]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
проходящий.
Guest
пробуй:

create table #t (id binary(8), parentid binary(8))
insert into #t values (0x202031384f202020, 0x2020204b71202020 )
select convert(char(8), id), convert(char(8), parentid) from #t
14 сен 07, 15:33    [4670099]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
AMorkovka
Member

Откуда:
Сообщений: 49
Ну что делать, паника и несобранность подводит сегодня. Вчера сказали, чтоб переписал 1с на ВФП9+Оракл и будем добавлять свою специфику. Но там последовательности, ключи-целые. Кажется, не пропустил ничего.
внимательно посмотри на позанное. Ничего не напоминает? -тут объясни, наверное, все очень просто для тебя, а я, как модно говорить, туплю.
14 сен 07, 15:33    [4670102]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
проходящий.
Guest
выполни в фоксе:
?chr(0x20)+chr(0x20)+chr(0x31)+chr(0x38)+chr(0x4f)+chr(0x20)+chr(0x20)+chr(0x20)
14 сен 07, 15:39    [4670164]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
AMorkovka
Member

Откуда:
Сообщений: 49
Дружище, спасибо! Вот что получилось в QUERY с select convert(integer,id) from sc72:
857743392
874520608
891297824
908075040
924852256
941629472
958406688
1092624416
1109401632
1126178848 .
Последние, надеюсь, вопросы. 1)Если бинари уникальны, то эти целые тоже уникальны?
2)Почему вывод в 12 позиций и выравнивание по левому краю? Тут без подвоха?
14 сен 07, 15:42    [4670205]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
проходящий.
Guest
Вы принципиально не читаете написанное мной? Что Вы так уперлись в инт? На каком основании? Почему именно инт? Ответы на остальные вопросы бессмысленны без ответа эти вопросы.
14 сен 07, 15:47    [4670253]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
AMorkovka
Member

Откуда:
Сообщений: 49
Дружище, не обижайся. Вот ты помог, и второй вопрос отпал, конечно это числовой текст, да и первый сейчас проверю, 99%, что взаимно однозначное соответствие типов. А интеджер- чтобы когда я в новой программе, где данные будут на Оракле, захочу ввести новую запись, ключ автоматом сформируется с помощью объекта Оракл "ПОСЛЕДОВАТЕЛЬНОСЬ", где тип именно целое, интеджер, такая нехитрая логика. Еще раз, спасибо!
14 сен 07, 15:55    [4670345]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
Dima T
Member

Откуда:
Сообщений: 15285
Преобразование из 36-ричной в десятичную:
func ch36to10
para lcValue
lnRet=0
do while !empty(lcValue)
   lnCifra=asc(lcValue)
   lcValue=substr(lcValue,2)
   do case
      case lnCifra=32
           * пробел
      case lnCifra<58
           lnRet=lnRet*36+lnCifra-48
      case lnCifra<91
           lnRet=lnRet*36+lnCifra-55
      otherwise
           lnRet=lnRet*36+lnCifra-61
   endcase
enddo
return lnRet


попробуй:
? ch36to10(chr(0x20)+chr(0x20)+chr(0x31)+chr(0x38)+chr(0x4f)+chr(0x20)+chr(0x20)+chr(0x20))
14 сен 07, 15:59    [4670372]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
проходящий.
Guest
Какой еще к черту "числовой текст"? ParentId посмотрел таким способом?
А вот это выдает 180 или 18?
?val(chr(0x20)+chr(0x20)+chr(0x31)+chr(0x38)+chr(0x4f)+chr(0x20)+chr(0x20)+chr(0x20))
14 сен 07, 15:59    [4670380]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
AMorkovka
Member

Откуда:
Сообщений: 49
Дает 18. Извини, не числовой, а цифровой текст, тест из цифр. Так быстро, что не могу анализировать, но хотелось бы сегодня решить проблему конвертации.
Dima T, спасибо, поразмыслю над кодом. Пока никаких окончательных выводов не сделал, слишком быстро.
14 сен 07, 16:09    [4670462]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
проходящий.
Guest
Только ли из цифр? Почему 18, а не 180? Еще раз предлагаю посомотреть и ParentId указанным мной способом. Там вообще ни одной цифры нет.
14 сен 07, 16:11    [4670479]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
AMorkovka
Member

Откуда:
Сообщений: 49
Наконец понял фразу "тип binary сделан для исключения конвертаций содержиого такого поля при неправильных настройках сервера и/или клиента", спасибо. Какие же настройки сервера по этому поводу бывают, и по результату 18-какие у меня? Ситуация, кажется, становится в этой связи опасной для меня!
14 сен 07, 16:15    [4670510]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
AMorkovka
Member

Откуда:
Сообщений: 49
?val(chr(0x20)+chr(0x20)+chr(0x20)+chr(0x4b)+chr(0x71)+chr(0x20)+chr(0x20)+chr(0x20))
Дает 0, приплыли. Может, настройки сервера выручат, подскажите, как говорят, плиз!
14 сен 07, 16:19    [4670549]     Ответить | Цитировать Сообщить модератору
 Re: Из MSSQL поле binary в integer VFP9  [new]
проходящий.
Guest
Специально для плохо умеющих читать повторяю:

Там хранятся строки. А тип binary сделан для исключения конвертаций содержиого такого поля при неправильных настройках сервера и/или клиента. А для генерации используется 36-ричная система.


Понятно почему я написал
select convert([i][b]char(8)[/b][/i], id), convert(char(8), parentid) from #t
а не так подавляюще действующий на некоторых инт?
14 сен 07, 16:19    [4670552]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / FoxPro, Visual FoxPro Ответить