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)
-   -   Problema con un insert (https://www.clubdelphi.com/foros/showthread.php?t=56896)

Aleh 30-05-2008 13:23:19

Problema con un insert
 
Me gustaria saber si hay alguna forma de evitar este error:

SQL: cursor not returned from query

OCurre cuando realizo un insert mediante un SQLQuery (dbexpress), el codigo que hago es el siguiente:
Código Delphi [-]
SQLadd.Open;
    SQLadd.SQL.Clear;
    SQLadd.SQL.add('update stocks set cantidad=cantidad+'+cantidad.text);
    SQLadd.SQL.add('where sucursal='''+GRIDStocks.DataSource.DataSet.FieldByName('sucursal').AsString+'''');
    SQLadd.SQL.add('and telefono='''+GRIDStocks.DataSource.DataSet.FieldByName('telefono').AsString+'''');
    SQLadd.Active;
    CDSadd.Active:=true;

El caso es que inserta correctamente, pero sale esa ventana diciendo que no devolvio nada, ¿¿¿no se puede evitar???
También me ocurre con deletes y updates...

enecumene 30-05-2008 14:16:08

Hola, en vez de:
Código Delphi [-]
SQLadd.Active;

no debería ser?:

Código Delphi [-]
SQLadd.ExecSQL;

y que viene siendo "CDSAdd".

Saludos.

Caro 30-05-2008 14:18:39

Hola, en vez de utilizar SQLadd.Active utiliza SQLadd.ExecSQL.

Saluditos

Aleh 30-05-2008 14:29:29

Muchas gracias a los dos, ya funciona perfectamente!
ADemás me habéis solucionado un par de dudas que también tenía. GRACIAS!!

Caro 30-05-2008 14:34:45

Cita:

Empezado por enecumene (Mensaje 290137)
y que viene siendo "CDSAdd".

Enecumene me has ganado :D. CDSAdd parece que es su ClientDataSet, pero no creo que sea necesario en el codigo que tiene Aleh.

Saluditos

enecumene 30-05-2008 14:40:28

Cita:

Empezado por Caro (Mensaje 290142)
Enecumene me has ganado :D. CDSAdd parece que es su ClientDataSet, pero no creo que sea necesario en el codigo que tiene Aleh.

Saluditos

:D...Pues concuerdo contigo Caro de que no es necesario en el código, por algo pregunté, pues me dio cierta confusión :confused:.

Aleh, un pequeño Tips sobre sentencias SQL con delphi, Cuando se trata de sentencias INSERT, UPDATE y DELETE se utiliza la propiedad "ExecSQL" del Dataset y en la sentencia SELECT se utiliza "Open" y/o "Active" aunque particularmente recomiendo lo primero.

Saludos. ;)

Aleh 30-05-2008 14:41:00

No es necesario para es acción, pero si lo necesito para otros casos, jejeje. En cualquier caso sigo teniendo un problema despues de una primera insercion, ¿¿tengo que actualizar alguna query o algo??

P.D.: quiero decir que la segunda insercion falla y da el mismo error.

enecumene 30-05-2008 14:43:39

Cita:

Empezado por Aleh (Mensaje 290145)
No es necesario para es acción, pero si lo necesito para otros casos, jejeje. En cualquier caso sigo teniendo un problema despues de una primera insercion, ¿¿tengo que actualizar alguna query o algo??

P.D.: quiero decir que la segunda insercion falla y da el mismo error.

Vale, y cúal es la segunda inserción? :rolleyes:.

Aleh 30-05-2008 14:47:47

Pues mira, tengo un EDIT, y meto un numero oK???, pulso el boton y se realiza la insercion en la BD.
Pero cuando voy a meter otro numero, la segunda vez falla. Probablemente no libero algo bien, aqui dejo el codigo del boton al hacer click:

Código Delphi [-]
    SQLadd.Open;
    SQLadd.SQL.Clear;
    SQLadd.SQL.add('update stocks set cantidad=cantidad+'+cantidad.text);
    SQLadd.SQL.add('where sucursal='''+GRIDStocks.DataSource.DataSet.FieldByName('sucursal').AsString+'''');
    SQLadd.SQL.add('and telefono='''+GRIDStocks.DataSource.DataSet.FieldByName('telefono').AsString+'''');
    SQLadd.ExecSQL();
    SQLadd.Close;
    SQLStocks.Active;
    CDSStocks.Refresh;
    GRIDStocks.refresh;
    Showmessage('Se han añadido '+cantidad.text+' unidad/es del teléfono seleccionado en la sucursal seleccionada.');

Lo de cerrar lo puse después, pero no evita el problema.

enecumene 30-05-2008 14:59:30

Código Delphi [-]
 SQLadd.Close;
    SQLadd.SQL.Clear;
    SQLadd.SQL.add('update stocks set cantidad=cantidad+'+cantidad.text);
    SQLadd.SQL.add('where sucursal='''+GRIDStocks.DataSource.DataSet.FieldByName('sucursal').AsString+'''');
    SQLadd.SQL.add('and telefono='''+GRIDStocks.DataSource.DataSet.FieldByName('telefono').AsString+'''');
    SQLadd.ExecSQL;
    CDSStocks.Refresh;
    GRIDStocks.refresh;
    Showmessage('Se han añadido '+cantidad.text+' unidad/es del teléfono seleccionado en la sucursal seleccionada.');

Saludos.

Aleh 30-05-2008 15:01:58

Ahora si que va perfecto, muchas gracias, de verdad! :)


La franja horaria es GMT +2. Ahora son las 02:07:35.

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