kiedy wpinałem się do M$ pomógł dopiero MS SQL Debugger Podejrzyj debugerem klienta windows jakie flagi ustawia przy połączeniu z bazą - wszytkie fazy - uruchamianie aplikacji + wlogowywanie użytkownika X - ustaw takie same flagi w tinytds przykład (skrócony bo nie łączyłem się akurat z WAPRO tylko inną rakietą magazynowo/księgową):
def db_conn
@db_conn ||= ::TinyTds::Client.new(
username: 'top_secret',
password: 'even_more_secret',
host: '192.168.x.y',
port: 666,
database: 'myDb',
ecoding: 'encoding_of_the_db'
).tap do |client|
client.execute('SET ANSI_NULLS ON').do
client.execute('SET ANSI_PADDING ON').do
client.execute('SET ANSI_WARNINGS ON').do
client.execute('SET CONCAT_NULL_YIELDS_NULL ON').do
client.execute('SET QUOTED_IDENTIFIER ON').do
# [...]
# inne flagi ktore debugger pokaze :)
# potrafi być tego naprawdę sporo
end
end
zajrzyj też czy nie ma czegoś dziwnego w /etc/freetds/freetds.conf jakichś nadmiarowych ustawień które by wpływały na to jak są traktowane liczby “by default” bo widać że zrzuca wszystko do wartości z przecinkiem czy trzeba czy nie trzeba
Może to nie jest wina freetds/tinytds a ustawień domyślnych bazy WAPRO aplikacja windows może zestawia połączenie tuż przed akcją na danych manipulując przy tym flagami zależnie od potrzeby chwili debugger powinien sprawę wyjaśnić
Chyba nie będę tak kombinował, bo widzę, że wystarczy to co zwraca baza potraktować przez .to_i (gdyż jest to BigDecimal i konwersja działa) a wyszukiwanie WHERE ID= działa wyśmienicie na tradycyjnych integerach (na tych 0.1e1 też).
Łączę się z MSSQL tylko że z subiektem, więc przechodziłem wszystkie etapy.
To o czym piszesz to nie błąd tylko forma zapisu. Zapytanie zwraca to jako BigDecimal. W konsoli jak chcesz po ludzku zobaczyć to metodami to_s najlepiej.
A w widokach i tak używam number_with_precision(), więc sam to formatuje.
Jak miałbyś jakieś problemy to mogę spróbować pomóc.