Busqueda SQL

naveguito
23 de Diciembre del 2003
Hola a todos y feliz navidad:
Tengo el siguiente problema con una busqueda que realizo en varios controles data(segun elija el usuario de 1 a n,los campos de busqueda son comunes).El error que me da visual es:"Error de sintaxis en la cadena en la expresion de consulta".Este es el codigo que tengo:

Private Sub CmdAceptar2_Click()
For i = 0 To 5
If Data(i).Enabled = True Then
Mconsulta = "select * from " & TABLA(i) & " where'" & Criterio
Data(i).RecordSource = Mconsulta
Data(i).Refresh
RBusc (i)
End If
Next
DBG.Visible = True
End Sub
*Mconsulta es una variable de tipo string,la cual cree para ver lo que cogia la sentencia SQL

Function TABLA(Indice As Integer) As String
Select Case Indice
Case 0
TABLA = "Encoder_Hohner"
Case 1
TABLA = "Encoder_Givi"
Case 2
TABLA = "Encoder_Elgo"
Case 3
TABLA = "Encoder_Posital"
Case 4
TABLA = "Encoder_Scancon"
Case 5
TABLA = "Encoder_Waycon"
End Select
End Function

Function Criterio() As String
Dim MC As String 'usaré esta variable para rellenar el criterio
Dim j As Integer
MC = ""
For j = 0 To 16
If Txt(j) <> "" Then
MC = MC & Campos(i) & " = '" & Txt(j)
End If
Next
If Txtgiro <> "" Then MC = MC & "Giro = '" & Txtgiro & "'And"
If Txtcodigo <> "" Then MC = MC & "Tipcod = '" & Txtcodigo & "'And"
If Txteje <> "" Then MC = MC & "Tipeje = '" & Txteje & "'And"
If Txtbrida <> "" Then MC = MC & "Brida ='" & Txtbrida & "'And"
If Txtconexion <> "" Then MC = MC & "Tipcon ='" & Txtconexion & "'And"
If Txtinterface <> "" Then MC = MC & "Inter ='" & Txtinterface & "'And"
If Txtcircuito <> "" Then MC = MC & "CS ='" & Txtcircuito & "'And"
If Txtfuente <> "" Then MC = MC & "Fuente='" & Txtfuente & "'And"
'Criterio = Trim(Mid(MC, 1, Len(Criterio) - 5))
End Function

Function Campos(Indice As Integer) As String
If Indice = 0 Then Campos = "Refprov"
If Indice = 1 Then Campos = "Ref"
If Indice = 2 Then Campos = "PasC"
If Indice = 3 Then Campos = "Tencod"
If Indice = 4 Then Campos = "Teje"
If Indice = 5 Then Campos = "Cons"
If Indice = 6 Then Campos = "CAxial"
If Indice = 7 Then Campos = "CRadial"
If Indice = 8 Then Campos = "Nrev"
If Indice = 9 Then Campos = "Nimp"
If Indice = 10 Then Campos = "RV"
If Indice = 11 Then Campos = "RC"
If Indice = 12 Then Campos = "FT"
If Indice = 13 Then Campos = "TA"
If Indice = 14 Then Campos = "TF"
If Indice = 15 Then Campos = "IP"
If Indice = 16 Then Campos = "Hum"
End Function

Espero que alguien me pueda ayudar,muchas gracias a todos y prospero año nuevo

Thessen
23 de Diciembre del 2003
Te sobra la comilla simpre despues del WHERE cuando montas la cadena.
Un saludo.

naveguito
23 de Diciembre del 2003
Hola Thessen quite la comilla simple antes del where pero ahora me da el siguiente error:Error de sintaxis en la clausula WHERE.Gracias

Buyeya
23 de Diciembre del 2003
Hola, mirá probá dejando el Where como está, y después del Criterio, agrega " ' " , sin los espacios, ta.. digamos, puede que te falte las comillas al final..

Saludos..

naveguito
23 de Diciembre del 2003
Si te refieres a esto:
Mconsulta = "select * from " & TABLA(i) & " where '" & Criterio"'"

Visual no lo deja hacer

Buyeya
23 de Diciembre del 2003
Hola, te esta faltando un & ,,,

