Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   error al guardar (https://www.clubdelphi.com/foros/showthread.php?t=52211)

megaredoxk 14-01-2008 16:06:27

error al guardar
 
un saludo muy especial.
tengo un problema con la tabla ingresos,tengo como index el campo fecha pero al guardar el ingreso solo guarda el ultimo ingreso generado y no deja guardado los anteriores:confused:
utilizo Paradox7

Table2.edit;
Table2.FieldByName('Ingreso').AsFloat := StrToFloat(Label3.Caption);
Table2.FieldByName('Fecha').AsDateTime := Date;
Table2.Post;
Table2.Next;

gracias

Caral 14-01-2008 16:10:12

Hola
Código Delphi [-]
Table2.Insert;
Table2.FieldByName('Ingreso').AsFloat := StrToFloat(Label3.Caption);
Table2.FieldByName('Fecha').AsDateTime := Date;
Table2.Post;
Si usas edit editara el campo en donde este.
Si usas insert insertara un nuevo registro.
Tambien se puede usar append.
Saludos

megaredoxk 14-01-2008 16:48:27

me genera un error
 
muchas gracias Caral, pero ahora me sale un error un "Key Violation" por que serà:confused::confused:

Lepe 14-01-2008 17:56:38

Porque has definido un campo como clave primaria (primary Key, pk) e intentas añadir un registro cuya clave primaria ya existe. Es normal que pase esto para no repetir información en la base de datos.

Ya que usas paradox, en cada TTable que uses, en el evento afterpost añade:
Código Delphi [-]
   Dataset.FlushBuffers

"Dataset" es el parámetro que tiene el evento. Flushbuffers (quizás esté mal escrito) fuerza a que se escriba el registro en la Base de datos, si se omite, el registro quedará en caché (casi siempre).

Saludos

megaredoxk 16-01-2008 15:14:27

me genera un error
 
muchas gracias compañero Lepe, perome genera un error "Undeclarade Identifier FlushBuffers":eek: y cuando me dices que lo force el programa no compila:confused::confused: no se ejecuta.

Lepe 16-01-2008 15:40:01

En ese caso, en lugar de usar "Dataset" usa el nombre de tu tabla, por ejemplo:

tblCliente.Flu (a partir de aquí, el code insight de delphi te dirá como se llama el método).

Pero ojo que eso no soluciona para nada el tema de la clave primaria, es solo para forzar la escritura a disco.

Saludos

megaredoxk 17-01-2008 20:41:52

no me gustarìa, pero
 
un placer saludarte compadre Lepe,
de todas formas la aplicación queda como que defectuosa, me gustaría saber como que me recomendaís para esta situación, yo lo que quiero es obtener los ingresos a una fecha determinada:)

Lepe 18-01-2008 00:54:31

Saludos igualmente ;).

Lo primero será crear una clave primaria en la tabla, debe ser un campo que su valor, no se repita jamás en toda la vida del programa.

Cuando no tenemos un campo así (por ejemplo el DNI), se suele añadir uno llamado "ID" de tipo autoinc(remento) que tomará un valor consecutivo por cada registro añadido. De esa forma ya no dará el error de "clave primaria duplicada".

Si vas a buscar por fechas, es aconsejable crear (también en el Database desktop) un índice por ese campo. Así las búsquedas serán rapidísimas.

Si quieres ver los ingresos de un día determinado, tienes varias opciones, desde usar Filter:
Código Delphi [-]
tablaingresos.Filter := 'fecha = ' + FormatDatetime('mm/dd/yyyy', date); 
tablaingresos.Filtered := true; //
He puesto "date" para que muestre los ingresos del día al corriente, pero puedes usar un TDatetimePicker para que el usuario elija la fecha.

Si conectas un DBGrid a esa tabla, verás el resultado cuando se aplique el filtro.

O bien usar un TQuery (personalmente me gusta más), será más flexible.
En el inspector de objetos tendrás que establecer su propiedad Databasename
Código Delphi [-]
query1.sql.text := 'Select ingresos, fecha  from Nombretabla where  fecha between :fini and :ffin';
query1.parambyname('fini').asdate := datetimepicker1.date;
query1.parambyname('ffin').asdate := datetimepicker2.date;
Query1.Open;
También puedes enganchar un DBGrid para ver los resultados más cómodamente.

Saludos

megaredoxk 18-01-2008 01:06:37

compadre Lepe
 
compadre Lepe le digo algo, no soy tan veterano en Delphi, màs bien novato, lo digo porq lo que usted me acaba de explicar se me hace un poco dificil de entender...de todas maneras le agradezco mucho y le pedirìa si es posible algo un poco màs detallado:).

de todo corazòn le agradezco su explicaciòn.

que estes muy bien.

Lepe 18-01-2008 02:12:48

Este link te ayudará para crear la clave primaria, el índice y algunas cosas más.

En cuanto a la búsqueda:
- De la paleta BDE de delphi añade un TQuery a tu ventana.
- En el inspector de objetos, busca su propiedad "Databasename" y añade la ruta hasta tus tablas "C:\miPrograma\mistablas"
- De la paleta "Data Access" añade un DataSource
- En el inspector de objetos, su propiedad Dataset le asignas el Query1.
- Añade un DBGrid de la paleta DataControls
- En su propiedad Datasource, elige el Datasource1 (que acabas de añadir).

Añade dos controles TdateTimePicker (lo siento, de memoria no recuerdo donde están en delphi: Win32 o Aditional)
Coloca un TButton de la paleta Standard, doble clic sobre él y en su evento OnClick añades:
Código Delphi [-]
query1.sql.text := 'Select ingresos, fecha  from **Nombretabla** where  fecha between :fini and :ffin';
query1.parambyname('fini').asdate := datetimepicker1.date;
query1.parambyname('ffin').asdate := datetimepicker2.date;
Query1.Open;

**Nombretabla** será el nombre de tu tabla paradox, por ejemplo, si se llama "ingresos.db", el nombre será "ingresos"

Ahora solo queda pulsar F9 y que todo compile ;).

Saludos

megaredoxk 19-01-2008 00:53:28

gracias compadre Lepe
 
un saludo muy especial compadre Lepe, le agradezco mucho por su explicaciòn y colaboraciòn, enseguida me pondre a trabajar lo que usted me dice.

q este muy bien:)


La franja horaria es GMT +2. Ahora son las 13:25:19.

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