unit Uconexion;

interface

 uses
  SysUtils, Classes, DB, ADODB, forms, DBCtrls, Buttons, Graphics, IniFiles, dialogs, controls,System.UITypes;

 procedure InitButtons(navegador:DBCtrls.TDBNavigator; TipoLetra:string);
 Function conectar(conector: TAdoconnection; base: string; directorio: string; pass: string; aplicacion: Tapplication): boolean;
 Function conectarIni(conector: TAdoconnection; base: string; directorio: string): boolean;
  Function conectarAccdb(conector: TAdoconnection; base: string; directorio: string;aplicacion: Tapplication): boolean;
  //procedure InitButtonsJv(navegador:JvDBControls.TJvDBNavigator; TipoLetra:string);
 Procedure DBControles(Accion : Byte; Tabla:TADOTable; primero: TBitBtn; anterior: TBitBtn;
siguiente: TBitBtn;ultimo: TBitBtn; nuevo: TBitBtn; editar: TBitBtn; eliminar: TBitBtn;
guardar: TBitBtn; cancelar: TBitBtn);
implementation

type
 	TDBNavigator = class(DBCtrls.TDBNavigator);

procedure InitButtons(navegador:DBCtrls.TDBNavigator; TipoLetra:string);
const
  BtnTypeName: array[TNavigateBtn] of String = (
    'Primero', 'Anterior', 'Siguiente', 'Último', 'Añadir',  'Suprimir',
    'Editar', 'Guardar', 'Cancelar', 'Actualizar','aplicar cambios', 'cancelar cambios'
  );
   Rutabnt: array[TNavigateBtn] of String = (
    'primero', 'atras', 'siguiente', 'ultimo', 'nuevo',  'borrar',
    'editar', 'guardar', 'cancelar', 'refrescar','aplicar', 'detener'
  );
var
	I: TNavigateBtn;

begin
	with TDBNavigator(navegador) do
		for I := Low(Buttons) to High(Buttons) do
		begin
      //Buttons[I].Glyph.LoadFromFile('C:\proyectos delphi\Projects\desamparados_plus - sqlserver - emergencia\imagenes\botones\' + Rutabnt[I] + '.bmp');
      Buttons[I].Layout := blGlyphTop;
		 	Buttons[I].Caption := BtnTypeName[I];
      Buttons[I].Font.Name:= TipoLetra;
      Buttons[I].Font.Size:= 10;
      Buttons[I].Font.Style:= [fsbold];
		end;
end;

{procedure InitButtonsJv(navegador:JvDBControls.TJvDBNavigator; TipoLetra:string);
const
  BtnTypeName: array[TNavigateBtn] of String = (
    'Primero', 'Anterior', 'Siguiente', 'Último', 'Añadir',  'Suprimir',
    'Editar', 'Guardar', 'Cancelar', 'Actualizar','aplicar cambios', 'cancelar cambios'
  );

var
	I: TNavigateBtn;

begin
	with TDBNavigator(navegador) do
		for I := Low(Buttons) to High(Buttons) do
		begin
     	Buttons[I].Caption := BtnTypeName[I];
      Buttons[I].Font.Name:= TipoLetra;
      Buttons[I].Font.Size:= 10;
      Buttons[I].Font.Style:= [fsbold];
      Buttons[I].Layout := blGlyphTop;
		end;
end;  }


 Function conectar(conector: TAdoconnection; base: string; directorio: string; pass: string; aplicacion: Tapplication): boolean;
  var
   ruta, cadena: string;
  begin
  try
    conector.Connected:= false;
    ruta:= ExtractFilePath(application.ExeName) + '\'+ directorio + '\'+base + '.mdb';
    cadena:= 'Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source=' + ruta + ';Mode=ReadWrite;Jet OLEDB:Database Password='+pass;
    Conector.ConnectionString := cadena;
    conector.Connected:= true;
    result:= true;
   except
     result:= false;
   end
  end;

  Function conectarIni(conector: TAdoconnection; base: string; directorio: string): boolean;
  var
   cadena: string;
   FileIni: TIniFile;
   direccion: string;
  begin
   //dire:= extractfilePath(directorio);
   if FileExists(directorio + '\config.ini') then
    begin
     FileIni := TIniFile.Create(directorio + '\config.ini');
     direccion:=FileIni.ReadString('Conexion','Cadena','');
     cadena:= 'Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=' + Direccion + ';Mode=ReadWrite;';
     Conector.connectionString:= Cadena;
     Conector.open;
     FileIni.free;
     Result:= true
    end
    else
     Result:= False;
  end;

   //Esta función permite conectar una base de datos de access accdb, formato 2007, 2010, 2013
  Function conectarAccdb(conector: TAdoconnection; base: string; directorio: string; aplicacion: Tapplication): boolean;
  var
   ruta, cadena: string;
  begin
  try
    conector.Connected:= false;
    ruta:= ExtractFilePath(application.ExeName) + '\'+ directorio + '\'+ base + '.accdb';
    cadena:= 'Provider=Microsoft.ACE.OLEDB.12.0;Password="";Data Source=' + ruta + ';Persist Security Info=True';
    Conector.ConnectionString := cadena;
    conector.Connected:= true;
    result:= true;
   except
     result:= false;
   end
  end;

Procedure DBControles(Accion : Byte; Tabla:TADOTable; primero: TBitBtn; anterior: TBitBtn;
siguiente: TBitBtn;ultimo: TBitBtn; nuevo: TBitBtn; editar: TBitBtn; eliminar: TBitBtn;
guardar: TBitBtn; cancelar: TBitBtn);
begin
  if Accion = 1 then
  begin
    if tabla.State in [dsinsert, dsedit] then
     begin
      Tabla.Cancel;
      Accion:= 9;
     end;
     Tabla.First;
     primero.Enabled:= false;
     anterior.Enabled:= false;
     siguiente.Enabled:= true;
     ultimo.Enabled:= true;
  end;
  if Accion = 2 then
  begin
  if tabla.State in [dsinsert, dsedit] then
     begin
      Tabla.Cancel;
      Accion:= 9;
     end;
    if Tabla.RecNo = 1 then
    begin
       Tabla.First;
       primero.Enabled:= false;
       anterior.Enabled:= false;
       siguiente.Enabled:= true;
       ultimo.Enabled:= true;
       //Accion:= 1;
    end
    else
    begin
     Tabla.Prior;
     primero.Enabled:= true;
     anterior.Enabled:= true;
     siguiente.Enabled:= true;
     ultimo.Enabled:= true;
    end;
  end;

   if Accion = 3 then
   begin
   if tabla.State in [dsinsert, dsedit] then
     begin
      Tabla.Cancel;
      Accion:= 9;
     end;
      if (tabla.RecNo = tabla.RecordCount) then
      begin
       Tabla.last;
       primero.Enabled:= true;
       anterior.Enabled:= true;
       siguiente.Enabled:= false;
       ultimo.Enabled:= false;
      end
     else
      begin
       tabla.next;
       primero.Enabled:= true;
       anterior.Enabled:= true;
       siguiente.Enabled:= true;
       ultimo.Enabled:= true;
      end;
   end;

   if Accion = 4 then
   begin
   if tabla.State in [dsinsert, dsedit] then
     begin
      Tabla.Cancel;
      Accion:= 9;
     end;
      tabla.Last;
      primero.Enabled:= true;
      anterior.Enabled:= true;
      siguiente.Enabled:= false;
      ultimo.Enabled:= false;
   end;


     if Accion = 5 then
     begin
      tabla.Insert;
      editar.Enabled:=false;
      nuevo.Enabled:= false;
      eliminar.Enabled:= false;
      Cancelar.Enabled:= true;
      Guardar.Enabled:= true;
     end;
     if Accion = 6 then
     begin
      tabla.Edit;
      editar.Enabled:=false;
      nuevo.Enabled:= false;
      eliminar.Enabled:= false;
      Cancelar.Enabled:= true;
      Guardar.Enabled:= true;
     end;

     if Accion = 7 then
     begin
      if tabla.RecordCount > 0 then
       begin
         if messagedlg('Está Seguro de eliminar',mtconfirmation,[mbyes, mbno],0) = mryes then
         tabla.Delete;
       end
       else
       begin
          Eliminar.Enabled:= false;
          messagedlg('La tabla está vacía', mterror, [mbok],0)
       end;
     end;

     if Accion = 8 then
     begin
      if tabla.State in [dsinsert, dsedit] then
      tabla.post;
      editar.Enabled:=true;
      nuevo.Enabled:= true;
      eliminar.Enabled:= true;
      Cancelar.Enabled:= false;
      Guardar.Enabled:= false;
     end;
     if Accion = 9 then
     begin
      if tabla.State in [dsinsert, dsedit] then
      tabla.cancel;
      editar.Enabled:=true;
      nuevo.Enabled:= true;
      eliminar.Enabled:= true;
      Cancelar.Enabled:= false;
      Guardar.Enabled:= false;
     end;
end;

end.
