DbException (0x80040e57): Impossibile aggiungere la quantità di dati desiderata. Inserire o incollare meno dati

Giorgio Borelli

OleDbException (0x80040e57): Impossibile aggiungere la quantità di dati desiderata. Inserire o incollare meno datiDurante la fase di sviluppo di un'applicativo, possiamo imbatterci in questo messaggio d'errore "OleDbException (0x80040e57): Inserire o incollare meno dati" generato a run-time, ovvero si manifesta solo in fase di esecuzione, e non ne capiamo il motivo, il tutto sembra girare perfettamente, funziona, eppure in qualche particolare caso compare questa eccezione, qual'è la causa? Quale errore commettiamo?

L'eccezione a cui faccio riferimento è generata dal Data Provider OleDb, compatibile sia con Access che con le vecchie versioni di Sql Server (dalla 7.0 in giù), il problema però è generico e può presentarsi anche con Data Provider specifici come il Jet Engine di Access. Il problema è nella insert, o meglio si manifesta durante un comando sql insert, risolverlo è davvero banale, andiamo a scoprire come fare.

L'eccezione che genera il messaggio "Microsoft JET Database Engine error (0x80040e57): Impossibile aggiungere la quantità di dati desiderata. Inserire o incollare meno dati." ci porta subito a pensare che la possibile causa generatrice è legata al database, che come abbiamo detto può essere sia Access che Sql Server, o altro RDBMS. L'eccezione è dovuta infatti ad una dichiarazione "inopportuna" della quantità di dati massime accettate per la "Dimensione Campo" specificate nella colonna di una tabella.

Supponiamo di stare utilizzando il database Access, e nella struttura di una semplice tabella avente due solo colonne di tipo testuale: Titolo e Descrizione. Per la prima specifichiamo il tipo text, per la descrizione utilizziamo il memo (come rappresentato nella figura sottostante), il campo text accetta sino ad un massimo di 255 caratteri mentre il memo viene usato per contenere una quantità di dati testuali rilevante.

Dimensione Campo di una tabella Access in Visualizzazione Struttura

Sebbene il tipo text accetti sino a 255 caratteri (default), noi abbiamo specificato soltanto 50 caratteri, magari non ce ne siamo nemmeno accorti poichè abbiamo copiato la tabella da una già esistente. Inutile dilungarsi ancora, l'eccezione viene generata proprio perchè durante l'inserimento dei dati nel campo (titolo) abbiamo inserito una quantità di caratteri superiori a quelli consentiti (50), basterà aumentare la "Dimensione Campo", portandola ad es. a 128 o 255 se necessario, consentendo così d'immettere stringhe molto più lunghe e risolvere banalmente l'eccezione generata.

Per chi volesse approfondire i tipi di dati che è possibile specificare per i database, può leggere questi due articoli:

 

Conclusioni

Risolvere l'eccezzione "Inserire o incollare meno dati" è davvero semplicissimo, basta specificare nella Dimensione Campo una quantità di dati superiori. Questo errore però può servire come spunto per una riflessione. Quando si progetta un database si deve pensare anche alla possibile quantità di dati trattati dall'applicativo che dovrà girarci sù, è sbagliato specificare 50 caratteri per un campo titolo sebbene nella stragrande maggioranza possa andare bene, tuttavia si presenterà quel caso non previsto che supererà questo limite creando un errore a run-time che non ci aspettavamo. Allo stesso modo sarebbe ancora più sbagliato definire un campo titolo come memo e così ci togliamo il pensiero, sprecheremmo una quantità di spazio enorme con grave perdita anche di performance. Una buona applicazione deve sempre tener conto del giusto compromesso, e valutare, se possibile, il contesto in cui girerà e la potenziale quantità di dati trattati, implmentando anche eventuali meccanismi di controllo opportuni che evitino il generarsi di eccezioni anche banali come quella descritta.

Chiunque voglia aggiungere qualcosa o chiedere ulteriori chiarimenti su come correggere l'errore Impossibile aggiungere la quantità di dati desiderata. Inserire o incollare meno dati., può farlo tramite i commenti, ogni vostro contributo alla discussione sarà ben accetto.

Categorie: Access | database | Sql Server

Tags: , ,

Commenti (2) -

Aldo Marchioni
Aldo Marchioni says:

Purtroppo non è così semplice.
A volte, eseguendo a mano la stessa query che provoca l'errore, nell'IDE di Access, la query funziona perfettamente.
Sembra più un problema legato al command

Rispondi

Gentile Dott. Marchioni,
mi permetta di farle un paio di domande:

La query che esegue a mano su Access presenta la stessa identica quantità di dati?

Cosa intende di preciso con "command"?

Io resto convinto che questo tipo di eccezzione si sollevi soltanto nel caso in cui si cerca d'inserire in un campo una quantità di dati superiore a quella ammessa/specificata, ed anche il messaggio d'errore lo dice chiaramente (inserire o incollare meno dati), se possiede o conosce maggiori informazioni a riguardo sarò lieto di ascoltarla e ricredermi, ad ogni modo la ringrazio e sono lieto del suo intervento.

Rispondi

Aggiungi Commento

biuquote
Loading