Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / DBTYPE_NUMERIC крушение мозга / 15 сообщений из 15, страница 1 из 1
15.06.2007, 09:39
    #34596543
vanoman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBTYPE_NUMERIC крушение мозга
Добрый день, добрый ALL!

Прошу, помощи в размышлениях.

Исходные данные:
MFC, CDynamicParameterAccessor

Задача:
Пользуя OLE DB нужно вывести в CListView содержимое набора записей.

Проблема:
Скорее, непонимание. Любая БД поддерживает тип данных NUMERIC.
Я получаю значение из этого поля по void* CDynamicParameterAccessor::GetVaue()
в структуру
Typedef struct tagDB_NUMERIC {
BYTE precision;
BYTE scale;
BYTE sign;
BYTE val[16];
} DB_NUMERIC;

Здесь меня интересует представление числа в BYTE val[16];
Как понял оно следующее
Пример:
- 256 (десятичная система)
1,0,...,0 (значения элементов массива)
- 257
1,1,0,...,0
и т.д.

Возникают вопросы:
1. Как это представление запихать в переменную для последующей работы? (int, double)
Лично у меня в голове рисуются циклы прохода по ячейкам массива с умножением 256 на значение в ячейке массива, с поправкой на позицию ячейки в массиве, с последующим суммированием результата.
Но мне представляется, что должен быть иной, более красивый метод преобразования.

2. Исходя из размера массива максимально возможное число представляется в виде всех ячеек заполненных значением 256. Собственно. Я не понимаю КАК с таким числом можно работать? Мне не потребуется выполнять с ним арифметические операции, банальный вывод на экран, представив его в десятичной форме. Но КАК это можно сделать???

Мне интересно мнение людей работавших с OLE DB и разбиравших указанный вопрос.
Как по Вашему - верны-ли мои мысли?
Как корректно преобразовать значение в DB_NUMERIC в строку?

Спасибо
...
Рейтинг: 0 / 0
15.06.2007, 09:53
    #34596569
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBTYPE_NUMERIC крушение мозга
vanomanЛюбая БД поддерживает тип данных NUMERIC.


Смелое заявление

vanomanКак корректно преобразовать значение в DB_NUMERIC в строку?


Преобразованием на стороне СУБД например
...
Рейтинг: 0 / 0
15.06.2007, 10:06
    #34596610
vanoman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBTYPE_NUMERIC крушение мозга
Gluk (Kazan)Преобразованием на стороне СУБД например

Угу и нафиг вообще нужен C++ когда можно всё делать в СУБД?

Gluk (Kazan)Смелое заявление
Конечно это существенная поправка.
Вернее было сказать любая СУБД, данные из которой можно получить при помощи OLE DB Гипотетически Может поддерживать тип NUMERIC.

По делу общаться интереснее
...
Рейтинг: 0 / 0
15.06.2007, 10:28
    #34596681
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBTYPE_NUMERIC крушение мозга
Не выеживайся, я тебе ответил по делу. Инструменты хорошо применять к месту и ко времени, а не пытаться удалять гланды через задний проход.

Для Oracle имеются OLE DB драйверы, но NUMERIC в ТВОЕМ понимании он НЕ ПОДДЕРЖИВАЕТ, так что свои гипотетические предположения можешь засунуть себе в то место, через которое ты удаляешь гланды.
...
Рейтинг: 0 / 0
15.06.2007, 10:36
    #34596724
vanoman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBTYPE_NUMERIC крушение мозга
Gluk (Kazan)Инструменты хорошо применять к месту и ко времени...
Согласен.

Ещё в для Оракла можно использовать OCI,OCCI... в котром всё красивее и лучше.
Машины пользуют бензин.
А самолёты летают по небу.
...
Мне же нужно разобраться с этой структурой.
Нечего сказать по вопросу: будь добр - не говори вообще.

Спасибо
...
Рейтинг: 0 / 0
15.06.2007, 10:49
    #34596781
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBTYPE_NUMERIC крушение мозга
vanomanМне же нужно разобраться с этой структурой.


Разбирайся, в чем проблема ???

vanomanНечего сказать по вопросу: будь добр - не говори вообще.


Давай не будем давать указания, что кому когда и где говорить ?

vanoman
Спасибо
...
Рейтинг: 0 / 0
15.06.2007, 11:04
    #34596845
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBTYPE_NUMERIC крушение мозга
Если ты не понял сути ответа, расшифрую:

Для выполнения преобразований следует использовать штатные средства, а не пытаться хачить внутренние структуры. Если библиотека не предоставляет вменяемых средств для таких преобразований, стоит подумать о замене ее на что нибудь более другое (OCI там или OCCI, у них с преобразованиями все ок).

