Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-05-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Hola _Cali.

Eso de querer modificar después de borrar tiene algo de metafísico.

De cualquier manera, creo que leer en su totalidad este hilo te ayudará a compreder mejor varias de las cosas que estás manejando.

Incluso te servirá para resolver esta inquietud:
Cita:
Empezado por _CALI Ver Mensaje
me serviria de mucho ver como genera el DataSetProvider las sentencias SQL INSERT UPDATE O DELETE GRACIAS!!
Una despedida al llegar.

Al González.
Responder Con Cita
  #2  
Antiguo 21-05-2011
_CALI _CALI is offline
Miembro
 
Registrado: mar 2008
Posts: 99
Poder: 19
_CALI Va por buen camino
jeje

claro que no pretendo modificar algo que no existe.

por ejemplo si tenemos un tabla con los siguientes registros:

articulos
id_articulo nombre
a01 arroz
a02 azucar
a03 fideos

si ejecuto la siguiente instruccion sql:


Código SQL [-]
UPDATE ARTICULOS SET NOMBRE = 'REFRESCO'
WHERE ID_ARTICULO = 'A05'





no muestra ningun error verdad?, solo mi inquietud porque el datasetProvider muestra que el registro A05 ya no existe o otro usuario lo cambio


de todas maneras lo resolvi implementando el evento OnUpdateError del provedor



Código Delphi [-]
if UpdateKind in [ukModified, ukDeleted] then
begin
Resolve := rrIgnore;
end;




te todas maneras seguire investigando, gracias de nuevo al_gonzales por responder
Responder Con Cita
  #3  
Antiguo 21-05-2011
_CALI _CALI is offline
Miembro
 
Registrado: mar 2008
Posts: 99
Poder: 19
_CALI Va por buen camino
Hola!

Al_Gonzales:
estuve viendo el hilo que me sugeriste y me parecio muy interesante, siguiendo los pasos de depuración, como mostrabas en el hilo, pude aclarar varias dudas, pero saltaron otras mas.

Primero, la propiedad UpdateMode de mi proveedor está establecida con upWhereKeyOnly,
el campo de busqueda para el proveedor es mi ID que tiene la bandera pfInKey, siguiendo las recomendaciones que dabas, añadí en la ventana (watches) una nueva propiedad para observación Provider.UpdateMode,
ejecuto el programa en depuración y la propiedad añadida a (watches) se establece a upWhereKeyOnly, mas no cambia a upWhereAll, es mas, mire el valor de SQL.Text que se muestra en código mas abajo y efectivamente dice: delete from articulos '#$D#$A'where id_articulo = '#$D#$A', es decir que la consulta en la clausula WHERE no anida los demas campos con el operador AND, solo hace referncia al campo de búsqueda id_articulo (ID) que esta con pfInKey, cosa que me parece perfecto.

Código Delphi [-]
 
procedure TSQLResolver.DoExecSQL(SQL: TWideStringList; Params: TParams);
var
  RowsAffected: Integer;
begin
  RowsAffected := (Provider.DataSet as IProviderSupport).PSExecuteStatement(SQL.Text, Params);
  if not (poAllowMultiRecordUpdates in Provider.Options) and (RowsAffected > 1) then
  begin
    (Provider.DataSet as IProviderSupport).PSEndTransaction(False);
    Provider.TransactionStarted := False;
    DatabaseError(STooManyRecordsModified);
  end;
  if RowsAffected < 1 then
    DatabaseError(SRecordChanged);
end;

me di cuenta que error salta despues de la linea:
Código Delphi [-]
 
if RowsAffected < 1 then 
   DatabaseError(SRecordChanged);
claro si es que el otro usuario ya lo borró previamente.

Bueno lo que pienso, es que por parte del rervidor (SQLServer), el proveedor recibe la notificación que ningun registro existe con ese valor, si es asi pues todo ya tiene lógica


en ese caso podria ignorar la actualizacion si esque RowsAffected es < 1 cierto?

como podria hacerlo???
lo único que me ha funcionado hasta ahora fue implementar el evento OnUpdateError de la siguiente manera:

Código Delphi [-]
if UpdateKind in [ukModify, ukDelete] then
   begin
     Response := rrIgnore;
   end;

pero como bien sabes se puede resolver un problema de mil maneras, la diferencia está en la manera mas apropiada!


Gracias denuevo, si veo algo nuevo al respecto lo comunicare


Saludos!!!
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
Mover registros en ClientDataSet mglucero Conexión con bases de datos 2 14-03-2014 03:47:44
Ordenar registros con ClientDataSet Jose Roman Conexión con bases de datos 2 15-01-2010 22:11:27
Como eliminar un campo de una Query y ClientDataSet David Conexión con bases de datos 2 26-03-2009 13:23:07
Obtener los 30 primeros registros de un ClientDataSet David Conexión con bases de datos 7 21-04-2008 17:47:44
por que duplicidad de registros con clientdataset sin ingresar registros ...mysql Arturo MySQL 3 05-09-2006 18:39:37


La franja horaria es GMT +2. Ahora son las 12:06:54.


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
Copyright 1996-2007 Club Delphi