Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-06-2023
Avatar de pgranados
pgranados pgranados is offline
Miembro
 
Registrado: sep 2022
Ubicación: México
Posts: 264
Poder: 2
pgranados Va por buen camino
Inserción masiva en Firebird, no aparecen todos mis registros

Buen día, tengo una tabla en mi base de datos en la cual almaceno todos los códigos postales que existen en México, son algo así de +95 mil.

A veces la autoridad competente actualiza los catálogos de códigos postales y por ende necesito actualizarlos en mi programa, pero mi problema es que se están eliminando los registros cuando realizo la inserción masiva, estos códigos postales el Servicio Postal Mexicano los publica en un Excel de dos hojas, entonces yo recorro toda la primera hoja y extraigo los valores, de la siguiente manera:

Código Delphi [-]
if not DataModule.FDQueryGrabar.Active then
   DataModule.FDQueryGrabar.Open;

for Fila := 6 to Rango.Rows.Count do
begin
     DataModule.FDQueryGrabar.Append;
     DataModule.FDQueryGrabarValor1.Value:= Rango.Cells[Fila,1].value;
     DataModule.FDQueryGrabarValor2.Value:= Rango.Cells[Fila,2].value;
     DataModule.FDQueryGrabarValor3.Value:= Rango.Cells[Fila,3].value;
     DataModule.FDQueryGrabar.Post;
end;

// Aqui ya cambio de pagina en el excel y demas

DataModule.FDQueryGrabar.Refresh;
DataModule.FDQueryGrabar.Last;

// Aqui inicio de nuevo el ciclo, pero ya en la otra pagina
for Fila := 6 to Rango.Rows.Count do
begin
     DataModule.FDQueryGrabar.Append;
     DataModule.FDQueryGrabarValor1.Value:= Rango.Cells[Fila,1].value;
     DataModule.FDQueryGrabarValor2.Value:= Rango.Cells[Fila,2].value;
     DataModule.FDQueryGrabarValor3.Value:= Rango.Cells[Fila,3].value;
     DataModule.FDQueryGrabar.Post;
end;

Pero en lugar de grabarme casi 95k de registros me muestra unos 50 mil

¿Alguien sabe que puedo revisar? Saludos.

Edit: Hago un count(*) a mi tabla y si aparecen los 95k de registros, pero en el DBaver o en el SQL manager no aparecen

Última edición por pgranados fecha: 16-06-2023 a las 20:38:36. Razón: Count
Responder Con Cita
  #2  
Antiguo 16-06-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por pgranados Ver Mensaje
Edit: Hago un count(*) a mi tabla y si aparecen los 95k de registros, pero en el DBaver o en el SQL manager no aparecen
¿Quieres decir que haces select count(*) y no dice 95 mil?
Supongo que al menos estarás haciendo un commit antes de cerrar, ¿no?
Responder Con Cita
  #3  
Antiguo 16-06-2023
Avatar de pgranados
pgranados pgranados is offline
Miembro
 
Registrado: sep 2022
Ubicación: México
Posts: 264
Poder: 2
pgranados Va por buen camino
Hago el count y si aparecen los 95 mil registros, pero cuando quiero visualizarlos no aparecen, solo aparecen como 50k
Responder Con Cita
  #4  
Antiguo 17-06-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¡Ah!, eso será una limitación para no cargar tantos registros en memoria, supongo.
Porque si le das a "ir al último" estará, ¿no?
Responder Con Cita
  #5  
Antiguo 19-06-2023
Avatar de pgranados
pgranados pgranados is offline
Miembro
 
Registrado: sep 2022
Ubicación: México
Posts: 264
Poder: 2
pgranados Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¡Ah!, eso será una limitación para no cargar tantos registros en memoria, supongo.
Porque si le das a "ir al último" estará, ¿no?
Ese es el problema, cuando voy al "ultimo" si aparece el registro que debería de ser. Pero cuando voy al primero no aparece el que debería de.

Esa tabla de 95k registros tiene como 17 campos, intente grabando solamente los "obligatorios para el funcionamiento del programa" que son como 4 (los demás son meramente informativos para el usuario), y de esta forma si aparecen todos los registros.
Responder Con Cita
  #6  
Antiguo 19-06-2023
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Desde Delphi, después de terminar la inserción deberías hacer un SELECT y asegurar que el WHERE no esté filtrando por algo que te esconda registros.
Si haces "SELECT * FROM TABLA" y luego vas al último deberías verlos todos.
Por otro lado revisa que no estés insertando registros duplicados.
En España existe el caso de que varios pueblos pequeños que compartan un mismo código postal.
También se da el caso inverso. Barcelona tiene muchos códigos postales.

De todos modos, habría que ver el código completo para poder saber qué es lo que hay dentro de cada componente.

Cuando se hacen Inserts Masivos, lo normal no es utilizar una tabla, sinó ejecutar un Query independiente ya que los DataSets pueden tener alguna cosa que no podemos controlar.

Yo haría los inserts así:

Código Delphi [-]
var
  Q : TQuery.Create;

begin
[...]
  with Q.SQL do
  begin
    Add(' INSERT INTO CODIGO_POSTAL (CODIGO, NOMBRE, ...) ');
    Add(' VALUES (:CODIGO, :NOMBRE, ...);
  end;

  Q.Prepare;

  for Fila := 6 to Rango.Rows.Count do
  begin
     Q.Params[0].AsString := Rango.Cells[Fila,1].value;
     Q.Params[1].AsString := Rango.Cells[Fila,2].value;
     Q.Params[2].AsString := Rango.Cells[Fila,3].value;
     Q.ExecSQL;
  end;

  Q.Commit;
  [...]
end;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Inserción masiva en Firebird ElDuc Conexión con bases de datos 40 30-04-2023 10:38:06
no aparecen todos los registros en consulta hecha en la aplicacion LACV MySQL 5 01-02-2023 17:05:24
Insercion masiva desde Paradox a Firebird MartinS SQL 5 22-12-2011 14:55:10
tabla dañada? aparecen todos los registros asi: ®?P½/”ÄrÒP Wonni Tablas planas 10 16-06-2006 20:59:48
Insercion masiva de registros MUY LENTA Balda Firebird e Interbase 10 24-03-2004 21:40:21


La franja horaria es GMT +2. Ahora son las 00:54:52.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi