Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-01-2011
_CALI _CALI is offline
Miembro
 
Registrado: mar 2008
Posts: 99
Poder: 17
_CALI Va por buen camino
la major manera de trabajar con ADO

hola amigos, tengo un problema al tratar de actualizar una tabla mediante un TADOCommand trabajo con SQL Server, lo explicare de la forma mas simple posible:

en un form tengo un TADOConnection, un TADOCommand y un TADOQuery

en la propiedad SQL del query pongo SELECT * FROM TABLA WHERE id_campo1 = :codigo (este query solo devuelve un registro que le doy al parametro ":codigo" y tengo enlazado TDBEdits para visualizar los campos correspondientes)

abro el query previamente pasandole el valor al parametro "codigo"
ejm:

Código Delphi [-]
 
ADOQuery1.Close;
ADOQuery1.Parameters.ParamByName('codigo').Value := '0123';
ADOQuery1.Open;



hasta ahi todo funciona bien, se visualizan en los edits los datos del resgistro '0123'

Ahora;
en la propiedad CommandText del TADOCommand pongo lo siguiente:

UPDATE TABLA SET id_campo2 = :id_campo2, id_campo3 = :id_campo3
WHERE id_campo1 = :id_campo1

(el TADOCommand ahora tiene 3 parametros q corresponden a los campos del TADOQuery)

para ejecutar el TADOCommand escribo:


Código Delphi [-]
 
ADOCommand.Parameters.ParamByName('id_campo1').Value := ADOQuery1['id_campo1']
ADOCommand.Parameters.ParamByName('id_campo2').Value := ADOQuery1['id_campo2']
ADOCommand.Parameters.ParamByName('id_campo3').Value := ADOQuery1['id_campo3']

//ADOCommand1.Execute; <-  aqui no pasa nada 
ADOQuery1.Recordset := ADOCommand1.Execute;
con el codigo previo me da un error q dice q el recordset no esta abierto, la verdad soy nuevo en ADO y les agradeceria enormente me expliquen la mejor manera de actualizar una tabla mediante un TADOCommand, como se correlacionan estos componentes en fin, que se hace habitualmente para estos casos



Muchas Gracias!!!














TABLA tiene como campos los siguientes:

id_campo1, campo2 y campo3


en commandText del TADOCommand pongo

Última edición por ecfisa fecha: 15-01-2011 a las 05:42:54. Razón: Etiquetas
Responder Con Cita
  #2  
Antiguo 12-01-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.323
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Comenzar que para realizar un UPDATE, puedes usar igualmente el TADOQuery con el método Exec.

Asegúrate de que los parámetros que estás pasando son correctos.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 12-01-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
1 adoconnection, 2 adoquery.
Código Delphi [-]
ADOQuery1.Close;
ADOQuery1.sql.text:= 'SELECT * FROM TABLA WHERE id_campo1 = :codigo';
ADOQuery1.Parameters.ParamByName('codigo').Value := '0123';
ADOQuery1.Open;

ADOQuery2.slq.text:= 'UPDATE TABLA SET id_campo2 = :id_campo2, id_campo3 = :id_campo3'+
                     'WHERE id_campo1 = :id_campo1';
ADOQuery2.Parameters.ParamByName('id_campo1').Value := ADOQuery1.Fields[0].Text;
ADOQuery2.Parameters.ParamByName('id_campo2').Value := ADOQuery1.Fields[1].Text;
ADOQuery2.Parameters.ParamByName('id_campo3').Value := ADOQuery1.Fields[2].Text;
ADOQuery2.Execute;

El numero aqui: Fields[0].Text dependera de la posicion en la tabla, tambien podria hacerse por byname.

Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 25-01-2011
Avatar de RICTAPIA5
RICTAPIA5 RICTAPIA5 is offline
Miembro
 
Registrado: mar 2010
Posts: 41
Poder: 0
RICTAPIA5 Va por buen camino
otra forma

Hola

1) Prueba con poner la propiedad prepared= true antes de ejecutar
2)Te recomiendo que tengas en tiempo de diseño query a ejecutar y que los parametros esten bien definidos: ejemplo
un parametro date debe de estar así definido en los parametros
o
si vas a generar sql en tiempo de ejecucion: evitate el hacer un command y ejecuta directo el query

ADOQuery2.slq.text:= 'UPDATE TABLA SET id_campo2 = ' +ADOQuery1.Fields +' where .....siques tu cadena'
o
ejecuta esto en el store procedure de sqlserver

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
manera de pensar BlueSteel Humor 1 22-05-2008 19:25:01
Firebird de la mejor manera david_uh Varios 7 19-01-2008 15:45:37
Imprimir de manera no tradicional ilichhernandez Impresión 8 09-11-2005 19:52:25
De que manera se haría sierraja Impresión 8 04-08-2005 02:09:52
La mejor manera de Trabajar con Form manuelpr Varios 8 07-03-2005 17:08:14


La franja horaria es GMT +2. Ahora son las 19:19:26.


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