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
Query di accodamento
giovedì 17 maggio 2007 - 15.15
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
jekisi
Profilo
| Senior Member
460
messaggi | Data Invio:
gio 17 mag 2007 - 15:15
Salve a tutto il forum, avrei il seguente problema:
Ho 2 Datagridview, nella prima mi spuntano tutti i DDT di un determinato Cliente che come campo Fatturata hanno N.
Passando una riga di queste in una seconda Datagridview il campo Fatturata cambia in S e il campo Fattura prende il valore riportato in una text eseguendo questa query:
sql = "UPDATE TDDT SET FATTURATA='S', fattura=" & TextBox3.Text & " WHERE DDT=" & DDTTextBox.Text
adesso ho una terza Datagridview che mi dovrebbe riflettere tutte le righe dei documenti che passo nella seconda Datagridview
ho provato a fare la seguente cosa:
Public Sub ImpostaRecordSourceData4()
Dim strsqlddt As String
Dim strsql As String
strsqlddt = "(SELECT DDT FROM tddt WHERE cliente=" & TextBox1.Text & " AND fattura='" & TextBox3.Text & "' and fatturata='S')"
strsql = "SELECT * FROM RDDT WHERE DDT IN " & strsqlddt
Dim CmqRDDT As New OleDb.OleDbCommand(strsql, Cn)
Dim DARDDT As New OleDb.OleDbDataAdapter(CmqRDDT)
Cn.Open()
DARDDT.Fill(Me.AziendaleDataSet21.RDDT)
Cn.Close()
End Sub
quando passo una riga dalla prima alla seconda faccio:
Cn.Open()
'sql = "UPDATE TDDT SET FATTURATA='S', fattura=" & TextBox3.Text
sql = "UPDATE TDDT SET FATTURATA='S', fattura=" & TextBox3.Text & " WHERE DDT=" & DDTTextBox.Text
cmd = New OleDb.OleDbCommand(sql, Cn)
dr = cmd.ExecuteReader
Cn.Close()
Me.TDDTTableAdapter.FillBy(Me.AziendaleDataSet18.TDDT, New System.Nullable(Of Integer)(CType(TextBox1.Text, Integer)), TextBox4.Text)
TDDTDataGridView.Refresh()
Me.TDDTTableAdapter1.FillBy(Me.AziendaleDataSet20.TDDT, New System.Nullable(Of Integer)(CType(TextBox1.Text, Integer)), TextBox5.Text, TextBox3.Text)
TDDTDataGridView1.Refresh()
ImpostaRecordSourceData4()
ma appena vado per aprire la form mi da errore, cioè:
Tipi di dati non corrispondenti nell'espressione criterio.
evidenziandomi
DARDDT.Fill(Me.AziendaleDataSet21.RDDT)
della Public Sub ImpostaRecordSourceData4()
qualcuno sa dirmi dove sbaglio?
Distinti Saluti Fabio Messina
Cteniza
Profilo
| Guru
1.509
messaggi | Data Invio:
gio 17 mag 2007 - 16:58
Certamente che non si può utilizzare il comando che genera un datareader con un comando sql diverso da select.
Per gli aggiornamenti del database si esegue con la modalità "executenonquery".
Stendo un velo pietoso sul fatto che non utilizzi i parametri e che potrebbe essere il motivo del tuo errore.
jekisi
Profilo
| Senior Member
460
messaggi | Data Invio:
gio 17 mag 2007 - 17:05
Ma scusa, come dovrei risolvere allora?
the_follet
Profilo
| Newbie
46
messaggi | Data Invio:
gio 17 mag 2007 - 19:01
Ciao,
se il campo CLIENTE del database è di tipo testo (come presumo) allora vale la risposta che ti ho dato in un altro tuo post (
http://www.dotnethell.it/Forum/messages.aspx?ThreadID=15709
): non hai messo gli apici singoli prima e dopo l'inserimento di textbox1.text nell'istruzione SQL.
Se invece CLIENTE è un campo numerico allora non ne ho idea
Ciao.
Luca
jekisi
Profilo
| Senior Member
460
messaggi | Data Invio:
gio 17 mag 2007 - 19:37
strsqlddt = "(SELECT DDT FROM tddt WHERE cliente='" & TextBox1.Text & "' AND fattura='" & TextBox3.Text & "' and fatturata='S')"
così da errore, sempre se parli di questa query.
Mi seleziona DARDDT.Fill(Me.AziendaleDataSet6.RDDT)
e mi dice:
Tipi di dati non corrispondenti nell'espressione criterio.
potresti farmi la cortesia di scrivermela correttamente? sempre se non chiedo troppo?
Distinti Saluti Fabio Messina
the_follet
Profilo
| Newbie
46
messaggi | Data Invio:
gio 17 mag 2007 - 21:58
Innanzitutto confermami se i tipi di dato dei campi del database sono quelli che immagino io, così poi costruiamo la stringa SQL
Cliente = testo(?)
Fattura = testo(?)
Fatturata = testo
DDT = numerico
A giudicare dalla istruzione SQL di Update che hai messo all'inizio del post, sembrerebbe che il campo Fattura sia numerico. Quindi ci sono comunque dati contraddittori...
Aspetto che mi rispondi e poi creiamo la stringa esatta.
Ciao.
Luca
jekisi
Profilo
| Senior Member
460
messaggi | Data Invio:
ven 18 mag 2007 - 12:25
347_Fatturazione Documenti di Tras
Ciao, inanzitutto ti ringrazio per l' interesse.
I campi sono:
Cliente = Numerico(Codice Cliente)
Fattura = testo
Fatturata = testo
DDT = numerico
A me da questo errore:
Errore di sintassi nella stringa nell'espressione della query 'DDT IN (SELECT DDT FROM tddt WHERE cliente='2 AND fattura='1' and fatturata='S')'.
Nella sub Public Sub ImpostaRecordSourceData4()
Ti allego la bozza e ti spiego i passaggi:
All' avvio premo Button1 -> Ddt -> Carica
Adesso, quando premo Button1, passo una riga da sinistra a destra e modifico il campo Fatturata da N a S e il campo Fattura prende il valore riportato nella text3.text
Sotto, invece, a questo punto, mi sovrebbero spuntare le righe che fanno parte del documento che passo a destra. La tabella delle righe è RDDT.
Se passo 2 righe o +, sotto mi dovrebbero spuntare le righe di tutte e 2 i documenti o +.
Se invece passo una righa da destra a sinistra. il campo Fatturata si modifica da S a N e il campo Fattura diventa null.
Sotto invece, si dovrebbero togliere le righe del documento che tolgo, cioè, che passo da destra a sinistra.
Spero che mi puoi essere di aiuto.
Distinti Saluti Fabio Messina
the_follet
Profilo
| Newbie
46
messaggi | Data Invio:
ven 18 mag 2007 - 16:06
Ciao,
ti posso aiutare con la stringa SQL, che, in base ai campi che mi riporti, va fatta così:
strsqlddt = “(SELECT DDT FROM tddt WHERE cliente = “ & TextBox1.Text & “ AND fattura = ‘” & TextBox3.Text & “’ and fatturata = ‘S’)”
Inoltre, devi modificare anche la stringa SQL di update che hai messo in cima al tuo primo post o avrai gli stessi problemi: se il campo Fattura è di tipo testo, ci vogliono gli apici semplici.
La stringa risultante è questa:
sql = “UPDATE TDDT SET FATTURATA = ‘S’, fattura = ‘” & TextBox3.Text & “’ WHERE DDT = “ & DDTTextBox.Text
In ogni caso, fermo restando che è giusto spratichirsi e prendere dimestichezza con il linguaggio SQL come fai tu, non sottovalutare il fatto che usare la concatenazione di stringhe per creare istruzioni SQL è decisamente pericoloso, per cui sarebbe meglio cominciare a studiare un pò le query parametriche come ti ha consigliato Cteniza, anche se in maniera alquanto "rude"
(Cteniza, la maggior parte di noi -me per primo- è su questo forum per apprendere, non siamo tutti professori o "nati imparati"...).
Per farti un'idea di quanto possa essere pericolosa un'istruzione SQL generata da una concatenazione di stringhe, puoi dare un'occhiata qua:
http://www.microsoft.com/italy/msdn/risorsemsdn/security/editoriale/sql_injection.mspx
Saluti.
Luca
Cteniza
Profilo
| Guru
1.509
messaggi | Data Invio:
ven 18 mag 2007 - 17:12
Io sono sempre un pò brusco, anche con i miei sottoposti al lavoro, lo faccio perchè le parole suadenti in genere non hanno nessun effetto. Sono capace di fare una strigliata a qualcuno che si comporta male, di solito si tratta di "ardore giovanile" di ragazzi che prima ancora di avere capito quello che debbono realizzare si mettono a scrivere del codice perchè "scrivere codice" è una cosa creativa.
Nulla di più falso, la creazione avviene nel trovare la soluzione ottimale e, quando l'algoritmo "funziona" allora si scrive del codice.
Per quanto riguarda la gestione dei parametri ho scritto parecchi posts sul mio blog, questo è l'ultimo:
http://community.visual-basic.it/lucianob/archive/2007/03/30/18945.aspx
jekisi
Profilo
| Senior Member
460
messaggi | Data Invio:
ven 18 mag 2007 - 17:35
A me qui da errore
Cn.Open()
''sql = "UPDATE TDDT SET FATTURATA='S', fattura=" & TextBox3.Text
'sql = "UPDATE TDDT SET FATTURATA='S', fattura=" & TextBox3.Text & " WHERE DDT=" & DDTTextBox.Text
sql = "UPDATE TDDT SET FATTURATA = ‘S’, fattura = ‘" & TextBox3.Text & "’ WHERE DDT = " & DDTTextBox.Text
cmd = New OleDb.OleDbCommand(sql, Cn)
dr = cmd.ExecuteReader
Cn.Close()
Nessun valore specificato per alcuni parametri necessari.
i dati nelle text le mette.
L' altra query l' ho modificata pure
strsqlddt = "(SELECT DDT FROM tddt WHERE cliente = " & TextBox1.Text & " AND fattura = ‘" & TextBox3.Text & "’ and fatturata = ‘S’)"
Puoi inviarmi la bozza corretta?
the_follet
Profilo
| Newbie
46
messaggi | Data Invio:
ven 18 mag 2007 - 18:12
X Cteniza:
bè... anche tu hai ragione, parole sacrosante
X Jekisi:
"Nessun valore specificato per alcuni parametri necessari."
Non conosco la struttura del tuo DB, quindi non posso aiutarti ulteriormente.
Prova a postare il valore che ha la stringa <sql> nel momento in cui si verifica l'eccezione, magari da li si riesce a vedere l'errore.
Cteniza
Profilo
| Guru
1.509
messaggi | Data Invio:
ven 18 mag 2007 - 19:19
Dò alcuni consigli:
- quando si posta una domanda si deve fare in modo di farsi comprendere
- il miglior modo per farsi comprendere è mettere un esempio allegato oppure di dare indicazioni in modo da poter riprodurre l'errore o far capire la questione
- si devono mettere anche i dati (esempio di database / tabelle) in modo tale che la prova deve essere effettiva
- spesso è consigliabile ricondurre gli esempi al database di northwind
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 !