Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-12-2003
Avatar de nefy
nefy nefy is offline
No confirmado
 
Registrado: nov 2003
Posts: 171
Poder: 0
nefy Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 12-12-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 13-12-2003
Avatar de nefy
nefy nefy is offline
No confirmado
 
Registrado: nov 2003
Posts: 171
Poder: 0
nefy Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 13-12-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 13-12-2003
Avatar de nefy
nefy nefy is offline
No confirmado
 
Registrado: nov 2003
Posts: 171
Poder: 0
nefy Va por buen camino
Unhappy

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
Responder Con Cita
  #6  
Antiguo 13-12-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #7  
Antiguo 13-12-2003
Avatar de nefy
nefy nefy is offline
No confirmado
 
Registrado: nov 2003
Posts: 171
Poder: 0
nefy Va por buen camino
Perdona Marcos pero aun no lo hace ni con el FlushBuffers, Que podre hacer?
Caray
Responder Con Cita
  #8  
Antiguo 13-12-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Pónme el código completo con el que das las altas, pues ahí tiene que estar el problema.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #9  
Antiguo 13-12-2003
Avatar de nefy
nefy nefy is offline
No confirmado
 
Registrado: nov 2003
Posts: 171
Poder: 0
nefy Va por buen camino
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;
Responder Con Cita
  #10  
Antiguo 13-12-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #11  
Antiguo 13-12-2003
Avatar de nefy
nefy nefy is offline
No confirmado
 
Registrado: nov 2003
Posts: 171
Poder: 0
nefy Va por buen camino
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?
Responder Con Cita
  #12  
Antiguo 15-12-2003
Avatar de nefy
nefy nefy is offline
No confirmado
 
Registrado: nov 2003
Posts: 171
Poder: 0
nefy Va por buen camino
Thumbs up

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

Lauraamor_11@hotmail.com

GRACIAS MARCOS POR TU INTERES Y AYUDA PRESTADA

Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 00:34:47.


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
Copyright 1996-2007 Club Delphi