PDA

Ver la Versión Completa : la major manera de trabajar con ADO


_CALI
12-01-2011, 15:23:57
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:


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:



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

Neftali [Germán.Estévez]
12-01-2011, 18:31:59
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.

Caral
12-01-2011, 20:34:31
Hola
1 adoconnection, 2 adoquery.

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

RICTAPIA5
25-01-2011, 19:08:51
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