Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Bases de Datos General (http://www.forosdelweb.com/f21/)
-   -   ¿Por qué no funciona esta sencilla instrucción SQL? (http://www.forosdelweb.com/f21/por-que-no-funciona-esta-sencilla-instruccion-sql-316579/)

Juan Fco. 14/07/2005 04:44

¿Por qué no funciona esta sencilla instrucción SQL?
 
Dim strSQL As String
Dim N_1 As integer
N_1 = 3
strSQL = "UPDATE ALUMNOS SET ALUMNOS.N1=N_1"
CurrentDb.Execute strSQL

tunait 14/07/2005 04:54

Qué tal Juan Fco.

Has probado así?

strSQL = "UPDATE ALUMNOS SET ALUMNOS.N1=" & N_1

Juan Fco. 14/07/2005 05:48

Me encanta. Muchas gracias. Llevaba dias probando todas las combinaciones y era la primera vez que entraba en el foro, estoy contentisimo. No será la última vez que abuse de vuestros conocimientos, he hecho un curso de programacion en Access en el aula Mentor y aunque he aprendido cosas, tengo aún muchas lagunas. Muchas gracais y seguiremos en contacto. Juan Fco.

tunait 14/07/2005 05:55

Me alegra que lo hayas solucionado :-) :arriba:

Un saludo Juan Fco. y bienvenido a los foros :cool:

Juan Fco. 14/07/2005 09:04

A pesar de funcionar bien la instruccion, ahora tengo el siguiente problema: N_1 es el resultado de una operación con otras variables (N_1=(E1+2*E2)/3), si aplico la instruccion SQL anterior con N_1, me sustituye todos los registros con el mismo valor de la expresion N_1 para el registro que estoy usando (cuando en realidad cada registro tiene su valor de E1 y E2), en cambio si aplico la instruccion SQL con (E1+2*E2)/3, cada registro se recalcula para sus valores de E1 y E2, ¿Por qué se asigna N_1 igual para todos los registros aunque tengan diferente E1 y E2?. Gracias

Juan Fco. 14/07/2005 09:13

Estoy pensando que este problema lo podría solucionar si fuera capaz de aplicar la instruccion SQl solamente al registro activo, pero no sé que sentencia poner en lugar de CurrentDb.Execute strSQL. ¿Se os ocurre algo?

jrp01 14/07/2005 09:53

Tienes que poner un where
strSQL = "UPDATE ALUMNOS SET ALUMNOS.N1=" & N_1 & " where N1=5"

Este es solo un ejemplo ya que si no pones where toda la tabla sera afectada

Juan Fco. 14/07/2005 10:01

Muchas gracias, oye una cosa mas, ¿cómo puedo hacer para que una sentencia SQL actue solo sobre el registro activo?, ¿que condición vendría a continuación del WHERE?

jrp01 14/07/2005 10:11

Con qhere especificas a que registro quieres afectar tambien puedes usar junto con where en and y or

Select campo where campo1 like 'hola' and campo2=2

Juan Fco. 14/07/2005 10:21

¿No hay ninguna sentencia parecida a CurrentDb.Execute strSQL para afectar solo al registro activo?

jrp01 14/07/2005 10:28

No tiene que ser mediante el where ahi especificas que criterios deben de cumplirse para que afecte a uno o varios registros.

Juan Fco. 14/07/2005 10:46

Ya, pero como identifico entonces el registro activo si solo tiene tres campos: E1, E2 y N_1, y N_1 es (E1+2*E2)/3. Lo que quiero es que cuando cambio E1 o E2 en un formulario de Access se cambie N_1 a (E1+2*E2)/3, pero cómo identifico el registro actual que es el único que quiero cambiar si E1 y E2 los cambio sobre la marcha.

jrp01 14/07/2005 10:55

Estas trabajando con VB?

Juan Fco. 14/07/2005 11:03

Es un programa en Access, en el que incorporo código de Visual Basic para aplicaciones.

Juan Fco. 14/07/2005 11:11

Se me ha ocurrido hacer un campo autoincrementable en la base de datos, llamado Expediente, y así utilizar en WHERE el campo Expediente (que es único para cad registro), pero no sé como asignar el valor del campo a una variable. He intentado esto:
Dim Exp as integer
Exp=ALUMNOS.EXPEDIENTE
pero no funciona, ¿Cómo puedo asignar el valor de un campo a una variable?

Sir Matrix 14/07/2005 15:05

el valor del campo o del registro?

Si es del registro, debes crear un recordset en tu aplicación y recoger el valor con

VARIABLE= RS.FIELDS("NOMBRE_CAMPO")


Saludos

Juan Fco. 14/07/2005 16:45

Bueno, y si no creo un campo nuevo, ¿cómo se os ocurre hacer la consulta para un registro concreto sin que le afecte a los demás?. Os recuerdo que si hago la consulta involucrando a los valores de los campos, funciona bien para todos, mientras que si lo hago con una variable que involucra los valortes de los campos, asigna el mismo valor para todos los registros. No entiendo por qué.

Sir Matrix 15/07/2005 07:57

Revisa el uso del "Where"; por ejemplo si quieres que la consulta afecto sólo a los registros cuyo campo1 tiene valor "1" entonces colocas:

Select * from tabla where campo1=1

Si necesitas reestringir màs la consulta puedes poner:

Update TABLA set campo7='valor' where campo1=1 and campo2='fff'


Espero te ayude

Juan Fco. 15/07/2005 08:09

Yo tengo una tabla con 3 campos: E1, E2 y N_1. Mediante un formulario introduzco valores para E1 y E2, y automáticamente (afterUpdate) quiero que se actualice N_1 según la siguiente formula N_1=(E1+2*E2)/3, con una instruccion SQL, pero no puedo poner WHERE por que no conozco los valores de ningún campo del registro, puesto que acabo de rellenarlos mediante un formulario. Pueden tener cualquier valor que yo les quiera poner. ¿Cómo puedo hacer para que se actualice solamente el registro activo?

Sir Matrix 19/07/2005 13:03

y si al momento de hacer el primer update llenas también el campo N_1?

update tabla set E1=VALOR1, E2=VALOR2, N_1=(VALOR1+2*VALOR2)/3
WHERE CAMPOX= 'ALGO'

Saludos


La zona horaria es GMT -6. Ahora son las 08:52.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.