Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Post - gianfry56

Pagine: 1 ... 4 5 [6]
76
Ho risolto il problema, con un colpo di fortuna,  utilizzando una funzione di sqlserver nella query, la STR() per l'esattezza;
quindi al posto di chiedere il campo ap_esist faccio la richiesta come STR(ap_esist) AS ap_esist e magicamente il risultato è perfetto...
non domandatemi il perché, è un mistero... non mai dovuto usare questo espediente in tanti anni di interrogazioni... ma alla fine quello che interessa è che il risultato sia corretto...  :2birre:
Spero possa servire ad altri  :ok:

Grazie comunque.  :ciao:

77
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:
Codice: sql [Seleziona]
[nome-server]
host = 192.168.42.3
port = 1433
tds version = 4.2


nel file /etc/odbcinst.ini
Codice: sql [Seleziona]
[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
Codice: sql [Seleziona]
[nome-host]
Description = ms-sql
Driver = ms-sql
Servername = nome-server
Database = nome-database


nel codice gambas (sinteticamente)
Codice: vb [Seleziona]
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

78
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:

Codice: sql [Seleziona]
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:

Codice: sql [Seleziona]
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.

Pagine: 1 ... 4 5 [6]