Database SQL express 2005 e confronto dati

lunedì 09 luglio 2007 - 15.54

aintono Profilo | Junior Member

Ciao ragazzi, vi espongo rapidamente il mio problema:

sto sviluppando un'applicazione in vb 2005 e db sqlexpress 2005
quest'applicazione tramite alcuni cicli FOR NEXT e un random da vita a combinazioni numeriche del tipo: n1, n2, n3.

Nel database con colonne che si chiamano n1 - n2 - n3 sono contenute delle combinazioni di
numeri da me inserite del tipo n11, n21, n31 .. n1n, n2n, n3n.


Ecco il quesito.

come faccio a far 'stampare' in una textbox quelle combinazioni di n1, n2, n3 NON presenti
nel database?

Se dovessi sortire l'effetto contrario avrei utilizzato qualcosa del genere:

SELECT n1, n2, n3 from nome_tabella where n1=n11, n2=n21, n3=n31.
Ma non riesco ad immaginare un costrutto che si adatti al mio caso:
dovrei utilizzare NULL e NOT NULL?

Sono settimane che brancolo nel buio senza trovar soluzione.
a.

lbenaglia Profilo | Guru

>Nel database con colonne che si chiamano n1 - n2 - n3 sono contenute
>delle combinazioni di
>numeri da me inserite del tipo n11, n21, n31 .. n1n, n2n, n3n.
>
>
>Ecco il quesito.
>
>come faccio a far 'stampare' in una textbox quelle combinazioni
>di n1, n2, n3 NON presenti
>nel database?

Ciao aintono,

Senza un esempio pratico dubito che il discorso sia sufficientemente chiaro.
Puoi postare la struttura della tabella (CREATE TABLE), alcune righe di prova (INSERT INTO) ed il risultato che vorresti ottenere a partire da quei dati?

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

aintono Profilo | Junior Member

Ciao Lorenzo, grazie per l'interessamento!
Sono decisamente più fiducioso!!


Il Ciclo For Next (con il random) da vita a valori del tipo

1, 5, 10 **
3, 6, 12
4, 8, 15

che sarebbero i miei n1, n2, n3.



La tabella del database SQLEXPRESS 2005 ha 3 colonne chiamate n1, n2, n3.
Questa tabella contiene dei numeri:

n1 n2 n3
-----------
1 2 3
5 6 7
6 8 9
1 5 10 **


Vorrei fare un 'confronto' tra i dati elaborati dal ciclo For Next e quelli contenuti nel db:

nell'esempio dovrei stampare nella textbox

3, 6, 12
4, 8, 15

ma non 1, 5, 10 ** perchè già presente nel db!


Spero di essere stato più chiaro, in ogni caso appena torno a casa posto il codice!





a.

lbenaglia Profilo | Guru

>Vorrei fare un 'confronto' tra i dati elaborati dal ciclo For
>Next e quelli contenuti nel db:
>
>nell'esempio dovrei stampare nella textbox
>
>3, 6, 12
>4, 8, 15
>
>ma non 1, 5, 10 ** perchè già presente nel db!

Per fare questo potresti agevolare enormemente le cose inserendo i dati generati dal tuo ciclo in una tabella (anche temporanea) e utilizzando il nuovo operatore EXCEPT:

USE tempdb; CREATE TABLE dbo.Ciclo( n1 int NOT NULL, n2 int NOT NULL, n3 int NOT NULL ); CREATE TABLE dbo.Series( n1 int NOT NULL, n2 int NOT NULL, n3 int NOT NULL ); INSERT dbo.Ciclo VALUES(1, 5, 10); INSERT dbo.Ciclo VALUES(3, 6, 12); INSERT dbo.Ciclo VALUES(4, 8, 15); INSERT dbo.Series VALUES(1, 2, 3); INSERT dbo.Series VALUES(5, 6, 7); INSERT dbo.Series VALUES(6, 8, 9); INSERT dbo.Series VALUES(1, 5, 10); SELECT * FROM dbo.Ciclo EXCEPT SELECT * FROM dbo.Series; /* Output: n1 n2 n3 ----------- ----------- ----------- 3 6 12 4 8 15 (2 row(s) affected) */ DROP TABLE dbo.Ciclo, dbo.Series;

Per maggiori informazioni, leggi il seguente paragrafo sui Books Online:

"EXCEPT and INTERSECT (Transact-SQL)"
http://msdn2.microsoft.com/en-us/library/ms188055.aspx

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

aintono Profilo | Junior Member

Lorenzo e come la gestisco una tabella temporanea?
Dovrei svuotarla a fine di ogni ciclo For Next, giusto?
(altrimenti mi diventa una cosa enorme ..)

In ogni caso, stasera appena arrivo a casa provo il tutto e ti faccio sapere!


Grazie ancora!
a.

lbenaglia Profilo | Guru

>Lorenzo e come la gestisco una tabella temporanea?
>Dovrei svuotarla a fine di ogni ciclo For Next, giusto?
>(altrimenti mi diventa una cosa enorme ..)

Devi vedere tu.
Se vuoi considerare i dati relativi ALL'ULTIMO ciclo FOR...NEXT allora è corretto inserirli in una tabella temporanea locale (#) che verrà automaticamente distrutta alla chiusura della connessione, diversamente dovrai definire una tabella normale e ripulirla in base alle tue logiche di funzionamento.

>Grazie ancora!
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

aintono Profilo | Junior Member

Lorenzo forse sto abusando della tua pazienza ma sono relativamente nuovo a questo tipo di programmazione ..

Credo che la soluzione migliore sia una tabella temporanea locale dato che vorrei considerare solamente i dati relativi all'ultimo ciclo FOR...NEXT

Vedrò di documentarmi!
a.

aintono Profilo | Junior Member

Ciao Lorenzo, ho fatto una prova con la funzione EXCEPT e le due tabelle (senza ancora implementare il ciclo FOR NEXT) e sintatticamente dovrebbe funzionare (non mi ha dato nessun errore durante la compilazione)

ma per visualizzare il risultato della suddetta funzione?
a.

lbenaglia Profilo | Guru

>ma per visualizzare il risultato della suddetta funzione?

Non hai un tool grafico di amministrazione come SQL Server Management Studio Express tramite il quale sottomettere le query?
http://www.microsoft.com/downloads/details.aspx?familyid=6053C6F8-82C8-479C-B25B-9ACA13141C9E&displaylang=en

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

aintono Profilo | Junior Member

Ehm sì..ho già SQL Server Management Studio Express,
però sono nuovo della programmazione SQL con VB 2005 (ho utilizzato questa tecnologia con PHP per vari lavori)

Sottomettere le query?
A me servirebbe poter utilizzare il risultato della query per poterlo elaborare all'interno del programma che sto scrivendo (è per questo che nel mio programma ho inserito il codice che mi hai suggerito tramite SQL Command..)

Non potresti darmi una dritta/o delle semplici indicazioni da seguire?
a.

lbenaglia Profilo | Guru

>Ehm sì..ho già SQL Server Management Studio Express,
Beh, ti basta premere il bottone "New Query", incollare lo script SQL e premere F5

>A me servirebbe poter utilizzare il risultato della query per
>poterlo elaborare all'interno del programma che sto scrivendo
>(è per questo che nel mio programma ho inserito il codice che
>mi hai suggerito tramite SQL Command..)
Mi auguro solo la SELECT...
Studiati i DataSet ed i DataReader su MSDN:
http://msdn2.microsoft.com/en-us/library/system.data.dataset.aspx
http://msdn2.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5