Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Error al Insertar en una Tabla (https://www.clubdelphi.com/foros/showthread.php?t=74189)

river_1 03-06-2011 23:12:38

Error al Insertar en una Tabla
 
Buenas a todos,tengo una situacion bien rara al insertar registros en una tabla,dejenme les explico de manera rapida, es un sistema de punto de venta que hice donde tengo una tabla temporal donde guardo las notas, estas notas tienen una columna que se llama comentarios y otra se llama SUB.
En la tabla temporal se guarda muy bien estos campos en su respectiva nota de venta, el problema viene con el corte , es decir, cuando paso la tabla temporal a donde se guardan todos los cortes, si la primer nota de venta tiene valores en cualquiera de las 2 columnas los otros registros les replica el mismo valor en dicha columna haciendo que las notas posteriores guarden ese valor.
Le pongo el codigo delphi para que vean como le hago y ver si no se me esta escapando algo:
Código Delphi [-]
//Se insertan los encabezados de las Notas a la tabla de encabezados de la historia
      consulta3:='Select * From TempVentaHeader';
      QryInsertaHeader.SQL.Clear;
      QryInsertaHeader.SQL.ADD(consulta3);
      QryInsertaHeader.Open;
      QryInsertaHeader.First;
      while not QryInsertaHeader.Eof do
       begin
        TblHeader.Insert;
        TblHeader.FieldByName('Noventa').AsInteger:=QryInsertaHeaderNVENTA.Value;
        tblheader.FieldByName('Fecha').AsDateTime:=QryInsertaHeaderFECHA.Value;
        tblheader.FieldByName('TOTAL').AsFloat:=QryInsertaHeaderTOTAL.Value;
        tblheader.FieldByName('UTILIDAD').AsFloat:=QryInsertaHeaderUTILIDAD.Value;
        tblheader.FieldByName('costo').AsFloat:=QryInsertaHeaderCOSTO.Value;
        tblheader.FieldByName('pago').AsFloat:=QryInsertaHeaderPAGO.Value;
        tblheader.FieldByName('Turno').AsString:=QryInsertaHeaderTURNO.Value;
        tblheader.FieldByName('Cliente').AsString:='Venta al Publico en General';
        tblheader.FieldByName('Cambio').AsFloat:=0;
        tblheader.FieldByName('NOMBRE').AsString:=FRMPASSCORTE.usuario;
        tblheader.FieldByName('TOTALDLLS').AsFloat:=QryInsertaHeaderTOTALDLLS.Value;
        tblheader.FieldByName('PAGODLLS').AsFloat:=QryInsertaHeaderPAGODLLS.Value;
        tblheader.FieldByName('CAMBIO').AsFloat:=QryInsertaHeaderCAMBIODLLS.Value;
        tblheader.FieldByName('CANCELADA').AsString:=QryInsertaHeaderCANCELADA.Value;
        tblheader.FieldByName('Comentarios').AsString:=QryInsertaHeaderCOMENTARIOS.Value;
        tblheader.FieldByName('SUB').AsString:=QryInsertaHeaderSUB.Value;
        tblheader.Post;
        QryInsertaHeader.Next
      end;


Lo raro es que ejecuto el programa linea x linea y el valor me indica en blanco para los registro que no tienen valor pero al abrir la tabla ya tienen valor esas columnas.
Gracias por sus respuestas...

martinartaza 04-06-2011 16:47:44

Siempre que tengas problemas con nulos usas FielByName
 
El problema debe ser por los valores nulos proba lo siguiente.

Código Delphi [-]
//Se insertan los encabezados de las Notas a la tabla de encabezados de la historia
      consulta3:='Select * From TempVentaHeader';
      QryInsertaHeader.SQL.Clear;
      QryInsertaHeader.SQL.ADD(consulta3);
      QryInsertaHeader.Open;
      QryInsertaHeader.First;
      while not QryInsertaHeader.Eof do
       begin
        TblHeader.Insert;
        TblHeader.FieldByName('Noventa').AsInteger:=QryInsertaHeader.FieldByName('NVENTA').asinteger;
        tblheader.FieldByName('Fecha').AsDateTime:=QryInsertaHeader.FieldByName('FECHA').asdatetime;
  ........................................
        tblheader.FieldByName('SUB').AsString:=QryInsertaHeader.FieldByName('SUB').asstring;
        tblheader.Post;
        QryInsertaHeader.Next
      end;

Bueno, proba eso y contadnos como te fue.

martinartaza 06-06-2011 14:27:35

y que onda, solucionaste
 
y que onda, solucionaste

river_1 08-06-2011 01:27:07

Una disculpa pero me llene de trabajo, mira lo que me comentaste me llevo a ver cual era el problema , de hecho con un query no funciona el Fieldbyname sino la funcion fieldvalues, las use y en el momento que llego a un registro que no tenia valor me marco un error que no se podia insertar un valor nulo , es decir, el cambio que me dijiste no fue la solucion pero me ayudo a saber cual era el error cosa que el codigo original no me lo indicaba y para subsanar ese error el delphi tomaba el ultimo valor y me lo repetia para que no quedar en blanco o sea que me queria ayudar el Delphi pero a la vez me perjudicaba :o.

En fin lo solucione dandole un valor por default al campo desde que se inserta en la tabla temporal y que no este en blanco.
Gracias...

martinartaza 08-06-2011 03:31:13

No gracias a vos.
 
No gracias a vos por entrar en comentar cual fue la solución que usaste, podrías postear el código el día de mañana alguien le va a pasar lo mismo que a vos y le resultara más fácil, si pones lo que hiciste.

corrijo: ¿No anda con un query FieldByname?, que componentes usas, que version de delphi usas?, yo siempre uso query y fieldbyname

river_1 20-06-2011 01:43:39

De hecho el codigo lo deje igual lo unico que hice fue que esos campos al momento de insertar un registro (evento onNewrecord) de la tabla le puse valores por default.
Uso adoquery y delphi 7 , no se si por usar ADO no exista la propiedad Fieldby name por eso solo me pone la propiedad queryvalue.


La franja horaria es GMT +2. Ahora son las 05:37:49.

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