Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

datos a un text

Estas en el tema de datos a un text en el foro de Visual Basic clásico en Foros del Web. Hola, Os cuento, yo tengo una base de datos de acces conectada a un msflexgrid con ADO, la tabla que tengo puesta se llama "Clientes", ...
  #1 (permalink)  
Antiguo 05/05/2010, 08:07
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
datos a un text

Hola,

Os cuento, yo tengo una base de datos de acces conectada a un msflexgrid con ADO, la tabla que tengo puesta se llama "Clientes", cuando yo doy al msflexgrid se añaden los datos a un formulario que he creado, tambien tengo relacionada la tabla "Clientes" con una que se llama "Pagos" en acces, entonces, lo que quiero es que cuando yo de al msflexgrid y se inserten los datos en el formulario quiero que me aparezca el 'Importe' que tienen que pagar en un text.

Campos de tablas:

Clientes: IdCliente,Nombre,Apellidos,Direccion,Ciudad,Provincia,Telef ono,CP.
Pagos: IdPagos,Importe,IdCliente,Descripcion,Fecha

Y tengo que hacer eso sin poder utilizar un bucle, solo con una consulta, de momento la tengo asi pero solo me añade el primer registro, y con todos lo clientes (cada cliente tiene un importe distinto o no tiene):


Esto esta puesto en el msflexgrid
Código vb:
Ver original
  1. Set cnPrueba = New Connection
  2. 'Establecer sus propiedades
  3.     With cnPrueba
  4.         .Provider = "Microsoft.Jet.oledb.4.0"
  5.         .ConnectionString = "prueba.mdb"
  6.     End With
  7. cnPrueba.Open
  8.            'Insertamos el importe de los clientes en un text
  9.        Set rsPagosDevoluciones = New Recordset
  10.        
  11.         With rsPagosDevoluciones
  12.            
  13.             .Source = "Select importe from pagosdevoluciones where idcliente = idpagos"
  14.             .ActiveConnection = cnPrueba
  15.             .LockType = adLockBatchOptimistic
  16.         End With
  17.             rsPagosDevoluciones.Open Options:=adCmdText
  18.             Text7.Text = rsPagosDevoluciones!importe

Saludos, espero haberme explicado bien
  #2 (permalink)  
Antiguo 06/05/2010, 02:14
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: datos a un text

Hola

Me voy a centrar en la SELECT.

Lo primero que tienes que saber, es que tabla(s) necesitas para realizar la select y los datos que tienes.

Esta claro que quieres obtener el importe, por lo tanto necesitas la [bold]tabla Pagos[/bold], pero tienes que obtener el importe de un cliente (no el de todos), por lo tanto tienes que poner una condición WHERE comparando el cliente, lo que tienes que saber es que dato del cliente tienes, es decir, si tienes el idcliente o solo el nombre del cliente.

Si tienes solo el nombre tendrás que utilizar también la tabla clientes, por lo que te hace falta unir las dos tablas con un INNER JOIN.

Si tienes el idcliente, con una sola tabla será suficiente, pero en tu ejemplo comparas el campo de la tabla idclientes con el campo idpago (no le veo lógica) tendrás que compararlo con una variable que tengas en el form o en el grid.

Bueno, no te pongo código para que puedas ir haciendo pruebas, y lo más importante decide lo que quieres obtener y los datos de los que dispones.

--Saludos--
  #3 (permalink)  
Antiguo 06/05/2010, 02:21
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: datos a un text

Hola Insomnia,

En efecto, lo tengo que hacer todo en la select y con inner join llevo la mañana provando combinaciones pero no me va, he echo esto:

Código vb:
Ver original
  1. .Source = "select importe from pagosdevoluciones inner join clientes ON clientes.idcliente = pagosdevoluciones.importe where importe = '" & Text7 & "'"

seleccion el importe de pagosdevoluciones(es "pagos") la combino con la de clientes y seleccion los dos que creo que con esos valdran.

Me dice que no coinciden los tipos de datos en la expresion de criterios

Saludos


PD: He echo mas combinaciones te he puesto esta porque es la que acababa de hacer

