Ir al contenido


Foto

[RESUELTO] Cómo insertar 500 registros y luego borrarlos todos con un clic


  • Por favor identifícate para responder
17 respuestas en este tema

#1 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 16 octubre 2011 - 11:53

saludos

se me ha olvidado cómo insertar 500 registros en una tabla de sql server 2005 express, hice este código pero solo me interta el ultimo registro, el 501.




delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var i:integer;
  3. begin
  4. for i:=1 to 500 do
  5. ADOTable1.Insert;
  6. ADOTable1.fieldByname('No').AsInteger:=i;
  7. ADOTable1.Post;



necesito luego borrar todos los registro de esa tabla

quiero comprobar en que tiempo llena los registros con los números incrementales
  • 0

#2 luisgutierrezb

luisgutierrezb

    Advanced Member

  • Miembros
  • PipPipPip
  • 92 mensajes
  • LocationMéxico

Escrito 17 octubre 2011 - 07:22

es correcto, solo te inserta el ultimo porque falta el begin y el end del for donde contenga las 3 instrucciones para hacer la insercion, saludos!!
  • 0

#3 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 17 octubre 2011 - 07:41

es correcto, solo te inserta el ultimo porque falta el begin y el end del for donde contenga las 3 instrucciones para hacer la insercion, saludos!!


Así es amigo olvidó ponerle su begin y end al ciclo for para que contenga todas las instrucciones a realizar...



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var i:integer;
  3. begin
  4. for i:=1 to 500 do
  5. begin  // Aquí
  6.   ADOTable1.Insert;
  7.   ADOTable1.fieldByname('No').AsInteger:=i;
  8.   ADOTable1.Post;
  9. end;  // Y aquí



Saludox ! :)

  • 0

#4 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 17 octubre 2011 - 08:04

si gracias lo olvidaba, ya funciona correcto...

no recuerdo cómo borrar todos los registros de la tabla, pues estoy haciendo una prueba para ver qué tan rápido escribe los registros esta pc mia, y además ver cuantos MB ocupa la BD cuando le escriba 100,000 registros ..

entonces como borro todos los registros con un solo clic ?

  • 0

#5 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 17 octubre 2011 - 08:07

Todos los registros de una tabla se borran con:

Delete from Tabla


Obviamente, esto se lo colocas a un ADOQuery en su propiedad SQL.Text y el mismo lo ejecutas mediante ExecSQL en el evento OnClick del botón que vayas a utilzar para el borrado de los registros

Saludox ! :)

  • 0

#6 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 17 octubre 2011 - 08:12

Todos los registros de una tabla se borran con:

Delete from Tabla


Obviamente, esto se lo colocas a un ADOQuery en su propiedad SQL.Text y el mismo lo ejecutas mediante ExecSQL en el evento OnClick del botón que vayas a utilzar para el borrado de los registros

Saludox !


pensaba que no era necesario hacer un query para borrar los registros.. bueno, probando...
  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 17 octubre 2011 - 08:28


Todos los registros de una tabla se borran con:

Delete from Tabla


Obviamente, esto se lo colocas a un ADOQuery en su propiedad SQL.Text y el mismo lo ejecutas mediante ExecSQL en el evento OnClick del botón que vayas a utilzar para el borrado de los registros

Saludox !


pensaba que no era necesario hacer un query para borrar los registros.. bueno, probando...


También tienes la opción de usar el componente Table.



delphi
  1.   ADOTable1.DeleteRecords(arAll);
  2.   Table1.EmptyTable;
  3.   SQLTable1.DeleteRecords;
  4.   IBTable1.EmptyTable;



Salud OS

  • 0

#8 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 17 octubre 2011 - 09:07



Todos los registros de una tabla se borran con:

Delete from Tabla


Obviamente, esto se lo colocas a un ADOQuery en su propiedad SQL.Text y el mismo lo ejecutas mediante ExecSQL en el evento OnClick del botón que vayas a utilzar para el borrado de los registros

Saludox !


pensaba que no era necesario hacer un query para borrar los registros.. bueno, probando...


También tienes la opción de usar el componente Table.



delphi
  1.   ADOTable1.DeleteRecords(arAll);
  2.   Table1.EmptyTable;
  3.   SQLTable1.DeleteRecords;
  4.   IBTable1.EmptyTable;



Salud OS


si gracias, probaré esta forma porque con la otra forma funciona pero da un error al final...
  • 0

#9 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 17 octubre 2011 - 09:14

me dice esto:
[Error] Unit1.pas(56): Undeclared identifier: 'SQLTable1'
[Error] Unit1.pas(57): Undeclared identifier: 'IBTable1'
[Fatal Error] Project2.dpr(5): Could not compile used unit 'Unit1.pas'


  • 0

#10 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 17 octubre 2011 - 09:16

Qué error te da utilizando el ADOQuery ????  ^o|

Saludox ! :)
  • 0

#11 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 17 octubre 2011 - 09:23

con el adoquery funciona pero entonces me da este error:

es estraño, escribí 10,000 registros con la variable incremental, entonces aumenta en MB el tamaño de la BD pero cuando borro, los registros se van pero se queda aumentado el tamaño de la BD como si no se hubiesen borrado los registros...

Archivos adjuntos


  • 0

#12 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 17 octubre 2011 - 10:23

El error que te arroja está muy claro...

Estás haciendo un Open al Query y no el ExecSQL que te comenté en mi mensaje anterior  ;) , el componente te dice que no hay un ResultDataSet de la sentencia que estás empleando...

La diferencia entre usar Open y ExecSQL es que con el Open obtienes una respuesta de la base de datos, ésto pasa cuando haces uso del select... la base de datos te responde con datos.

En los casos cuando utilizas Insert, Delete, Update y cualquier instrucción en que la base de datos no te regresa información como resultado, entonces debes emplear el ExecSQL.

Prueba como te digo y nos comentas  (y)

Saludox ! :)

  • 0

#13 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 17 octubre 2011 - 04:45

me dice esto:
[Error] Unit1.pas(56): Undeclared identifier: 'SQLTable1'
[Error] Unit1.pas(57): Undeclared identifier: 'IBTable1'
[Fatal Error] Project2.dpr(5): Could not compile used unit 'Unit1.pas'



Eso es porque egostar citó como ejemplo todos los posibles componentes, en tu caso al ser ADO solo se usa la primera linea.


Saludos!
  • 0

#14 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 17 octubre 2011 - 11:11

El error que te arroja está muy claro...

Estás haciendo un Open al Query y no el ExecSQL que te comenté en mi mensaje anterior  , el componente te dice que no hay un ResultDataSet de la sentencia que estás empleando...

La diferencia entre usar Open y ExecSQL es que con el Open obtienes una respuesta de la base de datos, ésto pasa cuando haces uso del select... la base de datos te responde con datos.

En los casos cuando utilizas Insert, Delete, Update y cualquier instrucción en que la base de datos no te regresa información como resultado, entonces debes emplear el ExecSQL.

Prueba como te digo y nos comentas 

Saludox !


me funciona bien con:


delphi
  1. ADOQUERY1.ExecSQL;



pero entonces tengo cerrar el programa y volverlo a abrir ya que el DBGrid que muestra los datos no se actualiza la vista cuando borro todos los registros.
  • 0

#15 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 17 octubre 2011 - 11:32

me funciona bien con:


delphi
  1. ADOQUERY1.ExecSQL;



pero entonces tengo cerrar el programa y volverlo a abrir ya que el DBGrid que muestra los datos no se actualiza la vista cuando borro todos los registros.


Tan solo haces Close y Open a la tabla que conecta el DBGrid y eso bastará.


Saludos!
  • 0

#16 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 18 octubre 2011 - 10:52

entonces por qué razón cuando borros los registros la BD se queda igual en MB ??

porque para esta prueba, solo lleno el campo 'No' al cual le asigno 30,000 registros con numeros que van desde el 1 hasta el 30,000, pero entonces cuando borro todos esos 30,000 registros entonces en la BD cuando veo el fichero, no baja el peso de ella en MB y se queda igual ?

a qué se debe ??

  • 0

#17 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 18 octubre 2011 - 11:05

Isedr,
TODOS los motores de base de datos disponen de un mecanismo que se llama "recolección de basura". Cuando uno elimina registros no gana espacio sino es hasta que se libere esta "basura".
Todas las operaciones en una base de datos generan unos datos de resguardo y son éstos lo que terminan acumulando espacio.
Cada motor ofrece sus propias herramientas para liberar la memoria ocupada sin utilizar. En Firebird por ejemplo basta con hacer un Backup y un Restore para llevar a cabo la limpieza. En teoría debería ser similar para los otros motores.


Saludos,
  • 0

#18 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 18 octubre 2011 - 11:40

bueno, ya limpie el fichero log con esto:


delphi
  1. BACKUP LOG [MIBASEDEDATOS] WITH TRUNCATE_ONLY
  2.   DBCC SHRINKFILE(NOMBRE_LOGICO_LOG, 1)




caso resuelto....

  • 0




IP.Board spam blocked by CleanTalk.