Documentazione del componente ODBC

Il componente Gambas ODBC utilizza l'API fornita dal gestore dei driver unixODBC, quindi avere unixODBC installato e funzionante è un prerequisito per utilizzare le funzioni odbc in un'applicazione Gambas.

Questa documentazione è un riferimento a Gambas come introduzione generale all'ODBC in Unix o Linux, per un modo completo di installazione di riferimento, consultare queste pagine:

ODBC Generale

Open Database Connectivity, comunemente ODBC, è una specifica aperta per fornire agli sviluppatori di applicazioni un'API prevedibile con cui accedere alle origini dati. Un motore ODBC necessita di un driver per poter interagire con tipi di database specifici.

Ci sono due scelte: UnixODBC e iODBC. Gambas supporta e compila solo UnixODBC. La specifica ODBC utilizza i cosiddetti Nomi di Origine Dati (Data Source Names o DSN) per connettersi a diversi DBMS.

Informazioni sulle installazioni UnixODBC

Le distribuzioni Linux offrono pacchetti per l'installazione manuale. Ad esempio, nella distribuzione OpenSuse, il pacchetto unixODBC è diviso in due parti, il pacchetto unixODBC di base che fornisce tutte le librerie e le funzionalità di base (ma che non fornisce la parte GUI), e il pacchetto che contiene la parte GUI (cerca e installa la parte GUI come pacchetto separato). Se preferisci compilare da solo il pacchetto unixODBC puoi scaricare il codice sorgente dal sito web unixODBC http://www.unixodbc.org segui le istruzioni di compilazione e installazione fornite con il pacchetto. Tieni presente che alcune distribuzioni sono fornite con file di sviluppo separati in un pacchetto "devel", ad esempio in OpenSuse i cui pacchetti sono chiamati unixodbc-devel.

I driver sono i componenti UnixODBC necessari per connettersi a ciascun diverso tipo di DataBase e non sono inclusi o forniti dal pacchetto unixODBC principale in nessuna distribuzione Linux. Ad esempio, il driver relativo al connettore mysql odbc consente alla infrastruttura UnixODBC principale di connettersi a un DBMS MySQL, sono i cosiddetti myodbc delle distribuzioni Linux basate su Debian. Per compilare manualmente quei driver, saranno necessari i file di intestazione di sviluppo dell'installazione di UnixODBC.

Informazioni sull'installazione di UnixODBC Gambas

Per abilitare il componente ODBC di Gambas, le distribuzioni Linux offrono i rispettivi pacchetti, ad esempio nella distribuzione basata su Debian si chiamano gambas3-gb-db-odbc; generalmente tutti i pacchetti dei moduli relativi a gambas vengono installati quando il pacchetto principale di gambas è installato nelle distribuzioni linux mayor.

D'altra parte, se l'installazione di Gambas è stata eseguita manualmente e tramite la modalità di compilazione e installazione, è necessario compilare Gambas dopo che il pacchetto unixODBC è stato installato con le intestazioni di sviluppo incluse. Se hai già compilato Gambas prima dell'installazione del pacchetto unixODBC , devi ricompilare di nuovo Gambas. Alla fine della compilazione, vedrai tutti i moduli Gambas che sono configurati e abilitati nell'ambiente Gambas, se tutto ha funzionato bene, il componente ODBC dovrebbe essere abilitato e installato.

Informazioni sulle configurazioni di UnixODBC

Il Componente Gambas ODBC si basa sulla configurazione effettuata sui driver unixODBC.

UnixODBC utilizza i cosiddetti file "ini". UnixODBC distingue tra due tipi di file ini. File ini di sistema (progettati per essere accessibili ma non modificabili da alcun utente) e file ini dell'utente (che sono privati ​​per un particolare utente e possono essere modificati da quell'utente stesso).

File ini di sistema: Sono due, il file di sistema odbcinst.ini contiene informazioni sui driver ODBC disponibili per tutti gli utenti e il file odbc.ini che contiene informazioni sui DSN per la connessione ai database disponibili per tutti gli utenti. Questi "DSN di sistema" sono utili per applicazioni come i server web che potrebbero non essere in esecuzione come un utente reale e quindi non avranno una directory home per contenere un file odbc.ini.

File ini utente: ce n'è uno solo, il .odbc.ini con un "punto" prima del nome, qui ci sono le informazioni ad uso esclusivo dell'utente e si trova nella home root dell'utente proprietario.

Il tipo di connessione è definito dal file di configurazione odbcinst.ini, ogni driver definisce un nome del tipo di driver e quindi questa definizione viene utilizzata dalle definizioni di connessione del DSN. Il secondo utilizzo del file di configurazione odbc.ini è opzionale, può essere utilizzato per definire le proprietà di connessione al database di DSN come il nome utente e la password.

I DSN sono stringhe di connessione, possono essere definite nel file odbc.ini o da una stringa di connessione, la stringa di connessione è tutte le proprietà separate da un punto e virgola mentre nel file odbc.ini le proprietà di connessione sono separate da nuove righe e ciascuna connessione divisi per sezione vedi esempio.

