e70abcdcb1
Aggiunge un connettore completamente managed per database Visual FoxPro e dBase, utilizzabile come sorgente dati in tutti i flussi dell'applicazione (discovery manuale, esecuzione schedulata, hash/change-detection, backup/restore). ## Motivazione Il provider OLE DB ufficiale (VFPOLEDB.1) è solo a 32-bit, deprecato e richiede installazione separata. Il connettore managed usa DbfDataReader 1.0.0 (MIT), legge direttamente i file .dbf/.fpt/.dbc a 64-bit senza dipendenze esterne e con streaming efficiente (tabelle da centinaia di MB con uso di memoria contenuto). ## Nuovi file - DataConnection/DB/FoxPro/FoxProConnectionInfo.cs Classe sealed con le informazioni di connessione risolte (cartella, percorso .dbc, encoding, flag IncludeDeleted). Proprietà di convenienza IsContainer e DisplayName. - DataConnection/DB/FoxPro/FoxProReader.cs Helper statico che registra CodePagesEncodingProvider, risolve la connection string (path diretto, stile OLE DB con Provider=vfpoledb, chiave=valore), verifica l'accesso al filesystem, legge il catalogo .dbc (il file .dbc è esso stesso un DBF; filtro su OBJECTTYPE='Table' + cross-check esistenza fisica .dbf), enumera le tabelle free, mappa i tipi VFP (Character, Memo, Numeric, Float, Double, Integer, Currency, Date, DateTime, Logical, General) in descrizioni leggibili, esegue streaming dei record via DbfDataReader, auto-rileva l'encoding dall'header DBF (language driver byte) con fallback a code page 1252, e analizza query SELECT [TOP n] * FROM tabella. - DataConnection/DB/FoxProDatabaseManager.cs Implementa IDatabaseManager. Lettura: TestConnectionAsync, GetTableNamesAsync, GetTableSchemaAsync, GetDatabaseSchemaAsync, GetAllRecordsAsync, ExecuteRawQueryAsync, GetPrimaryKeyFieldAsync (ritorna null, selezione manuale chiave), GetAvailableDatabasesAsync, ChangeDatabaseAsync (no-op per sorgenti file-based). Scrittura: tutti i metodi di modifica (Insert/Update/Delete/Upsert/BulkInsert/ ExecuteCommand/ExecuteNonQuery) lanciano NotSupportedException con messaggio esplicito. - DataConnection/DB/EF/SchemaProviders/FoxProSchemaProvider.cs Implementa IDatabaseSchemaProvider delegando a FoxProReader. Gestione errori per tabella in GetDatabaseSchemaAsync (una tabella non apribile non blocca la discovery). - FOXPRO_CONNECTION.md Guida utente: passo-passo per creare la credenziale, formato connection string, tabella tipi VFP supportati, note su sola lettura e limitazioni query, tabella risoluzione problemi (caratteri accentati, tabelle mancanti, ecc.). ## File modificati - DataConnection/DataConnection.csproj Aggiunto DbfDataReader 1.0.0 (porta transitivamente System.Text.Encoding.CodePages >= 10.0.3; rimossa dipendenza esplicita alla versione 9.0.3 che causava NU1605). - DataConnection/DB/Enums/DatabaseType.cs Aggiunto valore Foxpro in fondo all'enum (preserva valori già persistiti). - CredentialManager/Models/CredentialModels.cs Aggiunto DatabaseType.Foxpro all'enum e metodo BuildFoxproConnectionString che genera "Data Source=percorso[;CodePage=n][;IncludeDeleted=true]". - DataConnection/CredentialManagement/Models/CredentialExtensions.cs Mappatura bidirezionale Foxpro tra enum CredentialManager e DataConnection. - DataConnection/CredentialManagement/Services/DataConnectionCredentialService.cs Aggiunto TestFoxproConnection: verifica percorso accessibile, legge nomi tabelle, restituisce messaggio con conteggio tabelle, encoding rilevato e nota sola lettura. - DataConnection/DB/EF/DatabaseSchemaProviderFactory.cs Caso Foxpro => new FoxProSchemaProvider(). - Data_Coupler/Services/DataConnectionFactory.cs Branch Foxpro => new FoxProDatabaseManager(connectionString). - Data_Coupler/Extensions/DataCoupler/DatabaseMethod.cs Aggiunto IsFoxproConnection() e caso Foxpro in CreateLimitedQuery (SELECT TOP n * FROM (query) AS subquery). - CredentialManager/Integration/DataConnectionHelper.cs ValidateDatabaseCredential: introdotto flag isFileBased (Sqlite || Foxpro) per esonerare host/utente/password/porta; messaggio di errore specifico per il campo percorso FoxPro. - Data_Coupler/Pages/CredentialManagement.razor Aggiunta opzione "Visual FoxPro (.dbc / .dbf)" nel selettore tipo database. Sezione di configurazione dedicata: banner sola lettura, campo percorso con esempi (.dbc e cartella), dropdown code page (Auto/1252/1250/1251/850/437/65001), checkbox record cancellati, pannello tipi supportati, anteprima connection string. Fix validazione form test-connessione: branch Foxpro che verifica solo DatabaseName (non Host/Username/Password), eliminando il falso errore "Il campo Host è obbligatorio". Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
107 lines
4.5 KiB
Markdown
107 lines
4.5 KiB
Markdown
# Connessione a database Visual FoxPro
|
||
|
||
Data-Coupler supporta i database **Visual FoxPro / dBase** come **sorgente dati** (sola lettura)
|
||
tramite un lettore **completamente managed**: legge direttamente i file `.dbf` (tabelle),
|
||
`.fpt` (campi memo) e `.dbc` (database container) **senza installare alcun provider OLE DB/ODBC**
|
||
e funzionando a **64-bit**.
|
||
|
||
> ℹ️ **Perché managed e non OLE DB?** Il provider `VFPOLEDB.1` di Microsoft è **solo a 32-bit**,
|
||
> deprecato e va installato a parte. Il lettore managed non ha questi vincoli e funziona ovunque
|
||
> giri l'applicazione (anche in container Linux/Windows a 64-bit).
|
||
|
||
---
|
||
|
||
## 1. Come connettersi (esempio)
|
||
|
||
La "connessione" FoxPro è semplicemente un **percorso**. Non serve host, utente o password.
|
||
|
||
### Passo passo nell'interfaccia
|
||
|
||
1. Vai su **Credenziali** → **Aggiungi credenziale database**.
|
||
2. **Nome**: un nome a piacere (es. `Gestionale FoxPro`).
|
||
3. **Tipo Database**: seleziona **Visual FoxPro (.dbc / .dbf)**.
|
||
4. **Percorso Database FoxPro**: inserisci uno dei due:
|
||
|
||
| Caso | Cosa inserire | Esempio |
|
||
|---|---|---|
|
||
| **Database container** | percorso completo al file `.dbc` | `C:\Users\aless\Desktop\data\Data.dbc` |
|
||
| **Tabelle libere** (free tables) | percorso della **cartella** con i `.dbf` | `C:\Users\aless\Desktop\data` |
|
||
|
||
5. (Opzionale) **Code Page**: lascia `1252` per dati italiani/europei occidentali.
|
||
6. (Opzionale) **Record cancellati**: lascia deselezionato per escludere i record marcati come cancellati.
|
||
7. Premi **Test connessione**: deve mostrare il numero di tabelle rilevate.
|
||
8. **Salva**.
|
||
|
||
A questo punto la credenziale è utilizzabile come **sorgente** nella pagina **Data Coupler**:
|
||
selezionala, attendi la discovery delle tabelle, scegli la tabella e procedi con il mapping.
|
||
|
||
---
|
||
|
||
## 2. Formato della connection string
|
||
|
||
Internamente la credenziale viene tradotta in una stringa interpretata dal lettore FoxPro.
|
||
Sono accettate tutte queste forme (utile se incolli un percorso o una stringa esistente):
|
||
|
||
```
|
||
C:\Users\aless\Desktop\data\Data.dbc
|
||
C:\Users\aless\Desktop\data
|
||
Data Source=C:\Users\aless\Desktop\data\Data.dbc;CodePage=1252;IncludeDeleted=false
|
||
Provider=vfpoledb;Data Source=C:\Users\aless\Desktop\data\Data.dbc;Collating Sequence=machine;
|
||
```
|
||
|
||
> Le stringhe stile **OLE DB** (`Provider=vfpoledb;Data Source=...`) sono accettate per comodità:
|
||
> viene estratto automaticamente il valore di `Data Source`. `Provider` e `Collating Sequence`
|
||
> vengono ignorati (il lettore è managed).
|
||
|
||
Opzioni riconosciute:
|
||
|
||
| Chiave | Significato | Default |
|
||
|---|---|---|
|
||
| `Data Source` | percorso al `.dbc` o alla cartella di `.dbf` | — (obbligatorio) |
|
||
| `CodePage` / `Encoding` | code page per i campi carattere/memo | auto-rilevata dall'header, fallback **1252** |
|
||
| `IncludeDeleted` | includere i record marcati come cancellati | `false` |
|
||
|
||
---
|
||
|
||
## 3. Tipi di dato supportati
|
||
|
||
| Tipo VFP | Mappato come |
|
||
|---|---|
|
||
| Character (`C`) | testo |
|
||
| Varchar (`V`) | testo |
|
||
| Memo (`M`, file `.fpt`) | testo |
|
||
| Numeric (`N`) | decimale |
|
||
| Float (`F`) | decimale |
|
||
| Double (`B`) | double |
|
||
| Integer (`I`) | intero |
|
||
| Currency (`Y`) | decimale |
|
||
| Date (`D`) | data |
|
||
| DateTime (`T`) | data/ora |
|
||
| Logical (`L`) | booleano |
|
||
|
||
I file memo (`.fpt`) e gli indici (`.cdx`) vengono individuati **automaticamente** accanto al `.dbf`.
|
||
|
||
---
|
||
|
||
## 4. Note e limitazioni
|
||
|
||
- **Sola lettura**: FoxPro è utilizzabile solo come **sorgente**. La scrittura sui `.dbf` non è
|
||
supportata (eviterebbe il rischio di corrompere indici `.cdx` e memo `.fpt` di gestionali legacy in uso).
|
||
- **Elenco tabelle**: con un `.dbc` viene letto il catalogo del container (solo le tabelle effettivamente
|
||
presenti come file `.dbf`); con una cartella vengono elencati tutti i `.dbf` presenti.
|
||
- **Query**: la sorgente lavora in modalità "tabella" (estrazione completa della tabella selezionata).
|
||
Le eventuali query custom supportano solo `SELECT [TOP n] * FROM <tabella>` (niente JOIN/WHERE evoluti).
|
||
- **Performance**: la lettura è in **streaming**; anche tabelle da centinaia di MB vengono elaborate
|
||
con un uso di memoria contenuto.
|
||
|
||
---
|
||
|
||
## 5. Risoluzione problemi
|
||
|
||
| Sintomo | Causa probabile | Soluzione |
|
||
|---|---|---|
|
||
| "Cartella del database FoxPro non trovata" | percorso errato | verifica il percorso del `.dbc` o della cartella |
|
||
| "nessuna tabella .dbf trovata" | cartella senza `.dbf` | indica la cartella giusta o il file `.dbc` |
|
||
| Caratteri accentati errati | code page diversa | imposta la **Code Page** corretta (es. 1250, 65001) |
|
||
| Una tabella non compare | `.dbf` referenziato nel `.dbc` ma file assente | ripristina il file `.dbf` mancante |
|