Query su tabella database e inserimento dati filtrati su altra tabella...

domenica 28 settembre 2008 - 18.37

jtpsala Profilo | Senior Member

un saluto a tutti gli utenti di questo Forum.

Vi volevo chiedere come eseguire da form vb 2008 una query su una tabella sql 2005 server express ed il risulato dei dati inseririli in altra tabella:

Esempio:
Tabella da dove eseguire query "PrimaTabella":
Campi: "ID, Modello, Specifiche, Varie, disponibilità.
Ovviamente il valore che voglio filtrare è "Si" e si trova nel Campo "disponibilità".

Tabella dove inserire i dati filtrati "SecondaTabella":
Campi: "ID, Modello, Specifiche, Varie, disponibilità.

Ringrazio tutti in anticipo.

lbenaglia Profilo | Guru

>Vi volevo chiedere come eseguire da form vb 2008 una query su
>una tabella sql 2005 server express ed il risulato dei dati inseririli
>in altra tabella:
>
>Esempio:
>Tabella da dove eseguire query "PrimaTabella":
>Campi: "ID, Modello, Specifiche, Varie, disponibilità.
>Ovviamente il valore che voglio filtrare è "Si" e si trova nel
>Campo "disponibilità".
>
>Tabella dove inserire i dati filtrati "SecondaTabella":
>Campi: "ID, Modello, Specifiche, Varie, disponibilità.

Ciao Giuseppe,

Puoi utilizzare un comando di INSERT simile a questo:

INSERT dbo.SecondaTabella(ID, Modello, Specifiche, Varie, disponibilità) SELECT ID, Modello, Specifiche, Varie, disponibilità FROM dbo.PrimaTabella WHERE disponibilità = 'Si';

>Ringrazio tutti in anticipo.
Prego.

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

jtpsala Profilo | Senior Member

Grazie per avermi risposto.
Sto utilizzando la tua query in questo modo:
Dim Nome_db As String = "DATABASE"
Dim Path_backup As String = Global.House_2008.My.MySettings.Default.DatabaseConnectionString
Dim Query As String

Query = "INSERT INTRO TrasmissioneSitoWeb ID, RifeImmobile, Paese, Prezzo, SitoWeb SELECT ID, RifeImmobile, Paese, Prezzo, SitoWeb FROM Immobile WHERE SitoWeb = 'Si'"


Using db As New SqlConnection(Me.TextConnection.Text)
Dim comando As New SqlCommand(Query, db)
db.Open()
comando.ExecuteNonQuery()
db.Close()
End Using

ma mi da errore: valore non valido in prossimità di 'ID'

lbenaglia Profilo | Guru

>Query = "INSERT INTRO TrasmissioneSitoWeb ID, RifeImmobile, Paese,
>Prezzo, SitoWeb SELECT ID, RifeImmobile, Paese, Prezzo, SitoWeb
>FROM Immobile WHERE SitoWeb = 'Si'"

