Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   limpiar tabla de access (https://www.clubdelphi.com/foros/showthread.php?t=76912)

ozmar_11 04-12-2011 03:06:32

limpiar tabla de access
 
hola tengo una base de datos en access con datos de alumnos de una escuela dentro de ella pero al finalizar el semestre se debe limpiar toda la tabla pues esa información ya no se usara mis dudas son estas como limpio la base de datos desde delphi y con que componentes es mas eficaz hacerlo?

Caral 04-12-2011 03:09:35

Hola
1- Tabla1.Delete;
2- Componentes ADO.
Saludos

ozmar_11 04-12-2011 03:11:59

hola gracias por contestarme pero la sentencia Tabla1.delete que hace? y en que componente ado deberia ponerlo?

Caral 04-12-2011 03:20:55

Hola
Para conectarte con ado lo haces con el componente adoconnection.
Para borrar la tabla lo puedes hacer con un adotable o si quieres hacerlo por sql tendra que ser con un adoquery.
Saludos

ozmar_11 04-12-2011 03:33:34

y la sentencia Tabla1.delete donde la aplicaría?

ecfisa 04-12-2011 09:54:39

Hola.

Puede ser en el evento OnClick de un TButton por ejemplo, pero la sintáxis varía de acuerdo a los componente que uses.

TTable:
Código Delphi [-]
procedure TForm1.btnVaciarTablaClick(Sender: TObject);
begin
  // Asegurarse que la tabla esté en modo exclusivo
  Tabla1.Close;
  Tabla1.Exclusive:= True;
  Tabla1.Open;
  // Vaciar 
  Table1.EmptyTable
end;

TADOTable:
Código Delphi [-]
procedure TForm1.btnVaciarTablaClick(Sender: TObject);
begin
  ADOTable1.DeleteRecords(arAll);
end;

Saludos.

ozmar_11 04-12-2011 19:37:37

hola gracias por responder use el código del ADOTable pero no funciona al darle clic al botón me aparece este error:
proyect1.exe raised exeption classEOleExepction whit message 'la operacion no esta permitida en este contexto' process stopped
como lo corrijo?

ecfisa 04-12-2011 20:30:09

Hola ozmar.

Me olvidé que debías usar con anterioridad:
Código Delphi [-]
  CursorLocation:= clUseServer;
Pero de todos modos algunos de los providers no soportan bién la operación de borrado con ADOTable . Creo que sería mucho mejor que usaras un TADOQuery para hacer esa tarea:

Código Delphi [-]
procedure TForm1.btnVaciarTablaClick(Sender: TObject);
begin
  with TADOQuery.Create(nil) do
  try
    Connection:= ADOConnection1;
    SQL.Text:= 'DELETE FROM TU_TABLA';
    ExecSQL;
    Close;
  finally
    Free;
  end;
end;

Saludos.

ozmar_11 04-12-2011 21:03:40

hola use ecfisa use el código que me recomendaste y me funciono muy bien pero al cerrar la aplicación me aparecen 2 cuadros con estos mensajes:

Exception EAccessViolation in module project1.exe at 00098FB4. Access violation at address 00498FB4 in module 'project1.exe'. read of
address 00000008.

project1.exe raised exception class EAccessViolation with message 'Access violation at address 004FA140 in module 'project1.exe'.read 00000004'. Process stoped.
use step or Run continue

por que salen esos mensajes y como los evito?

ecfisa 04-12-2011 21:43:14

Hola ozmar.

Los errores EAccessViolation se producen generalmente cuando intentas usar o liberar un recurso que ya no existe (ya sea que todavía no fué creado o ya fué liberado). No es posible darte una respuesta concreta sin ver el código.
Una forma de ubicar el error es poner un break antes de la salida de la aplicación (por lo tanto antes de la manifestación del mismo) y luego con F7/F8 hacer un seguimiento para ver donde se provoca.

Un saludo.

ozmar_11 05-12-2011 00:00:29

hola gracias por tomarse el tiempo de ayudarme pero este error tiene algo curioso solo aparecen los cuadros al presionar el boton con el codigo pero ahora me aparece un nuevo error en un cuadro dice esto:

project1.exe raised exception class EInvalidCast with message 'Invalid class typecast'. Process stopped.

y este mensaje me aparece al cerrar la aplicacion pero cuando presiono dos veces el boton se interrumpe el programa y aparece ese mensaje como lo corrijo?
disculpen pero como puedo poner el texto de los codigos en un recuadro como lo hacen ustedes?

ozmar_11 05-12-2011 00:43:13

bueno disculpen mi falta de cuadro de código pero es que no veo el icono que le pone el cuadro creo que es el mismo icono de la pagina no? pero aquí esta mi código:
Código Delphi [-]
procedure TForm6.Button1Click(Sender: TObject);
begin
IF APPLICATION.MESSAGEBOX('¿REALMENTE QUIERES BORRARTODOS LOS DATOS DE LA BASE DE DATOS? ESTA ACCION NO SE PODRA REVERTIR','Advertencia del sistema',1)=IDOK THEN
BEGIN
  with ADOQuery1.Create(nil) do
  try
    Connection:= ADOConnection1;
    SQL.Text:= 'DELETE FROM Tabla1';
    ExecSQL;
    Close;
  finally
    Free;
  end;
  SHOWMESSAGE('LA TABLA SE HA ELIMINADO POR COMPLETO');
  END;
end;

ecfisa 05-12-2011 01:44:31

Hola ozmar.

No veo posibilidad de acces violation en ese código, pero por las dudas vamos a asegurarnos.

Poné un componente TADOQuery (ADOQuery1) y desde el Object Inspector asignale a su propiedad Connection el ADOConnection correspondiente, luego en reemplazo, utilizá este código:
Código Delphi [-]
procedure TForm6.Button1Click(Sender: TObject);
begin
  if Application.MessageBox('¿REALMENTE QUIERES BORRAR TODOS LOS DATOS DE LA BASE DE DATOS? '+ 
      'ESTA ACCION NO SE PODRA REVERTIR','Advertencia del sistema',1) = IDOK then
    with TADOQuery1 do
    begin
      Close;
      SQL.Clear;
      SQL.Text:= 'DELETE FROM TABLA1';
      ExecSQL
    end
end;

Saludos.

ozmar_11 05-12-2011 02:12:03

hola gracias por ayudarme el problema se resolvio usando ese ultimo codigo gracias por tomarse el tiempo de ayudarme

ecfisa 05-12-2011 02:30:55

De nada ozmar, me alegro que lo hayas solucionado.

Saludos. :)


La franja horaria es GMT +2. Ahora son las 20:07:52.

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