Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-08-2007
Avatar de saldanaluis
saldanaluis saldanaluis is offline
Miembro
 
Registrado: nov 2006
Ubicación: Monterrey NL México
Posts: 122
Poder: 18
saldanaluis Va por buen camino
ADOCommand con parámetros que no los toma

Amigos del Foro. Heme aqui nuevamente con una duda que espero me puedan ayudar a resolverla.
Resulta que estoy utilizando un componente TADOCommand en donde le especifico la sentencia SQL que contiene 2 parámetros, que al momento de ejecución le defino los valores y mando su ejecución. El problema es que me regresa el siguiente mensaje de error: "No se han especificado valores para algunos de los parámetros requeridos."
La DB es ACCESS y les muestro el comando de SQL a continuación:

Código SQL [-]
DELETE FROM TRANSAC
WHERE COD_ALM = :Almacen AND Cod_Articulo = :Articulo;




y el codigo donde lo mando a ejecutar es el siguiente:

Código Delphi [-]procedure TFrmTransacs.Elimina_Trans_Alm_Art(pAlmacen, pArticulo: String);
begin
ADOCmd.Parameters.ParamByName('Almacen').Value := pAlmacen;
ADOCmd.Parameters.ParamByName('Articulo').Value := pArticulo;
ADOCmd.Execute;
end;



Gracias de antemano por sus amables respuestas.
Luis
Responder Con Cita
  #2  
Antiguo 30-08-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Y porque no usas un TADOQuery en lugar del TADOCommand, no he usado nunca ADO pero me parecería mas lógico

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #3  
Antiguo 30-08-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Yo tambien soy de la opinion de usar adoquery, pero en tal caso el error lo dice todo, o no?:
Cita:
No se han especificado valores para algunos de los parámetros requeridos
Si lo analizas te daras cuenta que al enviar el parametro, le indicas cual es y le colocas el nombre de donde sacar la comparacion, que es ese nombre un edit supongo, si es asi, le falta el .text.
Código Delphi [-]
Código Delphi [-]procedure TFrmTransacs.Elimina_Trans_Alm_Art(pAlmacen, pArticulo: String);
begin
ADOCmd.Parameters.ParamByName('Almacen').Value := pAlmacen.text;
ADOCmd.Parameters.ParamByName('Articulo').Value := pArticulo.text;
ADOCmd.Execute;
end;
Si por el contrario se saca de otra tabla, donde se especifica eso en el codigo.
O si se localiza en una variable, donde esta esta, es general o que, no le veo la relacion?
Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 30-08-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Hago aclaracion en base a lo que me comenta mi amigo Egostar.
Efectivamente en este caso no se usan edit's, es un error de mi parte mencionarlo, me disculpo por esto y le agradezco a mi amigo la intervencion.
Por otro lado, al desconocer el componente se le ocurre a uno que este almacena las variables, si es asi, habrá que declararlas en algun sitio, mencionarlas, no se, supongo que al no encontrar la referencia al parametro es por no encontrar la definicion de la variable, verdad, o tambien me equivoco.
Ultimamente, no doy una, disculpad.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #5  
Antiguo 30-08-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Como soy necio y no me gusta dejar las cosas a medias, quiero ver mas cosas:
Ya revise el componente, es casi como un adoquery y contiene los parametros en la pantalla de los mismos, bien:
Para empezar a esta sentencia le falta:
Código Delphi [-]
DELETE FROM TRANSAC
WHERE COD_ALM = :Almacen AND Cod_Articulo = :Articulo;
Delete que?
Es asi:
Código Delphi [-]
DELETE * FROM TRANSAC
WHERE COD_ALM = :Almacen AND Cod_Articulo = :Articulo;
Luego:
Cita:
No se han especificado valores para algunos de los parámetros requeridos
Si creaste los parametros en la pantalla de los mismos, hay que colocarles un valor, este puede ser 0.
Otra cosa, Access, no reconoce los dos puntos en ciertas ocasiones, incluso no los necesita si estos estan en la pantalla.
Bueno, espero que ya no me equivoque.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #6  
Antiguo 30-08-2007
Avatar de saldanaluis
saldanaluis saldanaluis is offline
Miembro
 
Registrado: nov 2006
Ubicación: Monterrey NL México
Posts: 122
Poder: 18
saldanaluis Va por buen camino
Gracias por sus respuestas.
He efectuado pruebas independientes (un nuevo proyecto, una sola forma, el componente ADOConnect, y un ADOQuery, ademas de un boton en done le asigno el valor del parámetro "hard coded"
(ADOQ.Parameters.ParamByName(Articulo).value := 'GFR23'
pero me sigue saliendo el mismo error.
He buscado por todos lados con Google y aparentemente hay muchos casos similares con la DB ACCESS, pero no he encontrado respuesta.
¡¡¡Por favor ayudenme a encontrarla!!!
Gracias.
Luis
Responder Con Cita
  #7  
Antiguo 30-08-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Hola saldanaluis

De casualidad estas creando esa sentencia SQL en tiempo de ejecución?

De ser así te convendría crear los parametros antes de asignar los valores,

No tengo a la mano TADOQuery, pero en un TQuery normalito puedes hacerlo de esta manera:

Código Delphi [-]
  Query1.Params.CreateParam(ftString, 'Almacen', ptInput);
  Query1.Params.CreateParam(ftString, 'Cod_Articulo', ptInput);

De tal forma que quedaría algo así:

Código Delphi [-]
 
begin
   ADOQuery.Parameters.CreateParam(ftString, 'Almacen', ptInput);
   ADOQuery.Parameters.CreateParam(ftString, 'Articulo', ptInput);
   ADOQuery.Parameters.ParamByName('Almacen').Value := pAlmacen;
   ADOQuery.Parameters.ParamByName('Articulo').Value := pArticulo;
   ADOQuey.Execute;
end;

Bueno, pues espero que eso ayude, dejanos saber los resultados.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #8  
Antiguo 30-08-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Como no me gusta equivocarme, lo hice y ya.
Aqui esta, hace lo que necesitas, con parámetros y todo:
Saludos
__________________
Siempre Novato

Última edición por Caral fecha: 12-10-2007 a las 18:07:50.
Responder Con Cita
  #9  
Antiguo 31-08-2007
Avatar de saldanaluis
saldanaluis saldanaluis is offline
Miembro
 
Registrado: nov 2006
Ubicación: Monterrey NL México
Posts: 122
Poder: 18
saldanaluis Va por buen camino
Muchas Gracias Caral.
Realmente fue de gran ayuda. Con lo que me enviaste me di cuenta que estaba poniendo mal el nombre de uno de los parámetros -- :-( -- y ese era el problema.
Realmente confunde el mensaje de error que envía MSACCESS al mencionar los valores de los parámetros, y no comentar nada acerca de que "no existe el nombre de la columna especificada".
Ya se resolvio.
Gracias nuevamente y saludos...
Luis
Responder Con Cita
  #10  
Antiguo 31-08-2007
Avatar de saldanaluis
saldanaluis saldanaluis is offline
Miembro
 
Registrado: nov 2006
Ubicación: Monterrey NL México
Posts: 122
Poder: 18
saldanaluis Va por buen camino
Caral,
Disculpa que te comente esto, no es para reclamarte, pero el comando de SQL no requiere el * en
Código SQL [-]
DELETE * FROM ....
dado que no se pueden borrar solamente algunas columnas sino que se borra todo el registro que concuerda con lo especificado en el WHERE...
Veo que si funciona con el * pero lo correcto es no ponerlo en la sentencia.
Nuevamente disculpa esta corrección, pero realmente es para agradecerte tu apoyo.
Saludos.
Luis
Responder Con Cita
  #11  
Antiguo 12-09-2007
Saiyan Saiyan is offline
Miembro
 
Registrado: abr 2007
Posts: 47
Poder: 0
Saiyan Va por buen camino
Cita:
Y porque no usas un TADOQuery en lugar del TADOCommand, no he usado nunca ADO pero me parecería mas lógico
En la ayuda de Delphi 7 al menos.. dice q los Querys son para SELECT solamente.. para INSERTs o UPDATEs se recomienda el uso de COMMANDs..

al menos eso es lo que yo lei en mi delphi..
Responder Con Cita
  #12  
Antiguo 12-09-2007
Avatar de saldanaluis
saldanaluis saldanaluis is offline
Miembro
 
Registrado: nov 2006
Ubicación: Monterrey NL México
Posts: 122
Poder: 18
saldanaluis Va por buen camino
Tienes razón. Aunque con ambos funciona. Lo que hay que tomar en cuenta con el TADOQuery es que no se le puede hacer un ".open", sino que se hace un ".execsql"
Saludos...
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ADOCommand carols018 SQL 1 06-12-2006 19:59:25
Crear tablas FoxPro con ADOCommand yusnerqui Varios 3 27-10-2005 19:01:09
Problema con adocommand stored procedure buffygcs Conexión con bases de datos 3 10-06-2005 21:10:41
AdoCommand Asincrono... Xianto Conexión con bases de datos 2 31-05-2005 19:28:58
Parametros del ADOCommand murrai Conexión con bases de datos 4 13-03-2005 18:26:34


La franja horaria es GMT +2. Ahora son las 07:32:04.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi