Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-08-2017
LIGERO LIGERO is offline
Miembro
 
Registrado: jun 2007
Posts: 42
Poder: 0
LIGERO Va por buen camino
Grabar datos definitivos con ClientDataSet

Buenas:

Estoy creando una pequeña aplicación con ClientDataSet y DataSetProvider.

Lo que hago es acceder a una tabla, posicionarme y cambiar la la imagen en un dbimage.

Hasta ahí todo bien.

Cargo la imagen jpg y aplico ClientDataSet1.Post

La imagen se ve en el DBImage.

El problema es que no se queda grabada en la base de datos cuando cierro el programa.

He probado con ClientDataSet1.ApplYUpdates(-1) pero me muestra el error "no se puede crear una nueva transaccion se excedio la capacidad"

¿Donde está el problema?

Muchas gracias.
Responder Con Cita
  #2  
Antiguo 21-08-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

No especificas con que DB ni la versión de Delphi con que estas trabajando pero revisa si este enlace, que trata sobre el mismo error, te aporta la solución:
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 22-08-2017
LIGERO LIGERO is offline
Miembro
 
Registrado: jun 2007
Posts: 42
Poder: 0
LIGERO Va por buen camino
Buenas Ecfisa.

Gracias por contestar
Sigo con el mismo problema.
Mi DB es SQLServer 2008 y mi delphi EX3.

Tengo un formulario sencillo con dos TDBEdit, un TDBimage, con datos del registro, un Edit donde pongo la referencia del artículo y dos botones, uno para buscar el artículo a través del parámetro REFPROVEEDOR y otro para cargar una imagen jpg en el TDBImage.
Hasta ahí todo bien hasta que ejecutamos la sentencia

Código Delphi [-]
 if (ClientDataSet1.ChangeCount > 0) then
        ClientDataSet1.ApplyUpdates(-1);


que es donde da el error.

Adjunto código por si se ve algo extraño


Código Delphi [-]
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DBXMSSQL, Data.FMTBcd,
  Vcl.ExtCtrls, Vcl.DBCtrls, Data.DB, Data.SqlExpr, Datasnap.DBClient,
  Datasnap.Provider, Vcl.StdCtrls, Vcl.Mask, Vcl.ExtDlgs, jpeg;

type
  TForm1 = class(TForm)
    SQLConnection1: TSQLConnection;
    SQLTable2: TSQLTable;
    DBImage1: TDBImage;
    DataSource1: TDataSource;
    DBNavigator1: TDBNavigator;
    ClientDataSet1: TClientDataSet;
    DataSetProvider1: TDataSetProvider;
    Button1: TButton;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    OpenPictureDialog1: TOpenPictureDialog;
    Button2: TButton;
    SQLQuery1: TSQLQuery;
    Edit1: TEdit;
    SQLDataSet1: TSQLDataSet;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


function ConvertJPG2BMP(FileName:String):TBitmap;
var
  pic:TPicture;
begin
  pic := TPicture.Create;
  pic.LoadFromFile(FileName);
  result:=TBitmap.create;
  result.Assign(pic.Graphic);
  pic.Free;
end;

(*
function ConvertBMP2JPG(BMPImage:TBitMap, FileName:String, CompQual:Integer):
var
  Jpg:Tjpegimage;
begin
  Jpg:=TJpegImage.Create;
  Jpg.CompressionQuality:=CompQual;
  result.Jpg.Assign(BMPImage); //Here assign the bitmap.image and change the function at top.
  Jpg.SaveToFile(FielName);
  Jpg.free;
end;
*)

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenPictureDialog1.Execute then
  begin
    if (ANSIUpperCase(ExtractFileExt(OpenPictureDialog1.FileName)) = '.JPG')
        or
        (ANSIUpperCase(ExtractFileExt(OpenPictureDialog1.FileName)) = '.JPEG') then
    begin
      if not (ClientDataSet1.State = dsInsert) then
        ClientDataSet1.Edit;
      dbImage1.Picture.Bitmap := ConvertJPG2BMP(OpenPictureDialog1.FileName );
    end
    else
    begin
      if not (ClientDataSet1.State = dsInsert) then
        ClientDataSet1.Edit;
      dbImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
    end;
      ClientDataSet1.Post;

     if (ClientDataSet1.ChangeCount > 0) then
        ClientDataSet1.ApplyUpdates(-1);

  end;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  SQLQuery1.Close;
  ClientDataSet1.Active:=false;
  SQLQuery1.Params.ParamByName('REFPROVEEDOR').AsString:=UpperCase(Edit1.Text);
  ClientDataSet1.Active:=true;
  SQLQuery1.Open;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  SQLConnection1.AutoClone:=true;
end;

end.

Última edición por Casimiro Notevi fecha: 22-08-2017 a las 12:59:46.
Responder Con Cita
  #4  
Antiguo 24-08-2017
LIGERO LIGERO is offline
Miembro
 
Registrado: jun 2007
Posts: 42
Poder: 0
LIGERO Va por buen camino
Estoy un poquito perdido y no consigo solucionar el problema.
Alguien me puede ayudar?
Gracias
Responder Con Cita
  #5  
Antiguo 24-08-2017
LIGERO LIGERO is offline
Miembro
 
Registrado: jun 2007
Posts: 42
Poder: 0
LIGERO Va por buen camino
Mejor estrategia para manipular bases de datos

Buenos días:

Me gustaría preguntar a ver que pensáis vosotros sobre cual es la mejor estrategia a la hora de conectar con una base de datos como MSSQL.

Actualmente utilizo XE3.

Para las conexiones y manejo de datos, utilizo SQLConnection, SQLQuery, DataSetProvider, ClientDataSet.

Llevo tiempo sin programar y no sé si esta es la mejor estrategia ya que estoy teniendo problemas a la hora de grabar los datos en el servidor SQL.

En concreto con una imagen que grabo en un TDBImage y que a la hora de hacer ClientDataSet1.ApplyUpdates(-1) me da el error de "no se puede crear una nueva transacción, se excedió la capacidad"

¿Alguien sabe cual puede ser el fallo?

Muchas gracias.
Responder Con Cita
  #6  
Antiguo 24-08-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
He unido el hilo que has creado con este porque es el mismo asunto.
Saludos.
Responder Con Cita
  #7  
Antiguo 25-08-2017
LIGERO LIGERO is offline
Miembro
 
Registrado: jun 2007
Posts: 42
Poder: 0
LIGERO Va por buen camino
He reestructurado un poco el diseño, no por nada sino por dejarlo todo mas ordenado.
He creado un DataModule y en el procedimiento donde aplico cambios he cerrado y abierto conexión.

Código:
procedure TDM.Aplicar;
begin
  SQLConnection1.Close;
  SQLConnection1.Open;
  if not (ClientDataSet1.State = dsInsert) then
        ClientDataSet1.Edit;
  ClientDataSet1.Post;
  if (ClientDataSet1.ChangeCount > 0) then
        ClientDataSet1.ApplyUpdates(-1);
  ClientDataSet1.Close;
  ClientDataSet1.Open;
end;
Primero localizo el registro y lo muestro.
A partir de ahí, busco la imagen y la cargo en el dbimage

Código:
procedure TForm1.CargarImageClick(Sender: TObject);
begin
  IrARegistroClick(Sender);
  if OpenPictureDialog1.Execute then
  begin
    if not (DM.ClientDataSet1.State = dsInsert) then
        DM.ClientDataSet1.Edit;

    if (ANSIUpperCase(ExtractFileExt(OpenPictureDialog1.FileName)) = '.JPG')
        or (ANSIUpperCase(ExtractFileExt(OpenPictureDialog1.FileName)) = '.JPEG') then

      dbImage1.Picture.Bitmap := ConvertJPG2BMP(OpenPictureDialog1.FileName )

    else
      dbImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
  end;
end;

Y ahora ya si puedo aplicar los cambios sin que se produzca el error
Gracias a los que habéis contestado o seguido este hilo.
Lo doy por cerrado.
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
Grabar DVD de datos jandro Varios 10 01-04-2012 14:21:32
Grabar datos a tablas access Aprendiendo Varios 8 24-01-2007 16:07:04
No se actualizan los datos al grabar marcial Conexión con bases de datos 4 25-05-2006 12:04:29
grabar datos de un memo @-Soft Conexión con bases de datos 8 16-08-2003 11:01:49
grabar datos en visual dbase botones67 Varios 1 19-07-2003 09:40:42


La franja horaria es GMT +2. Ahora son las 01:37:34.


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