powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / VB Recordset --numeric and float-- запятая и точка
33 сообщений из 33, показаны все 2 страниц
VB Recordset --numeric and float-- запятая и точка
    #32039450
camka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проблема:
Код: plaintext
1.
2.
3.
4.
5.
dim rs as recordset
dim aa as Double
.....
.....

aa=rs.Fields( "Summa" );

региональные настройки:
Decimal Symbol - ","

если Summa в таблице типа флоат, то всё в норме, когда считывает с базы автоматически все точки переделывает в запятые и присваивание даблу проходит без проблем, если же Summa типа numeric, то котвертить точки в запятые не хочет и выдаёт ошибку Type mismatch.
Региональные настройки менять нельзя.
Каждый раз где считывается поле и присваевается даблу Val() (который в принципе помогает) ставить тоже не желательно. Слишком много работы, обильный код и искать везде плохая идея.
Как быть?
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039454
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А перед считыванием привести к флоат все нужные нумерики не получаеться,если в ХП то там,если adCmdText то в тексте запроса
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039456
camka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нельзя. Мы от флоата долго избавлялись. Он в конец числа разную левоту ставит при вычислении может сбажить
Код: plaintext
select cast( 0 . 4  as float)

так примерно. Да и кода менять не меньше чем Val() подставлять.
Я вот думаю мож как можно класс Рекордсет переписать. чтоб нумерик тоже конвертил нормально. Но КАК?
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039457
camka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут умные челы говорят тип ВБ понимает нумерик как стринг. правда ли это.
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039458
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверь потом всем и расскажешь:))
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039470
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в региональных настроках для денежных типов что?
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039480
camka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для денег эстонские кроны. но это не влияет. Рекордсет не хочет конвертить нумерик в числовой тип данных. если региональные настройки менять, с точки на запятую,
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039483
camka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hе дописал. Ну дак вот, если рег. настр. с запятой на точку то всё в норме. конвертить не неда и так понятна. но так нельзя. клиентов то много . всем не поменяешь. ну а если поменяешь дак может им эта запятая нужна в другом месте.
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039484
camka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
короче решили проблему тем что переделали тип в базе с нумерика на децимал. Рекордсет сразу распознал что это цифорки, аккуратно заменил все точечки на запятые. всё пока вроде как работает.
ждём с нетерпением новых багов
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039501
Фотография RatTail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ну вас всех в задницу. 40 минут назад СПЕЦИАЛЬНО поставил себе VB6.0, шоб проверить. И всё работает.
поле "n", конечно, нумерик.
Sub camka()
Dim cn As New ADODB.Connection, rs As New ADODB.Recordset
Dim aa As Double
cn.ConnectionString = "provider=sqloledb;" & _
"data source=tratata;initial catalog=bz;user id=sa;password=;"
cn.Open
rs.Open "t", cn, adOpenKeyset, adLockOptimistic, adCmdTable
rs.MoveFirst
MsgBox rs("n") ' имеем 0,44
aa = rs("n")
MsgBox aa * 5.78 ' имеем 2,5432

rs.Close
cn.Close
End Sub

Поражаюсь таланту челов находить себе проблемы.
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039522
Ба! Да судя по тексту VB Камка работает через DAO. Если так, то DAO с SQL Server шизует. Сам пробовал работать по привычке, но так как много времени прошло, всех багов не помню, тут же перескочил на ADO, что и советую сделать.
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039564
Фотография Jimmy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Константин Карпов

И в каком же это месте текста ув. тов. camca видно это самое DAO? Уж не rs ли Fields(..) ?

RTFM на ADODB.
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039565
camka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно ДАО.

Код: plaintext
1.
Dim ws As Workspace
Dim conn As Connection


Так что не спорьте
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039568
Фотография Jimmy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не спорю я. Просто вижу, что в теме есть:
Код: plaintext
1.
2.
3.
4.
5.
6.
dim rs as recordset
dim aa as Double
.....
.....

aa=rs.Fields( "Summa" );
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039580
camka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что. кто-нить нашел что нить подтверждающее догадку того что рекордсет несправедливо считает нумерика стрингом
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039740
2 Jimmy

dim rs as recordset

В ADO так рекордсет не объявишь. Нужно создавать независимый экземпляр объекта (As New). А в DAO - пожалуйста.
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039826
Andrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Константин Карпов

Объявишь так же как и в ДАО:

dim rs as recordset
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039909
2 Andrew
Обьявить-то можно. А работать-то будет?
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039919
Фотография Jimmy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Константин Карпов

Будет работать.
Код: plaintext
1.
2.
3.
4.
5.
' Создание ссылки
Dim rs As Recordest
:::
' Инициализация ссылки
Set rs = New Recordset 

так же корректно, как и
Код: plaintext
1.
2.
3.
' Создание и инициализация ссылки
Dim rs As New Recordest
:::
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039929
' Создание ссылки
Dim rs As Recordest
:::
' Инициализация ссылки
Set rs = New Recordset
Нечестно. Про кривые винты мы не договаривались. Все равно создается отдельный экземпляр.
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039930
camka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
э, маразматики!

не отклоняйтесй от изначального вопроса
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039935
Фотография Jimmy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 camka
Ну спасибо - утешил. Тепрь я знаю, что со мной...
А то мне диагноз никак поставить не могут :0(

Ну маразматический совет тогда:
попробуй заменить Dim aa As Double -> Dim aa As Variant
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039944
camka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
слишком маразматично. в коде много менять. выискивать нада где считывается и кому присваивается и менять. да еще неизвестно как себя Вариант поведёт. в некоторых случаях происходит не присваивание а из базы сразу операндом в какую нибудь процедуру. а там тип дабл. опять точек не поймёт.
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32039953
Фотография Jimmy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 camka
Не, ну а ты как хотел то? Чтобы все само собой произошло?
Так ведь это тоже не менее маразматичное желание :0)
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32040007
camka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да нет. Я просто искал самое оптимальное решение. Да и в принципе нашел. Говорю же - переделали везде тип с нумерика на децимал. Всё работает отменно. Но вот вопрос то остался - почему же всё-таки Рекордсет не распознавал нумерик как числовой тип, или может всё гораздо сложнее?
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32040016
Фотография Jimmy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так ответ был: "DAO глючит" (с) Константин Карпов
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32043267
camka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вот опять. всё вроде бы нормально, а нет. если читает чистое поле без всяких агрегейт функций то определяет тип как числовой. если же скл запрос включает сум или авг то поле вновь считается текстовым. почему же тогда с флоатом всё работало?
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32043303
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
cast(sum(lala) as decimal( 16 , 4 ))
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32043430
camka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
именно так и справляемся. но очень много кода. надо искать сначала таблицы, потом поля, потом где аггр. ф-и используются, потом изменять. на и при добавлении новых запросов всегда придётся учитывать КАСТ. а это ой как неудобно. как хорошо было с флоатом. дак может всётаки есть возможность?
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32043432
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В свое время я изголялся тоже как мог, а потом плюнул и написал две функции :
Public Function Rep(ByVal p_Target As Variant) As String
Rep = Replace(p_Target, ",", ".")
End Function
Public Function URep(ByVal p_Target As Variant) As String
URep = Replace(p_Target, ".", ",")
End Function

И по обстановке пользуюся одной или другой.
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32043435
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на самом деле не нуно работать с ДАО....
вчера вечером попробовал .. туфта такая ....
АДО.... или напрямую оледб...
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32043713
camka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
В свое время я изголялся тоже как мог, а потом плюнул и написал две функции : 
Public Function Rep(ByVal p_Target As Variant) As String 
Rep = Replace(p_Target,  "," ,  "." ) 
End Function 
Public Function URep(ByVal p_Target As Variant) As String 
URep = Replace(p_Target,  "." ,  "," ) 
End Function 

И по обстановке пользуюся одной или другой.


да и простой Val() неплохо справляется. тока мороки не меньше чем с CAST
...
Рейтинг: 0 / 0
VB Recordset --numeric and float-- запятая и точка
    #32043715
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 camka
Сравни Val("5.5") и VAL("5,5")
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / VB Recordset --numeric and float-- запятая и точка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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