PDA

Ver la Versión Completa : error al guardar


megaredoxk
14-01-2008, 16:06:27
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

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
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:

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
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
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:

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

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 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 (http://iesperemaria.cult.gva.es/moodledata/6/Tema12/HerramientasBD.htm)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:
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
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:)