Ver Mensaje Individual
  #1  
Antiguo 19-07-2011
NeWsP NeWsP is offline
Miembro
 
Registrado: oct 2003
Ubicación: Barcelona
Posts: 57
Reputación: 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