Última edición por Sergio18; 06/05/2010 a las 02:31
  #4 (permalink)  
Antiguo 06/05/2010, 02:43
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: datos a un text

Cita:
Si tienes el idcliente, con una sola tabla será suficiente, pero en tu ejemplo comparas el campo de la tabla idclientes con el campo idpago (no le veo lógica) tendrás que compararlo con una variable que tengas en el form o en el grid.
Tengo el idcliente en pagosdevoluciones y clientes (es la relacion que hay entre ellos) entonces no haria falta el inner join?¿

saludos
  #5 (permalink)  
Antiguo 06/05/2010, 04:40
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: datos a un text

He echo esto ahora pero me sigue dando error:

Código vb:
Ver original
  1. "SELECT Pagosdevoluciones.Importe FROM Clientes INNER JOIN Pagosdevoluciones ON Clientes.IdCliente =  Pagosdevoluciones.IdCliente WHERE ((Clientes.IdCliente= '" & Text3 & "') AND  Pagosdevoluciones.Importe = '" & Text7.Text & "')"

Va mas o menos va por hay la cosa?¿

Saludos

Última edición por Sergio18; 06/05/2010 a las 05:48
  #6 (permalink)  
Antiguo 06/05/2010, 04:56
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: datos a un text

Hola

Esta última versión tiene más sentido, seleccionas el importe, el inner join esta correcto (comparas los campos que unen las dos tablas) pero, que es lo que tienes en text3 y en text7 y de que tipo son? (texto, numérico,...)

--Saludos--
  #7 (permalink)  
Antiguo 06/05/2010, 05:01
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: datos a un text

En text3.text esta el idcliente de tipo numerico y en el text7 es donde quiero insertar el importe de tipo numerico,tambien

Saludos
  #8 (permalink)  
Antiguo 06/05/2010, 05:35
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: datos a un text

Hola

Es lo que te comentaba, si tienes el idcliente en el mismo formulario, no te hace falta la tabla clientes para obtener el importe, simplemente utiliza la tabla Pagosdevoluciones.

La condición del importe (text7) no tiene que ir en el WHERE ya que con eso le estas indicando que quieres obtener, el importe del cliente cuyo id sea igual al que pone en el text3 Y que tenga un importe igual al que pone en text7. Y eso no es lo que buscas.

--Saludos--
  #9 (permalink)  
Antiguo 06/05/2010, 05:42
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: datos a un text

Entonces no haria falta usar el inner join ¿no? con una consulta normal valdria??

Código vb:
Ver original
  1. "select Pagosdevoluciones.Importe from pagosdevoluciones where pagosdevoluciones.IdCliente ((pagosdevoluciones.IdCliente= '" & Text3 & "')"
Da error
saludos

Última edición por Sergio18; 06/05/2010 a las 05:54
  #10 (permalink)  
Antiguo 06/05/2010, 07:53
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: datos a un text

En el WHERE estas poniendo dos veces pagosdevoluciones.IdCliente, la sintaxis no es correcta.
  #11 (permalink)  
Antiguo 06/05/2010, 08:13
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: datos a un text

Ya me acabo de dar cuenta, me ha dicho mi compañero que tengo que utilizar las funciones de agrupado de SQL, para que cuando yo añada un registro me apareza el total del importe que tenga el cliente
  #12 (permalink)  
Antiguo 06/05/2010, 08:36
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: datos a un text

De momento llevo esto que da error pero es para ver si voy bien

Código vb:
Ver original
  1. "SELECT sum(Pagosdevoluciones.Importe) as sumitamia FROM Clientes INNER JOIN Pagosdevoluciones ON Clientes.IdCliente =  Pagosdevoluciones.IdCliente WHERE ((Clientes.IdCliente= '" & Text3 & "') group by importe"

saludos
  #13 (permalink)  
Antiguo 06/05/2010, 08:44
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: datos a un text

Hola

Volvemos a lo de antes, todos los campos que utilizas los tienes en la tabla Pagosdevoluciones (no te hace falta utilizar dos tablas), lo de SUM es correcto, la condición WHERE esta medio bien (sobran los paréntesis, además abres dos paréntesis y solo cierras uno), pero piensa mejor por que campo puedes agrupar.

