Club Delphi  
    Paypal   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
  #21  
Antiguo 17-07-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 585
Poder: 20
jafera Va por buen camino
Buenas de nuevo.

He empezado con las pruebas, el insert a la tabla general ha funcionado de maravilla, en un tiempo record tanto desde el IBConsole como desde Delphi, un problema menos.

Luego intento ejecutar el script siguiente en IBConsole y me da error at line 1 - conversion from string""

Código SQL [-]
 
INSERT INTO CTR0003 ("DORSAL", "NOM", "COGNOM1", "COGNOM2", "CODI_CAT", "LLICENCIA", "DNI", "CLUB", "PUBLICITAT", "CODIUCI")
SELECT C1, C2, C3, C4, C6, C7, C8, C9, C11, C12 FROM CTR0003C
LEFT JOIN CTR0003 ON ( CTR0003C.C8 = CTR0003.DNI AND CTR0003C.C6 = CTR0003.CODI_CAT)
WHERE CTR0003.DNI IS NULL

Creo que he seguido al pie de la letra las instrucciones de escritura del script en cuestión. No se donde puedo haberme equivocado.

Gracias por vuestro tiempo

Josep
Responder Con Cita
  #22  
Antiguo 17-07-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Desconozco los componentes IB*, pero si con el ibconsole funciona... No se sí habrá algún otro componente de esa familia que te permita hacerlo.
Si no es así puedes hacer una store procedure e invocarla desde el programa.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #23  
Antiguo 17-07-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 585
Poder: 20
jafera Va por buen camino
Hola.

El error lo da en IBConsole, no en el componente.

Cita:
Empezado por jafera Ver Mensaje
Luego intento ejecutar el script siguiente en IBConsole y me da error at line 1 - conversion from string""
Gracias por todo lo demás ya tengo una parte "cocida" jejeje.

Saludos
Responder Con Cita
  #24  
Antiguo 17-07-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Ok, no entendí bien. Por lo que te dice, estás intentando cargar un campo de un tipo en otro campo de otro tipo. Tendrás que identificar el campo y hacer un cast para convertirlo al tipo de dato necesario.
En definitiva, que dorsal coincida con el tipo de C1y así sucesivamente.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #25  
Antiguo 17-07-2013
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.681
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Por cierto, puedes crear la base de datos con el 'character set' que quieras y te ahorras ponerlo en cada campo.
Además creo recordar (ahora mismo no estoy seguro) que también puedes poner el 'collate' en la creación de la bd.
Código SQL [-]
create database xxxxxxxxxxxxx character set yyyyyyy

También te puedes ahorrar poner los nombres entre comillas y entonces dará igual que los escribas en mayúsculas o minúsculas.

Código SQL [-]
CREATE TABLE CTR0003E (
  C1 VARCHAR(1),   
  C2 VARCHAR(1),
  C3 VARCHAR(1),   
  C4 VARCHAR(1),   
  C5 VARCHAR(25),   
  C6 VARCHAR(25),   
  C7 VARCHAR(20),   
  C8 VARCHAR(3),   
  C9 VARCHAR(3),  
  C10 VARCHAR(12),   
  C11 VARCHAR(12),   
  C12 VARCHAR(2),   
  C13 VARCHAR(12),   
  C14 VARCHAR(30),   
  C15 VARCHAR(3),   
  C16 VARCHAR(25),   
  C17 VARCHAR(15),   
  C18 VARCHAR(15),   
  C19 VARCHAR(15)  
);
Y si además usas dominios, entonces mucho más cómodo, pero eso lo dejo para otro momento

Te lo comento porque me parece "un trabajo de chinos" repetir tantas veces lo mismo y estar pendiente de las comillas, mayúsculas, minúsculas, etc.
Responder Con Cita
  #26  
Antiguo 17-07-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
He comparado las tablas y los campos C1 y C6 tienen diferente tipo que los datos en los que se cargan en la tabla destino. Tendrás que hacer un cast.

Saludos

Código SQL [-]
CTR0003C              CTR0003  
C1  VARCHAR(3)  Diferente  DORSAL  INTEGER,
C2  VARCHAR(20)            NOM  VARCHAR(20)
C3  VARCHAR(25)            COGNOM1  VARCHAR(25)
C4  VARCHAR(25)            COGNOM2  VARCHAR(25)
C6  VARCHAR(3)  Diferente  CODI_CAT  INTEGER,
C7  VARCHAR(14)            LLICENCIA  VARCHAR(14)
C8  VARCHAR(12)            DNI  VARCHAR(12)
C9  VARCHAR(25)            CLUB  VARCHAR(25)
C11  VARCHAR(25)            PUBLICITAT  VARCHAR(25)
C12  VARCHAR(12)            CODIUCI  VARCHAR(12)
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #27  
Antiguo 18-07-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 585
Poder: 20
jafera Va por buen camino
Buenos dias a todos.

