FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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 |
#2
|
||||
|
||||
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:
|
#3
|
||||
|
||||
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 |
#4
|
||||
|
||||
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:
|
#5
|
||||
|
||||
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 |
#6
|
||||
|
||||
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:
|
#7
|
||||
|
||||
Perdona Marcos pero aun no lo hace ni con el FlushBuffers, Que podre hacer?
Caray |
#8
|
||||
|
||||
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:
|
#9
|
||||
|
||||
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; |
#10
|
||||
|
||||
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; Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#11
|
||||
|
||||
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? |
#12
|
||||
|
||||
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 |
|
|
|