Delphi - ayuda con DBNavigator1, cambiar iconos y no me sobreescriba registro

 
Vista:

ayuda con DBNavigator1, cambiar iconos y no me sobreescriba registro

Publicado por julia (6 intervenciones) el 02/06/2012 01:21:33
hola migos programaodres, necesito su ayuda

estoy aciendo un programita, tengo una base datos hecha en acces base.mdb, tengo delphi 5
la base datos tiene dos tabla de nombre DatosPersonales con 4 campos, nombre, apellido, edad, numero registro, y otra tabla de nombre DatosExtras con 4 campos Nombre1, Apellido1, Domicilio1, NuevoDato1 este no lo uso todavia

* mi programa en delphi, tengo un DataModule1, en el cual esta un ADOConnection1 configurado asi Microsoft.Jet.OLEDB.4.0 y enlazado a la base de datos base.mdb

* en el form1 tengo una ADOTable1 el cual esta conectado al DataModule1.ADOConnection1 y en TableName conectado a la tabla DatosPersonales de la bse de datos base.mdb
En el mismo form1 tengo un DataSource1 conectado al ADOTable1.
tambien tengo 4 DBEdit cadu uno conectados al DataSource1, y en DataField cada DBEdit conectado al respectivo campo de la Base Datos

DBEdit1 nombre
DBEdit2 apellido
DBEdit3 edad
DBEdit4 NumReg

y tambien tengo un DBNavigator1 conectado al DataSource1