Viendo la respuesta de anoche, he efectuado el cambio en el campo COD_CAT, pasandolo a Integer en la tabla temporal, el otro campo DORSAL, sencillamente lo he quitado del Insert y al hacer la prueba en IBConsole ya no da el error de conversion, pero no tarda 15 segundos, se colapsa y lo aborto

Código SQL [-]
 
INSERT INTO CTR0003 ("NOM", "COGNOM1", "COGNOM2", "CODI_CAT", "LLICENCIA", "DNI", "CLUB", "PUBLICITAT", "CODIUCI")
SELECT C2, C3, C4, C6, C7, C8, C9, C11, C12 FROM CTR0003C 
LEFT JOIN CTR0003 ON (CTR0003C.C8 = CTR0003.DNI)
WHERE CTR0003.DNI IS NULL

Ahora si que me veo superado, yo que pensaba que iba por buen camino y que al final el San Benito saldría del taco de madera y por lo que veo me queda solo la astilla, (chiste antiguo malo, jejeje)

NOTA: En IBConsole lo he dejado en marcha más de 8 minutos y nada, no acaba. En IBExpert más de lo mismo.

Saludos

Josep

Última edición por jafera fecha: 18-07-2013 a las 11:32:04.
Responder Con Cita
  #28  
Antiguo 18-07-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Una pregunta...
cuanto tarda la select del insert ? Sólo la select

Código SQL [-]
SELECT C2, C3, C4, C6, C7, C8, C9, C11, C12 FROM CTR0003C 
LEFT JOIN CTR0003 ON (CTR0003C.C8 = CTR0003.DNI)
WHERE CTR0003.DNI IS NULL

y abusando un poco otra pregunta. Nos puedes poner los indices de las dos tablas ?

Me da que no tendría que tardar casi nada, algo no está suficientemente ajustado.

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #29  
Antiguo 18-07-2013
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.681
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Debería poner el código fuente de tu programa y datos para hacer pruebas, aunque ya sé que no puedes hacer eso.
Responder Con Cita
  #30  
Antiguo 18-07-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 585
Poder: 20
jafera Va por buen camino
La consulta select se hace bastante rapido, pero si lugo toco en el grid donde se muestran los datos en IBConsole, se cuelga.

El código fuente se podria poner, pero no creo que sea lo conveniente ya que aun está bastante verde el tema y el prpopósito del programa es muy especifico y no se si le servirá a mucha gente, talvez para chafardear solo.

Lo que si puedo hacer es conectar con alguien con teamwiever o similar y verlo en directo

El tema índices, pues las tablas temporales no tienen y la definitiva tampoco, no se exactamente donde crearlos

Saludos

Josep
Responder Con Cita
  #31  
Antiguo 18-07-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Debería poner el código fuente de tu programa y datos para hacer pruebas, aunque ya sé que no puedes hacer eso.
Bueno Casi, en este caso lo que tarda es la sentencia enviada desde la consola. Previamente deberíamos hacerla funcionar a una velocidad aceptable, de ahí que le pida más información. Me da que no tiene que ser inmediata la respuesta, pero de ahí a que tarde más de 8 minutos....

Puedo suponer que no tendría que haber más de un ciento de corredores nuevos. Recuperarlos tendría que ser casi inmediato. Insertar hasta 300 registros... no sé, algo se nos escapa.

A ver qué nos responde jafera.

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #32  
Antiguo 18-07-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 585
Poder: 20
jafera Va por buen camino
Creo que lo que tarda es en devolver el select.

Os he dicho que era rápido epro solo los primeros registros, he hecho otra prueba y si navego por el grid, se me va parando a medida que voy bajando el curor.
Si intento bajar la scrollbar de golpe es cuando se cuelga.
No seran unos cientos registros, creo que seran unos miles.

Me da la sensación de que es como si estuviera procesando los registros del select en bloques de unos 30 registros.

Saludos

Última edición por jafera fecha: 18-07-2013 a las 14:04:47.
Responder Con Cita
  #33  
Antiguo 18-07-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Cita:
Empezado por jafera Ver Mensaje
Buenos dias a todos.

Código SQL [-]
 
