| |  |  | Miembros: Mensajes: Temas: Online: Ultimo Miembro: | | |  | | |
 | 
26-05-2006, 01:37:36
| | Gran Participación en el Foro | | Registrado: ene 2005 Posts: 113
| | Problema con una busqueda en visual basic Buenas Tardes: tengo en siguiente problema con una busqueda que deseo realizar en una base de datos en access con visual basic, tengo un combo el cual cargo el numero de facturas pero necesito obtener el nombre del cliente que se encuentra en la tabla de clientes pero en la tabla de facturas tengo el codigo de cliente, necesito hacer una busqueda por medio del codigo de cliente que esta en facturas realizarla en la tabla de cliente.
El programa fuente es el siguiente:
Option Explicit
Dim tempfact As Long
Private Sub Form_Load()
Rs_Fa.Source = "SELECT * FROM Facturas"
Rs_Fa.ActiveConnection = Conn
Rs_Fa.Open
tempfact = Rs_Fa!Numero_Factura
Do While Not Rs_Fa.EOF
If tempfact = Rs_Fa!Numero_Factura Then
Rs_Fa.MoveNext
Else
Combo1.AddItem tempfact & Space(2) & Busca_Cliente(tempfact)
tempfact = Rs_Fa!Numero_Factura
End If
Loop
Combo1.AddItem tempfact & Space(2) & Busca_Cliente(tempfact)
Combo1.Refresh
End Sub
Private Function Busca_Cliente(codigo As Long) As String
Rs_St.Source = "SELECT * FROM Clientes"
Rs_St.ActiveConnection = Conn
Rs_St.Open
Do While Not Rs_St.EOF
If codigo = Rs_St!Codigo_Cliente Then
Busca_Cliente = Rs_St!Nombre_Cliente
Else
Rs_St.MoveNext
End If
Loop
End Function
Cuando ejecuto me envia el Error 3705 el cual me dice que la operacion no esta permitida.
Realmente no idea de lo que esta pasando para recoger el valor que necesito. Por lo demas todo lo que es la apertura esta correcto solo es aqui que me envia errores.
Si alguien me puede ayuda se lo agradeceria..
Gracias y Saludos desde Panama. | 
26-05-2006, 17:52:07
|  | Administrador | | Registrado: dic 2002 Ubicación: BURGOS - ESPAÑA Posts: 5.490
| | Re: Problema con una busqueda en visual basic Por lo que veo, tempfact es el valor que le pasas a la función Busca_Cliente. En esta función comparas si ese valor es igual al Codigo_Cliente, para presentar su nombre cuando sea positivo. Por lo tanto, deberás pasar el Código del cliente en el fichero de Facturas... Y sin embargo, la línea tempfact = Rs_Fa!Numero_Factura deja bien claro que lo que le estás pasando es el Código de la factura...
Pero ese rodeo de la función de búsqueda puedes evitarlo si defines un recordset en el que incluyas el nombre del cliente, tomado del fichero Clientes, así: Código: Option Explicit
Private Sub Form_Load()
With Rs_Fa
.Source = "SELECT a.*, b.Nombre_Cliente FROM Facturas a, Clientes b Where a.Codigo_Cliente = b.Codigo_Cliente Order by Numero_Factura"
.ActiveConnection = Conn
.Open
Do While Not .Eof
Combo1.AddItem !Numero_Factura & Space(2) & !Nombre_Cliente
.MoveNext
Loop
End With
End Sub Espero no haber cometido errores sintácticos, por hacerlo al vuelo. Bueno, y no sé si el código del cliente lo llamas [Codigo_Cliente] en ambas tablas... | 
26-05-2006, 21:12:30
| | Gran Participación en el Foro | | Registrado: ene 2005 Posts: 113
| | Muchas Gracias por la ayuda Gracias Sr. J.M.Movilla por la aclaracion del error, creo que estaba cometiendo un error bien grabe.
Muchas Gracias, por la ayuda, realizare las pruebas.
Saludos desde Panama, Gracias nuevamente. | 
31-05-2006, 22:02:19
| | Gran Participación en el Foro | | Registrado: ene 2005 Posts: 113
| | Tengo otra duda Buenas Tardes segun las intrucciones de SQL que me proporciono el Sr. J.M.Movilla, me funciona ya que puedo recoger el Nombre del Cliente de la Tablas clientes, que pasa ahora es que tengo en la tablas facturas, facturas con 1, 2 o 3 renglones cada una. Necesito solo tener el solo numero de factura y no que se me repita los renglones de todas las facturas ya que lo que necesito desplegar es un solo total de facturas con el nombre del cliente, el numero de factura y el monto de la factura. Presento el código de fuente para que me ayuden y el resultado que espero tener.
Private Sub Form_Load()
DataGrid1.Enabled = True
With Rs_Fa
.Source = " SELECT a.*, b.Nombre_Cliente FROM Facturas a, Clientes b " _
& "WHERE a.Codigo_Cliente = b.Codigo_Cliente ORDER BY Numero_Factura"
.ActiveConnection = Conn
.Open
Call ConFacturas.Crear_Temporal
.MoveFirst
Do While Not .EOF
Rs_St.AddNew
Rs_St!Numfact = Rs_Fa!Numero_Factura
Rs_St!Nombre = Rs_Fa!Nombre_Cliente
Rs_St.Update
Rs_Fa.MoveNext
Loop
Rs_St.MoveFirst
Set DataGrid1.DataSource = Rs_St
DataGrid1.Refresh
End With
End Sub
Sub Crear_Temporal()
With Rs_St
.Fields.Append "Numfact", adDouble, 10.2, adFldIsNullable
.Fields.Append "Nombre", adVarChar, 30, adFldIsNullable
.Open
End With
End Sub
El codigo fuente funciona correctamente pero no me despliega la informacion como la deseo en pantalla, envio un escreen de lo que esta haciendo el codigo fuente.
Si alguien me puede aclara lo que esta pasando, por favor se lo agradeceria
Gracias y saludos desde Panama | 
02-06-2006, 01:15:34
| | Gran Participación en el Foro | | Registrado: ene 2005 Posts: 113
| | Me puede alguien ayudar con mi Problema Disculpe explique un caso sobre un pequeño problema que tengo, con datagrid, me puede alguien ayudar por Favor
Gracias y saludos de Panama | 
02-06-2006, 02:27:55
|  | Gran Participación en el Foro | | Registrado: jul 2005 Ubicación: Libertad / Merlo prov Buenos Aires Posts: 206
| | Re: Me puede alguien ayudar con mi Problema No das muchos datos sobre tus tablas como para poder ayudarte con certeza, pero puedes probar el agregar el predicado Distinctrow a tu consulta, para que evite los datos duplicados. Esto no me ha funcionado en cualquier tipo de consulta, así que prueba y despues nos comentas. Tu consulta quedaría así: Código: " SELECT DISTINCTROW a.*, b.Nombre_Cliente FROM Facturas a, Clientes b " _
& "WHERE a.Codigo_Cliente = b.Codigo_Cliente ORDER BY Numero_Factura" | 
02-06-2006, 20:27:38
| | Gran Participación en el Foro | | Registrado: ene 2005 Posts: 113
| | Gracias por la ayuda Muchas Gracias Juan Carlos por la ayuda, explico algo mas detallado, yo tengo dos tablas FACTURAS Y CLIENTES. En la primera yo tengo el numero de factura, codigo del producto, codigo de cliente, renglones de la facturas, fecha de emision de la factura, numero de cotizacion, precio de venta, cantidad vendida, total (que es la multiplicacion del precio de venta x la cantidad vendida), observaciones. En la segunda tabla tengo Codigo de cliente, nombre del cliente, direccion, telefono, telefono fax. Mi idea era utilizar un datagrid para realizar un despliegue de informacion de tabla Facturas solo con la informacion resumida, es decir si por lo menos un cliente tiene una factura con tres renglones o sea varios productos facturas, solo desplegar el datagrid los siguientes valores ejemplo:
Numero Factura Nombre del Cliente fecha factura Sub-Total Impuesto Total Final
----999999-------xxxxxxxxxxxxxxx--99/99/9999---9999.99----99.99--- 99999.99
----999999-------xxxxxxxxxxxxxxx--99/99/9999---9999.99----99.99--- 99999.99
y asi sucesivamente y si en caso tal el operador desea consultar el detalle de ese cliente o sea los renglones de la factura con solo seleccionar en el datagrid el la fila se pueda desplegar el detalle de esa factura en la parte de abajo ya sea listview u otro componente.
Lo que me esta pasando es que mi consulta en el data grid se esta desplegando asi
si la factura 88888 tiene tres renglones se despliega de la siguiente manera.
Numero Factura Nombre del Cliente fecha factura Sub-Total Impuesto Total Final
-88888-----------Pedro Galan---------02/06/2006----12.99------0.99-----14.01----
-88888-----------Pedro Galan---------02/06/2006-----2.99------0.99-----14.01----
-88888-----------Pedro Galan---------02/06/2006----15.99------0.99-----14.01----
y lo que deseo es que solo se depliegue una sola vez con todos los totales una sola vez.
Eso es lo que me esta pasando.
Si alguien me puede ayudar, se lo agradeceria.
Gracias y Saludos desde Panama | 
03-06-2006, 00:48:30
|  | Gran Participación en el Foro | | Registrado: jul 2005 Ubicación: Libertad / Merlo prov Buenos Aires Posts: 206
| | Re: Gracias por la ayuda Disculpa, pero en tu pregunta anterior tenías esta consulta: Código: " SELECT a.*, b.Nombre_Cliente FROM Facturas a, Clientes b " _
& "WHERE a.Codigo_Cliente = b.Codigo_Cliente ORDER BY Numero_Factura" y con ella quieres que muestre esto: Cita:
Numero Factura Nombre del Cliente fecha factura Sub-Total Impuesto Total Final
----999999-------xxxxxxxxxxxxxxx--99/99/9999---9999.99----99.99--- 99999.99
----999999-------xxxxxxxxxxxxxxx--99/99/9999---9999.99----99.99--- 99999.99
| No me queda claro lo que quieres, pero me parece que deberías hacer una agrupación (group by) del campo Numero _Factura y ver lo que sucede. Código: " SELECT a.Numero_Factura, b.Nombre_Cliente,a.Fecha_Factura,SUM(a.Precio_Venta * a.Cantidad_Vendida) AS [Sub-Total] FROM Facturas AS a, Clientes AS b " _
& "GROUP BY a.Numero_Factura" Ten en cuenta que no se los nombres reales de tus campos, con lo cual los tuve que inventar.
Si esto funciona como quieres puedes agregar los campos que faltan y ver lo que sucede. | 
06-06-2006, 16:07:36
| | Gran Participación en el Foro | | Registrado: ene 2005 Posts: 113
| | Gracias por la ayuda Bueno amigo, creo me has ayudado aclarando un poco mas mis dudas realizare las pruebas que me dices y luego comentare lo realizado.
Gracias, Saludos desde Panama. | | Herramientas | | | | Desplegado | Mode Lineal |
Normas de Publicación
| no Puedes crear nuevos temas no Puedes responder a temas no Puedes adjuntar archivos no Puedes editar tus mensajes Código [IMG] está habilitado Código HTML está deshabilitado | | | La franja horaria es GMT. Ahora son las 06:50:37.
Powered by vBulletin® Version 3.6.8 Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
A vBSkinworks Design
|  |