--Saludos--
  #14 (permalink)  
Antiguo 06/05/2010, 08:49
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: datos a un text

Es que lo de las dos tablas me ha dicho que esta bien, por eso no las he kitao, lo del parentesis ya esta y he intentado agruparlo por idpagos e idcliente y me sigue dando error

Código vb:
Ver original
  1. "SELECT sum(Pagosdevoluciones.Importe) as sumitamia FROM Clientes INNER JOIN Pagosdevoluciones ON Clientes.IdCliente =  Pagosdevoluciones.IdCliente WHERE Clientes.IdCliente= '" & Text3 & "' group by idcliente"

saludos
  #15 (permalink)  
Antiguo 06/05/2010, 08:57
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: datos a un text

OK, creo que en post anterior (el de las 2 páginas) te comentaba como tenían que ir las select dependiendo del tipo de datos, es decir, no es lo mismo poner una condición WHERE con un campo de texto que con uno numérico.

Espero que la pista te sea útil
  #16 (permalink)  
Antiguo 06/05/2010, 09:18
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: datos a un text

Lo unico que he visto asi, a sido que no tenia las comillas simples se las he quitado y hacer lo mismo. Tambien he porbado a dejarlo asi : = & text3 y = text3 pero todos dan el mismo error te dejo este:

Código vb:
Ver original
  1. 'Insertamos el importe de los clientes en un text
  2.        Set rsPagosDevoluciones = New Recordset
  3.        
  4.         With rsPagosDevoluciones
  5.             .Source = "SELECT sum(Pagosdevoluciones.Importe) as sumitamia FROM Clientes INNER JOIN Pagosdevoluciones ON Clientes.IdCliente =  Pagosdevoluciones.IdCliente WHERE Clientes.IdCliente= " & Text3 & " group by idcliente"
  6.             .LockType = adLockBatchOptimistic
  7.         End With
  8.             rsPagosDevoluciones.Open Options:=adCmdText
  9.             Text7.Text = rsPagosDevoluciones!importe

edito: Acabo de comprobarlo y es como lo tengo en el codigo, dado que text3 es numerico, he probado las formas que te he dicho y en la interrupcion me sale vacio pero con las comillas simples me sale el codigo que selecciono

saludos

Última edición por Sergio18; 06/05/2010 a las 09:31
  #17 (permalink)  
Antiguo 06/05/2010, 09:30
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: datos a un text

Revisa la estructura de la sentencia SQL donde tiene que ir el GROUP BY y con que va el GROUP BY, es decir, si utilizas GROUP BY no se suele utilizar WHERE para marcar la condición, se utiliza otra función.
  #18 (permalink)  
Antiguo 06/05/2010, 09:42
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: datos a un text

Ok ya esta lo dejo aqui:

Código vb:
Ver original
  1. Set rsPagosDevoluciones = New Recordset
  2.        
  3.         With rsPagosDevoluciones
  4.             .Source = "SELECT sum(Pagosdevoluciones.Importe) as sumitamia FROM Clientes INNER JOIN Pagosdevoluciones ON Clientes.IdCliente =  Pagosdevoluciones.IdCliente WHERE Clientes.IdCliente = " & Text3 & ""
  5.             .LockType = adLockBatchOptimistic
  6.             .ActiveConnection = cnPrueba
  7.         End With
  8.             rsPagosDevoluciones.Open
  9.             Text7.Text = rsPagosDevoluciones!sumitamia

He quitado el group by,he añadido el activeconnectio que por eso me marcaba siempre el mismo error y de mede añadir la columna importe he añadido sumitamia.

Muchas Gracias como siempre Insomnia,

He intentado mandarte las cervezas por Mp pero estallo el ordenador .

Saludos

Última edición por Sergio18; 06/05/2010 a las 09:47
  #19 (permalink)  
Antiguo 06/05/2010, 10:02
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: datos a un text

Me alegro

Y si no me equivoco aún se podía reducir un poco más:

