Errore di sintassi nella proposizione FROM(OLEDB-Access-VS2008VB)

giovedì 25 novembre 2010 - 21.43
Tag Elenco Tags  VB.NET  |  Visual Studio 2008  |  Access (.mdb)

Feroxkk Profilo | Junior Member

Da poco mi sono rimesso su Visual Studio, ero rimasto a VB6, e come prima cosa mi sono subito messo a provare le varie connessioni con i Database, OLEDB e SQLServer.

Con entrambi (con i comandi testuali CommandText tramite xy as oledbconnection & sqlconnection oledbcommand e sqlcommand) riesco a inserire perfettamente tutti i valori anche se inizialmente ho trovato i soliti problemi per la mancanza di funzionalità IIS e il programma che girava a 64bit.

Ora sperimentando la ricerca e la proiezione dei risultati su DataGridView con l'autogenerateColumn in OLEDB, incorro in un errore che non riesco a risolvere:


QUESTO E' IL CODICE:

(Database, TRGdata, tabella TababTRG, campo Targa)
Tutto è stato dichiarato:
dim nome as string
nome = player.targa (da classe e modulo)

Dim oledbconnection2 As New OleDb.OleDbConnection()

Dim oledbddatadapter2 As New OleDb.OleDbDataAdapter()
Dim oledbdataset2 As New DataSet()
oledbconnection2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Engeen\Desktop\DataTarghe straniere\TRGdata.mdb"

oledbddatadapter2.SelectCommand = New OleDb.OleDbCommand
oledbddatadapter2.SelectCommand.Connection = oledbconnection2

oledbddatadapter2.SelectCommand.CommandText = _
"SELECT Targa,Giorno " & _
"FROM TababTRG " & _
"JOIN TababTRG ON Targa = @Nome " & _
"ORDER BY Targa"


oledbddatadapter2.SelectCommand.CommandType = CommandType.Text
oledbconnection2.Open()
oledbddatadapter2.Fill(oledbdataset2, "TababTRG") ###
oledbconnection2.Close()

vISIONADATI.DataGridView1.AutoGenerateColumns = True
vISIONADATI.DataGridView1.DataSource = oledbdataset2
vISIONADATI.DataGridView1.DataMember = "TababTRG"

L'errore che viene fuori è in oledbddatadapter2.Fill(oledbdataset2, "TababTRG") #### ed è il seguente: Errore di sintassi nella proposizione FROM.

Probabilmente è una sciocchezza ma non riesco a venirne fuori.

lbenaglia Profilo | Guru

> oledbddatadapter2.SelectCommand.CommandText = _
> "SELECT Targa,Giorno " & _
> "FROM TababTRG " & _
> "JOIN TababTRG ON Targa = @Nome " & _
> "ORDER BY Targa"
>
>L'errore che viene fuori è in oledbddatadapter2.Fill(oledbdataset2,
>"TababTRG") #### ed è il seguente: Errore di sintassi nella
>proposizione FROM.
>
>Probabilmente è una sciocchezza ma non riesco a venirne fuori.

Ciao,

Sinceramente non ho capito quella self join.
Prova a riscrivere la query in questo modo:

oledbddatadapter2.SelectCommand.CommandText = _ "SELECT Targa, Giorno " & _ "FROM TababTRG " & _ "WHERE Targa = @Nome " & _ "ORDER BY Targa"

Inoltre occhio agli attacchi di SQL Injection che potresti facilmente evitare utilizzando un command parametrico:
http://www.dotnethell.it/articles/SQL-Injection-Tutorial-Security.aspx

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

Feroxkk Profilo | Junior Member

Il sistema con Where l'ho già utilizzato è la base ma con quello l'errore è lo stesso.

lbenaglia Profilo | Guru

>Il sistema con Where l'ho già utilizzato è la base ma con quello
>l'errore è lo stesso.
Cos'è @Nome?
Dove hai definito quella variabile?
Dove la valorizzi?

