Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-06-2012
Avatar de Jere_84
Jere_84 Jere_84 is offline
Miembro
NULL
 
Registrado: sep 2011
Ubicación: Córdoba, Argentina
Posts: 214
Poder: 0
Jere_84 cantidad desconocida en este momento
Unhappy Problema de edición en SQLQuery

Hola, estoy haciendo una prueba en delphi 2010 datasnap utilizando los componentes de la paleta DbExpress. El ejemplo consta de una carga de facturación y al momento de grabar se descuenta el stock en la tabla de artículos. Esta operación la estoy haciendo en la aplicación servidor en el ServerMethod correspondiente, en el evento AfterUpdateRecord del componente DataSetProvider.

Este es mi codigo:

Código Delphi [-]
var
  CodigoArtic: integer;
  CantidadArtic: double;
  oTempArticulos: TSQLQuery;
//..
  case UpdateKind of
    ukInsert: Begin  //si es una inserción
         if SourceDS.Name = 'SQLDataSetDetalle' then  //si el que pasa es un SQLDataSetDetalle
         begin
           if DeltaDS.FieldByName('CANTIDAD').Value > 0 then
           begin
             CodigoArtic:= DeltaDS.FieldByName('COD_ARTIC').AsInteger;
             CantidadArtic:= DeltaDS.FieldByName('CANTIDAD').AsFloat;
             oTempArticulos:= TSQLQuery.Create(nil);
             oTempArticulos.SQLConnection:= SQLConnectionMovimientos;
             oTempArticulos.Close;
             oTempArticulos.SQL.Clear;
             oTempArticulos.SQL.Add('Select * From "Articulos" Where CODIGO= ' + inttostr(CodigoArtic));
             oTempArticulos.Open;
             oTempArticulos.Edit; <----------ERROR
             oTempArticulos.FieldByName('CANTIDAD').AsFloat:= oTempArticulos.FieldByName('CANTIDAD').AsFloat - CantidadArtic;
             oTempArticulos.Post;
           end;
         end;
     End;

El Error dice: Project servidor.exe raised exception class EDatabaseError with message 'Cannot modify a read-only dataset'.

Elegí este foro porque no creo que la excepción tenga que ver con Datasnap, mas bien parecería que me falta aclarar algo del componente. Como dice el enunciado de la excepción "no se puede modificar un dataset de solo-lectura" pero lo cierto es que ni siquiera hay una propiedad ReadOnly en el SQLQuery. Bueno cualquier sugerencia es bienvenida, gracias de antemano.
Responder Con Cita
  #2  
Antiguo 28-06-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Estoy haciendo pruebas con DBExpress y TSQLQuery no se debe utilizar, solo para hacer la SQL, debes de utilizar TClientDataSet en su defectos, ya que éste componente es el que lo controla todo, pero éste componente depende de TDataSetProvider y TSQLQuery, para realizar la SQL.

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.

Última edición por olbeup fecha: 28-06-2012 a las 08:49:17.
Responder Con Cita
  #3  
Antiguo 28-06-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
No lo he probado, espero que te funcione
Código Delphi [-]
var
  CodigoArtic: Integer;
  CantidadArtic: Double;
  oSQLQry: TSQLQuery;
  oDSProvider: TDataSetProvider;
  oCDSet: TClientDataSet;
  ...
  case UpdateKing of
    ukInsert:
      begin
        if (SourceDS.Name = 'SQLDataSetDetalle') then
          if (DeltaDS.FieldByName('CANTIDAD').AsFloat > 0) then
          begin
            CodigoArtic   := DeltaDS.FieldByName('COD_ARTIC').AsInteger;
            CantidadArtic := DeltaDS.FieldByName('CANTIDAD').AsFloat;

            oSQLQry := TSQLQuery.Create(nil);
              oSQLQry.SQLConnection := SQLConnectionMovimientos;
              oSQLQry.SQL.Add('SELECT CANTIDAD FROM "Articulos" WHERE CODIGO = ' + IntToStr(CodigoArtic));

            oDSProvider := TDataSetProvider.Create(nil);
              oDSProvider.DataSet := oSQLQry;

            oCDSet := TClientDataSet.Create(nil);
              oCDSet.ProviderName := oDSProvider;

            oCDSet.Open;
            oCDSet.Edit;
            oCDSet.FieldByName('CANTIDAD').AsFloat := (oCDSet.FieldByName('CANTIDAD').AsFloat - CantidadArtic);
            oCDSet.Post;

            FreeAndNil(oCDSet);
            FreeAndNil(oDSProvider);
            FreeAndNil(oSQLQry);
          end;
      end;
  end;

Un saludo
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #4  
Antiguo 28-06-2012
Avatar de Jere_84
Jere_84 Jere_84 is offline
Miembro
NULL
 
Registrado: sep 2011
Ubicación: Córdoba, Argentina
Posts: 214
Poder: 0
Jere_84 cantidad desconocida en este momento
Post Resuelto

Leyendo en la ayuda encontré que el TSQLQuery solo podrá editar creando un comando SQL Update por lo menos esto en la versión 2010.

Cita:
There is no built-in editing support: you can only edit the data in an SQL query by explicitly creating an SQL UPDATE command or by connecting the dataset to a client dataset using a provider
Responder Con Cita
Respuesta



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
Problema con edicion de tabla JULIPO MySQL 1 21-08-2007 17:08:30
problema con edicion de imagenes 7pilas Gráficos 3 15-04-2006 00:41:54
problema de edicion en una Form thrys Conexión con bases de datos 1 08-09-2005 01:52:28
Problema con Edicion En Master-Detail Paradiso Conexión con bases de datos 0 26-01-2005 06:28:28
Como puedo cambiar la propiedad de edicion y no edicion a un StringGrid1 ctronx Varios 2 25-06-2004 23:10:19


La franja horaria es GMT +2. Ahora son las 14:50:05.


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