Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   problemas con tablas (https://www.clubdelphi.com/foros/showthread.php?t=44050)

anubis 27-05-2007 08:30:08

problemas con tablas
 
Hola. Yo sigo liado con el delphi pero sigo teniendo problemas.
Tengo la aplicacion ya hecha pero tengo problemas con las tablas, proque hasta ahora estaba guardando las cosas en array, ahora tengo el problema de guardarlas en tablas.
Tengo creadas varias tablas con sus datasources, tables, y leyendo y leyendo me he liado, estaba con la cara oculta de delphi 4, pero no me aclaro con las cosas basicas.

Por lo que se y me ha apuntado roman, la lectura de un registro es facil:
Código Delphi [-]
{ Copiamos el valor del campo 'nombre' en el cuadro de edición Edit1 }
Edit1.Text := Table1.FieldByName('nombre').AsString;
y viceversa.
Pero se que hay cosas basicas usando la propiedad state pero no se usarla.

Si me podriais indicar brevemente estos parametros os lo agradeceria:
para posicionarse en un registro y modificarlo,
para añadir un nuevo registro es con table1.insert
y para borrarlo con table1.delete, modificarlo seria con table1.update;
pero tengo el problema es como funciona esto.
Bueno no quiero aburriros, seria para abrir, modificar, añadir y borrar registros, los parametros basicos y si hay que cerrar o no el archivo porque me sale que me dice que esta siendo usado por otro usuario.

o si bien, me recomendais algun libro que venga bien explicado desde lo basico el tratamiento de tablas.

muchas gracias por vuestra paciencia

Lepe 27-05-2007 19:53:40

Lo que te voy a decir, es otra filosofía de la usada por roman, con eso quiero decirte que "es igual pero no es lo mismo" :D

- Sitúa un TDBNavigator en tu ventana, asigna en el inspector de objeto su datasource.
- Coloca un DBEdit en tu ventana, asigna el Datasource y el FieldName.
Repite este paso para cada campo que tengas en la tabla.

Ahora no tienes más que ejecutar la aplicación y usar los botones del TDBNavigator para crear/eliminar/moverte/guardar cambios/cancelar cambios de tu tabla.

Saludos

anubis 27-05-2007 20:10:01

Se agradece lepe, ese metodo ya lo habia probado, la pregunta es como se puede hacer usando otro metodo sin usar el tbnavigator, haciendolo a traves de codigo, tipo table1.open, table1.insert...

gracias

marcoszorrilla 27-05-2007 20:15:38

Cita:

modificarlo seria con table1.update;
Código Delphi [-]
Table1.Edit;

Lo mejor es que hagas lo que dice Lepe colocar un DbNavigator.

Pero si quieres poner botones propios y el código correspondiente también puedes.
Código Delphi [-]
Table1.First;
Table1.Prior;
Table1.Next;
Table1.Last;
Table1.Delete;
Table1.Edit;
Table1.Append;
Table1.Cancel;
Table1.Refresh;
Seguramente se me habrá olvidado alguno lo he puesto de memoria pero ese sería el código de los botones aproximadante.

Un Saludo.

anubis 28-05-2007 06:11:03

gracias, a eso me referia, son cosas basicas que puedes asignarlas a botones sin tener que usar un navigator.
Lo unico que me falta es saber si hay alguna forma de asignarle a la tabla el estado, porque he intentado hacer table1.state pero me pide parametros y no se si es conveniente asignarle parametros en funcion de lo que quiero hacer o simplemente vale con lo que me has puesto de table1.edit, table1.append,...

gracias

marcoszorrilla 28-05-2007 08:02:34

El estado de un Dataset no puede cambiarse puesto que la variable State, indica cual es su estado.

Es para consultar el estado de un Dataset en un momento dado.

Si haces:
Código Delphi [-]
Table1.Append; //estará en "Insert"
etc.

Cita:

dsInactive Dataset is closed, so its data is unavailable.
dsBrowse Data can be viewed, but not changed. This is the default state of an open dataset.
dsEdit Active record can be modified.
dsInsert The active record is a newly inserted buffer that has not been posted. This record can be modified and then either posted or discarded.
dsSetKey TTable and TClientDataSet only. Record searching is enabled, or a SetRange operation is under way. A restricted set of data can be viewed, and no data can be edited or inserted.

dsCalcFields An OnCalcFields event is in progress. Noncalculated fields cannot be edited, and new records cannot be inserted.
dsFilter An OnFilterRecord event is in progress. A restricted set of data can be viewed. No data can edited or inserted.
dsNewValue Temporary state used internally to indicate that a field component’s NewValue property is being accessed.
dsOldValue Temporary state used internally to indicate that a field component’s OldValue property is being accessed.

dsCurValue Temporary state used internally to indicate that a field component’s CurValue property is being accessed.
dsBlockRead Data-aware controls are not updated and events are not triggered when the cursor moves (Next is called).
dsInternalCalc Temporary state used internally to indicate that values need to be calculated for a field that has a FieldKind of fkInternalCalc.
dsOpening DataSet is in the process of opening but has not finished. This state occurs when the dataset is opened for asynchronous fetching.

Un Saludo.

anubis 29-05-2007 04:34:08

gracias por las respuestas.
Pregunta: si tengo varios forms-units, y en uno de ellos tengo un table1 y un datasource, puedo llamarlos desde otros forms al estilo form2.table1.open ?, porque me esta dando error.

cuando meto en un form un datasource y una table y lo quiero usar en otro form, me deja teclear form2.table1.open; pero al ejecutar el programa y abrir la tabla me dice que violacion de memoria. cuando lo uso desde el mismo form no hay problema, se necesita crear los mismos dataset y table en el form que se esta usando aunque ya se hayan colocado los mismos en otro form?.

gracias

Faust 29-05-2007 05:03:11

Usa un Datamodule
 
Amigo Anubis, te recomiendo un DataModule para concentrar todos tus objetos de bases de datos y añádirlo en cualquier form o módulo *.pas en que lo necesites y desde ahí ya puedes accesarlo en todos los forms que quieras.

anubis 29-05-2007 23:30:59

gracias por la sugerencia, estuve revisando sobre el datamodule, funciona como un form o una unit normal, entonces ahi, como dices, puedo colocar todo lo qu equiera, y puedo usarlo en cualquer form sin tener esos problemas de llamar a una tabla de otra unit-form?.

gracias


p.d; o como funciona a grandes rasgos un datamodule, porque en el help no me entero

Lepe 29-05-2007 23:39:21

El Datamodule es... simplemente lo que ves :D Un cajón blanco donde poner objetos no visuales. Es un componente que se crea y se destruye igual que cualquier Form, pero nunca lo verá el usuario.

Puedes tener tantos Datamodules como quieras, uno para las consultas de los informes, otro para las tablas, etc. Separa conceptualmente los objetos que contiene.

Si usas un solo Datamodule para todo, encontrar una consulta o una tabla es tedioso. Si usas un Datamodule para la ventana de Clientes, otro para la ventana facturas, etc... encontrarás las cosas más rápido y será todo más claro.

Saludos


La franja horaria es GMT +2. Ahora son las 18:41:20.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi