Utilizamos cookies propias y de terceros. Al navegar entendemos que aceptas el uso de cookies. +Info.
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Usuario
· Wiki

Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - ¿No se como se poner a cero los indices?
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information ¿No se como se poner a cero los indices?

Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
tuni
Buen usuario


Registrado: Apr 07, 2009
Mensajes: 14

Asunto: ¿No se como se poner a cero los indices? Responder citando

tengo unas tablas en hechas en .mb y no se como poner a cero los indices o dejar vacia la tabla y que empiece de nuevo los indices en su estado inicial
cuando todavia no habia introducido los datos.He hecho:
nombretabla.close;
nombretabla.deletetabla;
y me dice que esta ocupada.Tampoco vale la idea de ir borrando de uno en uno los indices porque continua con el siguiente que habia anteriormente.
La base de datos es de escritorio.
Gracias por adelantado.
MensajePublicado:
Jue Feb 03, 2011 6:24 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: ¿No se como se poner a cero los indices? Responder citando



Anuncios



tuni escribió:
tengo unas tablas en hechas en .mb y no se como poner a cero los indices o dejar vacia la tabla y que empiece de nuevo los indices en su estado inicial
cuando todavia no habia introducido los datos.He hecho:
nombretabla.close;
nombretabla.deletetabla;
y me dice que esta ocupada.Tampoco vale la idea de ir borrando de uno en uno los indices porque continua con el siguiente que habia anteriormente.
La base de datos es de escritorio.
Gracias por adelantado.


¿Qué motor de base de datos usas? no conocemos la extensión .mb.
¿Lo que quieres es que los campos autoincremento empiecen por 0?
MensajePublicado:
Vie Feb 04, 2011 1:04 pm
Top of PageVer perfil de usuario
tuni
Buen usuario


Registrado: Apr 07, 2009
Mensajes: 14

Asunto: Responder citando

Pido disculpas,es de escritorio una de las que trae Delphi 6=Paradox.
Ya se que no es muy adecuada,pero en fin,ademas no creo que guarde mas archivos de 1000.
En cuanto a lo segundo que me preguntas te contesto que si.
MensajePublicado:
Sab Feb 05, 2011 1:56 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Responder citando

tuni escribió:
Pido disculpas,es de escritorio una de las que trae Delphi 6=Paradox.
Ya se que no es muy adecuada,pero en fin,ademas no creo que guarde mas archivos de 1000.
En cuanto a lo segundo que me preguntas te contesto que si.



Bueno, si usas Delphi 6 y la tabla no va a tener millones de registros y, lo que es más importante, si sólo va a conectarse un usuario a la tabla, Paradox no es una mala elección. Existen otras bases de datos de escritorio más "mordernas", como Access, SQLite, etc. aunque, repito, Paradox funciona bien con no muchos registros y con un solo acceso concurrente.

A continuación te mostramos el código fuente de una de nuestras aplicaciones, que hemos rescatado del archivo, está desarrollada expresamente para cambiar el valor del campo autoincremento de una tabla Paradox (.db):

Código:

unit UnidadMenuPrincipal;

{$R WinXP.res}

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Grids, DBGrids, ExtCtrls, DBCtrls, ThemeMgr,
  ThemeMgrDB, DB, DBTables, ComCtrls, shellapi;

type
  TformResetearAutoincremento = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    txtTabla: TEdit;
    btSeleccionar: TBitBtn;
    Label2: TLabel;
    txtValorAutoincremento: TEdit;
    btReinciar: TBitBtn;
    ThemeManager1: TThemeManager;
    GroupBox2: TGroupBox;
    dbNavegador: TDBNavigator;
    grid: TDBGrid;
    lNumReg: TLabel;
    dlAbrir: TOpenDialog;
    StaticText1: TStaticText;
    StaticText2: TStaticText;
    btMostrarDatos: TBitBtn;
    db: TDataSource;
    tb: TTable;
    LWEB: TLabel;
    procedure btReinciarClick(Sender: TObject);
    procedure btSeleccionarClick(Sender: TObject);
    procedure btMostrarDatosClick(Sender: TObject);
    procedure LWEBClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  formResetearAutoincremento: TformResetearAutoincremento;

implementation

{$R *.dfm}

procedure resetearAutoincremento (
    fichero : string; valor : Longint);
var
  mystream : tfilestream;
begin
  mystream := tfilestream.create(fichero,
      fmOpenWrite + fmShareExclusive);
  try
    mystream.Seek(73, soFromBeginning);
    mystream.Writebuffer(valor, SizeOf(valor));
  finally
    mystream.Free;
  end;
end;

procedure TformResetearAutoincremento.btReinciarClick(Sender: TObject);
begin
  if MessageDlg('Atención: la aplicación no comprueba el fichero origen, ' +
      'por lo que debe asegurarse de que se trata de una ' +
      'tabla Paradox (.db). La aplicación escribe en el fichero ' +
      'directamente por lo que debe hacer copia de seguridad ' +
      'antes de continuar.' + chr(13) + chr(13) +
      '¿Desea continuar con el proceso?',
      mtConfirmation, [mbyes,mbno], 0) = mryes then
  begin
    tb.Close;
    resetearAutoincremento (txtTabla.Text,
        StrtoInt(txtValorAutoincremento.text));
    MessageDlg('Campo de autoincremento de la tabla ' +
        ExtractFileName(txtTabla.Text) + ' reseteado a ' +
        txtValorAutoincremento.Text + '. Compruebe los datos abriendo ' +
        'y editando la tabla.', mtInformation, [mbok], 0);
    btMostrarDatos.SetFocus;
  end;
end;

procedure TformResetearAutoincremento.btSeleccionarClick(Sender: TObject);
begin
  if dlAbrir.Execute then
    txtTabla.Text := dlAbrir.FileName;
end;

procedure TformResetearAutoincremento.btMostrarDatosClick(Sender: TObject);
begin
  tb.Close;
  tb.TableName := txtTabla.Text;
  tb.Open;
  lNumReg.Caption := 'Nº registros: ' + inttostr(tb.RecordCount);
end;

procedure TformResetearAutoincremento.LWEBClick(Sender: TObject);
begin
  ShellExecute(Handle, Nil, PChar('http://www.ajpdsoft.com'),
      Nil, Nil, SW_SHOWNORMAL);
end;

end.


En realidad, la función que te interesa es:

Código:

procedure resetearAutoincremento (
    fichero : string; valor : Longint);
var
  mystream : tfilestream;
begin
  mystream := tfilestream.create(fichero,
      fmOpenWrite + fmShareExclusive);
  try
    mystream.Seek(73, soFromBeginning);
    mystream.Writebuffer(valor, SizeOf(valor));
  finally
    mystream.Free;
  end;
end;
MensajePublicado:
Dom Feb 06, 2011 11:00 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Responder citando

Aquí puedes ver un artículo que hemos realizado sobre cómo reiniciar el valor autoincremento de una tabla Paradox con Delphi:

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=516

Y la aplicación correspondiente en Borland Delphi 6:

http://www.ajpdsoft.com/modules.php?name=Downloads&d_op=viewdownloaddetails&lid=284
MensajePublicado:
Dom Feb 06, 2011 2:01 pm
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Este sitio web NO CONTIENE malware, todos los programas con código fuente aquí. Autor: Alonso Javier Pérez Díaz Google+ Síguenos en Google+