INSERT INTO CTR0003 ("NOM", "COGNOM1", "COGNOM2", "CODI_CAT", "LLICENCIA", "DNI", "CLUB", "PUBLICITAT", "CODIUCI")
SELECT C2, C3, C4, C6, C7, C8, C9, C11, C12 FROM CTR0003C 
LEFT JOIN CTR0003 ON (CTR0003C.C8 = CTR0003.DNI)
WHERE CTR0003.DNI IS NULL
Varias cosas:
1. Revisa las tablas involucradas en la insert. Hablabas anteriormente de CTR0003, CTR0003E y CTR0003C, y no se´si por error hemos utilizado otras.
2.- ON (CTR0003C.C8 = CTR0003.DNI) Aquí supongo que te falta añadir el campo CODI_CAT, ya que según observabas en otra ocasión este campo interviene.
3.- Crea índices para CTR0003.DNI, CTR0003C.C8, CTR0003.CODI_CAT y CTR0003C.C6 y vuelve a ejecutar la select. Esto tiene que volar !!!!

Si quieres probar rápido, omite el paso 2 y por sólo los índices para CTR0003.DNI y CTR0003C.C8.

Queremos resultados YA !!

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #34  
Antiguo 18-07-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 585
Poder: 20
jafera Va por buen camino


Ole, ole y ole.

Creo que se ha solucionado, indices, indices e indices.

Yo confundia indices con primary_key.

He puesto los indices en el campo referencia al DNI de las tres tablas et voilà los segundillos que decias.

Ufff que alivio más grande ya ni tiro la toalla ni abandono el barco como las ratas.......

Muchisimas gracias

Josep
Responder Con Cita
  #35  
Antiguo 18-07-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Eres un crack...

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #36  
Antiguo 19-07-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Como norma general, al menos deberían generarse índices para :

0.- Las primary keys , cuyos ínidices se generan automáticamente.
1.- Aquellos campos por los que se cruza información con otras tablas. Estos son todos los que participan en las JOIN entre tablas. Generalmente coinciden con foreign-keys.
2.- Indice sin repetición en el campo descripción para todas las tablas maestras tipo clave - descripción.
3.- Aquellos campos por los que se ordena habitualmente: nombre, población, ...

Se debe tener en cuenta que añadir demasiados índices ( digo demasiados, no los necesarios ) puede ralentizar las inserciones.

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #37  
Antiguo 19-07-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 585
Poder: 20
jafera Va por buen camino
Queriais resultados?

Pues aquí van los resultados cronometrados igual que una carrera, jejeje...

1-Inserción de 63.000 registros procedentes de fichero txt nacional, borrado de los registros que cumplan una condición, consulta para actualizar el campo nacionalidad y el campo fecha de nacimiento, (datos procdentes del codigo UCI) 15 segundos.

2-Inserción de 30.000 registros procedentes de fichero txt autonomico, borrado de los registros que cumplan una condición, consulta para actualizar el campo nacionalidad y el campo fecha nacimiento, (datos procedentes del codigo UCI) 5.5 segundos.

3-Insertar los 30.000 registros que quedan en la tabla temporal nacional a la tabla definitiva 9 segundos.

4-Insertar de los 4.000 registros que quedan en la tabla autonomica y que no esten en la definitiva 3 segundos.

Ni me lo puedo creer, lo he realizado 7 u 8 veces porque me parecia imposible.

Que contento estoy!!!!!!!!

Como ya he dicho en algún que otro hilo anterior, pues eso, que MUCHAS GRACIAS!!!!!! y lo digo así de alto que no chillando.

Saludos calurosos desde la Costa Brava

Josep
Responder Con Cita
  #38  
Antiguo 19-07-2013
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.681
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular


.
Responder Con Cita
  #39  
Antiguo 19-07-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Te ha costado pero por fin lo has conseguido.

Por aquí también mucho calor y mucha humedad, vamos, todo el día sudando.

Sigue informando.

Ahora planteare hacer la carga directamente desde los ficheros txt !!

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #40  
Antiguo 19-07-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Ah, y a ver sí gana algún paisano del Euskaltel alguna etapa del Tour
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
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
Aportación del código de un stored procedure para conversión literal de números birmain Firebird e Interbase 12 16-07-2015 19:12:29
Insertar desde una tabla con loop en stored procedure Fita Firebird e Interbase 2 04-06-2013 00:39:23
Problema con Stored Procedure para actualizar tabla con datos de otra tabla. Adrian Murua MySQL 4 04-02-2012 02:54:49
Insertar en Un Stored Procedure DasGrun Firebird e Interbase 7 13-12-2011 23:46:20
Stored Procedure !!! Ledian_Fdez C++ Builder 0 02-03-2010 14:01:29


La franja horaria es GMT +2. Ahora son las 01:56:24.


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
Copyright 1996-2007 Club Delphi