Gambas e UnixODBC in generale

Prima di connettersi a un database, è necessario disporre del driver ODBC del tipo di connessione specifico per il DBMS specifico. Per il DSN la sorgente dati può essere dal sistema, dal file ini dell'utente o dalle stringhe di connessione senza DSN all'interno del codice, a seconda del database a cui ci si vuole connettere.

Il Componente ODBC di Gambas analizza solo le chiamate all'API fornite dal gestore driver unixODBC, quindi le frasi SQL DLL o DDL SQL dipenderanno dall'API del livello di implementazione del gestore driver unixODBC. Quindi, fondamentalmente, se lo standard ODBC non implementa una funzionalità specifica, il componente Gambas si limiterà a restituire VERO (-1) o FALSO. Ad esempio, la definizione dell'API ODBC per un'istruzione SELECT non implementa un conteggio dei resi, quindi l'implementazione dell'API ODBC di Gambas restituisce -1 sempre (TRUE), il che significa che almeno una riga viene restituita dalla frase; in caso contrario, non verrà restituito alcun risultato.

Componente di installazione

L'installazione di Gambas nasconde così ODBC nella documentazione Gambas Install

Componente Libreria richiesta
gb.db.odbc libodbc.so

Dettagli tecnici del Componente

L'utilizzo di ODBC tramite la definizione del file DSN richiede Connection.Type, Connection.Host in cui il nome della definizione DSN viene impostato dal file "odbc.ini" e le proprietà Connection.Login/Pass impostate correttamente. Per ulteriore documentazione, vedere la proprietà Host dalla classe Connection.

L'utilizzo di ODBC tramite ConnectionString richiede solo le proprietà Connection.Type (in modo che gambas sappia che dovrebbe utilizzare il componente ODBC) e le proprietà Connection.Host (per i dati di connessione) impostate correttamente.

Il componente, in primo luogo, analizzerà la proprietà Host alla ricerca di punti e virgola (";"). Se ne trova almeno uno, assumerà che la proprietà contenga un ConnStr. Se non ci sono punti e virgola, si connetterà come sempre, con un DSN. In caso contrario, utilizzerà ConnStr in Host per chiamare la funzione SQLDriverConnect () di ODBC. Ma quando il componente chiama quella funzione ODBC, non vengono utilizzate altre proprietà del componente (gambas) e quindi vengono ignorate. Si presume che tutti i dati necessari per la connessione siano presenti in ConnStr.

Vedere anche le pagine della documentazione specifica: Come creare e utilizzare la connessione UnixODBC e la documentazione della classe di connessione.

Configurazione della Connessione UnixODBC

Le estensioni dell'ODBC sono disponibili per quanto riguarda i loro moduli driver. L'elenco dei driver disponibili si trova in http://www.unixodbc.org/drivers.html, ad esempio per connettersi a un DBMS Sybase è necessario installare e configurare un driver FreeTDS nel sistema di installazione UnixODBC.

Configurare un driver

I driver UnixODBC sono registrati nel file odbcinst.ini, i loro file sono estensioni di libreria che sono anche definite nello stesso file. Di seguito è riportato un esempio di supporto del driver Sybase per una connessione sybase ODBC.

[ODBC]
Trace    = Yes
TraceFile = /var/log/odbcsql.log
ForceTrace = Yes
  
[FreeTDS]
Description = FreeTDS Driver for Linux using guindosers DBs
Driver = /usr/lib/odbc/libtdsodbc.so
Setup = /usr/lib/odbc/libtdsS.so
UsageCount = 1

Dalle distribuzioni Linux generali installa e configura i driver dai pacchetti.

Configurare una connessione DSN

Dopo aver configurato il driver che si desidera utilizzare, è necessario definire un evento Nome origine dati per definizione o per stringa di connessione ODBC completa.

Poiché Gambas 3.8.1 consente alla proprietà Connection.Host di essere una stringa di connessione ODBC completa.

Nel file di definizione del nome dell'origine dati odbc.ini è inoltre possibile specificare tutti i parametri necessari per connettersi al database. Tutti i parametri sono specifici del database del driver e possono variare da database a database.

Come puoi vedere, nell'esempio seguente, la configurazione dei due DSN è diversa perché i parametri necessari sono specifici del database. Il primo è per un database MySQL (che è in esecuzione localmente), il secondo è per un Sybase in esecuzione su un server remoto.

[odbcmysql1]
Driver = MySQL
Database = mysql
Server = localhost
Port = 2638
ReadOnly = No

[odbcsybase1]
Driver = FreeTDS
Database = sybasedemo
Server = 10.10.200.10
Port = 2638
ReadOnly = No
TDS_Version = 5.0