Qui trovi un esempio di query parametriche in Access:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=13913

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

Feroxkk Profilo | Junior Member

Allora Nome è dichiarata sopra nello stesso codice.
Questo codice è all'interno di un modulo.
Il Nome che in realtà è una Targa deriva da una classe qui dichiarata come player dove è dichiarata la targa quindi player.targa.
Al click viene preso questo campo player.targa che sarebbe poi Nome e nel frattempo ha delle altre elaborazioni in altri metodi.

lbenaglia Profilo | Guru

>Allora Nome è dichiarata sopra nello stesso codice.
Per mappare una variabile "dichiarata nel codice" con una variabile in un comando SQL devi ricorrere alla collection Parameters dell'oggetto OleDbCommand esattamente come riportato nell'esempio che ti ho linkato.

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

Feroxkk Profilo | Junior Member

Ma uso OLEDBcommand.commandtext intendi??
Lo uso per inserire:
OLEDBommand.commandtext = "INSERT INTO ecc ecc ecc "
poi per fare
oledbcommand.parameters.addwithvalue("Nome", player.targa)
' ricordo che Nome è una targa
Intendi questo??
Ma qui uso un data adapter.

Grazie mille intanto dell'aiuto!!

lbenaglia Profilo | Guru

>Ma qui uso un data adapter.
E non puoi passare alla proprietà SelectCommand un oggetto OleDbCommand parametrico già valorizzato con tutti i parametri del caso?
Tra l'altro è proprio l'esempio riportato su MDSN:
http://msdn.microsoft.com/it-it/library/system.data.oledb.oledbdataadapter.selectcommand.aspx

>Grazie mille intanto dell'aiuto!!
Prego.

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

Feroxkk Profilo | Junior Member

Quindi nel mio caso quando vado a dichiarare i parametri select command connection e command text scirvo:

'Dichiarazioni aggiungo:
dim oledbcommand2 as new oledb.oledbcommand

'nel resto del codice
oledbdataadapter2.selectcommand = oledbcommand2
oledbcommand.commandtext = "Select ecc"



ultima cosa che chiedo:
Nel codice riportato in MSDN:

command = New OleDbCommand("SELECT * FROM Customers " & _
"WHERE Country = ? AND City = ?", connection)

connection è scritta in nero:

sicuramente è la connessione che io chiamo oledbconnection2 (cioè la stringa oledbconnection2.connectionstring)
o sbaglio?

Grazie ora provo a modificare.

Feroxkk Profilo | Junior Member

finalmente ci sono riuscito:
il codice finale è:


Dim player As New Contatto (Contatto è una classe) qui siamo in un Metodo della classe contatto (metodo di ricerca per singolo).
Dim oledbconnection2 As New OleDb.OleDbConnection()
Dim oledbddatadapter2 As New OleDb.OleDbDataAdapter()
Dim oledbdataset2 As New DataSet()
Dim oledbcommand2 As New OleDb.OleDbCommand()

player.targa = vISIONADATI.TextBox1.Text


oledbconnection2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Engeen\Desktop\DataTarghe straniere\TRGdata.mdb"
oledbcommand2.Connection = oledbconnection2



oledbcommand2.CommandText = _
"SELECT Targa,Preavviso,Giorno " & _
"FROM TababTRG " & _
"WHERE Targa =" & player.targa & ""
oledbcommand2.Parameters.Add("Targa", OleDb.OleDbType.Char, 15).Value = player.targa

oledbddatadapter2.SelectCommand = oledbcommand2

oledbconnection2.Open()
oledbddatadapter2.Fill(oledbdataset2, "TababTRG")
oledbconnection2.Close()


vISIONADATI.DataGridView1.AutoGenerateColumns = True
vISIONADATI.DataGridView1.DataSource = oledbdataset2
vISIONADATI.DataGridView1.DataMember = "TababTRG"

oledbddatadapter2 = Nothing
oledbconnection2 = Nothing


Ancora mille grazie....
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5