Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Новое поле Sum тип Money. Доступ через ODBC не работет (+) / 2 сообщений из 2, страница 1 из 1
09.08.2007, 15:11
    #34717345
SergeiZhuk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новое поле Sum тип Money. Доступ через ODBC не работет (+)
Доброго всем дня! Прошу помочь советом.

Опердень RsBank работает под Pervasive.
В новой версии появилось новое поле Sum тип Money. Доступ через ODBC не работет.
По умолчанию тип ставит Numeric 20, 4
Перепробовал все поля. В базе знаний от разработчика есть такие слова.

Ответ: Ниже приводятся примеры преобразования полей, образующих поле Money к одному вещественному полю.
Задача состоит в том, что три поля, два из которых имеют тип длинное целое, а одно - целое, надо преобразовать в длинное вещественное.
В C++ это можно сделать с помощью объединения:
#include <stdio.h>
union
{
struct {
long a;
long b;
int c;
} s;
long double LDMON;
} u;

void main(void)
{
// 5100.00
u.s.a =0L;
u.s.b = -117047296L;
u.s.c =16401;

printf("%Lf", u.LDMON);
}

На Delphi (Pascal) :
Function LDMon_Extended( Int1,Int2 : Integer; SmlInt : SmallInt ) : Extended;
Var
LDMon : record
LI1,LI2 : Integer; { или LongInt }
SI : SmallInt; { или Word }
end;
begin
LDMon.LI1 := Int1;
LDMon.LI2 := Int2;
LDMon.SI := SmlInt;
move(LDMon,Result,SizeOf(Result){ =10 }); {копирует запись LDMon в результат функции}
end;

Как это решить на фоксе.

С уважением, Сергей.


Решение проблемы прошло так: новое поле Sum тип Money, по всей видимости не пропускает FoxPro, а не Pervasive.

Если писать так:

CREATE SQL VIEWs rem_postdoc_rub Remote Connect RsBankNet Share AS ;
SELECT ;
Postdoc_rub.Date_Document,;
Postdoc_rub.Date_Value,;
'810' AS Code_Currency,;
Postdoc_rub.Kind_Carry,;
Postdoc_rub.Kind_Oper,;
Postdoc_rub.Numb_Document AS Num_Doc,;
Postdoc_rub.UserField4,;
Postdoc_rub.Real_Payer,;
Postdoc_rub.Payer,;
Postdoc_rub.Real_Receiver,;
Postdoc_rub.Receiver,;
Postdoc_rub.Ground,;
Postdoc_rub.Sum,;
Postdoc_rub.ApplicationKey,;
Postdoc_rub.Result_Carry ;
FROM "Postdoc_dbt" Postdoc_rub ;
WHERE Postdoc_rub.Result_Carry <> 23 ;
ORDER BY Postdoc_rub.Date_Document, Postdoc_rub.Real_Payer, Postdoc_rub.Real_Receiver

то поле Sum не проходит, если писать так:

CREATE SQL VIEWs rem_postdoc_rub Remote Connect RsBankNet Share AS ;
SELECT * ;
FROM "Postdoc_dbt" Postdoc_rub ;
WHERE Postdoc_rub.Result_Carry <> 23 ;
ORDER BY Postdoc_rub.Date_Document, Postdoc_rub.Real_Payer, Postdoc_rub.Real_Receiver

то представление создается. В других таблицах поле с суммами такого же типа, но если оно называется по другому, не Sum, то представление создается.


Сегодня еще одна проблема всплыла: есть таблица Client, в ней появилось 2 поля тип String, длина 321 и одно поле тип String, длина 296. При построении представления из проекта Fox им ставит тип Logical, представление не работает.
Убираю 2 поля длиной 321, представление работает. Ставлю полю с длиной 296 другие типы, символьные, представление работает. Пробовал с полями длиной 321 применять функции SUBSTR, LEFT, у них в Pervasive синтаксис такой же как в фоксе, представление не работает.
...
Рейтинг: 0 / 0
27.08.2007, 08:30
    #34753420
Kruchinin Pahan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новое поле Sum тип Money. Доступ через ODBC не работет (+)
SergeiZhukДоброго всем дня! Прошу помочь советом.
то представление создается. В других таблицах поле с суммами такого же типа, но если оно называется по другому, не Sum, то представление создается.


Здесь я фиг знает попробуй алиасы для начала:

CREATE SQL VIEWs rem_postdoc_rub Remote Connect RsBankNet Share AS ;
SELECT ;
Postdoc_rub.Date_Document,;
Postdoc_rub.Date_Value,;
'810' AS Code_Currency,;
Postdoc_rub.Kind_Carry,;
Postdoc_rub.Kind_Oper,;
Postdoc_rub.Numb_Document AS Num_Doc,;
Postdoc_rub.UserField4,;
Postdoc_rub.Real_Payer,;
Postdoc_rub.Payer,;
Postdoc_rub.Real_Receiver,;
Postdoc_rub.Receiver,;
Postdoc_rub.Ground,;
Postdoc_rub.Sum AS Summa,;
Postdoc_rub.ApplicationKey,;
Postdoc_rub.Result_Carry ;
FROM "Postdoc_dbt" Postdoc_rub ;
WHERE Postdoc_rub.Result_Carry <> 23 ;
ORDER BY Postdoc_rub.Date_Document, Postdoc_rub.Real_Payer, Postdoc_rub.Real_Receiver

DBSetProp('rem_postdoc_rub.summa', 'Field', 'UpdateName', "Postdoc_dbt.Sum")

Если так не сканает, то надо будет преобразовывать данные на уровне SELECT во что-нибудь удобоваримое, а затем уже здесь снова преобразовывать во что-нибудь удобоваримое.


SergeiZhuk
Сегодня еще одна проблема всплыла: есть таблица Client, в ней появилось 2 поля тип String, длина 321 и одно поле тип String, длина 296. При построении представления из проекта Fox им ставит тип Logical, представление не работает.
Убираю 2 поля длиной 321, представление работает. Ставлю полю с длиной 296 другие типы, символьные, представление работает. Пробовал с полями длиной 321 применять функции SUBSTR, LEFT, у них в Pervasive синтаксис такой же как в фоксе, представление не работает.
Здесь вполне логично. Драйвер ODBC для слишком больших полей выдает настройку размерности по умолчанию. По умолчанию часто идет логический. Поэтому лучше проперти вьюхи выставлять руками:
DBSetProp(ThisView+'.MyField', 'Field', 'DataType', "C(250)")
DBSetProp(ThisView+'.MyField', 'Field', 'DataType', "M")
Если пофиг, что часть поля не влазит, можно оставить чар в 250 символов, если не пофиг, нужно чтобы влезло все 321, тогда надо использовать Memo
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Новое поле Sum тип Money. Доступ через ODBC не работет (+) / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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