Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-07-2011
NeWsP NeWsP is offline
Miembro
 
Registrado: oct 2003
Ubicación: Barcelona
Posts: 57
Poder: 21
NeWsP Va por buen camino
Problema al pasar Query a DBF

Buenas noches,

Tengo un pequeño problema que me esta volviendo loco... os comento a ver si me podeis echar un cable ( aunque sea para colgarme con el )

Tengo un query con el siguiente contenido:

Código SQL [-]
SELECT NNUMPRE,SUM((NPREUNIT * NCANPED)*(1-NDTO/100)) AS TOTAL FROM preclil.dbf GROUP BY NNUMPRE

NNUMPRE es Integer ( seria el numero de pedido por ejemplo.
TOTAL es el calculo de campos numeric de 17 enteros y 6 decimales.


Si muestro el query en una Grid va perfecto.

El problema es que necesito grabar ese query en una tabla DBF nueva, lo intento de la siguiente forma:

Código Delphi [-]
begin
query1.SQL.Clear; // Limpiamos el Query Principal
query1.SQL.Add(Edit1.text); // El contenido de Edit1.Text es el que pone arriba (EL SQL)
query1.Active:=True; // Activamos la tabla
query2.DatabaseName:='c:\'; // Configuramos query para introducir datos
query2.SQL.Clear; // Limpito limpito
query2.SQL.Add('INSERT INTO temp.dbf (NNUMPRE,TOTAL) VALUES(:NUMERP,:TOTAL)');
while not query1.eof do  //mientras no acabe el query principal
begin
query2.ParamByName('NUMERP').AsInteger:=query1.FieldByName('NNUMPRE').AsInteger;//Pasamos el valor del query1 al query2
query2.ParamByName('TOTAL').AsInteger:=query1.FieldByName('TOTAL').AsInteger;
query2.ExecSQL;
query1.Next;   // Pasamos al siguiente regristro
end;

Si lo hago así me dice que los tipos de datos no coinciden

Supuestamente en el DBF son NUMERIC, y yo los puse como integer, pero vamos he probado floats para el total, y todo lo que se me ha ocurrido y nada...

Despues he probado de esta forma:

Código Delphi [-]
begin
query1.SQL.Clear; // Limpiamos el Query Principal
query1.SQL.Add(Edit1.text); // El contenido de Edit1.Text es el que pone arriba (EL SQL)
query1.Active:=True; // Activamos la tabla
query2.DatabaseName:='c:\'; // Configuramos query para introducir datos
while not query1.eof do  //mientras no acabe el query principal
begin
query2.SQL.Clear; // Limpito limpito
var1:=query1.FieldByName('NNUMPRE').AsInteger;
var2:=query1.FieldByName('TOTAL').AsFloat;
query2.SQL.Add('INSERT INTO temp.dbf (NNUMPRE,TOTAL) VALUES("'+inttostr(var1)+'","'+floattostr(var2)+'")');
query2.ExecSQL;
query1.Next;   // Pasamos al siguiente regristro
end;

Y asi funciona hasta que encuentra algun decimal en la tabla, que dice que no coinciden los tipos.

Espero que me podáis ayudar, por que ya no se me ocurre nada mas...

Muchas Gracias por adelantado.

Última edición por NeWsP fecha: 19-07-2011 a las 21:20:29. Razón: Lo que esta en cursiva es lo que he añadido, para aclarar el tipo de campos
Responder Con Cita
  #2  
Antiguo 19-07-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
y si cambias la forma de agregar los registros?

Código Delphi [-]
begin
query1.SQL.Clear; // Limpiamos el Query Principal
query1.SQL.Add(Edit1.text); // El contenido de Edit1.Text es el que pone arriba (EL SQL)
query1.Active:=True; // Activamos la tabla
query2.DatabaseName:='c:\'; // Configuramos query para introducir datos
while not query1.eof do  //mientras no acabe el query principal
begin
tblaAgregar.Append;
tblaAgregarnNumpre.value := query1nNumpre.value
tblaAgregarnTotal.value := query1Total.value
tblaAgregar.post
query1.Next;   // Pasamos al siguiente regristro
end;
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 19-07-2011
NeWsP NeWsP is offline
Miembro
 
Registrado: oct 2003
Ubicación: Barcelona
Posts: 57
Poder: 21
NeWsP Va por buen camino
Hola Oscarac,

de esta forma funcionar perfecto:

Código Delphi [-]
begin
query1.SQL.Clear; // Limpiamos el Query Principal
query1.SQL.Add(Edit1.text); // El contenido de Edit1.Text es el que pone arriba (EL SQL)
query1.Active:=True; // Activamos la tabla
query2.DatabaseName:='c:\'; // Configuramos query para introducir datos
query2.SQL.Clear; // Limpito limpito
query2.SQL.Add('INSERT INTO temp.dbf (NNUMPRE,TOTAL) VALUES(:NUMERP,:TOTAL)');
while not query1.eof do  //mientras no acabe el query principal
begin
query2.ParamByName('NUMERP').Value:=query1.FieldByName('NNUMPRE').Value;//Pasamos el valor del query1 al query2
query2.ParamByName('TOTAL').Value:=query1.FieldByName('TOTAL').value;

query2.ExecSQL;
query1.Next;   // Pasamos al siguiente regristro
end;

Mirando tu codigo he visto que se podia usar la opcion Value,yo siempre la he utilizado marcando un tipo.

normalmente los ingresos en tablas los hago asi, usando un

Código Delphi [-]
Try
Query2.execsql
Finally
Query1.Next

De todos modos me podrías comentar cual es la ventaja usando Append?
Muchisimas gracias
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
Como pasar los datos de un query a un ClientDataSet oscarac OOP 1 08-07-2011 19:52:24
Pasar datos de una Query a una tabla Vanis SQL 3 09-01-2007 02:29:41
pasar de un query a un TTable Pskotler C++ Builder 4 13-08-2006 11:29:52
Pasar Registros de Query a una Tabla JamesBond_Mx Conexión con bases de datos 16 04-05-2004 16:08:38
Pasar Query al cristal frankyfch Impresión 2 01-10-2003 23:59:09


La franja horaria es GMT +2. Ahora son las 04:56:58.


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