В проттивном случае, все ПРОБЛЕМА напоминает проблему всем известного КОТА которому тупо нечего делать
...
Рейтинг: 0 / 0
15.06.2007, 12:18
    #34597203
vanoman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBTYPE_NUMERIC крушение мозга
Gluk (Kazan)Если ты не понял сути ответа, расшифрую:
Для выполнения преобразований следует использовать штатные средства, а не пытаться хачить внутренние структуры. Если библиотека не предоставляет вменяемых средств для таких преобразований, стоит подумать о замене ее на что нибудь более другое (OCI там или OCCI, у них с преобразованиями все ок).


Да какие тут внутренние структуры? Самая что ни на есть распространённая библиотека - OLE DB.
В ентом MSDN прописаны все возможные типы данных что она может вернуть.

Вот есть этот конкретный тип.
Для начала есть конкретный вопрос :"Как перефигачить в строку?"
Потом, по мере не соображения, возможно появятся другие вопросы...

Неужели никто этого до меня не делал?
Неужели никто не сталкивался с проблемой в поле типа NUMERIC лежит очень большое число и с ним надо работать?
Неужели никто не разбирал число из этой структуры когда все элементы BYTE val[16]; взведены в 256?

А что касается Кота, то как дальше писать код если такая низовая проблема, как получение значения из поля не решена?

У меня самый распространённый сервак MS SQL. Неужели весь мир работает с ним иначе не через OLE? КАК?
...
Рейтинг: 0 / 0
15.06.2007, 12:22
    #34597221
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBTYPE_NUMERIC крушение мозга
чё-то нашёл msdnIDataConvert::DataConvert
Converts the data from the source type to the destination type.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
HRESULT DataConvert (
   DBTYPE          wSrcType,
   DBTYPE          wDstType,
   DBLENGTH        cbSrcLength,
   DBLENGTH *      pcbDstLength,
   void *          pSrc,
   void *          pDst,
   DBLENGTH        cbDstMaxLength,
   DBSTATUS        dbsSrcStatus,
   DBSTATUS *      pdbsStatus,
   BYTE            bPrecision,
   BYTE            bScale,
   DBDATACONVERT   dwFlags);
...
Рейтинг: 0 / 0
15.06.2007, 12:26
    #34597248
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBTYPE_NUMERIC крушение мозга
vanomanУ меня самый распространённый сервак MS SQL. Неужели весь мир работает с ним иначе не через OLE? КАК?да это самый сосущий сервак, с ним никто не работает, вот и не знает никто, как с ним работать.
...
Рейтинг: 0 / 0
15.06.2007, 12:32
    #34597278
vanoman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBTYPE_NUMERIC крушение мозга
maXmoчё-то нашёл
Эх ёёёё... Идея! Как ты это искал? :-) Ушёл читать :-)

Спасибо! Доложу по результату.
p.s. только бы на найти шаблонный класс :-)

maXmo vanomanУ меня самый распространённый сервак MS SQL. Неужели весь мир работает с ним иначе не через OLE? КАК?да это самый сосущий сервак, с ним никто не работает, вот и не знает никто, как с ним работать.

:-)
...
Рейтинг: 0 / 0
15.06.2007, 12:36
    #34597306
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBTYPE_NUMERIC крушение мозга
открыл оле дб референс, там всё на видном месте лежит.
...
Рейтинг: 0 / 0
15.06.2007, 12:37
    #34597310
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBTYPE_NUMERIC крушение мозга
maXmo vanomanУ меня самый распространённый сервак MS SQL. Неужели весь мир работает с ним иначе не через OLE? КАК?да это самый сосущий сервак, с ним никто не работает, вот и не знает никто, как с ним работать.

Сервак нормальный, OLE DB - сосучий.
Когда был аналогичный выбор, остановились на ODBC. Щастливы
...
Рейтинг: 0 / 0
15.06.2007, 20:37
    #34599039
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBTYPE_NUMERIC крушение мозга
vanoman
У меня самый распространённый сервак MS SQL. Неужели весь мир работает с ним иначе не через OLE? КАК?

Весь мир работает через ADO. вы бы еще через сырые сокеты пытались с ним работать, тоже учень увлекательное занятие.
...
Рейтинг: 0 / 0
18.06.2007, 08:31
    #34600785
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBTYPE_NUMERIC крушение мозга
Lepsik vanoman
У меня самый распространённый сервак MS SQL. Неужели весь мир работает с ним иначе не через OLE? КАК?

Весь мир работает через ADO. вы бы еще через сырые сокеты пытались с ним работать, тоже учень увлекательное занятие.

ADO не более чем надстройка над OLE DB. Жизнь прикладнику облегчает, но ПРОБЛЕМ OLE DB не решает, к сожалению
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / DBTYPE_NUMERIC крушение мозга / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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