Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Problema con metodo da me creato per fare la sommatoria di + valori
mercoledì 12 dicembre 2007 - 10.21
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
donatokolas
Profilo
| Junior Member
87
messaggi | Data Invio:
mer 12 dic 2007 - 10:21
Salve raga
nella mia applicazione uso questo metodo :
private double sumMaggiorazioniFisse(int ip)
{
double t=0;
double pr;
m_cnADONewConnection6.ConnectionString =
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Temp\Sotek.mdb";
OleDbCommand commandDB3 = new OleDbCommand(
"Select * from Componenti_aggiuntivi where (id_pos=" +ip + ")"+"AND (maggior_fissa="+true+")", m_cnADONewConnection6);
m_cnADONewConnection6.Open();
OleDbDataReader dataReaderDBr = commandDB3.ExecuteReader();
while (dataReaderDBr.Read())
{
pr=dataReaderDBr.GetDouble(dataReaderDBr.GetOrdinal("prezzo"));
t=+pr;
textBox3.Text = pr.ToString();
}
m_cnADONewConnection6.Close();
return t;
}
Tale metodo mi dovrebbe fare la sommatoria del campo prezzo di una tabella del mio db access....però mi restituisce sempre zero nonostante nella mia tabella in quel campo ci siano dei valori diversi da zero.
Come mai? Cosa ho sbagliato nell'implementazione di tale metodo?
P.S. Il campo prezzo della tabella è impostato come numerico a precisione doppia.
Grazie a quanti vorranno aiutarmi
SSUPERPIPPO
Profilo
| Guru
1.095
messaggi | Data Invio:
mer 12 dic 2007 - 10:54
>Salve raga
Ciao!
>
>nella mia applicazione uso questo metodo :
>private double sumMaggiorazioniFisse(int ip)
> {
> double t=0;
> double pr;
>
> m_cnADONewConnection6.ConnectionString =
>@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Temp\Sotek.mdb";
>
> OleDbCommand commandDB3 = new OleDbCommand(
>"Select * from Componenti_aggiuntivi where (id_pos=" +ip + ")"+"AND
>(maggior_fissa="+true+")", m_cnADONewConnection6);
> m_cnADONewConnection6.Open();
>OleDbDataReader dataReaderDBr = commandDB3.ExecuteReader();
> while (dataReaderDBr.Read())
> {
>pr=dataReaderDBr.GetDouble(dataReaderDBr.GetOrdinal("prezzo"));
> t=+pr;
> textBox3.Text = pr.ToString();
> }
>
> m_cnADONewConnection6.Close();
>
> return t;
> }
>
>Tale metodo mi dovrebbe fare la sommatoria del campo prezzo
>di una tabella del mio db access....però mi restituisce sempre
>zero nonostante nella mia tabella in quel campo ci siano dei
>valori diversi da zero.
>Come mai? Cosa ho sbagliato nell'implementazione di tale metodo?
>P.S. Il campo prezzo della tabella è impostato come numerico
>a precisione doppia.
>
>Grazie a quanti vorranno aiutarmi
Secondo me ti conviene utilizzare una Select che ti restituisca già la sommatoria in questo modo:
SELECT SUM(Prezzo) AS SommaPrezzo FROM Componenti_aggiuntivi WHERE .....
in questo modo ottieni direttamente la somma di prezzo senza nemmeno dover impostare un ciclo
Ciao
Alessandro
http://blogs.dotnethell.it/alebadalin
donatokolas
Profilo
| Junior Member
87
messaggi | Data Invio:
mer 12 dic 2007 - 11:17
Ciao Alessandro,
grazie innanzitutto per il tuo sempre puntuale aiuto.
Ok ma come faccio a far restituire alla mia funzione tale somma?
donatokolas
Profilo
| Junior Member
87
messaggi | Data Invio:
mer 12 dic 2007 - 15:46
Va bene Alessandro ho provato a fare come dici tu....
ma c'è un problema (come sempre quando sono alle prese con la mia applicazione
) quando vado a leggere il valore della somma (decimal pr = dataReaderDBr.GetDecimal(dataReaderDBr.GetOrdinal("SommaPrezzo")); ) il compilatore mi solleva un'eccezione di cast (cast specificato non valido) come mai?
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
mer 12 dic 2007 - 18:41
>Va bene Alessandro ho provato a fare come dici tu....
>
>ma c'è un problema (come sempre quando sono alle prese con la
>mia applicazione
) quando vado a leggere il valore della
>somma (decimal pr = dataReaderDBr.GetDecimal(dataReaderDBr.GetOrdinal("SommaPrezzo"));
>) il compilatore mi solleva un'eccezione di cast (cast specificato
>non valido) come mai?
Vediamo intanto cosa ci trovi dentro, per esempio con:
Messagebox.show(dataReaderDBr.GetValue(dataReaderDBr.GetOrdinal("SommaPrezzo")).tostring);
... o qualcosa di simile. Il codice l'ho scritto a mente, ma spero che sia chiaro il concetto!
Comunque se esegui una query scalare, puoi anche percorrere la strada del
c.executescalar (dove c è il command), che restituisce un oggetto.
Bisogna che tu indaghi un po', con gli strumenti del debug, su cosa c'è in quel campo.
Magari c'è qualche carattere che dà fastidio?
donatokolas
Profilo
| Junior Member
87
messaggi | Data Invio:
gio 13 dic 2007 - 08:08
In effetti dentro non c'è niente.....il testo della MesageBox è vuoto.
Non vorrei che ci siano problemi con la query ossia non è stata formulata bene.
Tu che dici?
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
gio 13 dic 2007 - 08:39
Eh, sì! Può darsi che la query non restituisca ciò che credi.
Provala direttamente in access e vedi che ti dà!
donatokolas
Profilo
| Junior Member
87
messaggi | Data Invio:
ven 14 dic 2007 - 07:30
Niente da fare alextix!
La mia query non vuol saperne di funzionare nella mia applicazione.
L'ho provata direttamente in access e funziona ecco il testo :
SELECT DISTINCTROW Sum(Componenti_aggiuntivi.prezzo) AS [Somma Di prezzo]
FROM Componenti_aggiuntivi
WHERE (id_pos=6) AND (maggior_fissa=true);
La stessa query scritta allo stesso modo nella mia applicazione non mi da nessun risultato
OleDbCommand commandDB3 = new OleDbCommand(
"SELECT DISTINCTROW Sum( [Componenti_aggiuntivi].[prezzo]) AS [Somma Di prezzo] FROM Componenti_aggiuntivi where (id_pos=" + ip + ")" + "AND (maggior_fissa= false )", m_cnADONewConnection6);
Non so più cosa devo fare!
Please help meeeee!
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
ven 14 dic 2007 - 07:42
>Niente da fare alextix!
>
>La mia query non vuol saperne di funzionare nella mia applicazione.
>L'ho provata direttamente in access e funziona ecco il testo
>:
>SELECT DISTINCTROW Sum(Componenti_aggiuntivi.prezzo) AS [Somma
>Di prezzo]
>FROM Componenti_aggiuntivi
>WHERE (id_pos=6) AND (maggior_fissa=true);
>
>La stessa query scritta allo stesso modo nella mia applicazione
>non mi da nessun risultato
>
>OleDbCommand commandDB3 = new OleDbCommand(
>"SELECT DISTINCTROW Sum( [Componenti_aggiuntivi].[prezzo]) AS
>[Somma Di prezzo] FROM Componenti_aggiuntivi where (id_pos="
>+ ip + ")" + "AND (maggior_fissa= false )", m_cnADONewConnection6);
>
>Non so più cosa devo fare!
>
>Please help meeeee!
>
>
Una domanda banale: Perchè in una query maggior_fissa= false e in un'altra è True? Tanto, tanto uguali non mi sembrano!
donatokolas
Profilo
| Junior Member
87
messaggi | Data Invio:
ven 14 dic 2007 - 07:53
Si perchè l'ultimo mio post riguarda una funzione simile alla precedente ma che deve selezionare un dato in cui maggior_fissa deve essere false
lo so ....lo so avrei potuto usare un parametro ma siccome sono inesperto di programmazione ci ho pensato solo ora
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
ven 14 dic 2007 - 07:58
Ma hai provato la stessa query, sugli stessi dati? Altrimenti intanto verificala.
Stai puntando il database giusto?
Hai controllato il valore di IP nella tua stringa di query?
donatokolas
Profilo
| Junior Member
87
messaggi | Data Invio:
ven 14 dic 2007 - 14:26
Ciao alex ho fatto tutti questi controlli ma sta tutto bene l'unica cosa che non va bene è che non funziona..
Cmq io continuo a pensare che si tratti di un problema di cast
Tu che dici?
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
ven 14 dic 2007 - 15:51
Dubito, perchè se chiedi al datareader il GetValue e poi .ToString, e ti viene una stringa nulla, cioè un messaggio vuoto, significa che non recupera proprio nulla, non che c'è un numero che sbagli a convertire di tipo.
Secondo me ti sfugge qualcosa. Fai una cosa, fatti mettere da qualche parte ben visibile (in una grande label, nella finestra di debug (debug. WriteLine"....")), la stringa SQL con cui selezioni i tuoi valori, quando è già composta, cioè quando i valori sono già stati sostituiti alle variabili, ovvero, anche alla riga sotto alla valorizzazione del datareader. Controlla se ti torna tutto.
Come ultima disperata risorsa, se lo puoi fare, mandami il DB anche con una tabella di 2 righe sole e il tuo programma. Proprio lo stretto indispensabile per fare una prova, ma che giri. Magari che esegua la query cliccando sul pulsante. Prima provalo tu e se non ti funziona ancora la query, spediscimelo.
Non conosco C#, quindi non potrò fare grandi cose, ma due prove intorno alla query, dovrei riuscire a farle.
Eventualmente: pagale@katamail.com
Se lo mandi, dimmelo, che faccio attenzione a non cancellare tutto insieme allo spam!
donatokolas
Profilo
| Junior Member
87
messaggi | Data Invio:
sab 15 dic 2007 - 11:30
Ciao alextix ho fatto quella prova che mi hai detto di fare.
Ho messo la stringa della query nel testo di una label sul mio form e sinceramente la query mi sembra corretta .
818x671
104Kb
Allora ti mando ilcodice e il database leggermente popolato
così puoi vedere qual'è il problema......grazie per la tua generosità.
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
sab 15 dic 2007 - 11:38
"Allora ti mando ilcodice e il database leggermente popolato così puoi vedere qual'è il problema"
Quantomeno, posso tentare!
"grazie per la tua generosità."
Figurati....è che mi sono piccato di capire cosa ci sta fuorviando!
donatokolas
Profilo
| Junior Member
87
messaggi | Data Invio:
lun 17 dic 2007 - 09:44
Ciao alex ti ho inviato sulla posta due messaggi uno con il progetto e un file word e l'altro con i db fammi sapere se ti sono arrivati
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
lun 17 dic 2007 - 10:11
Mi sono arrivati solo i DB, per adesso.
donatokolas
Profilo
| Junior Member
87
messaggi | Data Invio:
lun 17 dic 2007 - 10:51
Ti è arrivato tutto adesso?
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
mar 18 dic 2007 - 10:28
Non mi è arrivato il programma e ho deciso che avrei fatto prima a provare a scrivere due righe, che poi erano quelle che volevo da te in C#.
Io le ho scritte in VB, ma la query funziona senza difficoltà alcuna.
A questo punto, prova a tradurle in C# e fammi sapere cosa succede da te. Ovviamente la stringa di connessione riporta il path del db sul mio PC, tu dovrai usare la tua stringa:
Public Class Form1
Dim StrCon As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\DaForumDotNetHell\Sotek.mdb;Mode=ReadWrite;Persist Security Info=False"
Dim Cn As New OleDb.OleDbConnection
Dim C As New OleDb.OleDbCommand
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Cn.Close()
Cn.Dispose()
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Cn.ConnectionString = StrCon
Cn.Open()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
C.CommandText = "SELECT SUM(Prezzo) AS SommaPrezzo FROM Componenti_aggiuntivi WHERE id_pos=14 AND maggior_fissa=true"
C.Connection = Cn
Dim Totale As Double = C.ExecuteScalar
End Sub
End Class
Nella procedura di click del pulsante eseguo una query scalare che mi restituisce lo stesso risultato di quella che hai provato tu in access, cioè 174,68.
Non riesco a capire come mai non ti funzioni.
Comunque, se una volta che avrai riscritto in C# questo miniprogramma di test, ancora non ti funzionerà, postamelo e lo provo qui.
E' piccolino e non dovrebbero esserci problemi di posta e contiene tutto quello che ci serve per effettuare le prove!
donatokolas
Profilo
| Junior Member
87
messaggi | Data Invio:
ven 21 dic 2007 - 16:42
Ciao alex..
scusa per il ritardo con cui ti rispondo ma ho avuto in questi giorni un pò di problemi di salute (causati da una balorda abbuffata di frutti di mare crudi..............ti risparmio la descrizione dei sintomi
) .
Comunque me ne vergogno un pò ma oggi ricontrollando il mio codice e confrontandolo con il tuo ho visto dov'era il problema.
Mi vergogno un pò ma per dovere di cronaca lo devo ammettere (te lo devo) praticamente eseguivo la query scalare prima di aver aggiornato il database con le righe che la stessa query mi avrebbe dovuto dare come risultato. Ecco perchè la query era vuota....praticamente era un problema di sequenzialità delle istruzioni...
Grazie mille per iltuo aiuto e per la tua disponibilità e scusa la mia immensa ignoranza ciao alla prossima
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
ven 21 dic 2007 - 18:03
>problemi di salute (causati da una balorda abbuffata
>di frutti di mare crudi..............ti risparmio la descrizione
>dei sintomi
) .
Sì, sarà meglio glissare su questo aspetto!
Lieto di esserti stato di aiuto alla soluzione del problema.
Auguroni a te e famiglia!
donatokolas
Profilo
| Junior Member
87
messaggi | Data Invio:
sab 22 dic 2007 - 07:03
Auguroni anke a te e a tutti i tuoi cari....
anzi approfittiamo dell'occasione per fare gli auguri a tutto il forum...
da quando mi sono iscritto qui ho avuto modo di conoscere (anche se solo via rete) delle persone fantastiche....
Buon Natale , felice anno nuovo a tutti eeeee ................. BUONA PROGRAMMAZIONE!
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !