Buongiorno, sono un nuovo utente e saluto tutti i componenti di questo forum a cui spero di poter dare anch'io il mio contributo.
Mi scuso anticipatamente degli eventuali errori che potrò fare ma sono sicuro che voi, pazientemente, mi correggerete :)
Premetto che uso gambas3 solo da poche settimane anche se, grazie alla sua semplicità e a una mia esperienza di vecchia data con il Visual Basic, sono riuscito in breve tempo a sviluppare un programma di accesso a database molto utile per il mio lavoro.
Non ho avuto alcuna difficolta a collegarmi a vari tipi di database, come sqlite3, mysql e MSSQL, ma ho riscontrato un unico, grosso problema con MSSQL nella lettura di dati di tipo 'float'; problema che penso di dover addebitare a gambas3, perchè la stessa query, con gli stessi driver freeTDS, utilizzata da terminale fornisce dati corretti.
Mi spiego meglio: questa query utilizzata da terminale (con isql) fornisce dei valori float decimali corretti per il campo ap_esist:
SQL> SELECT ap_codart, ap_magaz, ap_esist FROM artpro WHERE ap_codart = 'A-001-014-501'
+-------------------+-----------+-----------------------+
| ap_codart | ap_magaz| ap_esist |
+-------------------+-----------+-----------------------+
| A-001-014-501 | 1 | 1904,616 |
| A-001-014-501 | 2 | 0 |
| A-001-014-501 | 10 | 0 |
| A-001-014-501 | 293 | 0,8 |
+-------------------+-----------+-----------------------+
mentre la stessa query utilizzata con gambas3 mi da valori pari a ZERO! questo per qualsiasi campo di tipo float (i campi integer sono corretti). Ma la cosa strana è che se richiedo il valore del campo moltiplicato per 1000 il risultato è corretto:
SELECT ap_codart, ap_magaz, ap_esist, ap_esist*1000 AS ap_esist2 FROM artpro WHERE ap_codart = 'A-001-014-501'
ap_codart ap_magaz ap_esist ap_esist2
A-001-014-501 1 0 1904616
A-001-014-501 2 0 0
A-001-014-501 10 0 0
A-001-014-501 293 0 800
Purtroppo non ho trovato in questo forum molti post dedicati a MSSQL, ma spero che qualcuno di voi possa illuminarmi in merito a questo bug che mi sta letteralmente bloccando lo sviluppo del programma. :rolleyes:
Concludo assicurando che la lettura di campi di tipo float per database mysql e sqlite3 fornisce dati assolutamente corretti.
Grazie anticipatamente per qualsiasi vostro intervento.
Grazie vuott per la risposta.
Evito di postare il blocco di codice completo, perché sarebbero centinaia di righe, magari di non facile comprensione e che comunque non porterebbero alcun aiuto in quanto la connessione al database è perfettamente funzionante, solamente che nel set di risultati della query i campi stringa e numerici sono corretti mentre i campi float hanno tutti i valori a zero. Quindi il problema secondo me è la comunicazione tra il driver freeDTS e gambas.
La mia speranza era quella di capire se altri utenti, nel forum, avevano avuto il mio stesso problema.
Comunque, se può aiutare, questi sono i parametri utilizzati:
Nel file /etc/freetds.ini:
[nome-server]
host = 192.168.42.3
port = 1433
tds version = 4.2
nel file /etc/odbcinst.ini
[ms-sql]
Description = TDS Connection
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
Debug = 0
CommLog = 1
UsageCount = 1
FileUsage = 1
nel file .odbc.ini
[nome-host]
Description = ms-sql
Driver = ms-sql
Servername = nome-server
Database = nome-database
nel codice gambas (sinteticamente)
Dim Connection As Connection
Dim Risultato As Result
Connection = New Connection
Connection.Type = "odbc"
Connection.Host = "nome-host"
Connection.User = "xxxx"
Connection.Password = "yyyy"
Connection.Open()
Risultato = Connection.Exec("SELECT ap_codart, ap_magaz, ap_esist FROM artpro WHERE ap_codart = 'A-001-014-501'")
Do While Risultato.MoveNext()
print Risultato["ap_codart"],Risultato["ap_magaz"],Risultato["ap_esist"]
Loop
Connection.Close()
che fornisce i risultati che ho evidenziato nel primo post, cioè con i valori a zero nel campo ap_esist di tipo float
Grazie