2011-09-02 2 views
0

Je continue d'obtenir une erreur disant "il y a une erreur dans votre syntaxe SQL." quand j'utilise cette instruction SQL:Standard SQL SELECT * FROM TABLE erreur de syntaxe de retour

SELECT * FROM gsm_oceanwide_integration 

EDIT:

Pour mettre cela en contexte Heres le code im en utilisant cette instruction de requête dans (VB.net):

Dim con As MySqlConnection = New MySqlConnection("Data Source=" & frmLogin.txtserver.Text & ";Database=stratocast;User ID=" & frmLogin.txtusername.Text & ";Password=" & frmLogin.txtpassword.Text & ";") 
Dim sqladmin As MySqlCommand = New MySqlCommand("SELECT * FROM employee", con) 
Dim sqlprojects As MySqlCommand = New MySqlCommand("SELECT * FROM projects", con) 
Dim sqlpage As MySqlCommand = New MySqlCommand("SELECT * FROM '" & frmMain.ListBox1.SelectedItem & "';", con) 

Dim ds5 As DataSet = New DataSet() 
Dim DataAdapter5 As MySqlDataAdapter = New MySqlDataAdapter() 
Dim Comb As MySqlCommandBuilder 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 


    ' retrieving the Project Page. 
    Try 
     con.Open() 
     DataAdapter5.SelectCommand = sqlpage 
     DataAdapter5.Fill(ds5, "stratocast") 
     DataGridView3.DataSource = ds5 
     DataGridView3.DataMember = "stratocast" 
     con.Close() 

    Catch myerror As MySqlException 
     MessageBox.Show("Error Retrieving Project Page: " & myerror.Message) 
    End Try 
End Sub 

sur mon frmMain forme j'ai une liste avec une liste de projets (l'un d'eux étant gsm_oceanwide_integration) et je veux faire en sorte que quand je clique sur cette sélection, il affichera un autre formulaire avec une vue de données. ce datagridview doit être rempli avec les données de la table que j'ai appelé gsm_oceanwide_integration. (Comme la sélection listbox)

donc ma déclaration en cours de requête (y compris les balises de VB.NET) est:

Dim sqlpage As MySqlCommand = New MySqlCommand("SELECT * FROM '" & frmMain.ListBox1.SelectedItem & "';", con) 

Il travaillait plus tôt aujourd'hui, mais je dois avoir changé quelque chose et oublié ... depuis lors le meilleur que je peux faire est de se débarrasser de toutes les erreurs mais le datagridview n'affichera toujours rien sur ma base de données. Oui, j'ai vérifié toute l'orthographe.


MISE À JOUR 2: J'ai changé ma déclaration de commande sqlpage de:

Dim sqlpage As MySqlCommand = New MySqlCommand("SELECT * FROM '" & frmMain.ListBox1.SelectedItem & "';", con) 

Pour:

Dim sqlpage As MySqlCommand = New MySqlCommand("SELECT * FROM [" & Me.ListBox1.SelectedItem.Value & "]", con) 

et je suis une nouvelle erreur sur une autre forme tous ensemble mais il est lié à la listbox1; dont le code est ci-dessous:

Private Sub ListBox1_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedValueChanged 
    Form1.indprojectname.Text = ListBox1.SelectedItem 
    Form1.Show() 
End Sub 

L'erreur est affiché dans cette capture d'écran (je pensais une capture d'écran peut être la meilleure méthode pour afficher les détails d'erreur): ScreenShot

l'erreur est: (au cas où vous ne pourriez pas lire la capture d'écran)

Une erreur s'est produite lors de la création du formulaire. Voir Exception.InnerException pour plus de détails. L'erreur est: Variable d'objet ou Avec la variable de bloc non définie.

Aussi, merci pour les réponses rapides, désolé je ne pouvais pas mettre à jour mon post plus tôt ...

Merci!

+3

la requête semble OK pour moi. Est-ce que vous nous montrez tout? En ce qui concerne les espaces dans les noms de tables, il est possible d'échapper les noms avec des ticks de retour (par exemple, '' my table'', mais je recommanderais de ne les utiliser que pour la lisibilité.) –

+0

Votre requête ne se termine pas par la norme délimiteur ';' .Est-ce que vous utilisez un certain type de délimiteur personnalisé? – ajreal

+1

'gsm_oceanwide_integration' est un mot réservé, duh! – Johan

Répondre

2

Que diriez-vous du guillemet simple avant votre guillemet autour du nom de table venant de votre liste? Cela ne devrait pas être là. Vous avez:

Dim sqlpage As MySqlCommand = New MySqlCommand("SELECT * FROM '" & frmMain.ListBox1.SelectedItem & "';", con) 

Il devrait être:

Dim sqlpage As MySqlCommand = New MySqlCommand("SELECT * FROM " & frmMain.ListBox1.SelectedItem & ";", con) 
+0

quand j'applique les changements que vous avez suggérés ci-dessus j'obtiens une erreur disant (il y a une erreur dans votre syntaxe SQL près de "ligne 1.) ... im essayant de sélectionner toutes les colonnes de la table avec le nom spécifié – daniel11

+0

Lorsque vous définissez un point d'arrêt et de débogage, quelle est la valeur de SelectedItem? – Brian

+0

En fait, maintenant que je regarde à nouveau le code, je réécrirais ceci comme: Dim sqlpage As MySqlCommand = Nouveau MySqlCommand ("SELECT * FROM [" & Me.ListBox1.SelectedItem.Value & "]", con) Utilisation de l'attribut .Value ou .Text en fonction de ce qui est stocké dans votre liste – Brian

1

En ce qui concerne votre question sur les espaces dans les noms de table:

Réponse courte - oui, mais pas

Cependant, je prendrais un coup d'œil à la MySQL documentation on Schema Object Names

également comme mentionné dans les commentaires, les espaces sont permis en tant qu'indentificateur de table en utilisant des identifiants cités mais je n'encouragerais pas leur utilisation, principalement pour des raisons de lisibilité. En ce qui concerne votre requête, il faudrait plus d'informations, comme votre liste de tables.

2

Évitez d'ajouter des caractères spéciaux dans les noms de vos tables ou de vos champs. Tenez-vous à une convention telle que ...

myFieldName - connu sous le nom boîtier de chameau ou ...

my_field_name - Utilisez simplement l' souligne

En ce qui concerne l'instruction SQL Je ne vois rien de mal immédiatement il. Le nom de la table est-il correct?