Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   ADO + SQL Server + CLientDataSet (https://www.clubdelphi.com/foros/showthread.php?t=57663)

Rockin 24-06-2008 15:02:53

ADO + SQL Server + CLientDataSet
 
Hola amigos:

Estoy empezando a un proyecto nuevo para la empresa, y el cliente lo solicita SQL Server. Tengo experiencia en Firebird pero nunca he hecho nada en SQL Server, y me da un error al insertar un registro por medio de un ClientDataSet de la siguiente manera:

Código Delphi [-]
 
CDSUsuarios.Close;
CDSUsuarios.CommandText:= 'insert into usuarios (nombre,fecha,hora) values (:nombre,:fecha,:hora)';
CDSUsuarios.Open;
CDSUsuarios.Insert;
CDSUsuarios.FieldByName('nombre').AsString:= txtNombre.Text;
CDSUsuarios.FieldByName('fecha').AsDatetime:= strtodate(txtfecha.Text);
CDSUsuarios.FieldByName('hora').AsDateTime:= strtotime(txthora.Text);
CDSUSuarios.Post;
CDSUsuarios.ApplyUpdates(0);

El error que me da es el siguiente :'Argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros.'

Las consultas me las ejecuta perfectamente.
¿Que estoy haciendo mal?

Saludos y gracias de antemanos

Caro 24-06-2008 15:20:39

Hola Rockin, no necesitas un ClientDataSet para trabajar con ADO, has directamente la inserción de tu registro sobre tu ADOTable.

Saluditos

Rockin 24-06-2008 15:32:34

Me hace falta porque tengo un servidor de capa intermedia implementado, y tengo que acceder a el por el ClientDataSet.

basti 24-06-2008 15:48:50

No entiendo el código. Por un lado pones un Insert dentro del CommandText y por otro añades el registro con un Append. Supongo que tendrías que hacer una cosa u otra.

Rockin 24-06-2008 16:00:53

En firebird hay que ponerlo así, por eso lo estoy haciendo igual pero hay algo que falla. El error me da cuando llego a la linea
Código Delphi [-]
CDSUsuarios.Open;

Pero si quito esto me sale que no se puede realizar la operecion en un dataset cerrado.

Seguire intentandolo.

luisgutierrezb 24-06-2008 16:22:16

Lo que pasa es que intenta hacer la insercion pero como no le has dado valor a los parametros por eso te marca el error intenta con:

CDSUsuarios.CommandText:= 'Select nombre,fecha,hora from usuarios where 1=2';

el 1=2 es para que no regrese ningun registro, y luego ya haces la insercion como lo estas haciendo...

Caro 24-06-2008 16:57:38

Hola de nuevo Rockin, debes poner el Open antes que el commandText, para que te acepte lo que tienes dentro del CommandText y los parametros que le pasas luego.

Código Delphi [-]
CDSUsuarios.Close;
CDSUsuarios.Open;
CDSUsuarios.CommandText:= 'insert into usuarios (nombre,fecha,hora) values (:nombre,:fecha,:hora)';
CDSUsuarios.Insert;
CDSUsuarios.FieldByName('nombre').AsString:= txtNombre.Text;
CDSUsuarios.FieldByName('fecha').AsDatetime:= strtodate(txtfecha.Text);
...........

Saluditos

Rockin 24-06-2008 17:05:19

He probado asi, y hora me da el siguiente error de DataSetUsuarios: missing CommandText property.

Seguire investigando.
Saludos.

Rockin 24-06-2008 17:24:46

Lo tengo solucionado por si a alguien le sirve de ayuda:

Código Delphi [-]
  
CDSUsuarios.Close;
CDSUsuarios.CommandText:= 'select nombre,fecha,hora from usuarios';
CDSUsuarios.Open;
CDSUsuarios.Insert;
CDSUsuarios.FieldByName('nombre').AsString:= txtNombre.Text;
CDSUsuarios.FieldByName('fecha').AsDatetime:= strtodate(txtfecha.Text);
CDSUsuarios.FieldByName('hora').AsDateTime:= strtotime(txthora.Text);
CDSUSuarios.Post;
CDSUsuarios.ApplyUpdates(0);

Habia que cambiar esa consulat tal como dijo basti, gracias a todos.


La franja horaria es GMT +2. Ahora son las 11:57:11.

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