Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Немогу преобразовать поле из таблицы


Страницы:   1 2

PAVELsinicinV ©   (2002-09-30 18:57:00) 

Немогу преобразовать поле из таблицы "TableGroup1.AsString" символьного типа (Char(2)) в числовое представление "Numeric".
Может кто подскажет ...


sniknik   (2002-09-30 20:36:00) [1]

то что там чтото непонятное как раз ясно но он ни разу не приводит что он пытается преобразовать, пример, исходные данные. толко все повторяет что символьные и почемуто не могут быть больше 512 почему? два байта = ворд, гораздо больше. а представление? вот писатели на С посмеялись бы.


Best Before 2024   (2002-09-30 20:28:00) [2]

2 sniknik
>>бред сивой кобылы. без исходных данных обсуждение бессмысленно.
>>уже пол часа читаю и так и не понял чего тебе надо? и что же >>там в конце концов лежит?
Если в 2х байтах лежит номер записи, и всякое такое вроде StrToInt не проходит, значит какой-то умник запихал туда в 90х годах (из экономии места) номер записи в двоичном виде, чем очень озадачил автора вопроса :)


Peter Gluhiy   (2002-09-30 20:18:00) [3]

Круто!
А зачем надо в Numeric?


sniknik   (2002-09-30 20:18:00) [4]

бред сивой кобылы. без исходных данных обсуждение бессмысленно.

уже пол часа читаю и так и не понял чего тебе надо? и что же там в конце концов лежит? ты не вы%;$;ся ты пальцем покажи. примерно так есть в поле "678" символьное оно означает 786 в числе, хочу получить 687 а получается 2 или наоборот. а то кокието обрывки неполной информации.

для справки ASC() в фоксе преобразует 1символ слева в дельфях аналогия Ord("c") только он символьный м не понимает строк.


PAVELsinicinV   (2002-09-30 20:18:00) [5]

ICQ 152726639


PAVELsinicinV   (2002-09-30 20:17:00) [6]

ПАСИБА МУЖИКИ БУДУТЕ У НАС ЖДЕМ В ГОСТИ pvs1@pochtamt.ru


Best Before 2024   (2002-09-30 20:16:00) [7]

Успокойте меня!!
i:= Ord(S[2]) shl 8 + Ord(S[1]);
Помогло или нет?!
Если нет, пойду и застрелюсь :(


PAVELsinicinV   (2002-09-30 20:13:00) [8]

если использовать код s:=VarToStr(Table4GROUP1.AsString);
RichEdit1.Lines.Add((s));
то она содержит:

и




b

з
g


o

#
в



p


b

b

\
к

\
л


b
o
з
o
Э

o
o
и
o

Ю

o
o

b
p
p




и
o
b
g


\


y
x

p
з



д


b
o
o
в
o




Д


Ю

o
o


b


b

x

z
в


o


x
x
г
b


з
b
g


z




o
o

o

o
o
Ь
x
x
и
b
o


o
Ь
Ю
к
o


Ю
o
o

Ь


p



p
b

o


\
b

o
p


o
b
в
o





o
o

b

ж
Н

o


g

o

Ь

в
o
b
o

o
Д
p
b
x
o
b
и

#



з

Ю
o



ж
o
o

з
p


o
p
g
o
Д
Л

b
b
o


з
Э

b

x

Д
o
и
o

b

p
Э
и
Ь


з

Ю
o
b
з
o




o


з
o
в

Ю

Я

o


o
b

g

o



p

o



p
o

С
\
o
o


o




\
o
o
o
Ю
b


ж
p



o

o

o
ж
o
p
Э

з

\

Ю
b
g
Э




b
в
д
p
o


x

o


b
o
g

o
й

o
o


g


Ю
o
Д

p
p
g
o
o

b

з
o
o


Д

z
#

и

\

b
Д


\
з

o
ж
з


o


o



o
o
b

и
o
o
o
o
д

o
o
b



o
b

o


b

o
o


o



o
g
\


p



в

Ю
Н
o

и
o

\
p
Я

Ь
o

o
#



а если вот это то16
232
17
16
16
16
98
16
231
103
16
16
111
16
35
226
16
16
16
112
16
16
98
16
98
17
92
234
более менее на чтото похожее ..


Best Before 2024   (2002-09-30 20:07:00) [9]

2 Peter Gluhiy
В базе, похоже, число в двоичном виде 2 байта


Best Before 2024   (2002-09-30 20:05:00) [10]

Значит старшая часть числа - во втором байте и надо писать так:
i:= Ord(S[2]) shl 8 + Ord(S[1]);


Peter Gluhiy   (2002-09-30 20:04:00) [11]

Ну, если в базе у тебя не цифры, то в Numeric не переведешь.
Посмотри чем-нибудь информацию в базе.


PAVELsinicinV   (2002-09-30 20:02:00) [12]

i2:=Ord(S[2]) дает одни нули, а i:= (Ord(S[1]) shl 8)
4096
59392
4352
4096
4096
4096
25088
4096
59136
26368
4096
4096
28416
4096
8960
57856
4096
4096
4096
28672
4096


Best Before 2024   (2002-09-30 19:57:00) [13]


i:= Ord(S[2]) shl 8 + Ord(S[1]);


PAVELsinicinV   (2002-09-30 19:54:00) [14]

N := StrToInt(TableGroup1.AsString);
точне StrToInt не может "


Best Before 2024   (2002-09-30 19:52:00) [15]

И что в этом плохого - это же числа?
Если записано наоборот (сначала младшая, потом старшая часть) то можно попробовать
i:= Ord(S[ 2]) shl 8 + Ord(S[ 1]);
Повторяю,
хорошо бы узнать, чему равен Ord(S[1]) и Ord(S[2]) на примере нескольких записей, а потом уже думать.


PAVELsinicinV   (2002-09-30 19:49:00) [16]

Лады
код примерно такой
s:=(Table4GROUP1.AsString);
i:= Ord(S[1]) shl 8 + Ord(S[2]);
RichEdit1.Lines.Add(Inttostr(i));
Результат
4096
59392
4352
4096
4096
4096
25088
4096
57856
4096
4096
4096
28672
4096
4096
25088
4096
25088
4352
23552
59904
4096
23552
60160
....................


Peter Gluhiy   (2002-09-30 19:48:00) [17]

А так:
N := StrToInt(TableGroup1.AsString);


Best Before 2024   (2002-09-30 19:40:00) [18]

>>Ерудна получается в этом поле содержиться максимум 512
Кто это сказал, что 512?

Хорошо бы парочку примеров
S := Table.Field.AsString;
Я так понимаю, что длина S = 2?
хорошо бы узнать, чему равен Ord(S[1]) и Ord(S[2]) на примере нескольких записей, а потом уже думать.


PAVELsinicinV   (2002-09-30 19:38:00) [19]

нет пишет нетот тип поля и он прав так как поле символьного типа


Peter Gluhiy   (2002-09-30 19:37:00) [20]

А TableGroup1.AsInteger не работает?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо