Autore Topic: gambas 3.19.1 con ODBC + MSSQL 2016: problemi query di raggruppamento  (Letto 197 volte)

Offline Simo

  • Gamberetto
  • *
  • Post: 3
    • Mostra profilo

Buonasera a tutto il team!

Sto effettuando dei test con gambas 3.19.1 installato in Ubuntu 22.04.4 LTS che tramite connessione ODBC si connette a MICROSOFT SQL SERVER 2016.

Per l'installazione del driver ODBC ho seguito il link seguente:
https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver16&tabs=ubuntu18-install%2Calpine17-install%2Cdebian8-install%2Credhat7-13-install%2Crhel7-offline

Per la configurazione del file odbcinst.ini ho seguito il link seguente:
https://gambaswiki.org/wiki/doc/odbc

Sono riuscito da gambas3 a connettermi a MS SQL SERVER, eseguendo senza problemi query di selezione (Select * from tabella1 where colonna1 = 'pippo') e query per inserire record (INSERT INTO tabella1 ( colonna1, colonna2) VALUES ( 'Bepe', 'pippo')".

Quando tento di eseguire una query di selezione con raggruppamento:
SQL = "SELECT SUM(collicar) as Tot_Colli FROM anaetichette WHERE lotto = '722078' GROUP BY lotto"

L'oggetto result sembra essere sempre vuoto, la proprietà rs.Available è sempre = False.

Qui di seguito il codice:

         rs = $con.Exec("SELECT SUM(collicar) as Tot_Colli FROM anaetichette WHERE lotto = '722078' GROUP BY lotto")
         WHILE (rs.Available)
               PRINT "record trovato: Tot colli:" & rs!Tot_Colli
               rs.MoveNext()
         WEND

Credo di sbagliare qualcosa, vi sarei grato se poteste darmi qualche dritta o consiglio in merito al problema.
Più in generale volevo sapere se qualcuno aveva già usato gambas3 con Microsoft SQL SERVER e/o aveva avuto un problema simile.

Ringrazio anticipatamente.










Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.272
  • Chi parla poco dice tanto...
    • Mostra profilo
Re:gambas 3.19.1 con ODBC + MSSQL 2016: problemi query di raggruppamento
« Risposta #1 il: 28 Aprile 2024, 21:04:00 »

Quando tento di eseguire una query di selezione con raggruppamento:
SQL = "SELECT SUM(collicar) as Tot_Colli FROM anaetichette WHERE lotto = '722078' GROUP BY lotto"

L'oggetto result sembra essere sempre vuoto, la proprietà rs.Available è sempre = False.

Qui di seguito il codice:

         rs = $con.Exec("SELECT SUM(collicar) as Tot_Colli FROM anaetichette WHERE lotto = '722078' GROUP BY lotto")
         WHILE (rs.Available)
               PRINT "record trovato: Tot colli:" & rs!Tot_Colli
               rs.MoveNext()
         WEND

Credo di sbagliare qualcosa, vi sarei grato se poteste darmi qualche dritta o consiglio in merito al problema.
Più in generale volevo sapere se qualcuno aveva già usato gambas3 con Microsoft SQL SERVER e/o aveva avuto un problema simile.

Ringrazio anticipatamente.


Prova in questo modo e vedi se ti ritorna qualcosa:
Codice: [Seleziona]
 rs = $con.Exec("SELECT SUM(collicar) as Tot_Colli FROM anaetichette WHERE lotto = '722078'  GROUP BY lotto;")

For Each rs
  PRINT "record trovato: Tot colli:" & rs!Tot_Colli
Next
« Ultima modifica: 30 Aprile 2024, 11:39:04 da milio »

Offline Simo

  • Gamberetto
  • *
  • Post: 3
    • Mostra profilo
Re:gambas 3.19.1 con ODBC + MSSQL 2016: problemi query di raggruppamento
« Risposta #2 il: 30 Aprile 2024, 21:03:25 »
Grazie per la celere risposta.

Ho provato anche col For Each come da te suggerito, ma non entra nel ciclo FOR come se il recorset fosse vuoto...

Ci sono altri suggerimenti o test che posso fare?

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:gambas 3.19.1 con ODBC + MSSQL 2016: problemi query di raggruppamento
« Risposta #3 il: 01 Maggio 2024, 14:55:57 »
Ci sono altri suggerimenti o test che posso fare?

In una discussione sulla ML viene data questa risposta alla richiesta di codice per interrogare con ODBC:
Citazione
Il mio codice è tutto in funzione che chiama la funzione e non è realmente riutilizzabile, ma il punto principale è utilizzare una raccolta per archiviare il set di risultati e quindi ottenere dati dalla raccolta poiché il set di risultati di ODBC non è enumerabile. Il resto è lo stesso di altri DB

Qui si parla di ODBC sulla nostra wiki:
https://www.gambas-it.org/wiki/index.php/ODBC

E qui sul libro tedesco:
https://gambas-buch.de/doku.php?id=k22:k22.9:start

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.272
  • Chi parla poco dice tanto...
    • Mostra profilo
Re:gambas 3.19.1 con ODBC + MSSQL 2016: problemi query di raggruppamento
« Risposta #4 il: 02 Maggio 2024, 16:44:23 »
A parte la proprietà count che mi ritorna sempre -1 anche se il recordset contiene di fatto dei dati, ho provato anch'io a fare dei test di raggruppamento... A me non da problemi la query...

Ma se esegui questa query:

Codice: [Seleziona]
rs = $con.Exec("SELECT * FROM anaetichette WHERE lotto = '722078' ;")

For Each rs
  PRINT "record trovato: " & rs[0]
Next

ti ritorna dei dati?

« Ultima modifica: 02 Maggio 2024, 16:45:28 da milio »

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.272
  • Chi parla poco dice tanto...
    • Mostra profilo
Re:gambas 3.19.1 con ODBC + MSSQL 2016: problemi query di raggruppamento
« Risposta #5 il: 02 Maggio 2024, 16:52:00 »
Curiosità....

collicar, anaetichette, lotto

Lavori per caso in o per una lavanderia industriale?


Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:gambas 3.19.1 con ODBC + MSSQL 2016: problemi query di raggruppamento
« Risposta #6 il: 02 Maggio 2024, 16:55:31 »
A parte la proprietà count che mi ritorna sempre -1 anche se il recordset contiene di fatto dei dati, ho provato anch'io a fare dei test di raggruppamento... A me non da problemi la query...

Ma se esegui questa query:

Codice: [Seleziona]
rs = $con.Exec("SELECT * FROM anaetichette WHERE lotto = '722078' ;")

For Each rs
  PRINT "record trovato: " & rs[0]
Next

ti ritorna dei dati?

Scusa se mi intrometto, ma sembra che Simo ti abbia risposto così:
Citazione
Grazie per la celere risposta.

Ho provato anche col For Each come da te suggerito, ma non entra nel ciclo FOR come se il recorset fosse vuoto...

Ci sono altri suggerimenti o test che posso fare?
:-\  :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.272
  • Chi parla poco dice tanto...
    • Mostra profilo
Re:gambas 3.19.1 con ODBC + MSSQL 2016: problemi query di raggruppamento
« Risposta #7 il: 02 Maggio 2024, 17:03:22 »

Scusa se mi intrometto, ma sembra che Simo ti abbia risposto così:
Citazione
Grazie per la celere risposta.

Ho provato anche col For Each come da te suggerito, ma non entra nel ciclo FOR come se il recorset fosse vuoto...

Ci sono altri suggerimenti o test che posso fare?
:-\  :ciao:


Esatto... infatti io ho tolto il raggruppamento e siccome nel post precedente ha detto che non c'erano problemi con query semplici, volevo verificare che il lotto n. 722078 esistesse per davvero, in modo da non correre dietro a problemi che non esistono (già avuto queste esperienze.... )

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:gambas 3.19.1 con ODBC + MSSQL 2016: problemi query di raggruppamento
« Risposta #8 il: 02 Maggio 2024, 17:08:55 »
Esatto... infatti io ho tolto il raggruppamento e siccome nel post precedente ha detto che non c'erano problemi con query semplici, volevo verificare che il lotto n. 722078 esistesse per davvero, in modo da non correre dietro a problemi che non esistono (già avuto queste esperienze.... )

 :-[ hai ragione, scusate la confusione  :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Simo

  • Gamberetto
  • *
  • Post: 3
    • Mostra profilo
Re:gambas 3.19.1 con ODBC + MSSQL 2016: problemi query di raggruppamento
« Risposta #9 il: 07 Maggio 2024, 23:43:18 »
Curiosità....

collicar, anaetichette, lotto

Lavori per caso in o per una lavanderia industriale?



Ciao a tutti, scusate il ritardo nel feedback della risposta.

No, non si tratta di lavanderie ma di lavorazioni carni industriali.


A parte la proprietà count che mi ritorna sempre -1 anche se il recordset contiene di fatto dei dati, ho provato anch'io a fare dei test di raggruppamento... A me non da problemi la query...

Ma se esegui questa query:

Codice: [Seleziona]
rs = $con.Exec("SELECT * FROM anaetichette WHERE lotto = '722078' ;")

For Each rs
  PRINT "record trovato: " & rs[0]
Next

ti ritorna dei dati?



Si, così funziona.
Abbiamo fatto ulteriori test sia usando il driver ODBC di microsoft sia usando il driver ODBC FreeTDS.

Con ODBC microsoft continua a non funzionare. Mentre con FreeTDS il raggruppamento funziona correttamente, ma va in crash nel caso in cui uno dei campi di aggregazione della select contiene un valore null.

Per Milio: potresti fornirci qualche dettaglio in più sul tuo scenario operativo? (quali ODBC e versioni Gambas/Distro linux?)

Grazie

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.272
  • Chi parla poco dice tanto...
    • Mostra profilo

Per Milio: potresti fornirci qualche dettaglio in più sul tuo scenario operativo? (quali ODBC e versioni Gambas/Distro linux?)

Grazie


Distro: Kubuntu 22.04
Versione Gambas: 3.19.1
ODBC: FreeTDS (versione pacchetto 1.3.6-1)
           tdsodbc (versione pacchetto 1.3.6-1)

Per il collegamento al Database nel file freetds.conf:

Codice: [Seleziona]
[Mago]
        host = 192.168.1.75
        port = 1305
        tds version = 8.0
        client charset = UTF-8

Parametri nel file odbcinst.ini:

Codice: [Seleziona]
[Ms-Sql]
Description=
Driver=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Driver64=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup=/usr/lib/odbc/libtdsS.so
Setup64=/usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
UsageCount=1
CPTimeout=
CPTimeToLive=
DisableGetFunctions=
DontDLCLose=
ExFetchMapping=
Threading=
FakeUnicode=
IconvEncoding=
Trace=
TraceFile=
TraceLibrary=
CPReuse=

parametri nel file odbc.ini:

Codice: [Seleziona]
[Mago]
Description=Ms-Sql
Driver=Ms-Sql
Servername=Mago
Database=LavanderiaNET
UID=######
PWD=######
Port=1305


...con FreeTDS il raggruppamento funziona correttamente, ma va in crash nel caso in cui uno dei campi di aggregazione della select contiene un valore null.


Io ho provato a fare dei test in questo modo:
ho modifcato il dato nel database mettendo il valore Null nel campo 'UM'  in un record a caso contenente l'articolo '29'
poi ho eseguito questo codice:

Codice: [Seleziona]
 hRes = DbMago.Exec("SELECT SUM(ritirato) as somma, cliente, UM FROM SI_BolletteRighe WHERE articolo = '29' group by cliente, UM;")
 
  For Each hRes
    Print hRes["somma"], hRes["cliente"], IIf(IsNull(hRes["UM"]), "NULL", hRes["UM"])
  Next

e mi ritorna correttamente in console senza andare in crash:

Codice: [Seleziona]
2       1887    NULL
1       1034    PZ
274     1862    PZ
5       1887    PZ
22      1911    PZ
245     2278    PZ
361     2311    PZ