Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Como Guardar en Tablas DBase? (https://www.clubdelphi.com/foros/showthread.php?t=5943)

nefy 11-12-2003 20:43:31

Como Guardar en Tablas DBase?
 
Hola amigos un problema mas, cuando doy de alta un registro con un sistema que estoy creando en delphi 6 no lo busca por numero, ni muestra el registro cuando estoy navegando en la tabla con el DBNavigator, solo busca el registro por el campo nombre mientras no lo busca por el numero consecutivo.
La verdad no se porque

Gracias al que pueda echarme una mano en esto.

Nota: Estoy usando lo clasico:
DBEdits
DBNavigator
para ello

Las tablas son de DBase III y IV creadas en un sistema de Clipper creado hace 10 años

marcoszorrilla 12-12-2003 07:54:37

Tendrías que explicar mejor como buscas por número...., para empezar las tablas de Clipper utilizan índices del tipo .NTX, que no son soportados por el BDE, por lo tanto tienes que tener en cuenta que los índices no serán mantenidos, ni actualizados, para las búsquedas podrías utilizar Locate, que no necesita índices, aunque si los tiene los utiliza.

Si nos muestras el código que utilizas, quizás te podamos ayudar de manera mas explicita.

Un Saludo.

nefy 13-12-2003 16:24:47

El codigo que utilicé primero es el siguiente:

DM.TApz.IndexName:='emp_num';
DM.TApz.Setkey;
if not DM.TApz.FindKey([edit1.Text]) then showmessage('Registro inexistente');

Pero no me funciono asi que use el locate de la siguiente forma:

DM.TApz.Locate('num',edit1.Text,[]);

El punto es que en los registros que yo doy de alta me repite la clave de control , pues yo la inserto con codigo aumentando 1 al numero de la clave del ultimo registro, pero si inserto 3 registros el sistema sigue tomando como ultimo registro el ultimo de los que venian con la tabla original de clipper. Espero haber sabido explicarme sino dime y tratare de explicarte las dudas que no haya sabido explicarte.

GRACIAS

marcoszorrilla 13-12-2003 16:59:48

Con tablas Dbase debes de utilizar GoToKey
The following code uses the EditKey and GotoKey methods to move to a particular record on Table1. The actual field values are not changed when making the assignments because of the call to EditKey.

with Table1 do

begin
EditKey;
FieldByName('State').AsString := 'CA';
FieldByName('City').AsString := 'Santa Barbara';
GotoKey;

end;

Un Saludo.

nefy 13-12-2003 17:18:36

Oye marcos lo hice y trabaja igual que los metodos anteriores es decir, buscs los registros que vienen del sistema antiguo mientras los nuevos no. Aqui esta el codigo como lo hicé:

with DM.TApz do
begin

IndexFieldNames:='Num';
EditKey;
FieldByName('Num').AsInteger:=StrToInt(Edit1.Text);
GotoKey;

end;

Nota: El problema no creo que sea el guardar, porque abrí la tabla en el Database Desktop y los registros si los tiene la tabla.
La verdad no veo el problema
:confused:

marcoszorrilla 13-12-2003 17:25:53

Para grabar los registros, puesto que creo que ese es tu problema.

En el Botón que tengas para grabar:
MiTabla.Post;

y en el evento AfterPost del Ttable:

MiTabla.FlushBuffers;

Un Saludo.

nefy 13-12-2003 17:31:41

Perdona Marcos pero aun no lo hace ni con el FlushBuffers, Que podre hacer?
Caray
:(

marcoszorrilla 13-12-2003 17:38:16

Pónme el código completo con el que das las altas, pues ahí tiene que estar el problema.

Un Saludo.

nefy 13-12-2003 17:46:49

Inserto y guardo con un dbnavigator pero en los eventos tengo esto, espero te srva:

procedure TDM.TApzBeforeInsert(DataSet: TDataSet);
begin
TApz.IndexName:='emp_num';
TApz.Last;
a:=DM.TApz.Fields[0].AsInteger;
end;

procedure TDM.TApzAfterPost(DataSet: TDataSet);
begin
TApz.FlushBuffers;
end;

procedure TDM.TApzAfterInsert(DataSet: TDataSet);
begin
DM.TApz.Fields[0].AsInteger:=a+1;
end;

marcoszorrilla 13-12-2003 18:01:50

Prueba a colocar este código en el evento OnNewRecord del Ttable.

Código:

TApz.IndexName:='emp_num';
TApz.Last;
a:=DM.TApz.Fields[0].AsInteger;

A parte de esto te recomiendo conectar una rejilla, asi verás cuando ejecutas el método Last del Ttable, si verdaderamente va al último registro grabado.

Un Saludo.

nefy 13-12-2003 18:42:17

Puse la rejilla y si se va al ultimo registro pero con el codigo de OnNewRecord hace que se quede en el ultimo registro y no inserta otro para guardarlo. Le quite el codigo del evento NewRecord, y sigue igual me guarda el registro, pero no lo encuentra por numero sino por el nombre; y en la rejilla si me desplazo hasta el ultimo tampoco lo muestra solo que haga la busqueda por nombre. Ademas al indexar los registros por numero y doy clic al dbnavigator para ir al ultimo no me envia al que inserte, aunque por su numero es el ultimo sino que tengo que hacer la busqueda por nombre.

Como ves ahora que puedo hacer para ayudarte y me puedas ayudar. O que me recomiendas que pueda hacer?
:(

nefy 15-12-2003 17:28:45

Hola compañeros ya encontre el problema que me evitaba hacer las busquedas de los registros que yo insertaba. Esta era la situacion:

Yo construi con el Database Desktop indices nuevos para las tablas de Dbase, y como es logico para el campo NUM que es el que lleva el numero de control de cada uno de los registros lo cree con la cualidad de ser unico, pero sucede que de esta forma no me permitia el indice buscar por numero los nuevos registros ademas de que siempre tomaba como ultimo registro el ultimo de los registro originales de las tablas de Clipper. Asi que lo que tuve que hacer es deseleccionar la casilla Unique del consructor de indices para tablas Dbase del Database Desktop. Asi de esta manera todo trabaja como si fueran unas clasicas tablas Paradox.

Si no me explique y les quedo alguna duda mi correo es

[email protected]

GRACIAS MARCOS POR TU INTERES Y AYUDA PRESTADA

Saludos :p


La franja horaria es GMT +2. Ahora son las 14:01:50.

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