È necessario disporre di un driver di database configurato per ogni tipo di database e di un'origine dati per ogni database che si desidera utilizzare. Ad esempio, se hai due database MySQL, di cui il primo è in esecuzione sul sistema remoto A e il secondo sul sistema remoto B, avrai un solo driver database configurato (connettore MySQL odbc), ma due diverse origini dati, una source descriverà la connessione (e tutti i relativi parametri) al sistema A e una Data source descriverà la connessione (e tutti i parametri relativi) per il sistema B.

Esempi di configurazione unixODBC

Ci sono alcune configurazioni ODBC per Linux. Quelli che si presume che odbcinst.ini siano in /etc e odbc.ini sono anche in /etc, per l'utente come ".odbc.ini" nella directory home e un utente normale.

Esempio di odbcinst.ini che si trova nella directory /etc. Questo file contiene tutte le configurazioni dei driver e le opzioni di configurazione di Driver Manager

Esempio di definizione dell'intero file system /etc/odbcinst.ini

Questo mostra un file generale di esempio del file odbcinst.ini per i driver ODBC più utilizzati:

odbcinst.ini

[ODBC]
Trace = No
TraceFile = /tmp/sql.log
ForceTrace = No
Pooling = No


[MySQL]
Description =
Driver = /usr/lib/odbc/libmyodbc.so
Setup = /usr/lib/odbc/libodbcdrvcfg1S.so
UsageCount = 1

[FreeTDS]
Description = TDS driver Sybase SQL
Driver = /usr/lib/odbc/libtdsodbc.so
Setup = /usr/lib/odbc/libtdsS.so
CPTimeout = 
CPReuse = 
UsageCount = 1

[PostgreSQL]
Description = PostgreSQL ODBC driver (Unicode version)
Driver = /usr/lib/odbc/psqlodbcw.so
Setup = /usr/lib/odbc/libodbcpsqlS.so
Debug = 0
CommLog = 1
UsageCount = 1

Esempio di file /etc/odbc.ini a livello di sistema

Odbc.ini a livello di sistema situato nella directory /etc utilizzando la precedente definizione odbcinst.ini. Il file odbc.ini consente le password, ma ricorda che il file odbc.ini a livello di sistema è leggibile da qualsiasi utente registrato.


odbc.ini

[mysqlodbc-testdb]
Description = MySQL
Driver = MySQL
Host = localhost
Database = testdb
Port =

[mysqlodbc-kinderdb]
Description = MySQL
Driver = MySQL
Host = 10.10.200.10
Database = kinderdb
UserName = root
Password = mysql.secret
Port = 3369
ReadOnly = No

[ejabberd-postgres]
Description = PostgreSQL ejabberdb conection
Driver = PostgreSQL
Trace = No
Database = ejabberdnode
Server = 127.0.0.1 # if use Servername, must be equal of the node host ejabberd name
Port = 5432
ReadOnly = No
RowVersioning = No
ShowSystemTables = Yes
ShowOidColumn = No

[sainthacking]
Description = Conecion a saint to hack and crack
Driver = FreeTDS
Trace = Yes
TraceFile = /tmp/errc.log
Database = saintnonmina
Server = 192.168.1.100
Port = 1723
ReadOnly = No
TDS_Version = 8.0

Esempio di file odbc.ini a livello di utente

Lato utente ~/.odbc.ini si trova nella directory /home/ utilizzando la definizione odbcinst.ini a livello di sistema. Il file utente odbc.ini consente le password e deve essere "chown" per poter essere letto dall'utente proprietario.

Configurazione odbc dell'utente situata nella directory home dell'utente .odbc.ini


.odbc.ini

[saintuseraccess]
Description = Conecion a saint with auto user and password
Driver = FreeTDS
Trace = Yes
TraceFile = /tmp/errc.log
Database = saintnonmina
Server = 192.168.1.100
UserName = dba
Password = sql
Port = 1723
ReadOnly = Yes
TDS_Version = 8.0


[kinderdb-useronly]
Description = MySQL
Driver = MySQL
Host = 10.10.200.10
Database = kinderdb
UserName = root
Password = mysql.secret
Port = 3369
ReadOnly = No

[ejabberd-useronly]
Description = PostgreSQL ejabberdb conection
Driver = PostgreSQL
Trace = No
Database = ejabberdnode
Server = 127.0.0.1 # if use Servername, must be equal of the node host ejabberd name
UserName = root
Password = postgres.secret
Port = 5432
ReadOnly = No
RowVersioning = No
ShowSystemTables = Yes
ShowOidColumn = No

Verifica delle definizioni DSN ODBC

L'accesso può essere verificato se il pacchetto UnixODBC è stato installato completamente con l'utilità isql.

A seconda dell'ambito del file DSN odbc.ini se questo è a livello di sistema può essere testato e utilizzato da qualsiasi utente registrato; Il DSN a livello di utente può essere utilizzato e testato solo dall'utente proprietario.

Il formato del comando è semplice: isql <DSN name> <user> <password>, e il nome utente e la password sono opzionali, ma in alcuni driver come FreeTDS sono obbligatori.


/bin/bash

% isql ejabberd-useronly username secretpassword.123
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>select * from users

Vedi anche