Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta de Actualizacion (https://www.clubdelphi.com/foros/showthread.php?t=84243)

nefore 25-09-2013 09:35:52

Consulta de Actualizacion
 
Saludos, estoy con pequeño problema veran tengo que realizar una actualizacion en una BD de Access 2010.
En Delphi, intente lo siguiente:

Código:

procedure TForm1.consulta_mantenimiento;
const
  connstring = 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\proyect\dbaccess1.accdb;Persist Security Info=False ';
  sql1 = 'UPDATE Propietarios INNER JOIN Mascotas ON Propietarios.CODIGO_TITULAR = Mascotas.CODIGO_PROPIETARIO SET Propietarios.BORRADO = No, Propietarios.FECHA_DE_MODIFICACION = Date()';
  sql2 = 'WHERE (((DateDiff("m",Date(),[Mascotas].[FECHA_ALTA]))>-18));';

var
  ADOConn: TADOConnection;
  ADOQuery: TADOQuery;
 
begin
  ADOConn:= TADOConnection.Create(Self);
  ADOConn.ConnectionString:= connstring;
  ADOConn.LoginPrompt:= False;

  try
    ADOConn.Connected := True;
  except
    on e: EADOError do
    begin
      MessageDlg('Error while connecting', mtError,
                  [mbOK], 0);
      Exit;
    end;
  end;

  ADOQuery:= TADOQuery.Create(Self);
  ADOQuery.Connection:= ADOConn;
  ADOQuery.SQL.Clear;
  ADOQuery.SQL.Add(sql1+sql2);
  ADOQuery.Prepared:= True;

  try
    ADOQuery.Active := True;
  except
    on e: EADOError do
    begin
      MessageDlg('Error while doing query', mtError,
                  [mbOK], 0);

      Exit;
    end;
  end;

  ADOQuery.ExecSQL;

  ShowMessage('Alta_Lógica realizada');

end;

A lo cual me salta el siguiente error: "El proveedor actual no admite que una única ejecución devuelva múltiples recordsets".

Pues en viendo esto, trate de utilizar el UpdateSQL, de la siguiente manera:

Código:

procedure TForm1.consulta_mantenimiento;
const
  connstring = 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\proyect\dbaccess1.accdb;Persist Security Info=False ';
  sql1 = 'UPDATE Propietarios INNER JOIN Mascotas ON Propietarios.CODIGO_TITULAR = Mascotas.CODIGO_PROPIETARIO SET Propietarios.BORRADO = No, Propietarios.FECHA_DE_MODIFICACION = Date()';
  sql2 = 'WHERE (((DateDiff("m",Date(),[Mascotas].[FECHA_ALTA]))>-18));';

var
  ADOConn: TADOConnection;
  ADOQuery: TADOQuery;
  UpdateSQL: TUpdateSQL;
 
begin
  ADOConn:= TADOConnection.Create(Self);
  ADOConn.ConnectionString:= connstring;
  ADOConn.LoginPrompt:= False;

  try
    ADOConn.Connected := True;
  except
    on e: EADOError do
    begin
      MessageDlg('Error while connecting', mtError,
                  [mbOK], 0);
      Exit;
    end;
  end;

  ADOQuery:= TADOQuery.Create(Self);
  ADOQuery.Connection:= ADOConn;
  ADOQuery.SQL.Clear;
  ADOQuery.SQL.Add(sql1+sql2);
  ADOQuery.Prepared:= True;

 
  UpdateSQL:= TUpdateSQL.Create(Self);
  UpdateSQL.DataSet:= ADOQuery;
  UpdateSQL.ExecSQL();

  ShowMessage('Alta_Lógica realizada');

end;

En el cual en la linea de codigo que resalte me pide un parametro de tipo UpdateKind, pero nose que poner, busque algo respecto al parametro y no encontre nada...

Nota: Esta consulta ya la realize dentro de Access y funciona, asi que tome su codigo SQL y estoy intentando realizarla mediante un programa en delphi

Desde ya muchas gracias por su tiempo
Saludos!

ElDioni 25-09-2013 10:22:32

Hola, creo que una ocasión me ocurrió esto que comentas y era poque no había definido una clave principal en la tabla.

Saludos.

nefore 25-09-2013 10:44:01

Cita:

Empezado por ElDioni (Mensaje 467320)
Hola, creo que una ocasión me ocurrió esto que comentas y era poque no había definido una clave principal en la tabla.

Saludos.

Hola gracias por responder!, ehm me he vuelto a fijar en las tablas y cada una tiene su clave principal. Lo que no sabria es si la relacion [Propietario].[CODIGO_PROPIETARIO] --> [Mascotas].[CODIGO_TITULAR] me esta causando problemas como dices. De ser asi, voy a necesitar realizar con otra componente puesto que la relacion en la consulta es necesaria para definir la condicion sobre "cuales" de los campos se va a actualizar


La franja horaria es GMT +2. Ahora son las 23:09:27.

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