Autore Topic: Utilizzo diretto di SQL  (Letto 3952 volte)

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Utilizzo diretto di SQL
« il: 16 Ottobre 2008, 12:43:11 »
Ehilà!
Tutto bene? :)

Una cosa che non riesco a far funzionare (probabile problema di AMD64...) è l'ODBC verso gli AS/400 all'interno di Gambas.
Trafficando però ho visto che i comandi SQL dati in isql funzionano normalmente, per cui mi sorge la domanda: è possibile utilizzare chiamate dirette a SQL dentro Gambas, evitando l'uso diretto dell'ODBC?

:)

Ciau

Mario
Saluti a tutti

Mario

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Utilizzo diretto di SQL
« Risposta #1 il: 16 Ottobre 2008, 14:38:49 »
Come al solito ti esibisci sempre con domande difficili... :-)

Scherzo!

Da quello che ho inteso dal tuo post, sembra che tu ti debba collegare ad un database Firebird; "isql" assomiglia moltissimo al programma a riga di comandi di questo db, ma forse sbaglio.

Ad ogni modo, se invece il db è proprio quello che penso, allora la risposta è NI, ovvero gambas ha i driver per connettersi direttamente a Firebird; sul come poi attivare questi driver, e le relative librerie, non sò come aiutarti, dato che ci ho provato sulla base di un'altra richiesta di un'altro utente del forum, ma senza risultato.

Poi, se tutto funziona per AS/400 non sò, anche se il collegamento non credo dipenda dal tipo di sistema, altrimenti gli standard TCP/IP che ci stanno a fare? :-)

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo diretto di SQL
« Risposta #2 il: 16 Ottobre 2008, 16:20:38 »
EH eh, le domande me le studio di notte :)

Allora, ti spiego: ho il driver ODBC di mamma IBM correttamente settato, e questo lo so perché lanciando isql su questo collegamento, posso lanciare i comandi classici ottenendo risposte corrette.
Purtroppo l'ODBC di iSeries Access, in ambiente Gambas, non funziona, nel senso che quando lo lancio mi da un errore #11, quello generico.
HO anche provato a chiedere a Lui (Benoit, da non nominare invano ;) ), che non ha trovato una soluzione.
Io penso che sia un problema di AMD64 (la mia macchina è carrozzata così) per cui c'è qualche piccola idiosincrasia a livello di .so, che magari lui si aspetta a 32 bit e invece trova a 64 bit... non che sia grave, ma quando piglio il prossimo computer lo prendo con un 8088!

Visto che isql funziona mi chiedevo se era possibile bypassare l'utilizzo dell'ODBC utilizzando direttamente i comandi SQL.

