Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-09-2017
LIGERO LIGERO is offline
Miembro
 
Registrado: jun 2007
Posts: 42
Poder: 0
LIGERO Va por buen camino
Error al ejecutar consulta de inserción

Buenas tarde:

Necesito hacer los siguiente

Código SQL [-]
Select @CodigoFoto = coalesce(MAX(codigo),0)+1 FROM CMRC_FOTOS;
Select @CodigoArticulo = CODARTICULO FROM ARTICULOS WHERE REFPROVEEDOR like :REFDELPROVEEDOR;

INSERT INTO CMRC_fotos values (@CodigoFoto,:FOTO,DEFAULT);

INSERT INTO CMRC_FOTOSARTICULOS (CODARTICULO,POSICION, ORDEN, PORTADA, CODFOTO, VERSION) 
VALUES (@CodigoArticulo,1,1,'T',@CodigoFoto,DEFAULT);


UPDATE ARTICULOS SET VISIBLEWEB=:VisibleEnWeb WHERE CODARTICULO=@CodigoArticulo;

Donde obtengo valores de unas tablas, para posteriormente a través de los parámetros REFDELPROVEEDOR, FOTO Y VisibleEnWeb, realizar las inserción de un registro con una foto y asignarle dicha foto a un artículo.

Hasta ahí, creo que la consulta no está mal hecha.

El problema es que no consigo que me funcione.
Estoy utilizando un SQLQuery y para mi base de datos utilizo SQLServer.

Aquí pongo el código de la inserción de una imagen.

Código:
procedure TForm1.CargarImagen3(directorio: string; indice: integer; visibleWEB : boolean);
var fichero: string;
    Imagen : TBitMap;
    Buffer : TStream;
begin

  Imagen := TBitmap.Create;
  Buffer := TMemoryStream.Create;

  fichero := directorio+'\'+FileListBox1.Items.Strings[indice];

  if (ANSIUpperCase(ExtractFileExt(fichero)) = '.JPG')
      or (ANSIUpperCase(ExtractFileExt(fichero)) = '.JPEG') then
  begin
    Imagen := ConvertJPG2BMP(fichero);
    Imagen.SaveToStream(buffer);
    DM.SQLQuery2.Params.ParamByName('FOTO').LoadFromStream(buffer,ftblob);
  end
  else
    DM.SQLQuery2.Params.ParamByName('FOTO').LoadFromFile(fichero,ftblob);


  DM.SQLQuery2.Params.ParamValues['REFDELPROVEEDOR'] := NombreSinExtension(FileListBox1.Items.Strings[indice]);



  DM.SQLQuery2.Params.ParamValues['VISIBLEENWEB'] := visibleWeb;

  DM.AplicarCambios(DM.SQLConnection1, DM.ClientDataSet2, false);


end;
Y el código de AplicarCambios es

Código:
procedure TDM.AplicarCambios(SQLConnection : TSQLConnection; ClientDataSet : TClientDataSet; seleccion : Boolean);
begin
  SQLConnection.Close;
  SQLConnection.Open;

  if seleccion = true then
    ClientDataSet.Open
  else
    ClientDataSet.Execute;

  if not (ClientDataSet.State = dsInsert) then
    ClientDataSet.Edit;

  ClientDataSet.Post;
  if (ClientDataSet.ChangeCount > 0) then
        ClientDataSet.ApplyUpdates(-1);
  ClientDataSet.Close;
  ClientDataSet.Open;
end;
En la línea
ClientDataSet.Edit;

me da el error "cannot perform this operation on a closed dataset"

He buscado por todos los lados, pero no encuentro nada que me solucione el problema.

Espero que podáis ayudarme.
Gracias.
Responder Con Cita
  #2  
Antiguo 01-09-2017
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.009
Poder: 20
oscarac Va por buen camino
y si lo haces de esta manera?


Código Delphi [-]
if not (ClientDataSet.State = dsInsert) then
Begin
    ClientDataSet.Open;
    ClientDataSet.Edit;
End;
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 04-09-2017
LIGERO LIGERO is offline
Miembro
 
Registrado: jun 2007
Posts: 42
Poder: 0
LIGERO Va por buen camino
Gracias Oscar por contestar.

Si pongo esta sentencia me sale el error

SQLQuery2: Cursor not retorned from Query

ya que al hacer el open entiende que la consulta es de tipo SELECT y espera un conjunto de registros, pero la sentencia es de tipo INSERT y UPDATE.
Responder Con Cita
  #4  
Antiguo 05-09-2017
LIGERO LIGERO is offline
Miembro
 
Registrado: jun 2007
Posts: 42
Poder: 0
LIGERO Va por buen camino
Bueno, después de romperme la cabeza, la solución era mucho mas sencilla de lo que parecía.
Aquí pongo el código para el que quiera verlo.
Gracias a todos
Código Delphi [-]
procedure TForm1.CargarImagen3(directorio: string; indice: integer; visibleWEB : boolean);
var fichero: string;
    Imagen : TBitMap;
    Buffer : TStream;
    CodigoFoto, CodigoArticulo : integer;
    Visible : string;
begin
  Imagen := TBitmap.Create;
  Buffer := TMemoryStream.Create;
  Visible := IfThen(VisibleWeb,'T','F');
  fichero := directorio+'\'+FileListBox1.Items.Strings[indice];

  if (ANSIUpperCase(ExtractFileExt(fichero)) = '.JPG')
      or (ANSIUpperCase(ExtractFileExt(fichero)) = '.JPEG') then
  begin
    Imagen := ConvertJPG2BMP(fichero);
    Imagen.SaveToStream(buffer);
    DM.SQLQuery2.Params.ParamByName('FOTO').LoadFromStream(buffer,ftblob);
  end
  else
    DM.SQLQuery2.Params.ParamByName('FOTO').LoadFromFile(fichero,ftblob);

  DM.SQLQuery2.Params.ParamValues['REFDELPROVEEDOR'] := NombreSinExtension(FileListBox1.Items.Strings[indice]);

  DM.SQLQuery2.Params.ParamValues['VISIBLEENWEB'] := visible;

  DM.ClientDataSet2.Close;
  DM.ClientDataSet2.Execute;

end;
Como podéis ver era tan fácil como asignar lo parámetros en el SQLQuery2 y cerrar y ejecutar la sentencia en el ClientDataSet2

Última edición por Casimiro Notevi fecha: 05-09-2017 a las 18:43:13.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Error al ejecutar consulta a MySQL con Zeos DSK25 Lazarus, FreePascal, Kylix, etc. 3 31-12-2014 11:13:55
Error en delphi al ejecutar consulta SQL josi SQL 2 29-03-2008 15:38:37
Error al ejecutar consulta mierda SQL 1 11-03-2007 23:06:36
Error al Ejecutar consulta de Eliminacion JoanKa Varios 2 02-01-2007 17:10:53
ADO: Error al ejecutar una consulta repetidamente sostro Conexión con bases de datos 6 31-08-2004 18:43:50


La franja horaria es GMT +2. Ahora son las 18:42:33.


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