proba así.. Mconsulta = "select * from " & TABLA(i) & " where '" & Criterio & "'"

Thessen
23 de Diciembre del 2003
Si nos puedes indicar que es lo que contiene la variable criterio seguro que te podremos decir en que te falla exactamente. Si no quieres indicarlo por cinfidencialidad, puedes ponernos un ejemplo de como la estructuras para hacernos una idea.

naveguito
23 de Diciembre del 2003
Hola Thessen en Criterio lo que tengo es almacenar los valores de los campos que el usuario mete para realizar la busqueda,tengo esto:

Tengo 16 textbox y 8 combobox los textbox son una matriz y quiero que segun sea el valor que el usuario introducio en ellos busque en sus correspondientes datos,no se si me explique con claridad(lo de las explicaciones se me da bastante mal,no me entiendo ni yo)los datos que introduce el usuario son de tipo texto en la base de datos,espero que te sirva,muchas gracias

Baltasar
23 de Diciembre del 2003
en principio, te faltaría agregar "and" depués de cada condición en la función CRITERIO:

For j = 0 To 16
If Txt(j) <> "" Then
MC = MC & Campos(i) & " = '" & Txt(j) & " and "
End If
Next

con eso solucionas parte del problema.

naveguito
23 de Diciembre del 2003
Acabo de hacer las modificaciones y no realiza la busqueda,tengo esto

For i = 0 To 5
If Data(i).Enabled = True Then
Mconsulta = "select * from " & TABLA(i) & " where'" & Criterio & "'"
Data(i).RecordSource = Mconsulta
Data(i).Refresh
'RBusc (i)
End If
Next
DBG.Visible = True

Mconsulta toma el siguiente valor,select * from Encoder_Hohner where ""

Function TABLA(Indice As Integer) As String
Select Case Indice
Case 0
TABLA = "Encoder_Hohner"
Case 1
TABLA = "Encoder_Givi"
Case 2
TABLA = "Encoder_Elgo"
Case 3
TABLA = "Encoder_Posital"
Case 4
TABLA = "Encoder_Scancon"
Case 5
TABLA = "Encoder_Waycon"
End Select
End Function

Function Criterio() As String
Dim MC As String 'usaré esta variable para rellenar el criterio
Dim j As Integer
MC = ""
For j = 0 To 16
If Txt(j) <> "" Then
MC = MC & Campos(i) & " = '" & Txt(j) & " and "
End If
Next
If Txtgiro <> "" Then MC = MC & "Giro = '" & Txtgiro & "And"
If Txtcodigo <> "" Then MC = MC & "Tipcod = '" & Txtcodigo & "And"
If Txteje <> "" Then MC = MC & "Tipeje = '" & Txteje & "And"
If Txtbrida <> "" Then MC = MC & "Brida ='" & Txtbrida & "And"
If Txtconexion <> "" Then MC = MC & "Tipcon ='" & Txtconexion & "And"
If Txtinterface <> "" Then MC = MC & "Inter ='" & Txtinterface & "And"
If Txtcircuito <> "" Then MC = MC & "CS ='" & Txtcircuito & "And"
If Txtfuente <> "" Then MC = MC & "Fuente='" & Txtfuente & "And"
'Criterio = Trim(Mid(MC, 1, Len(Criterio) - 5))
End Function
AQUI MC TOMA ESTE VALOR MC="Refprov='111 and "
Por cierto para eliminar el ultimo and de la consulta no funciona dice "llamada a argumentos o procedimientos no validos"

Function Campos(Indice As Integer) As String
If Indice = 0 Then Campos = "Refprov"
If Indice = 1 Then Campos = "Ref"
If Indice = 2 Then Campos = "PasC"
If Indice = 3 Then Campos = "Tencod"
If Indice = 4 Then Campos = "Teje"
If Indice = 5 Then Campos = "Cons"
If Indice = 6 Then Campos = "CAxial"
If Indice = 7 Then Campos = "CRadial"
If Indice = 8 Then Campos = "Nrev"
If Indice = 9 Then Campos = "Nimp"
If Indice = 10 Then Campos = "RV"
If Indice = 11 Then Campos = "RC"
If Indice = 12 Then Campos = "FT"
If Indice = 13 Then Campos = "TA"
If Indice = 14 Then Campos = "TF"
If Indice = 15 Then Campos = "IP"
If Indice = 16 Then Campos = "Hum"
End Function