Nel sistema AS/400 si fa questa cosa nell'RPG (o Cobol) embedded: in pratica, all'interno del sorgente si inseriscono dei comandi SQL, che un precompilatore traduce in chiamate a delle API esterne.
In questi ambiti su utilizzano i CURSORI, che sono praticamente dei file temporanei che contengono il risultato del comando SQL, e che possono essere utilizzati in lettura, anche casuale, con altri comandi (FETCH NEXT, eccetera...)
Speravo che anche in Gambas fosse possibile, ma mi sa che dovrò aspettare di avere un 386... :(
Saluti a tutti

Mario

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo diretto di SQL
« Risposta #3 il: 16 Ottobre 2008, 16:21:53 »
A PROPOSITO!

md9327, devo farti le mie congratulazioni per il prodotto che hai realizzato e che è stato inserito nel repository di UBuntu!
Ho visto solo qualche immagine ma mi sembra estremamente interessante...
chissà se un giorno potremo collegarlo, via ODBC, per poter gestire il DB2 dell'AS/400?! :D
Saluti a tutti

Mario

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Utilizzo diretto di SQL
« Risposta #4 il: 16 Ottobre 2008, 19:04:43 »
E' più sicuro uno Z80... :-)

Il problema è che servono delle librerie apposite, come del resto fanno ODBC e qualsiasi altra scatola nera...
Dato che non si tratta neppure di Firebird, allora non c'è uscita, perchè gambas si aggancia solo ad un set di librerie, e quindi di tipi di database: FireBird, MySQL, PostgreSQL, SQLite e ODBC.
Visto che il tuo database non è tra questi, allora non resta che l'alternativa ODBC, ma dato che non ti funzia, allora qui ci fermiamo.
Ci si può anche inventare salti mortali tripli e carpiati, ma certo la cosa non è così immediata; potresti gestire una specie di collegamento tra il programma gambas e isql, ma certo il discorso sarebbe abbastanza oneroso... Però, e dico però, il giochetto potrebbe andare, e sarebbe molto simile ad un processo a tre livelli, nel quale in mezzo c'è una sorta di scatola nera che si occupa di far da tramite tra i due programmi (una specie di quello che fà Tuxido, per far un esempio...). Questo però comporterebbe la creazione di una serie di protocolli di comunicazione per lo scambio dei dati, che isql rileverebbe direttamente dal database, ma che fornirebbe al programma gambas sotto forma di buffer ascii. Il discorso potrebbe anche essere utile a livello di sicurezza, dato che potresti agire su questa scatolina nera, ma sicuramente tutta la logica comporta un bel grosso lavorone!

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Utilizzo diretto di SQL
« Risposta #5 il: 16 Ottobre 2008, 20:01:17 »
Non riesci a passare il codice sql con la funzione Connection.Exec(query) ?

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Utilizzo diretto di SQL
« Risposta #6 il: 17 Ottobre 2008, 00:37:25 »
No, perchè la Connection ha bisogno di connettersi al db tramite un driver, tra quelli che ti ho elencato.

Il giochetto non si basa solo su stringhe sql, ma sul le modalità di connessione al singolo database, che varia da uno all'altro.

In generale sappiamo che un motore rdbms (db) funziona per gestire dati al suo interno, ognuno a suo modo e con particolarità diverse dagli altri; per poter gestire questi dati, il db ha necessità di collegamenti da/verso l'esterno, e per far questo vengono creati appositi driver, ovvero delle scatolette nere, che hanno il compito di aprire delle porte e di gestire la comunicazione tramite diversi protocolli, che non sono tutti uguali.
Una volta aperta la porta, e stabilite le modalità di scambio con l'esterno, è necessario che un sistema implementi tutte le logiche necessarie per interfacciarsi a questa scatola nera.
Con l'arrivo del web, e delle connessioni via rete, questa logica di connessione si è ampliata, aggiungendo ulteriori scatole nere che permettono il colloquio con il db tramite altri sistemi di comunicazione (vedi tci/ip, ecc.).
Il fato è che comunque, la primaria scatoletta nera (quella che apre la porta, tanto per intenderci) è sempre uguale (a parte le diversità di db e di versione), e quindi è necessario comunque stabilire la comunicazione tramite i protocolli prestabiliti dalla scatola.
Per evitare che ogni nuovo programma, che acceda ad un db, implementi ogni volta il suo apposito driver di collegamento, si utilizzano librerie esterne, ovvero altre scatolette nere che unificano e rendono più malleabile la gestione di un programma.
In assenza di queste scatolette (librerie) hai due alternative: costruirle ex-novo, ma in questo caso devi avere una perfetta conoscenza dei protocolli usati e di tutte le varianti del caso, oppure impiccarti al primo albero basso... :-)
Le librerie su cui si appoggia Gambas, sono librerie fornite ovviamente dai creatori di questi db, e nessuno si sogna di farne di nuove, per ovvi motivi...
Quindi, per concludere, non serve passare stringhe a chi non sà con cosa ha a che fare; Connection è un oggetto che ha bisogno di sapere a quale libreria rivolgersi per passare dati, e per qualsiasi altra forma di comunicazione come, ad esempio, se il db li ha memorizzati o meno, oppure addirittura gestire un cursore.

Spero di aver chiarito il concetto... :-)

Riguardo a pgDesigner, ti ringrazio, ma per il momento nessuna previsione sull'ODBC... Attualmente sono già troppo impegnato ad implementare MySQL e SQLite, e non è cosa facile.
La connessione ODBC poi è un tipo di connessione considerata generica, perchè proprio per la sua generalizzazione non permette di sfruttare appieno di tutte le potenzialità che il database offre.
Io lavoro giornalmente con Oracle, e la potenza di questo dbms può essere sfruttata solo attraverso i suoi driver proprietari, difficilmente qualcuno usa alternative come l'ODBC.
Ad ogni modo anche odbc ha bisogno di driver, e sono molti che non se ne rendono conto... Il suo scopo reale è quello di rendere più standard possibile le connessioni ad un db, ovviamente limitandone le caratterizzazioni di ognuno.

Vabbè, ora mi fermo, che ho finito l'inchiostro... :-)

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo diretto di SQL
« Risposta #7 il: 17 Ottobre 2008, 10:39:59 »
Be' quando ho scoperto che ai dati iSeries (allora si parlava ancora di AS/400) si poteva accedere anche dal PC mediante questo misterioso ODBC, sono impazzito!
Considera che una 'ndicina di anni fa l'installazione su un PC di un emulatore 5250 richiedeva due ore buone, tre minidischi da 5 pollici (!!!) e una riserva di bestemmie formato famiglia allargata! :)
Quindi le possibilità che ci sono adesso sono meravigliose!

In effetti l'idea di sfruttare l'isql per fare le chiamate che interessano e poi intercettare il risultato non è poi così peregrina: in fondo o quello o niente e dalle nostre parti (Torino) si dice "Pì che tost a l'è mei pitost", come dire che meglio avere poco che NON avere il meglio ;)
Saluti a tutti

Mario

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Utilizzo diretto di SQL
« Risposta #8 il: 17 Ottobre 2008, 12:22:16 »
'ndicina di anni fa dici? Hai paura di dire la tua età per caso ? :-)

Belli i 5 pollici, ci si sventolava bene durante l'estate, certo che gli 8" erano meglio, facevano più vento, però andavano bene lo stesso... :-)

Riguardo all'uso di isql, non è cosa nuova, come ti avevo già accennato, solo che metterla in piedi non è affare semplice.
Se hai in mente di farlo, ti auguro buona fortuna, però potrebbe essere un progetto interessante, in particolare per il fatto che trattasi di ambiente AS400.

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo diretto di SQL
« Risposta #9 il: 17 Ottobre 2008, 14:53:11 »
Età? Ah, ma è facile: sono del 1963, QUINDI ho 39 anni... :D

(non perdere il tempo a fare il calcolo, ho controllato... ho fatto un programmino in Gambas...)
Saluti a tutti

Mario

Offline ccc

  • Gambero
  • **
  • Post: 97
    • Mostra profilo
    • http://santecaserio.altervista.org/
Re: Utilizzo diretto di SQL
« Risposta #10 il: 17 Ottobre 2008, 16:35:44 »
AS/400? COBOL? ...oh santa cleopatra...

Ci lavorava una mia ex, poi l'hanno messa a lavorare in ASP e quindi l'ho lasciata: va bene usare sistemi proprietari, ma fino a un certo punto. (Scherzo, i motivi sono altri, ma scrivendo questa battuta ho riso molto e spero altrettanto di voi :lol: )

Sono d'accordissimo sia sull'8088, sia sullo Z80, purchè l'altoparlante di sistema sia in buone condizioni  :-D (NB: anche scrivendo questo ho riso molto)

Deliri a parte, overhill, io di quei sistemi non so niente ma chissà che qui non trovi qualcosa che ti possa aiutare:

http://picosoft.it/products.htm

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo diretto di SQL
« Risposta #11 il: 17 Ottobre 2008, 20:44:07 »
Eh eh eh, interessante, molto :)
I sistemi come l'AS/400 (iSeries) sono stati dati per morti un sacco di volte, e ogni volta hanno trovato una nuova vita, per cui ben vengano le Cassandre :)
E poi queste macchine hanno diversi vantaggi: hanno una marea di servizi integrati nel sistema operativo (tcp/ip, http, dns, ntp, sna, voip, eccetera) quindi senza costi aggiuntivi; hanno il DB2 che è integrato e quindi non va comprato a parte (tipo Access di M$); hanno il supporto nativo a SQL e tutto quello che ci gira intorno (tipo le Stored Procedure); e soprattutto sono molto diffusi e poco conosciuti, per cui chi, come me, "gli da del tu", ha lavoro assicurato per un bel po' di anni... :D
Saluti a tutti

Mario

Offline ccc

  • Gambero
  • **
  • Post: 97
    • Mostra profilo
    • http://santecaserio.altervista.org/
Re: Utilizzo diretto di SQL
« Risposta #12 il: 17 Ottobre 2008, 21:28:38 »
Mi fa piacere, e sono convinto che da un punto di vista tecnico mi piacerebbero un sacco... però sono allergico a tutto ciò che non è software libero  :evil:

In mezzo a tutte quelle diavolerie hai trovato qualcosa che possa risolvere il tuo problema?

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo diretto di SQL
« Risposta #13 il: 17 Ottobre 2008, 21:39:47 »
Per adesso no, ma sto imparando alcuni prodotti nuovi dell'AS/400 e non ho molto tempo... :)
Però ho una macchina non AMD64 e quindi posso provare lì se funziona o meno.
Saluti a tutti

Mario

g.paolo

  • Visitatore
Re: Utilizzo diretto di SQL
« Risposta #14 il: 18 Ottobre 2008, 09:05:38 »
Ti ricordo overhill, se non avessi avuto modo di saperlo, che gli AMD 64 funzionano comunque con versioni di linux e gambas a 32 bit. Io che ho avuto sempre AMD non mi sono mai azzardato a metter su sistemi a 64bit per non incorrere poi in qualche problema. All'inizio gambas c'era solo a 32bit e pertanto l'unico modo di usarlo senza problemi di sorta era quello di farlo andare sul 32bit.
Penso che per il 64bit serva ancora un bel po di tempo per renderlo affidabile come il 32bit e  non può certo essere diverso visto che il sistema è relativamente molto giovane!