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 Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-03-2005
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile Cazando a la liebre

¡Buen día a todos!

Dakar:

Pregunta 2. ¿Ocurre lo mismo si en lugar de utilizar un componente TSQLClientDataSet, utilizas un TSQLQuery o TSQLDataSet?

También puede ser que algún manejador de evento u otro tipo de establecimiento le esté metiendo ruido a la consulta. Prueba aislando por completo la consulta en una aplicación limpia (nueva), dónde sólo tengas los componentes esenciales involucrados en este caso.

Seguimos en contacto.

Al González.
Responder Con Cita
  #2  
Antiguo 18-03-2005
dakar dakar is offline
Registrado
 
Registrado: mar 2005
Posts: 7
Poder: 0
dakar Va por buen camino
Hola a todos,

Al Gonzalez:
Me pareció una buena idea lo que planteaste, de hecho lo tenía pendiente,
pero por problemas de tiempo no lo había probado; aunque en realidad no
me tomó nada de tiempo hacer ésta prueba que creo debió ser la primera
que tendría que haber hecho. OK, traspasé la misma consulta a los tres
componentes y mostré los datos de los tres al mismo tiempo; el código es
el siguiente;
[ delphi ]
procedure TForm1.Button1Click(Sender: TObject);
var
cSql : string;
begin
SQLQuery.SQL.Clear;

cSql := 'SELECT vendedor, Sum(devol) devol, Sum(monto) monto'+
' FROM Mov_NOTA GROUP BY vendedor';

SQLDSet.CommandText := cSql;
SQLClDSet.CommandText := cSql;
SQLQuery.SQL.Add(cSql);

SQLDSet.open;
SQLClDSet.Open;
SQLQuery.Open;
while not SQLDSet.Eof do
begin
ShowMessage('Devol SQLDSet: [' + SQLDSet.fieldbyname('devol').AsString+']'+
' - Devol SQLClDSet : [' + SQLClDSet.fieldbyname('devol').AsString+']'+
' - Devol SQLQuery : [' + SQLQuery.fieldbyname('devol').AsString+']');
SQLDSet.Next;
SQLClDSet.Next;
SQLQuery.Next;
end;
SQLDSet.Close;
SQLClDSet.Close;
SQLQuery.Close;
end;
[/delphi ]

Ojalá se vea bien el código ya que soy nuevo en el foro y estoy usando
por primera vez las etiquetas "[delphi]" (cualquier problema lo escribiré
nuevamente).
Bueno pongo aquí también mi ventana de diseño para despejar cualquier
duda:


El resultado de la prueba de la sumatoria del campo devol que debe mostrar
"25000" es el siguiente (los resultados está entre paréntecis cuadrados para
visualizarlos mejor):


, sin palabras.
Responder Con Cita
  #3  
Antiguo 18-03-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
dakar:

Para que funcionen bien las etiquetas [delphi] debes omitir los espacios entre el nombre de la etiqueta y los paréntesis cuadrados.

En cuanto a tu problema, la versión 1.5.x de FireBird es bastante reciente así que pudiera ser que el driver de dbExpress no funcione correctamente con ella.

Upscene tiene un driver para dbExpress que dicen funciona para Delphi 6 y 7 y FireBird 1 y 1.5.

No es gratutito pero puedes probar su versión trial para al menos determinar si es un problema con el driver que actualmente uses.

En alguna ocasión tuve problemas también extraños al acceder a MySql con DBExpress y se corrigieron al cambiar el driver.

// Saludos
Responder Con Cita
  #4  
Antiguo 18-03-2005
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile Cazando a la liebre

¡Buen día a todos!

Después de ver los extraños resultados, coincido con Román en que el problema puede estar en el controlador (driver) utilizado, o bien en algún defecto de la clase ancestral común TCustomSQLDataSet.

Sería interesante hacer una depuración profunda del proceso para detectar en qué momento se añade el símbolo de igual ("=") a la cadena de resultado.

Pregunta 3. ¿Cuál es la clase del componente campo Devol? Para saberlo puedes utilizar la propiedad ClassName tal y como utilizas AsString.

Pregunta 4. ¿Ocurre lo mismo si usas campos persistentes? (creados en tiempo de diseño dando doble clic sobre el componente y agregando los elementos en el editor de campos)

Pregunta 5. ¿Qué valores te devuelven las propiedades Value, AsInteger, AsFloat, AsVariant? (quizá el problema está en la implementación interna de AsString)

Pregunta 6. ¿Qué valores arroja el campo si en la sentencia SQL utilizas otro alias que no sea "devol"?

Pregunta 7. ¿Qué ocurre si en la sentencia SQL aplicas una función diferente a Sum sobre el campo Devol?

Seguimos en contacto.

Al González. .
Cursos Delphi a distancia
Responder Con Cita
  #5  
Antiguo 23-03-2005
dakar dakar is offline
Registrado
 
Registrado: mar 2005
Posts: 7
Poder: 0
dakar Va por buen camino
Hola a todos, esperaba responder antes, pero no he tenido tiempo.

Bueno, a continuación paso a responder las preguntas planteadas por Al Gonzalez:

3- la clase del componente devol es TFMTBCDField.
4- con los campos persistentes ocurre lo mismo .
5- devuelven excepctions del Delphi, a diferencia del AsVariant que me devuelve el
mismo valor de AsString.
6- Esto ya lo había intentado y continua el problema independiente del nombre
del campo que se le de.
7- A ver, aquí me voy a detener un poquito más; ejecuté la consulta aplicando un
AVG al campo Devol y para sorpresa mia me mostró bien el valor para el único
Vendedor que tiene valor:


La cantidad de registros del venedor son 24 por lo que 25000/24 = 1041 (truncando
los decimales). Como el resultado lo mostró bien, agrege un valor de 15000 al
campo devol correspondiente a un registro de otro vendedor, ejecuté nuevamente la
consulta y efectivamente el primer valor continuaba mostrandolo bien, pero el nuevo
valor generado lo muestra así:


El segundo vendedor tiene 17 registros por lo que 15000/17=882, pero como Uds.
pueden ver, me lo muestra como 88?.

En vista de todas las pruebas realizadas y según lo conversado yo también
creo que lo más lógico es que el problema esté en el driver como lo dice
Roman con lo cual coincide también Al Gonzalez. Por el momento, para consultas
de éste tipo, me valgo de componentes InterBase (IBDatabase, IBTable...)
que hasta el momento me funcionan bien con ese tipo de consultas.
Recuerden que la idea de quere usar los componentes DbExpress es que,
en el posible e inminente cambio de Base de Datos, las modificaciones al
código y diseño que me correspondan realizar sean mínimos.

Gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 07:04:15.


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