Esto me anda bien, puedo cargar la base datos sin problemas, pero.. me di cuenta de que cuando escribo por ejemplo, el mismo valor en el DBEdit4 que seria el campo NumReg d ela base datos, y es la llave `rincipal, me sobreescribe ese dato en el anterior que ya estaba, osea.. lo que busco es que.....
1. no me sobreescriba, me salte un mensage diciendome que ese ya existe, o mejor aun en ese dbedit4 me aparesca el sigueinte numero que corresponde.

2. y... hay alguna manera de cambiar los simbolos que tiene el DBNavigator1, el de suma resta, los triangulitos, hasta seria mejor apra mi poner una palabra indicadora..

gracias a todos por sus posibles respeustas o ams pregutnas..
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

ayuda con DBNavigator1, cambiar iconos y no me sobreescriba registro

Publicado por otro error me aparece (6 intervenciones) el 02/06/2012 01:55:55
haora probando, veo que luego de cargar varios ragistros, cierro el programita, lo abro de nuevo y cargo nuevo un registro mas, me sobreescribe el ultimo registro cargado anteriormente.

El ultimo registro que cargo es

NumReg 100 (es la llave principal en base abtos)
nombre julia
apellido jazmin
edad 82

luego presiono el simbolo mas + en el DBNavigator1, sierro el programa, lo ejecuto nuevamente, y veo que en los BDEdit me aparecen los datos que cargue por ultimo, osea me aparecen estos nuemamente
NumReg 100
nombre julia
apellido jazmin
edad 82


entocne slo que ago es lo s borro y los pongo los nuevos datos que quiero

NumReg 101
nombre lorena
apellido isaurralde
edad 20

y cuando abro la abse datos en acces, veo que esta este ultimo cargado, el priemor que crgue no esta, el ultimo me sobreescribe al primero...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

ayuda con DBNavigator1, cambiar iconos y no me sobreescriba registro

Publicado por E.T. (1244 intervenciones) el 02/06/2012 18:08:48
Primero que nada, el DataModule es lo que su nombre dice, modulo de datos, por lo tanto te recomiendo pasar tu AdoTable hacia el datamodule, de igual forma tu datasource pasalo al datamodule y ahora si enlaza todos tus edits y el navigator al datasource en el datamodule.

Luego estas usando mal el navigator, para agregar un registro primero se presiona el signo +, luego llenas los datos y presionas la palomita.
pues si borras los datos y pones los nuevos, en realidad estas modificando el registro seleccionado.

Asi que primero presionas el +, luego agregas los datos, y al finalizar presionas la palomita
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con DBNavigator1, cambiar iconos y no me sobreescriba registro

Publicado por julia (6 intervenciones) el 03/06/2012 08:28:48
Hola que tal, gracias por su respuesta, o he estado mirando y probando y si me di cuenta de eso, que en el DBNavigator1 primero el signo MAS nbInsert y luego la PALOMITA nbPost, ... pero....
Por ejemplo, inicio el programa y cargo dos registros
* cargo numReg 1, con todos sus datos (presiono MAS y PALOMITA)
* cargo numReg 2, con todos sus datos (presiono MAS y PALOMITA)

Cierro mi programa, abro la base datos BASE.MDB y veo que están guardados esos dos registros que guarde con mi programa correctamente.
Luego inicio nuevamente mi programa y este me muestra los datos del ultimo registro guardado, entonces para que no sobrescriba, presiono el símbolo MAS, y luego continuo la carga de nuevos registros.
Por que en esta ventana solo la seria para la carga de Nuevos Registros, y para modificación de registro haría otro form solo para la modificación

Mi pregunta es... como podría cambiar esto, o sea que.. Cuando inicio el programa no tenga la necesidad de presionar el boton símbolo mas del navigator para empezar a escribir, por que podría por error sobrescribir un registro y además economizar tiempo.

Y el tema del Datamdule, gracias.. lo estoy corrigiendo

Gracias igual por su respuesta amigo..

Saludos a todos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

ayuda con DBNavigator1, cambiar iconos y no me sobreescriba registro

Publicado por E.T. (1244 intervenciones) el 05/06/2012 00:23:13
Si la pantalla solo la vas a usar para nuevos registros, puedes quitar tu DBNavigator y usar lo siguiente, en el evento onShow de tu form usas esta linea

DataModule.ADOTable1.Insert;
Con esa linea haces lo mismo que si presionaras el signo + de la Navigation.

Luego en un boton pondrias el codigo

DataModule.ADOTable1.Post;
Que es como si presionaras la palomita.

Asi evitas que se sobre escriba un registro, y al mismo tiempo evitas que el usuario pueda ver los registros almacenados desde esa pantalla, y si el usuario no presiona el boton aceptar, lo que seria el Post, pondrias un Cancel,en el evento OnClose de la form

DataModule.ADOTable1.Cancel;

Con esta linea si no se ha guardado nada especificamente presionando el boton aceptar, evitas que la tabla se quede en estatus de insertar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con DBNavigator1, cambiar iconos y no me sobreescriba registro

Publicado por julia (6 intervenciones) el 06/06/2012 09:36:57
hola de nuevo, y gracias por su respuesta, ya corregi algunos errores he ice lo que me explico mas arriba, saque DBNavigator, y por ahora saque tambien el datamodule, pero es solo para practica, todavia en esta ventana me falta mas para agregar quietar y remendar, aora estoy probando y viendo opciones, bueno...

lo que me continua la duda es lo siguiente, por ejemplo si en la BD ya esta grabado los 4 primeros numeros registros, (NUMEROS DE MATRICULA) y si trato de escribir el numero de matricula 2, me salta error por que ya esta registrado esa matricula. El campo Num_Matricula es numerico.

Mi idea era acer que en el DBEdit correspondiente al campo Num_Matricula me mostrara el siguiente numeor matricula a insertar, y asi empesaria a escribir directamente los datos de la persona, y no tendria problemas en tratar de escribir por error el mismo numero de matricula, con foco directametne en nombre.

esto es mi codigo de arriba,

eso anda, solo me falta evr como hago lo que comente..


gracias igualemnte

PD; la base datos, hecha con acces, tiene 2 tablas, pero solo uso una por ahora, con estos campos

Num_Matricula numerico
nombre texto
apellido texto
dato1 texto
dato2 texto



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, StdCtrls, Mask, DBCtrls, ADODB;
 
type
  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    ADOTable1: TADOTable;
    ADOTable1Num_Matricula: TIntegerField;
    ADOTable1nombre: TWideStringField;
    ADOTable1apellido: TWideStringField;
    ADOTable1dato1: TWideStringField;
    ADOTable1dato2: TWideStringField;
    numreg1: TLabel;
    DataSource1: TDataSource;
    nombre2: TLabel;
    apellido3: TLabel;
    dato14: TLabel;
    dato25: TLabel;
    TITULOFORM6: TLabel;
    Button1: TButton;   // BOTON INSERTAR, GRABAR
    Button2: TButton;  // BOTON CERRAR FORM
 
 DBEdit1: TDBEdit;    // NUM REG
      DBEdit2: TDBEdit;   // NOMBRE
       DBEdit3: TDBEdit;// APELLIDO
      DBEdit4: TDBEdit;  // DATO1
       DBEdit5: TDBEdit;  //DATO2
 
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.DFM}
 
procedure TForm1.FormShow(Sender: TObject);
begin
   ADOTable1.Insert;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
    ADOTable1.Active := True;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
    ADOTable1.post;
    ADOTable1.Insert; // para que me borre del DBEdit el ultimo valor escrito
end;
 
end.
 
 
 
 
 
program Project1;
uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};
 
{$R *.RES}
 
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con DBNavigator1, cambiar iconos y no me sobreescriba registro

Publicado por julia (6 intervenciones) el 07/06/2012 16:20:11
bueno.. de nuevo yo, ahora ya solucione algo de mi problema mejore creo yo, el codigo.
elimine los DBEdit y utilizare EDIT por que lei por ahi que seria mas conveniente utilizar EDIT, puesto que este form solo trataria para cargar datos a la base datos.

base datos con acces, utilizo delphi5
nombre tabla : datopersonal
campos:
num_matricula numerico
nombre texto
apellido texto
dato1 texto
dato2 texto

ya solucione la manera para que me muestre el valor del registro siguiente que debe empesar a cargar el usuario, no se si es una forma buena, pero hace lo que necesito. Tambien agradezco cualquier mejora que puedan hacerme

Osea.. si ya tengo almacenados numero_matricula 5, cuando cierro mi programa, lo abro de nuevo, me estara indicando en el edti1 numero_matricula igual a 6, para continuar la carga de datos, y asi me va sumando cada vez que cargo el registro completo. Esto anda bien, pero a medias.

Con propiedad ReadOnly la puse a TRUE asi me impedira que quieran escribir otro valor en ese edit

Me di cuenta, por ejemplo que cuando la base datos esta VACIA, osea no hay ningun registro cargado, asi me salta un error diciendome

......El valor de BOF o EOF es True, o el actual registro se elimino,
la operacion solicitada requiere un registro actual.....

Si abro la base datos con acces, cargo al menos un registro, despues inicio mi programa, este error ya no me salta, y me anda bien..

desearia que alguna persona me corija el codigo.
Ademas, como seguramente veran no se programar, el codigo que ise es a los machetazos como decimos aca, a prueba y error.

En el procedure TFAlta.FormCreate(Sender: TObject);

puse esto
1
2
3
4
5
 // el IF de abajo es para el primer registro,
 // como sera igual a  '' es por que en la base datos no hay ningun registro
 // entonces, pongo x=1 asi me indica en el edit1 que estoy cargando primer registro
  if ADOTable1.FieldByName('num_matricula').AsString = '' then
   x := 1


pense que Remendando de esta forma, no me saltaria el error, despues pongo en el edit1.text = 1, que seria el primer registro

y en el procedure TFAlta.Button1Click(Sender: TObject); { Guardar datos }
begin
ADOTable1.Insert; // aca me salta el error... asta aca ejecuta todo, caundo salta a la siguiente linea aprarece el mensage de error.

este es mi codigo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Db, Mask, DBCtrls, ADODB;
 
type
  TFAlta = class(TForm)
    ADOConnection1: TADOConnection;
    ADOTable1: TADOTable;
    ADOTable1Num_matricula: TIntegerField;
    ADOTable1nombre: TWideStringField;
    ADOTable1apellido: TWideStringField;
    ADOTable1dato1: TWideStringField;
    ADOTable1dato2: TWideStringField;
    DataSource1: TDataSource;
    Button1: TButton;
    Button2: TButton;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  FAlta: TFAlta;
 
implementation
 
{$R *.DFM}
 
procedure TFAlta.Button2Click(Sender: TObject);
begin
CLOSE;
end;
 
procedure TFAlta.FormCreate(Sender: TObject);
var
   x : integer;
begin
 ADOTable1.Active := True;
 
 ADOTable1.Last;   // me posisiona ultimo registro
 // el IF de abajo es para el primer registro,
 // como sera igual a  '' es por que en la base datos no hay ningun registro
 // entonces, pongo x=1 asi me indica en el edit1 que estoy cargando primer registro
  if ADOTable1.FieldByName('num_matricula').AsString = '' then
   x := 1
 else
   // aca siempre entrara despues de grabar el primer registro
   x := StrToInt(ADOTable1.FieldByName('num_matricula').AsString) + 1;
 
  edit1.text := IntToStr(x); // siempre que inicio mi programa, me mostrara el
                             // registro que empesare a cargar
 
end;
 
procedure TFAlta.Button1Click(Sender: TObject);
 var
     n : integer;
begin  { Guardar datos }
ADOTable1.Insert;  // aca me salta el error... asta aca ejecuta todo
ADOTable1.FieldByName('num_matricula').AsString := Edit1.Text;
ADOTable1.FieldByName('nombre').AsString := Edit2.Text;
ADOTable1.FieldByName('apellido').AsString := Edit3.Text;
ADOTable1.FieldByName('dato1').AsString := Edit4.Text;
ADOTable1.Post;
 
// calculo el valor ultimo registro cargado, le sumo 1, y obtendo el siguiente valor concecutivo de registro y lo pongo en EDIT1.TEXT
ADOTable1.Last;
n := StrToInt(ADOTable1.FieldByName('num_matricula').AsString) + 1;
edit1.text := IntToStr(n);
 
// limpio los edit para carga de nuevos datos
Edit2.clear;
Edit3.clear;
Edit4.clear;
 
 
end;
 
procedure TFAlta.FormShow(Sender: TObject);
begin
ADOTable1.Insert;
end;
 
end.



1
2
3
4
5
6
7
8
9
10
11
12
13
program Project1;
 
uses
  Forms,
  Unit1 in 'Unit1.pas' {FAlta};
 
{$R *.RES}
 
begin
  Application.Initialize;
  Application.CreateForm(TFAlta, FAlta);
  Application.Run;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

ayuda con DBNavigator1, cambiar iconos y no me sobreescriba registro

Publicado por E.T. (1244 intervenciones) el 07/06/2012 17:26:58
Entonces tu error (de la base de datos vacia) se corrigio con lo que pusiste?
1
2
if ADOTable1.FieldByName('num_matricula').AsString = ''
  then x := 1


Tu otro error "ADOTable1.Insert; // aca me salta el error... asta aca ejecuta todo"
pudiera ser que haces doble insert, quita el insert que tienes en el OnShow de tu form.

Estas dos lineas de codigo, las puedes convertir en una sola
1
2
n := StrToInt(ADOTable1.FieldByName('num_matricula').AsString) + 1;
edit1.text := IntToStr(n);

de esta forma
1
edit1.text := IntToStr(ADOTable1.FieldByName('num_matricula').AsInteger + 1);


Ahora, hay una forma de que tu base de datos cree sola los numeros de matricula, en access, tu campo matricula, lo pones como autonumerico, y listo, access te genera solo los numeros, solo quita esta linea de tu codigo
1
ADOTable1.FieldByName('num_matricula').AsString := Edit1.Text;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con DBNavigator1, cambiar iconos y no me sobreescriba registro

Publicado por julia (6 intervenciones) el 11/06/2012 13:44:32
bien.. bien, perfectoooo...

si.. hai estab el error....

//// tu otro error "ADOTable1.Insert; // aca me salta el error... asta aca ejecuta todo"
/// pudiera ser que haces doble insert, quita el insert que tienes en el OnShow de tu form.

borre ese insert que me dice, y todo solucionado, es que este codigo era parte de otro que estaba aciendo, y le hice modificaciones, agregando otras cosas y ese insert en el onshow habia quedado, muchas gracias....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar