Error de sintaxis en la cláusula FROM

dormdaz Mensajes publicados 361 Estado Miembro -  
pijaku Mensajes publicados 13513 Fecha de registro   Estado Moderador Última intervención   -
Hola,

he hecho un pequeño programa en VB6 con una base Access; después de la ejecución me muestra un mensaje de error así: [Microsoft][Pilote ODBC Access]Erreur de Syntaxe dans la Clause FROM. y La méthode 'Refresh' de l'objet 'Adodc' a echoué.
y el cuerpo del programa es el siguiente:

Private Sub cmd_chercher_Click() If Me.Tcode.Text = "" Then t = MsgBox("il faut saisir le code d'abord ", vbExclamation + vbOKOnly, "information") Exit Sub End If Adodc_maj_clients.RecordSource = " SELECT maj_clients.* From maj_clients WHERE ( maj_clients.code = '" & Me.Tcode & "') " Adodc_maj_clients.Refresh If Me.Adodc_maj_clients.Recordset.RecordCount <> 0 Then Me.Text11.Text = Me.Adodc_maj_clients.Recordset!nom Me.Text9.Text = Me.Adodc_maj_clients.Recordset!Date_N Me.Text6.Text = Me.Adodc_maj_clients.Recordset!Etat Me.Text5.Text = Me.Adodc_maj_clients.Recordset!Date_RDV '' Me.Text4.Text = Me.Adodc_maj_client.Recordset!Date_Paiement Me.Text3.Text = Me.Adodc_maj_clients.Recordset!N_Recu Me.Text2.Text = Me.Adodc_maj_clients.Recordset!N_reg Me.Text12.Text = Me.Adodc_maj_clients.Recordset!Agence Me.Text3.Text = Me.Adodc_maj_clients.Recordset!Date_Paiement Else p = MsgBox(" Recherche non aboutie ", vbOKOnly + vbInformation, "information") Exit Sub End If End 


vraiment j'arrive pas a résoudre le problem , je vous remercie d'avance et bonne journée

Configuration: Windows XP / Firefox 33.0

