Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Per diversi giorni il Galaxy S26 Ultra di Samsung è stato il nostro compagno di vita. Oltre alle conferme del colosso coreano come la qualità del display e una suite AI senza rivali, arriva il Privacy Display, un unicum nel mondo smartphone. Ci sono ancora alcuni gap che non sono riusciti a colmare lato batteria e fotocamera, seppur con alcuni miglioramenti.
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Abbiamo provato per voi il nuovo DLC lanciato a sorpresa da Blizzard per Diablo II: Resurrected e quella che segue è una disamina dei nuovi contenuti che abbiamo avuto modo di sperimentare nel corso delle nostre sessioni di gioco, con particolare riguardo per la nuova classe dello Stregone
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Siamo tornati nel parco tecnologico di Trieste per il kick-off del programma che mette a disposizione di cinque startup le infrastrutture di ricerca, dal sincrotrone Elettra ai laboratori di genomica e HPC. Roberto Pillon racconta il modello e la visione
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-03-2010, 14:38   #1
ASSTO
Senior Member
 
Iscritto dal: Oct 2008
Messaggi: 365
[VB.NET + Visual Studio 2008] Varie sulla gestione dei dati

Ciao a tutti,
sto ancora lavorando al mio programma (http://www.hwupgrade.it/forum/showthread.php?t=2160107) e mi sono piantato durante l'ottimizzazione della parte relativa l'archivio.

Nel form di visualizzazione delle prove avevo implementato un pulsante per filtrare le stesse (visualizzate in una dataGridView) in funzione del contenuto di tre textboxes. Avevo gestito il tutto eseguendo una query su un tableAdapter ma siccome ho letto in giro di un certo "SQL Inject", ho deciso di ricreare il codice utilizzando una query parametrica però ho un problema: una delle tre textboxes potrebbe essere vuota. In tal caso con il sistema precedente avrei inserito "WHERE (campo IS NOT NULL)" tramite concatenazione di stringhe...come posso ottenere lo stesso risultato con OleDbParameter?
__________________
Firma in sciopero!

Ultima modifica di ASSTO : 08-04-2010 alle 14:08. Motivo: Aggiornato il titolo a qualcosa di più "inerente"
ASSTO è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2010, 11:41   #2
ASSTO
Senior Member
 
Iscritto dal: Oct 2008
Messaggi: 365
Up
__________________
Firma in sciopero!
ASSTO è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2010, 16:55   #3
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da ASSTO Guarda i messaggi
...
In tal caso con il sistema precedente avrei inserito "WHERE (campo IS NOT NULL)" tramite concatenazione di stringhe...come posso ottenere lo stesso risultato con OleDbParameter?
Direttamente non puoi.
Ma è possibile farlo "indirettamente". In poche parole, una tecnica possibile, e neanche tanto impegnativa è quella di creare dei propri parametri che, in un certo senso, "incorporano" gli OleDbParameters.
Il che significa che andrò a creare un OleDbParameter solo quando lo riterrò opportuno, ossia, in questo caso, solo se il contenuto di una TextBox non è Stringa vuota. Perciò il mio Parametro potrà essere a seconda del caso, sia un OleDbParameter, sia una semplice stringa, che in questo caso specifico sarà = " IS NOT NULL ".

Esempio :

Codice:
        Dim strSql As String = ""

        Dim CMD As New OleDb.OleDbCommand

        'Parametri SELECT :
        Dim param1 As String
        If TextBox1.Text = "" Then
            param1 = " IS NOT NULL "
        Else
            CMD.Parameters.Add("@param1", OleDb.OleDbType.VarChar)
            CMD.Parameters("@param1").Value = TextBox1.Text
            param1 = "=@param1"
        End If

        Dim param2 As String
        If TextBox2.Text = "" Then
            param2 = " IS NOT NULL "
        Else
            CMD.Parameters.Add("@param2", OleDb.OleDbType.VarChar)
            CMD.Parameters("@param2").Value = TextBox2.Text
            param2 = "=@param2"
        End If

	'...

        Dim paramN As String
        If TextBoxN.Text = "" Then
            paramN = " IS NOT NULL "
        Else
            CMD.Parameters.Add("@paramN", OleDb.OleDbType.VarChar)
            CMD.Parameters("@paramN").Value = TextBoxN.Text
            paramN = "=@paramN"
        End If

        strSql = "SELECT * FROM nomeTabella" & _
                   " WHERE nomeCampo1" & param1 & _
                   " AND nomeCampo2" & param2 & _
		 '...
		 '... 
                   " AND nomeCampoN" & paramN

        CMD.CommandText = strSql
        CMD.Connection = CN

        CN.Open()
        Dim RDR As OleDb.OleDbDataReader = CMD.ExecuteReader()
        While (RDR.Read())

            'Processo Reader...
            '...

        End While

	'...
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2010, 21:38   #4
ASSTO
Senior Member
 
Iscritto dal: Oct 2008
Messaggi: 365
Grazie mille Marco, funziona!

Posso chiederti come mai l'utilizzo della @ come primo carattere nel nome dei parametri?

Visto che ci sono, sfrutto ancora la tua conoscenza (e, soprattutto, la tua disponibilità!!!): l'interfaccia grafica della mia applicazione è formata da un form MDI che contiene tanti form figli. L'interrogativo è questo: come faccio a far si che premendo il tasto "stampa" nella barra degli strumenti del form padre il programma stampi un documento diverso a seconda del form attivo in quel momento?

E' la prima volta che programmo con un form MDI e non ho la più pallida idea di come funzioni questa cosa...
__________________
Firma in sciopero!
ASSTO è offline   Rispondi citando il messaggio o parte di esso
Old 24-03-2010, 19:37   #5
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da ASSTO Guarda i messaggi
Grazie mille Marco, funziona!
Certo che funziona.

Quote:
Originariamente inviato da ASSTO Guarda i messaggi
Posso chiederti come mai l'utilizzo della @ come primo carattere nel nome dei parametri?
Sai che non ho mai creato named parameters senza "@" ?
E' una convenzione tipica dell'Sql ( Stored Procedures, Triggers, ... ), che a me piace tanto. Prova a rileggere una query di inserimento o di update con 50 named parameters che si chiamano come i campi, e che non iniziano per "@", e vedrai che... ti rispondi da solo.

Quote:
Originariamente inviato da ASSTO Guarda i messaggi
Visto che ci sono, sfrutto ancora la tua conoscenza (e, soprattutto, la tua disponibilità!!!): l'interfaccia grafica della mia applicazione è formata da un form MDI che contiene tanti form figli. L'interrogativo è questo: come faccio a far si che premendo il tasto "stampa" nella barra degli strumenti del form padre il programma stampi un documento diverso a seconda del form attivo in quel momento?

E' la prima volta che programmo con un form MDI e non ho la più pallida idea di come funzioni questa cosa...
Se si parla di Form semplici :
Codice:
        Dim nomeFormAttivo As String = Form.ActiveForm.Name
        MsgBox(nomeFormAttivo)
Se si parla di una Form Figlia in un contesto MDI :
Codice:
        Dim nomeFormAttivoMdiChild As String = Form.ActiveForm.ActiveMdiChild.Name
        MsgBox(nomeFormAttivoMdiChild)
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 24-03-2010, 21:02   #6
ASSTO
Senior Member
 
Iscritto dal: Oct 2008
Messaggi: 365
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Certo che funziona.



Sai che non ho mai creato named parameters senza "@" ?
E' una convenzione tipica dell'Sql ( Stored Procedures, Triggers, ... ), che a me piace tanto. Prova a rileggere una query di inserimento o di update con 50 named parameters che si chiamano come i campi, e che non iniziano per "@", e vedrai che... ti rispondi da solo.



Se si parla di Form semplici :
Codice:
        Dim nomeFormAttivo As String = Form.ActiveForm.Name
        MsgBox(nomeFormAttivo)
Se si parla di una Form Figlia in un contesto MDI :
Codice:
        Dim nomeFormAttivoMdiChild As String = Form.ActiveForm.ActiveMdiChild.Name
        MsgBox(nomeFormAttivoMdiChild)
Scusami...mi sono espresso poco chiaramente! Per "documento" intendevo un PrintDocument!

Relativamente la @...effettivamente hai ragione!
__________________
Firma in sciopero!
ASSTO è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2010, 01:04   #7
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da ASSTO Guarda i messaggi
Scusami...mi sono espresso poco chiaramente! Per "documento" intendevo un PrintDocument!
Beh, io ti ho fatto 2 esempi per rilevare il nome del Form attivo al momento.
Ora sai tu come farne uso. Se vuoi lanciare la stampa del PrintDocument sul Form attivo al momento, da un menu posto sulla MDI, userai un codice simile al secondo che ho postato per ricavare il Form Child al momento attivo, e poi stamperai il PrintDocument ad esso associato, se era questo che intendevi...
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 01-04-2010, 10:07   #8
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Rispondo qui a tuo pvt ( ragazzi, c'è già il Forum, perchè mi fate le domande in Pvt ? ).

"Ora il problema:
Attualmente la form principale inizializza l'array, lo riempie con i dati dell'acquisizione, effettua i calcoli e riempie le TB. Come cavolo faccio a far si che alla pressione del pulsante sia l'altra form ad acquisire l'array, elaborarlo e poi ripassare tutto alla form principale?

Abbreviando, sto cercando di capire se sia possibile fare il passaggio di dati tra forms e (se si può) come farlo..."


La risposta è molto semplice. Usa un Array solo, che avrai definito come Public in un Modulo ( o classe statica ). A quel punto potrai farvi accesso da qualsiasi punto del codice.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 01-04-2010, 15:19   #9
ASSTO
Senior Member
 
Iscritto dal: Oct 2008
Messaggi: 365
Grazie ancora, sono riuscito a fare il mio grafico e tutto il resto...ma a questo punto mi è nato un altro problema:

Per aggiornare le Textboxes con i dati che ho prelevato nella form del grafico apro quest'ultima con una dichiarazione

Codice:
public WithEvents grafico as new grafico
solo che se l'utente decide di voler effettuare un'altra acquisizione viene il codice genera un'eccezione del tipo ObjectDisposedException in quanto la form del grafico viene chiusa con me.close().

Ho effettuato una ricerca ma l'unica soluzione che sono riuscito a trovare è quella di non chiudere il form ma di nasconderlo...che per me non va bene perchè così facendo nel grafico i parametri della seconda acquisizione andrebbero ad aggiungersi ai parametri della prima. Un altro metodo sarebbe quello di creare una nuova istanza ma non è possibile effettuare una dichiarazione pubblica all'interno di una routine...che fare?
__________________
Firma in sciopero!
ASSTO è offline   Rispondi citando il messaggio o parte di esso
Old 01-04-2010, 15:44   #10
ASSTO
Senior Member
 
Iscritto dal: Oct 2008
Messaggi: 365
Risolto...delle volte dormo!

Per i posteri che si dovessero trovare nella stessa situazione: prima dichiarate

Codice:
Public WithEvents nomeVariabile as nomeForm
Poi istanziate con

Codice:
nomeVariabile = new nomeForm
ogni volta che volete.

Sono le basi ma sono talmente fuso che ho perso un'ora per questa cavolata...
__________________
Firma in sciopero!
ASSTO è offline   Rispondi citando il messaggio o parte di esso
Old 06-04-2010, 14:53   #11
ASSTO
Senior Member
 
Iscritto dal: Oct 2008
Messaggi: 365
Quote:
Originariamente inviato da ASSTO Guarda i messaggi
Ciao a tutti,
sto ancora lavorando al mio programma (http://www.hwupgrade.it/forum/showthread.php?t=2160107) e mi sono piantato durante l'ottimizzazione della parte relativa l'archivio.

Nel form di visualizzazione delle prove avevo implementato un pulsante per filtrare le stesse (visualizzate in una dataGridView) in funzione del contenuto di tre textboxes. Avevo gestito il tutto eseguendo una query su un tableAdapter ma siccome ho letto in giro di un certo "SQL Inject", ho deciso di ricreare il codice utilizzando una query parametrica però ho un problema: una delle tre textboxes potrebbe essere vuota. In tal caso con il sistema precedente avrei inserito "WHERE (campo IS NOT NULL)" tramite concatenazione di stringhe...come posso ottenere lo stesso risultato con OleDbParameter?
Mi accorgo ora di un problema: dal momento in cui premo il bottone per filtrare i risultati effettuo una query sul database utilizzando un DataReader e con lo stesso popolo la DataGridView modificandone il DataSource della BindingSource...fatto ciò però non riesco più ad ordinare le celle della DGV cliccando sull'header!
Il perchè posso immaginarlo...ma come risolvo? Devo scrivere riga per riga il codice che gestisce l'ordinamento o c'è qualche alternativa?
Secondo me sto facendo un pasticcio tra TableAdapters, stored procedures ecc ecc...
__________________
Firma in sciopero!
ASSTO è offline   Rispondi citando il messaggio o parte di esso
Old 06-04-2010, 15:04   #12
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da ASSTO Guarda i messaggi
...
...
Secondo me sto facendo un pasticcio tra TableAdapters, stored procedures ecc ecc...
Può dipendere da che tipo di binding hai fatto, ma anche da altro. Da quanto dici quei dati fanno un certo "giro", abbastanza tortuoso, prima di finire in quel DataGridView. Ti rendi conto di quanto sia difficile rispondere fattivamente a domande come queste ?
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2010, 07:12   #13
ASSTO
Senior Member
 
Iscritto dal: Oct 2008
Messaggi: 365
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Può dipendere da che tipo di binding hai fatto, ma anche da altro. Da quanto dici quei dati fanno un certo "giro", abbastanza tortuoso, prima di finire in quel DataGridView. Ti rendi conto di quanto sia difficile rispondere fattivamente a domande come queste ?
Effettivamente...si!!! Me ne rendo conto!

Riformulo la domanda del precedente post: dico male se affermo che la gestione dei dati di un db access è assegnata a due diverse "famiglie di oggetti" (che nel mio intricato schema mentale sarebbero una composta dai TableAdapters, DataAdapters ecc ecc ed un altra dai vari Oledbxxxxx)?
__________________
Firma in sciopero!
ASSTO è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2010, 10:09   #14
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da ASSTO Guarda i messaggi
Effettivamente...si!!! Me ne rendo conto!

Riformulo la domanda del precedente post: dico male se affermo che la gestione dei dati di un db access è assegnata a due diverse "famiglie di oggetti" (che nel mio intricato schema mentale sarebbero una composta dai TableAdapters, DataAdapters ecc ecc ed un altra dai vari Oledbxxxxx)?
La risposta è : Sì e No.
Ad esempio, se vuoi semplicemente visualizzare i dati ( quindi non consentendo all'utente Insert/Update/Delete ) in un DataGridView, l'unica cosa che serve è un DataReader.
Se il DGV invece accetta le modifiche dell'utente, basta un DataSet. In questi 2 casi non dovrebbe presentarsi alcun problema di riordinamento sulle colonne del DGV, in quanto si lavora sempre in modalità disconnessa.
Però, ripeto, sono indicazioni di massima. Non conoscendo nulla della struttura del tuo DB e della tua applicazione, posso solo dare indicazioni generiche. Personalmente non amo le "connessioni guidate" di VS, i vari TableAdapter, BindingSource, ecc. Si può fare tutto ugualmente a mano, scrivendo codice, in modo che possa essere rapidamente modificato in caso di cambiamenti a DB ( che comunque non dovrebbero MAI esserci, o in ogni caso dovrebbero essere di minima entità, perchè PRIMA si fa il DB. POI si fa l'applicazione... ).
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2010, 14:06   #15
ASSTO
Senior Member
 
Iscritto dal: Oct 2008
Messaggi: 365
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
La risposta è : Sì e No.
Ad esempio, se vuoi semplicemente visualizzare i dati ( quindi non consentendo all'utente Insert/Update/Delete ) in un DataGridView, l'unica cosa che serve è un DataReader.
Se il DGV invece accetta le modifiche dell'utente, basta un DataSet. In questi 2 casi non dovrebbe presentarsi alcun problema di riordinamento sulle colonne del DGV, in quanto si lavora sempre in modalità disconnessa.
Però, ripeto, sono indicazioni di massima. Non conoscendo nulla della struttura del tuo DB e della tua applicazione, posso solo dare indicazioni generiche. Personalmente non amo le "connessioni guidate" di VS, i vari TableAdapter, BindingSource, ecc. Si può fare tutto ugualmente a mano, scrivendo codice, in modo che possa essere rapidamente modificato in caso di cambiamenti a DB ( che comunque non dovrebbero MAI esserci, o in ogni caso dovrebbero essere di minima entità, perchè PRIMA si fa il DB. POI si fa l'applicazione... ).
Sono d'accordissimo sul discorso delle connessioni guidate, ma per un novizio sono parecchio comode...soprattutto il sistema di creazione e modifica delle DataGridViews. Ad esempio, sto ri-scrivendo tutto il codice delle mie form di visualizzazione sostituendo tutti i vari prodotti delle "autocomposizioni" (per dirla alla "Office") con le stored procedures (è questo il nome per definire quanto racchiude i vari OleDbxxxxx, giusto?), solo che mi devo formattare a mano colonna per colonna le DGV...c'è un sistema rapido per farlo?
__________________
Firma in sciopero!

Ultima modifica di ASSTO : 08-04-2010 alle 14:09.
ASSTO è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2010, 21:19   #16
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da ASSTO Guarda i messaggi
Ad esempio, sto ri-scrivendo tutto il codice delle mie form di visualizzazione sostituendo tutti i vari prodotti delle "autocomposizioni" (per dirla alla "Office") con le stored procedures (è questo il nome per definire quanto racchiude i vari OleDbxxxxx, giusto?), solo che mi devo formattare a mano colonna per colonna le DGV...c'è un sistema rapido per farlo?
Non capisco il discorso sulle "Stored Procedures". Ma se usi OleDb, hai sotto un DB Access, o cosa ?
Access non supporta nè Stored Procedures, nè Triggers, a meno che tu con "Stored Procedures" non intendi "Stored Queries"...
Secondo me c'è un po' di confusione. Il fatto che tu stia semplicemente usando named parameters su OleDb, non significa che fai uso di Stored Procedures.
La situazione-tipo, ripeto, è quella di avere un DGV associato ad un DataSet tipizzato, e a quel punto la formattazione delle colonne se la va a prendere dal DataSet stesso. Oppure usi un DataReader... Ottieni comunque un funzionamento più flessibile rispetto alle creazioni guidate, che sono agili e rapide, ma poi se devi metterci mano, spesso son dolori.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo HP OMEN MAX 16 con RTX 5080: potenza da desktop ...
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
MacBook Neo sorprende iFixit: 'Non vedev...
Venus Optics presenta due nuovi obiettiv...
AMD pubblica una guida per eseguire Open...
Tomb Raider I-III Remastered arriva su A...
X fa marcia indietro: si adeguerà...
Framework e la crisi delle memorie: terz...
Doom è ovunque: perché il ...
NVIDIA aggiorna G-Sync Pulsar: migliorat...
Portatile gaming con RTX 5060 a 1.099€: ...
6G for dummies: al MWC 2026 il CEO di Qu...
Le RAM tornano a salire di prezzo: quest...
5 robot aspirapolvere bestseller al mini...
A 59 anni il mio primo hackathon: dieci ...
Come sfruttare le Offerte di Primavera p...
NVIDIA promette un salto enorme: path tr...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:39.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v