• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Problema risolto Problema comando OleDb in esecuzione

Stato
Discussione chiusa ad ulteriori risposte.

zNiiTros

Nuovo utente
Autore del topic
12 Ottobre 2014
14
0
Miglior risposta
0
Salve a tutti, ho un problema con il mio progetto che, connettendosi ad un database in locale (file .accdb), aggiunga tramite un bottone un valore nella TextBox 'Nome' (txtNome) nel database, nel campo Nome nella tabella Info.
Il codice che ho scritto è questo:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Mi riporta all'errore su "Command.ExecuteScalar()" perchè?
Mi da questo problema:
Il numero dei valori nella query non corrisponde a quello dei campi di destinazione.

P.S. Sto imparando proprio in questi giorni i comandi query sql e le relazioni tra VB2010 e Access , quindi non picchiatemi :soso:
Grazie in anticipo!!
 
@zNiiTros credo sia un errore di sintassi Sql sei sicuro che ci sia solo una colonna?
comunque ti scrivo un momento la sintassi di inset into : INSERT INTO nometabella(colonna) values ('valore');
 
Quasi sicuramente è un errore di sintassi della query. @TBH potresti verificare se ho scritto bene la query nel code?
Poi, non avendo molta conoscenza della sintassi, nel termine VALUES ho scritto tra parentesi txtNome.ToString.
Penso vada bene... non so se nelle parentesi VALUES ci deve andare cio che dev'essere aggiunto nella colonna 'Nome' ..
Ho 5 colonne, tra cui la colonna Utente nella tabella Info

P.S. 5 colonne senza contare ID (Non so se si conta, mi sto approcciando da pochissimo nelle query,database e tutto).
 
Ultima modifica:
ah ecco , l'istruzione che genera eccezione.

Dim command As New OleDbCommand("INSERT INTO Info (Utente) VALUES (" + txtNome.ToString + ")", connection)
VALUES('ogg');

quindi diventa
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
avevi dimenticato anche il ;
@zNiiTros
 
@TBH Funziona, grazie mille!!
P.S. Un'altra informazione, se io voglio che con un bottone si elimini un certo blocco di informazioni (esempio ID 2 Mario Rossi), come faccio?
Mi spiego meglio.
Ho i campi Nome, Cognome, DataNascita, LuogoNascita, Telefono.
Voglio eliminare una certa persona salvata nel database.
Ci sono 3 persone (3 gruppi di stringhe Nome cognome etc.)

1
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

2
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

3
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Vorrei una funzione tale (in evento Button: Click) che se scrivo tutti i dati corretti di una persona e cliccando sul bottone Delete si elimini quel gruppo di campi (L'ID per intero insomma) dal database.

Dove posso trovare il materiale da studiare per arrivare al mio scopo?

(Ho cercato su google e ho trovato tipo delle relazioni tra campi .. ma non so come agire
 
La soluzione più breve è la seguente
1-una volta stabilita la connessione creare l'oggetto OledbCommand
2-eseguire il seguente comando sql
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

nel tuo caso , presumendo di voler eliminar il primo
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
3-Verificare l'esistenza di tale corrisponde usando select from
@zNiiTros
 
La soluzione più breve è la seguente
1-una volta stabilita la connessione creare l'oggetto OledbCommand
2-eseguire il seguente comando sql
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

nel tuo caso , presumendo di voler eliminar il primo
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
3-Verificare l'esistenza di tale corrisponde usando select from
@zNiiTros

Nel primo CODE ove c'è 'nome da eliminare' , se ci sono molteplici nomi uguali ma con cognomi diversi come si comporta il programma?
Nel secondo CODE il campo Utente comprende solo il nome nel mio caso... quindi come faccio?
 
@zNiiTros vuol dire che tieni conto anche della seconda colonna. Ti lascio due link che riguardano l'sql che da quel che ho capito il problema è lì :
Perfavore, Entra oppure Registrati per vedere i Link!

Perfavore, Entra oppure Registrati per vedere i Link!

e ti lascio una guida breve
Perfavore, Entra oppure Registrati per vedere i Link!


credo che l'algoritmo in vb sei grado di svilupparlo da solo ^^
 
Grazie mille per il materiale;
Comunque, quando scrivo la query per aggiungere tutti i valori in tutti i campi, non mi dà l'errore per la mal-scrittura della query stessa ma, eccezione OleDbException non gestita.

Il Codice da esaminare è questo (non capisco il problema)

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Mi dà questo problema [OleDbException: Overflow.] (Riportando l'errore sulla funzione cmdAggiunta.ExecuteScalar() .
 
@zNiiTros dichiara globalmente la connessione e nei singoli pulsanti fai il cmd. L'errore è dovuto al numero eccessive di richieste @zNiiTros inoltre l'istruzione sql è errata .
 
Ultima modifica:
@TBH A me sembra tutto normale...
Quindi non posso inserire con un solo bottone questi 5 campi? Visual Basic si limita a questo?
 
@zNiiTros no è per il semplice fatto che tu accedi e ti disconetti troppo volte esegui l'accesso in un button

ti faccio un prototipo di come dovrebbe essere strutturato il tuo programma.

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

il fatto che lancia overflow è dovuta al numero elevato di connessioni al db .
 
@TBH Quando clicco sul button2 per aggiungere il comando, mi da errore perché non risulta conneso al db (nonostante mi sono connesso con il button1).
Quindi suppongo che devo inserire tutto in un unico bottone... ma ricompare di nuovo Overflow..
Ah, poi volevo porti una domanda: perchè ci sono troppe connessioni al db se solo una volta ho stabilito la.connessione? (connection.Open())
P.S. Non avevo letto di dichiarare globalmente, ti farò sapere :emoji_slight_smile:


- - - Aggiornato - - -
@TBH Niente, ho dichiariato globalmente la variabile per connettermi e ho suddiviso il codice nei vari bottoni (Connetti , Disconnetti e Add Record)
Ma niente, ancora Overflow...

Chiedo anche un aiuto secondario, @System32 , sapresti dirmi il perchè?
 
Ultima modifica:
Utilizza la proprietà State per controllare lo stato della connessione.
 
Ultima modifica:
@zNiiTros allora vuol dire che non centra nulla la connessione ,a questo punto mi viene da pensare ai dati ... dimmi nel db sono già presenti le voci inserite ?
 
@TBH Vuoto, cancellato tutti i dati, vado a cliccare sul bottone 'Add Record' ed esce Overflow.

- - - Aggiornato - - -

Controlla comunque lo stato di connessione come detto da System32:
PHP:
Perfavore, Entra oppure Registrati per vedere i codici!
@Hew0x @System32 provo, vi faccio sapere.

- - - Aggiornato - - -

Apro la connessione, e quando clicco sul button 'Add Record' , mi riporta al comando "cmd.ExecuteScalar()" dicendo: Proprietà Connection non è stata inizializzata, invece si!
Ho provato ad aprire la connessione da un button diverso allo stesso button ma niente, stesso problema.
(Mi dà questo problema con il connection state).
 
Io penso che il problema sia un altro.

Un overflow è sempre un problema di "dimensione" dei dati usati.

Per capire cosa succede dovresti dirci cosa è inserito nei vari textbox quando ottieni l'errore e dirci di che tipo e lunghezza sono i campi nel db.

Meglio ancora, facci scaricare il progetto (completo) e il db per capire meglio.
 
@zNiiTros potresti ri-postare l'intero codice. Inoltre nothing ha ragione , dato che si tratta di overflow specifica anche quello che scrivi nelle textbox
 
Il codice intero e' questo:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Nelle textbox scrivo semplicemente:
txtNome.text = 'Mario'
txtCognome.text = 'Rossi'
txtLuogoNascita.text = 'TorreDelGreco'
txtDataNascita.text = '10/10/1990' (secondo me questo dà l'Overflow, dato che nel database questo campo rispettivamente collegato col campo della data di nascita, specificato come TIPO DI CAMPO 'Data di Nascita' in Access.)
txtTelefono.text = '333...'


Il progetto penso sia inutile e uno spreco di tempo dato che l'unico codice e' questo.
Il database:
Perfavore, Entra oppure Registrati per vedere i Link!

Immagine del tipo di campo DataNascita.text:
Perfavore, Entra oppure Registrati per vedere i Link!
@TBH @nothing @System32
 
Ultima modifica:
Stato
Discussione chiusa ad ulteriori risposte.