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!