No das informacion suficiente. No sabemos que son todos los componentes de acceso a datos que estas usando: qFecha, qVentas, etc. Sobre estos componenes invocas al metodo Open y no sabemos si estaras ejecutando un SQL
Ademas, tu codigo tiene varios problemas. En ningun lado chequeas por errores; el resumen es:
Código Delphi
[-]
Conexion.StartTransaction;
try
codigo
finally
Conexion.Commit;
end;
Eso es un problema grave porque si se graba algun dato (ocurre un .Post) y luego mas adelante se produce un error (sobre todo con tanta conversion de string a otro tipo), se ejecuta el bloque
finally, es decir, se ejecuta el Commit y te queda la informacion a medias (inconsistente)
Te sugiero que lo hagas de esta manera:
Código Delphi
[-]
Conexion.StartTransaction;
try
codigo
fin del codigo
Connection.Commit;
except
Conexion.Rollback;
end;
Por otra parte, el codigo es muy complicado de leer: with entre 2 o 3 objetos, luego otro with anidado. Es imposible saber que objeto recibe los mensajes
Ademas, el modo que usas para asignar los valores a cada campo es peligroso, ya que estas asignando a un
Variant
Código Delphi
[-]
fmodulo.qVentas['idcliente']
Cuando en realidad el Variant se deberia usar si "no se el tipo del dato", pero aca los conoces perfectamente por lo que va a ser mas seguro, rapido y facil de entender si lo cambias por esto:
Código Delphi
[-]
fmodulo.qVentas.FieldByName('idcliente').AsInteger := VariableInteger;
...
fmodulo.qVentas.FieldByName('algun_campo').AsString := VariableString;
fmodulo.qVentas.FieldByName('algun_campo').AsFloat := VariableSingle/Double/Extended;
fmodulo.qVentas.FieldByName('algun_campo').AsCurrency := VariableCurrency;
etc
...