4 respuestas

  1. f894009 Mensajes publicados 17417 Fecha de registro   Estado Miembro Última intervención   1 717
     
    Hola,

    intenta esto

    Tcode es una cadena de caracteres

    Adodc_maj_clients.RecordSource = "SELECT maj_clients.* From maj_clients WHERE maj_clients.code = " & Me.Tcode
    0
  2. PlacageGranby Mensajes publicados 402 Estado Miembro 26
     
    Difícil de probar.
    Si empiezas por
    "" SELECT maj_clients.* From maj_clients"

    ¿Se produce el error?
    Si sí, sabemos que el nombre de la tabla, o la conexión a la BD, está causando el problema.

    Si no, bien, sabemos que es: WHERE ( maj_clients.code = '" & Me.Tcode & "')
    el que está causando el problema.

    Simplifica el código hasta que funcione, y añade las complejidades una por una para identificar qué trozo provoca el problema.
    0
    1. dormdaz Mensajes publicados 361 Estado Miembro
       
      Gracias de todos modos, el problema no está resuelto. mira, cuando ejecuto mi programa, exactamente dónde se detiene, como sigue:
      Adodc_maj_clients.RecordSource = " SELECT maj_clients.* From maj_clients WHERE ( maj_clients.code = '" & Me.Tcode & "') "
      Adodc_maj_clients.Refresh <----------- ( ahí aparece el problema )
      If Me.Adodc_maj_clients.Recordset.RecordCount <> 0 Then
      .
      .
      .
      . No logro resolver el problema, te lo agradezco infinitamente
      Dorm.
      0
    2. blux Mensajes publicados 2046 Fecha de registro   Estado Moderador Última intervención   3 455
       
      Hola,

      ¿no sería más bien un requery que un refresh?

      Y si maj_clients.code es numérico no hace falta poner comillas simples...
      0
    3. f894009 Mensajes publicados 17417 Fecha de registro   Estado Miembro Última intervención   1 717
       
      Hola Blux,

      En VB6.0 no hay requery para el datacontrol adodc
      0
    4. blux Mensajes publicados 2046 Fecha de registro   Estado Moderador Última intervención   3 455
       
      No conozco VB6.0 :-(

      Sin embargo, sería interesante verificar el contenido de la consulta poniendo todo eso en un msgbox, la explicación probablemente esté ahí (me.tcode con un valor extravagante (o incluso no informado...), maj_clients.code numérico...)
      0
    5. f894009 Mensajes publicados 17417 Fecha de registro   Estado Miembro Última intervención   1 717
       
      Hola,

      me.tcode es un cuadro de texto, supongo, entonces cadena de caracteres.
      0
  3. f894009 Mensajes publicados 17417 Fecha de registro   Estado Miembro Última intervención   1 717
     
    Hola,

    la sintaxis de la consulta es buena, pero con vuestro proyecto VB6 y la base disponible en https://www.cjoint.com/ sería más fácil
    0
    1. dormdaz Mensajes publicados 361 Estado Miembro
       
      Gracias, pero el problema lo localicé primero cuando uso Adodc solo con editores de texto para recuperar los datos. Y cuando lo ejecuto todo está bien, pero cuando uso el editor de texto para recuperar el código para hacer la búsqueda en la tabla, entonces me veo obligado a hacer estas instrucciones:
      Adodc_maj_clients.RecordSource = " SELECT maj_clients.* From maj_clients
      WHERE ( maj_clients.code = '" & Me.Tcode & "') "
      Adodc_maj_clients.Refresh <--- ( se muestra el error aquí )
      y cuando ejecuto el programa me aparece el mensaje de error :
      [Microsoft][Pilote ODBC Access]Erreur de Syntaxe dans la Clause FROM. et La méthode 'Refresh' de l'objet 'Adodc' a echoué.
      por favor, ¿existe otra método para hacer recuperar los datos y mostrarlos? Muchas gracias.
      Dorm.
      0
  4. pijaku Mensajes publicados 13513 Fecha de registro   Estado Moderador Última intervención   2 773
     
    Hola,

    Sin saber mucho, me permito aportar mi granito de arena.
    Disculpa las molestias si no es eso, considera que solo he pasado por aquí...

    Visto en Microsoft.com:

    Si el CommandType del control ADO Data está definido en adCmdTable, la instrucción "SELECT * From" se añade automáticamente al valor RecordSource. El hecho de definir RecordSource a una instrucción SQL de tipo SELECT, como Select * From Nom_table, da como resultado una instrucción SQL incorrecta del tipo Select * From Select * From Nom_table.

    A probar, por lo tanto:

    Adodc_maj_clients.CommandType = adCmdText 'o mejor: adCmdUnknown
    Adodc_maj_clients.RecordSource = " SELECT maj_clients.* From maj_clients WHERE ( maj_clients.code = '" & Me.Tcode & "') "
    Adodc_maj_clients.Refresh

    Fuentes: Esta muy mala traducción...

    Cordialmente,
    Franck
    0
    1. dormdaz Mensajes publicados 361 Estado Miembro
       
      Te lo agradezco infinitamente, ¿hay alguna forma de definir el texto de la orden (SQL)? Me sale el mensaje de error Adodc1: [ADODC]: Sin recurso especificado [Ado]: No se ha definido ningún texto de comando para el objeto de comando.
      Lo siento mucho por las molestias
      Atentamente.
      Dorm
      0
    2. pijaku Mensajes publicados 13513 Fecha de registro   Estado Moderador Última intervención   2 773
       
      Como se dijo anteriormente, no entiendo nada...
      Personalmente pensaba que siempre había que declarar la «conexión». Un poco como este ejemplo:

       Private Sub DataGrid1_Error(ByVal DataError As Integer, Response As Integer) Dim MaComm As ADODB.Command, Recup If DataError = 6153 Then Set MaComm = New ADODB.Command 'CONNEXION !!! With MaComm .ActiveConnection = Adodc1.Recordset.ActiveConnection .CommandText = "INSERT INTO Publishers (Name,[Company Name]) VALUES('" & Adodc1.Recordset!Name & "','" _ & Adodc1.Recordset![Company Name] & "')" .Execute .CommandText = "SELECT @@IDENTITY" Recup = .Execute .CommandText = "INSERT INTO Titles (Title,ISBN,[Year Published],PubId) VALUES('" & Adodc1.Recordset!Title & _ "','" & Adodc1.Recordset!ISBN & "','" & Adodc1.Recordset![Year Published] & "','" & Recup(0).Value & "')" .Execute End With Set DataGrid1.DataSource = Nothing Adodc1.Recordset.CancelUpdate Adodc1.Recordset.Requery Set DataGrid1.DataSource = Adodc1 Response = 0 End If End Sub 


      Mais, ce lien peut s'avérer utile...
      0