FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
ClientDataset cambiar tipo de parametro
Buenas foro.
Acudiendo a sus experiencias y soluciones... Uso el SQL Server 2008, allí tengo una tabla de un aproximado de 16 millones de filas. Una de sus columnas es de tipo char(8) y es el PK.. Para usar esta tabla, tengo un adoQuery y el sql es:
el adoQuery tiene parametro "nro_key" de tipo ftString. Acá viene mi pesadilla 1.- Utilizando profiler me doy cuenta que la sentencia es enviada al server de la siguiente forma: y demora 25 segundos para darme el resultado. 2.- Como manager utilizo el EMS y eh digitado en duro: El resultado es menos de un segundo. 3.- Si yo modifico la primera sentencia y cambio el tipo de parámetro por varchar(8) El resultado también es una bala como en el punto 2. //------------ Entonces me pregunto, existe alguna forma de cambiar el tipo de dato en el parámetro del adoQuery para que no sea nvarchar(8) y que sea varchar(8) o char(8). O tengo que pensar de otra forma? A la espera de sus comentarios, criticas y regalos... Your friend Startkill Lima-Perú |
#2
|
||||
|
||||
Replanteando mi duda
Uso el SQL Server 2008, allí tengo una tabla de un aproximado de 16 millones de filas. Una de sus columnas es de tipo char(8) y es el PK.. Para usar esta tabla, tengo un adoQuery y el sql es: El componente adoQuery tiene parametro "nro_key" de tipo ftString. Pruebas con el query anterior 1.- Asigno un valor al parámetro de mi sentencia contenida en el adoQuery. Utilizo profiler para ver la sentencia que envía al server que es la siguiente: Demora 25 segundos para darme el resultado. 2.- Abro el " management studio" y tipeo en duro los siguiente: El resultado es menos de un segundo. 3.- Nuevamente en el "management studio" copio la instrucción que capturé con el profiler, pero le hago un pequeño cambio: Cambio el tipo de parametro de nvarchar(8) a varchar(8) El resultado es veloz como en el punto 2. //------------ Por lo que me doy cuenta el Delphi me crea la instrucción y la envía al Sql Server. Mi duda es: Hay forma de indicar en el adoQuery que el parámetro para "nro_key" sea de tipo varchar(8)? Lo que no comprendo es: Mi columna PK es de tipo char(8), por que Delphi crea la instrucción con un parametro de tipo nvarchar(8)? Select original en el adoQuery
Select enviado por delphi al SQL Server
A la espera de sus comentarios, criticas y regalos... Your friend Startkill Lima-Perú |
#3
|
||||
|
||||
Quizá funcione cambiando el tipo de parámetro de ftString a ftFixedChar.
Saludos. |
#4
|
||||
|
||||
Hola Al González
Gracias por responder... Hice el cambio ftString por ftFixedChar, en modo diseño la activo la adoQuery y la sentencia es óptima para las búsquedas
Pero cuando compilo y lo ejecuto, nuevamente la sentencia es con nvarchar(8)
Tanto en el adoQuery y en ClientDataset me percaté que el tipo de dato del parámetro sea ftFixedChar. Y solo, para salir de la duda hice pruebas de activar adoQuery y ClientDatSet en modo diseño y en el profiler se aprecia que usa char(8) En resumen: Aun estoy "mali-muerto" con esta búsqueda Your friend StartKill Lima-Perú |
#5
|
||||
|
||||
¿Te refieres a que en tiempo de diseño genera internamente una instrucción diferente a la que genera en tiempo de ejecución? Eso sí está MUY interesante.
|
#6
|
||||
|
||||
Hola Al González.
Eso exactamente, son diferentes las instrucciones en tiempo de diseño y de ejecución. Para solucionar este problema de búsqueda en el adoQuery armo de forma dinámica el query, es decir ya no manejo parametro con adoQuery (si está mal la instrucción, la estoy haciendo de memoria, pero la idea es esa..)
Controlo que editKey no sea mas de 8 caracteres, que solo sean números... por la injeciones. Al final me quedó el sabor amargo de este inconveniente? Ss. StartKill //--------- |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Parametro null ClientDataSet | Rockin | MS SQL Server | 2 | 29-06-2011 09:34:15 |
Error en Coalesce de un Parámetro tipo Int64 | gluglu | Firebird e Interbase | 42 | 17-06-2011 02:47:15 |
Método tem parametro do tipo sysint | Paulao | Varios | 2 | 16-09-2010 21:20:15 |
Parametro a todos los objetos de un tipo | amadis | OOP | 1 | 06-10-2007 17:46:47 |
Parametro Tipo BIGINT Stored Procedure | hibero | Firebird e Interbase | 5 | 13-04-2004 19:49:31 |
|