PDA

Ver la Versión Completa : Consultas con SQL


luxus
22-06-2006, 14:50:26
Hola a todos,

A ver si me podeis echar una mano porque me estoy volviendo loco con las consultas de SQL.

Resumiendo, el problema que tengo es que supongamos que quiero insertar un registro en una base de datos en access.
podria hacerlo mediante la propiedad "append" pero me han comentado que seria mas facil hacerlo mediante SQL.

Por lo tanto he insertado en el form un tadoquery y la propiedad "connection" está asociada a adoconnection1. la propiedad
"SQL" tiene el siguiente codigo:


INSERT INTO TABLA1 (CODIGO,NOMBRE,APELLIDOS)
VALUES (:'12', :'JUAN', :'SANCHEZ');


La propiedad de "active" esta a false.

Ahora os detallo el codigo fuente que he escrito para ver que me inserte en la tabla1 de la base de datos:


ADOConnection1.Open;
ADOQuery1.Active:=true;
ADOQuery1.Open;
ADOQuery1.Edit;


No sé si voy bien encaminado o no y/o me hace falta modificar el codigo. os agradeceria si me pudieseis ayudar ya que he visto en libros y no explican nada. si me pudieses mostrar el codigo para realizar una insercion en la tabla mejor asi podria tener una idea mas clara del proceso a seguir.

Gracias y un saludo a todos

momo
22-06-2006, 16:14:31
Buen dia
Si vas a utilizar SQL Server yo te sugeriría utilizar procedimientos almacenados.

1. Crea tu procedimiento en el servidor

CREATE PROCEDURE [OWNER].[PROCEDURE NAME](PARAMETROS) AS

En los parametros debes especificar si son de entrada o salida, el tipo
@nombre varchar --por default de entrada (input)

INSERT INTO Mitabla(nombre, apat, amat) values(@nombre,
@apat, @amat)

Coloca un TADOStoreprocedure asocia la conexion y el nombre del procedimiento de SQL Server

Para asignar los parametros puedes utilizar parameters.parameterbyname
asigna los valores

y ejecuta Execproc

No olvides las validaciones pertinentes

Saludos

luisgutierrezb
22-06-2006, 16:22:39
eso de "mas facil" es relativo segun a lo que estes haciendo, eso de enlazar los controles de delphi y usar los metodos insert, edit, post, etc, te facilita mucho la vida, mas que usar edits normales, procesarlos y luego hacer a mano la insercion en sql, mejor platicanos que estas haciendo y te podremos orientar

ContraVeneno
23-06-2006, 00:57:44
Si vas a utilizar un query, la instrucción para ejecutar un insert, o cualquier otra instrucción que no sea de consulta, se debe de realizar con ExeqSQL, sin open, sin active y sin edit.... simplemente utiliza ExecSQL y debería de funcionar.


with tuQuery do
if active then close;
sql.clear;
sql.add('INSERT INTO TABLA1 (CODIGO,NOMBRE,APELLIDOS)');
sql.add('VALUES ('12', 'JUAN', 'SANCHEZ')');
ExecSQL;
end; //with

vtdeleon
23-06-2006, 05:06:31
with tuQuery do
if active then close;
sql.clear;
sql.add('INSERT INTO TABLA1 (CODIGO,NOMBRE,APELLIDOS)');
sql.add('VALUES ('12', 'JUAN', 'SANCHEZ')');
ExecSQL;
end; //with

Yo creo que esto arrojará un fatality, pues no estas enviando como cadena a "Juan y Sanche", falta encerrarlos entre comillas.

Saludos

ContraVeneno
23-06-2006, 15:22:05
Muy cierto, detalles que se le escapan a uno :D


with tuQuery do
if active then close;
sql.clear;
sql.add('INSERT INTO TABLA1 (CODIGO,NOMBRE,APELLIDOS)');
sql.add('VALUES (''12'', ''JUAN'', ''SANCHEZ'')');
ExecSQL;
end; //with

momo
26-06-2006, 15:19:35
Buen dia

Con respecto a lo que me encuentro realizando es una aplicacion
cliente servidor, pero utilizo los edits normales porque es una verdadero
problema controlar los DB, además que utilizando los procedimientos
almacenados evito que viaje demasiado codigo SQL por la red. Además que voy
a implementar transacciones. Debido a que tengo las tan comunes
relaciones maestro detalle.

He estado leyendo algunos hilos de transacciones y he escuchado
historias tal alarmantes como que tiene que reinstalar todo el servidor de
sql debido a que se bloqueo y no lograron desbloquearlo, es algo que me
inquieta. Por ejemplo que pasa cuando un cliente se encuentra en medio
de una transaccion y por otras cuestiones ajenas al programa se traba
la maquina, como ese usuario bloqueo el registro no queda bloqueado a
menos que el los desbloquee?


Gracias