¿Para mostrar los resultados de la busqueda como podria hacer?Ahora lo que hago(que no funciona)es copiar los registros de la tabla que supuestamente tiene la busqueda a otra tabla,pero me entra en un bucle sin fin,tengo esto:

Private Sub RBusc(Indice As Integer)
Data(Indice).Refresh
Data(Indice).Recordset.MoveFirst
While Not Data(Indice).Recordset.EOF
RBus.Recordset.AddNew
RBus.Recordset.Fields("Refprov") = Data(Indice).Recordset.Fields("Refprov")
RBus.Recordset.Fields("Ref") = Data(Indice).Recordset.Fields("Ref")
RBus.Recordset.Fields("PasC") = Data(Indice).Recordset.Fields("PasC")
RBus.Recordset.Fields("Giro") = Data(Indice).Recordset.Fields("Giro")
RBus.Recordset.Fields("Tipcod") = Data(Indice).Recordset.Fields("Tipcod")
RBus.Recordset.Fields("Tencod") = Data(Indice).Recordset.Fields("Tencod")
RBus.Recordset.Fields("Tipeje") = Data(Indice).Recordset.Fields("Tipeje")
RBus.Recordset.Fields("Teje") = Data(Indice).Recordset.Fields("Teje")
RBus.Recordset.Fields("Brida") = Data(Indice).Recordset.Fields("Brida")
RBus.Recordset.Fields("Tipcon") = Data(Indice).Recordset.Fields("Tipcon")
RBus.Recordset.Fields("Inter") = Data(Indice).Recordset.Fields("Inter")
RBus.Recordset.Fields("CS") = Data(Indice).Recordset.Fields("CS")
RBus.Recordset.Fields("Fuente") = Data(Indice).Recordset.Fields("Fuente")
RBus.Recordset.Fields("Cons") = Data(Indice).Recordset.Fields("Cons")
RBus.Recordset.Fields("CAxial") = Data(Indice).Recordset.Fields("CAxial")
RBus.Recordset.Fields("CRadial") = Data(Indice).Recordset.Fields("CRadial")
RBus.Recordset.Fields("NRev") = Data(Indice).Recordset.Fields("NRev")
RBus.Recordset.Fields("Nimp") = Data(Indice).Recordset.Fields("Nimp")
RBus.Recordset.Fields("RV") = Data(Indice).Recordset.Fields("RV")
RBus.Recordset.Fields("RC") = Data(Indice).Recordset.Fields("RC")
RBus.Recordset.Fields("FT") = Data(Indice).Recordset.Fields("FT")
RBus.Recordset.Fields("TA") = Data(Indice).Recordset.Fields("TA")
RBus.Recordset.Fields("TF") = Data(Indice).Recordset.Fields("TF")
RBus.Recordset.Fields("IP") = Data(Indice).Recordset.Fields("IP")
RBus.Recordset.Fields("Hum") = Data(Indice).Recordset.Fields("Hum")
RBus.Recordset.Fields("Precio") = Data(Indice).Recordset.Fields("Precio")
RBus.Recordset.Fields("Foto") = Data(Indice).Recordset.Fields("Foto")
RBus.UpdateRecord
RBus.Recordset.MoveNext
Wend
End Sub

Ahora mismo la busqueda no da fallo,pero no hace nada muestra la totalidad de los registros de la tabla en la que busco sin tener en cuente la busqueda

Baltasar
23 de Diciembre del 2003
Has de quitar al final la línea

RBus.Recordset.MoveNext

y poner en su lugar

Data(Indice).Recordset.Movenext

De cualquier manera, si prefieres ver los resultados en un grid, te explico cómo hacerlo.

Saludos

Baltasar
23 de Diciembre del 2003
te faltó la comilla simple al final:

MC = MC & Campos(i) & " = '" & Txt(j) & "' and "

en todos los campos que sean de tipo string has de poner comillas simples antes y después de la variable que comparas.