Quell'"INTRO" da dove salta fuori?
Casomai "INTO" ma è opzionale (infatti io non l'ho specificato).
Inoltre mancano le parentesi tonde intorno alle colonne...

Se non funziona ancora posta cortesemente i comandi di CREATE TABLE di entrambe le colonne complete di constraint, alcune righe di prova (INSERT INTO) ed il risultato che vorresti ottenere con quei dati.

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

jtpsala Profilo | Senior Member

Ho provato a mettere anche le parentesi ma restituisce ancora errore.
Ti allego i due file relative alle tabelle sql.
Grazie

lbenaglia Profilo | Guru

>Ho provato a mettere anche le parentesi ma restituisce ancora
>errore.

Il problema è dovuto al fatto che la colonna ID della tabella TrasmissioneSitoWeb è definita come IDENTITY, autogenerando un valore in fase di INSERT.
Hai diverse alternative:

- Non estrai dalla SELECT la colonna ID rimuovendola anche dal comando di INSERT;
- Togli l'attributo IDENTITY alla colonna ID (occorrerà ricreare da 0 la tabella TrasmissioneSitoWeb);
- Imposti l'opzione SET IDENTITY_INSERT a ON per TrasmissioneSitoWeb (da usare solo quando si vuole forzare il valore di una colonna IDENTITY);

Altra cosa, il 99% delle colonne è definita come Text (data type utilizzato solo in particolarissimi casi e deprecato a partire da SQL Server 2005).
Ti suggerisco di documentarti sui Books Online su tutti i data type offerti da SQL Server, utilizzando quello più corretto per ogni singola colonna.

>Grazie
Prego.

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

jtpsala Profilo | Senior Member

allora,
ho rimosso la colonna ID sia dal database sia dall'INSERT, ma restituisce questo errore:
"I tipi di dati text e varchar nell'operatore equal to sono incompatibili."

lbenaglia Profilo | Guru

>"I tipi di dati text e varchar nell'operatore equal to sono incompatibili."
Questo è un errore di collation (mizzega, ma li hai tutti tu ).
Ad ogni modo fermati e fai come ho detto: sostituisci TUTTI i Text con data type più opportuni... stai utilizzando SQL Server nel peggior modo possibile.

Ciao!

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

jtpsala Profilo | Senior Member

Scusa Lorenzo se ti ho fatto perdere tempo prezioso.
Questa è la prima applicazione che interfaccio con sql. E' solo a scopo di test. Quindi non fare caso ai capi che ho utilizzato nelle tabelle (tutte text), erano le più comode e non pensavo che generassino tutti questi problemi.

Grazie ancora.
Ciao.

lbenaglia Profilo | Guru

>Questa è la prima applicazione che interfaccio con sql. E' solo
>a scopo di test. Quindi non fare caso ai capi che ho utilizzato
>nelle tabelle (tutte text), erano le più comode e non pensavo
>che generassino tutti questi problemi.
Invece ci faccio caso eccome visto che ti stanno causando un mucchio di problemi
Facendo un paragone con Access è come se avessi definito tutte le colonne come Memo... ma Text è ancora "peggio"

>Grazie ancora.
Prego.

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

jtpsala Profilo | Senior Member

Ciao Lorenzo,
provando e riprovando ho scoperto che eseguendo direttamente questa query in Sql Server 2005 Express:

INSERT INTO "TrasmissioneSitoWeb" ("RifeImmobile", "SitoWeb")
SELECT "RifeImmobile", "SitoWeb"
FROM "Immobile"
WHERE "SitoWeb" LIKE 'Si' and "Status" LIKE 'Gestito'

funziona correttamente. Fa quello che voglio io. Adesso devo scoprire come farla eseguire dal form vb2008, in quanto mi da errore con le virgolette e gli apici. Tu hai qualche soluzione? oppure devo aprire un'altra discussione nella sezione dedicata a VB form?

P.s.: non preoccuparti che adesso studio bene che tipo di campo utilizzare per lo specifico valore. Lo so che tu ci tieni a fare le cose per bene.

lbenaglia Profilo | Guru

>INSERT INTO "TrasmissioneSitoWeb" ("RifeImmobile", "SitoWeb")
>SELECT "RifeImmobile", "SitoWeb"
>FROM "Immobile"
>WHERE "SitoWeb" LIKE 'Si' and "Status" LIKE 'Gestito'
>
>funziona correttamente. Fa quello che voglio io. Adesso devo
>scoprire come farla eseguire dal form vb2008, in quanto mi da
>errore con le virgolette e gli apici. Tu hai qualche soluzione?
Si, le virgolette non devi usarle

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

jtpsala Profilo | Senior Member

Sei mitico Lorenzo, mi hai proprio smosso qualche "rotellina" che si era bloccata (sarà stata la tua frase "mizzica, ma le hai proprio tutte" postata in precedenza).

Comunque ho cambiato totalmente strategia.
Ho voluto creare una tabella chiamata Test che interfaccio direttamente sulla Form tramite i classici BindingSource, TableAdapter, ecc...
Sulla stessa Form carico anche il Dataset relativo alla mia tabella Immobile e sulla stessa eseguo questo ciclo con un "filtro":

Try
For Each y As DataRow In Me.DatabaseDataSet.Tables("Immobile").Select("SitoWeb = 'Si' and Status = 'Gestito'")

Me.TestTableAdapter.Insert(y("RifeImmobile"), y("SitoWeb"))

Next

Me.Validate()
Me.TestBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.DatabaseDataSet)
Me.TestTableAdapter.Fill(Me.DatabaseDataSet.Test)
Me.DatabaseDataSet.Test.WriteXml(Console.XmlTextBox.Text & "\" & "OutPut.xml", System.Data.XmlWriteMode.WriteSchema)
Il risultato: viene eseguito correttamente l'Insert di quello che avevo filtrato dalla Tabella Immobile alla Tabella Test e alla fine posso creare il file XML da inviare al sito Web per la visione dei dati.

Ti ringrazio immensamente e perdonami se ti ho fatto perdere tempo prezioso.

Ciao,
Giuseppe.
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