Cita:
SELECT sum(Importe) as sumitamia FROM Pagosdevoluciones WHERE Clientes.IdCliente = " & Text3 & ""
--Saludos--
  #20 (permalink)  
Antiguo 07/05/2010, 01:43
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: datos a un text

Buenos dias Insomnia

El codigo reducido lo he probado y no va, pero no pasa nada te lo agradezco =mente. Pero tengo una duda, tengo que hacer que cuando yo de a un registro y este no tenga importe de mede salirme un error null no me haga nada simplemente añada lo que hay, he probado con is null, pero no se si esta bien definido, te lo dejo:

Código vb:
Ver original
  1. If IsNull(rsPagosDevoluciones("Importe")) Then
  2.             Text7.Text = ""
  3.             End If

Saludos
  #21 (permalink)  
Antiguo 07/05/2010, 02:21
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: datos a un text

Hola

Tienes razón, si te fijas en el código corto mio, he realizado una referencia a la tabla clientes (que no hace falta), creo que lo correcto sería:

Cita:
SELECT sum(Importe) as sumitamia FROM Pagosdevoluciones WHERE IdCliente = " & Text3
Respecto a como comprobar si el recordset esta vacío, prueba con

Código vb:
Ver original
  1. If rsPagosDevoluciones.EOF and rsPagosDevoluciones.BOF then 'El recordset esta vacío
  2.   Text7.Text = ""
  3. End if

--Saludos--
  #22 (permalink)  
Antiguo 07/05/2010, 02:28
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: datos a un text

Hola el codigo reducido ya va, gracias por eso, el if me sigue haciendo lo mismo que yo he estado haciendo me añade los registros con datos sin problemas pero al seleccionar uno sin datos me da error 94 : "uso no valido de null"
He probado poniendo isnull pero tampoco

Código vb:
Ver original
  1. If IsNull(rsPagosDevoluciones.EOF And rsPagosDevoluciones.BOF) Then
  2.             Text7.Text = ""
  3.             End If

Tambien he probado esto y hace lo mismo:

Código vb:
Ver original
  1. If IsNull(rsPagosDevoluciones) Then
  2.             Text3.Text = ""
  3.             Exit Sub
  4.             End If

Tambien he declarado una variable (sumitamia) como variant y hace lo mismo:

Código vb:
Ver original
  1. If sumitamia = Null Then
  2.             Text3.Text = ""

Saludos

Última edición por Sergio18; 07/05/2010 a las 02:37
  #23 (permalink)  
Antiguo 07/05/2010, 05:18
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: datos a un text

Pues la verdad es que no se, pensaba que utilizando EOF y BOF funcionaría. No es la mejor forma, pero intenta añadiendo la siguiente linea despues de abrir el recordset:

Cita:
On error resume next
Con esta linea lo único que hace es que si se produce un error continua con la ejecución del programa sin hacer caso del error. No es lo optimo, ya que no controlamos el error, pero en algunas ocasiones...

--Saludos--
  #24 (permalink)  
Antiguo 07/05/2010, 05:18
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: datos a un text

Ok ya esta

Código vb:
Ver original
  1. If IsNull(rsPagosDevoluciones!sumitamia) Then
  2.                 Text7.Text = " "
  3.             Else
  4.                 Text7.Text = rsPagosDevoluciones!sumitamia
  5.             End If

Asi va perfecto
Saludos
  #25 (permalink)  
Antiguo 07/05/2010, 05:25
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: datos a un text

OK !!!

No me había dado cuenta que lo que estaba mal era la referencia al dato del recordset, "rsPagosDevoluciones("Importe")" no es valido, también puedes poner rsPagosDevoluciones.fields(0), me había cegado con que lo que estaba mal era que no funcionaba el isnull

--Saludos--
  #26 (permalink)  
Antiguo 07/05/2010, 05:34
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 14 años
Puntos: 0
Respuesta: datos a un text

Si es que las respuestas estan delante de nuestros ojos pero hasta que nos damos cuenta lo flipas el estres que causa

Saludos

Etiquetas: txt
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:37.