Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Uso del maskedit (https://www.clubdelphi.com/foros/showthread.php?t=51860)

hamiltonfvi 02-01-2008 17:03:06

Uso del maskedit
 
Alguien puede decirme porque los maskedit modificados no me guardan los datos en la base de datos de SQL 2000 server. Tengo varios maskedit con el formato de la cedula de mi pais, es decir, 000-0000000-0, pero cuando guardo los cambios en el cliente me lo guarda todo menos los datos introducidos en dichos maskedit. Alguien me dijo q utilizará 3 edit normales y que los concatene con guiones, de esta forma funciona, pero siento q no es la correcta. Agradeceria toda la ayuda posible por que es para mi proyecto de monografico y solo falta unos dias para la entrega. :confused:

Caral 02-01-2008 17:17:21

Hola
Bienvenido al club.
Lo que creo es que el tipo de campo no debe ser el adecuado.
Que tipo de campo usas?.
Para mi debería de ser texto, por el tipo de formato.
Saludos

hamiltonfvi 02-01-2008 22:23:15

no existen dbmaskedit
 
Gracias por la bienvenida y gracias por la ayuda:). Disculpa la pregunta, esta mal formulada, ya hable con mi compañera de monografico y me aclaro que el problema se debe a que no existe un maskedit para trabajar con base de datos, es decir, no existe otro maskedit aparte del que hay en la paleta de componentes Additional, o por lo menos ninguno en nuestros conocimientos. Este maskedit no nos permite conectarlo a la base de datos porque no tiene ninguna opcion para hacerlo. Disculpen tantas preguntas sencillas, tenemos poco tiempo programando en delphi y tenemos q terminar nuestro proyecto del monografico ya. Si alguien tiene una idea de como realizar una bitacora le estaria eternamente agradecido si me llegase a pasar esa informacion. :p

Caral 02-01-2008 23:23:31

Hola
No entiendo esto de que el maskedit no se puede conectar a la base de datos, quien dice que no se puede extraer la informacion en un maskedit?.
Perdona pero me he quedado con la duda.
Por que asi:
Código Delphi [-]
MaskEdit1.Text:= Table1.field[0].value.
Es una de las muchas maneras de que en un maskedit pueda ver el dato de la base de datos.
Por supuesto como indique antes, depende del dato que contenga el campo, simplemente se cambia el concepto, pero de que se puede se puede.
Eso y mas, es delphi, no Visual Basic.
Saludos

Héctor Randolph 02-01-2008 23:49:02

El componente DBEdit de la paleta Data Controls, es derivado de un MaskEdit. Lo que sucede es que este componente toma la máscara que hayas colocado en el campo de la base de datos, no se la puedes asignar directamente. Entonces, lo que debes hacer es tomar un Dataset, por ejemplo, una tabla o un Query y desde el diseñador abrir la lista de campos persistentes (haciendo doble clic sobre el Dataset te muestra la lista de campos). Agrega y después selecciona el campo en cuestión, en seguida busca la propiedad EditMask y coloca la máscara tal y como lo haces en un MaskEdit.

Saludos

hamiltonfvi 04-01-2008 20:12:26

Maskedit resuelto
 
Hey! Muchas gracias a ambos, tenian razon, se puede resolver d ambas formas!!! :) Aunque la solucion de Hector es la mas correcta.

Caral 04-01-2008 20:20:40

Hola
Por algo es un maestro, yo apenas soy novato.
Saludos

hamiltonfvi 04-01-2008 20:22:29

Como activar DBGrid?
 
Tengo una duda, tenemos un dbgrid asociado a nuestra base de datos, todo funciona bien, ya probamos los controles de grabar, modificar, etc. El problema resulta q cuando accesamos al la pantalla q contiene el dbgrib, este no muestra la informacion q contiene nuestra tabla de la base de datos, solo hasta q hayamos introducido o modificado algun registro es q muestra el contenido de los demas registros en el dbgrid. Llegué a pensar q era con el evento onshow del dbgrid, pero no tiene ninguno. Agradesco de antemano toda la ayuda brindada. Si vienen algun dia a mi pais, no duden en contactarse conmigo. :)

Caral 04-01-2008 20:29:34

Hola
Un dbgrid, simplemente es un elemento donde se muestra lo que hay en una base de datos, sean una o varias tablas.
Para que se muestren los datos, la tabla o en query tienen que estar abiertos.
Es muy simple:
Donde abres la tabla?.
Que componentes usas?.
Que base de datos usas?
Estos datos no son relevantes, pero ayuda a analizar conceptos.
Saludos

hamiltonfvi 04-01-2008 21:15:41

dggrid
 
pues la tabla la abro con un adoquery el cual los ponemos en un datamodule donde tambien esta el datasource. Dicho sea de paso usamos la conexion ado, El dbgrid se en cuentra en un form llamado estudiantes, dicho form contiene un dataset q apunta al adoquery donde esta la tabla. Todo funciona bien, solo que no trae los datos d la tabla hasta q empezamos los movimientos como ya habia dicho. :confused:

Caral 04-01-2008 21:25:38

Hola
Ya dijiste, como dices tu, antes, que no se muestran los movimientos hasta que empiezan los movimientos, eso ya lo vi.
Pero:
La pregunta no fue contestada:
En que procedimiento, evento, lugar, abres la tabla, en este caso el query.?
Para mi es muy sencillo, sin ver el programa podria decir que lo abre en el formcreate.
Me equivoco?.
Saludos
Edito:
Me parece que si no coloca la informacion en el dbgrid hasta que se actualiza, es por que ahi es donde se abre al tabla.
Simplemente se puede abrir en otro evento.

hamiltonfvi 04-01-2008 21:54:52

Pues no realmente, el evento se presenta al elegir una opcion del menu desde la forma del menu principal, por ejemplo es el codigo q llama al form 'calificaciones' (donde esta dbgrid) desde el form 'menu principal':

procedure TMenPrinc.Calificaciones1Click(Sender: TObject);
begin
FCalificaciones.Show;
end;

al entrar el form calificaciones trae el dbgrid, el cual no tiene asignado ningun tipo d evento, solo esta enlazado normalmente al datasource, pero no muestra nada de la tabla hasta q se hagan los movimientos. Por cierto, nuestra base de datos esta hecha en sql.

Caral 04-01-2008 22:06:50

Hola
Empecemos por partes:
Este es solo un comentario, para mi no deberia de estar asi.
Si llamas al form con ese codigo quiere decir que ya fue creado, eso debe alentar el programa a la hora de iniciarse, en otras palabras lo tienes en el proyecto.

Por otro lado:
Si en el form que contiene el dbgrid no hay ningun codigo que traiga la informacion, como la traes:?
Seguro la traes en el momento que haces los cambios.
Me gustaria que colocaras aqui el codigo de ese form, asi se vera mejor la cosa.
Saludos
Nota: coloca el codigo con las etiquetas, asi se vera mejor

hamiltonfvi 04-01-2008 22:53:21

este es el codigo de la unidad del form asignaturas, te pongo esta porque es la mas sencilla de las formas.

Cita:

unit UAsignatura;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, DB, Mask, DBCtrls, Buttons, ComCtrls, Grids,
DBGrids;
type
TFAsignatura = class(TForm)
Label1: TLabel;
EdCodigoas: TDBEdit;
DataSource1: TDataSource;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
GroupBox1: TGroupBox;
Label7: TLabel;
Edcodigoemp: TDBEdit;
Image1: TImage;
CBNombreas: TDBComboBox;
CBGradoas: TDBComboBox;
CBCicloas: TDBComboBox;
CBNivelas: TDBComboBox;
CBSemestreas: TDBComboBox;
BtnNuevo: TBitBtn;
BtnGuardar: TBitBtn;
BtnModificar: TBitBtn;
BtnEliminar: TBitBtn;
BtnSalir: TBitBtn;
Panel1: TPanel;
StatusBar1: TStatusBar;
Label8: TLabel;
DBEdit1: TDBEdit;
DataSource2: TDataSource;
Label9: TLabel;
DBEdit2: TDBEdit;
DBGAsignatura: TDBGrid;
Panel2: TPanel;
procedure BtnNuevoClick(Sender: TObject);
procedure EdCodigoasKeyPress(Sender: TObject; var Key: Char);
procedure CBGradoasKeyPress(Sender: TObject; var Key: Char);
procedure CBCicloasKeyPress(Sender: TObject; var Key: Char);
procedure CBNombreasKeyPress(Sender: TObject; var Key: Char);
procedure CBNivelasKeyPress(Sender: TObject; var Key: Char);
procedure CBSemestreasKeyPress(Sender: TObject; var Key: Char);
procedure EdcodigoempKeyPress(Sender: TObject; var Key: Char);
procedure BtnGuardarClick(Sender: TObject);
procedure BtnModificarClick(Sender: TObject);
procedure BtnEliminarClick(Sender: TObject);
procedure BtnSalirClick(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FAsignatura: TFAsignatura;
implementation
uses UDTM;
{$R *.dfm}
procedure TFAsignatura.BtnNuevoClick(Sender: TObject);
begin
dtm.ASIGNATURA.Open;
dtm.ASIGNATURA.Insert;
dtm.ASIGNATURA.Edit;
Edcodigoas.Enabled:=true;
CBNombreas.Enabled:=true;
CBGradoas.Enabled:=true;
CBCicloas.Enabled:=true;
CBNivelas.Enabled:=true;
CBSemestreas.Enabled:=true;
EdCodigoemp.Enabled:=true;
end;
procedure TFAsignatura.EdCodigoasKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
CBNombreas.SetFocus;
end;
end;
procedure TFAsignatura.CBGradoasKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
CBcicloas.SetFocus;
end;
end;
procedure TFAsignatura.CBCicloasKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
CBNivelas.SetFocus;
end;
end;
procedure TFAsignatura.CBNombreasKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
CBgradoas.SetFocus;
end;
end;
procedure TFAsignatura.CBNivelasKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
CBsemestreas.SetFocus;
end;
end;
procedure TFAsignatura.CBSemestreasKeyPress(Sender: TObject;
var Key: Char);
begin
if key = #13 then
begin
EdCodigoemp.SetFocus;
end;
end;
procedure TFAsignatura.EdcodigoempKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
btnGuardar.SetFocus;
end;
end;
procedure TFAsignatura.BtnGuardarClick(Sender: TObject);
begin
dtm.ASIGNATURA.Post;
Edcodigoas.Enabled:=false;
CBNombreas.Enabled:=false;
CBGradoas.Enabled:=false;
CBCicloas.Enabled:=false;
CBNivelas.Enabled:=false;
CBSemestreas.Enabled:=false;
EdCodigoemp.Enabled:=false;
btnguardar.SetFocus;
end;
procedure TFAsignatura.BtnModificarClick(Sender: TObject);
begin
if MessageDlg('Esta seguro que desea modificar este registro', mtInformation, [mbyes, mbno], 0) = mryes then
begin
dtm.ASIGNATURA.Open;
dtm.ASIGNATURA.Edit;
Edcodigoas.Enabled:=true;
CBNombreas.Enabled:=true;
CBGradoas.Enabled:=true;
CBCicloas.Enabled:=true;
CBNivelas.Enabled:=true;
CBSemestreas.Enabled:=true;
EdCodigoemp.Enabled:=true;
BtnGuardar.SetFocus;
end
end;
procedure TFAsignatura.BtnEliminarClick(Sender: TObject);
begin
if MessageDlg('Esta seguro que desea eliminar este registro', mtInformation, [mbyes, mbno], 0) = mryes then
begin
dtm.ASIGNATURA.Delete;
end
else
abort;
end;
procedure TFAsignatura.BtnSalirClick(Sender: TObject);
begin
Fasignatura.Close;
end;
procedure TFAsignatura.FormShow(Sender: TObject);
begin
dtm.ASIGNATURA.Open;
end;
end.

Caral 04-01-2008 23:07:46

Hola
Como soy casi adivino, lo sabia, abres la tabla en el formshow, que es casi lo mismo que el formcreate.:D:D
Solucion:
Coloca un nuevo boton (Actualiza).
y el codigo quedaria asi:
Código Delphi [-]
unit UAsignatura;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, DB, Mask, DBCtrls, Buttons, ComCtrls, Grids,
DBGrids;
type
TFAsignatura = class(TForm)
Label1: TLabel;
EdCodigoas: TDBEdit;
DataSource1: TDataSource;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
GroupBox1: TGroupBox;
Label7: TLabel;
Edcodigoemp: TDBEdit;
Image1: TImage;
CBNombreas: TDBComboBox;
CBGradoas: TDBComboBox;
CBCicloas: TDBComboBox;
CBNivelas: TDBComboBox;
CBSemestreas: TDBComboBox;
BtnNuevo: TBitBtn;
BtnGuardar: TBitBtn;
BtnModificar: TBitBtn;
BtnEliminar: TBitBtn;
BtnSalir: TBitBtn;
Panel1: TPanel;
StatusBar1: TStatusBar;
Label8: TLabel;
DBEdit1: TDBEdit;
DataSource2: TDataSource;
Label9: TLabel;
DBEdit2: TDBEdit;
DBGAsignatura: TDBGrid;
Panel2: TPanel;
procedure BtnNuevoClick(Sender: TObject);
procedure EdCodigoasKeyPress(Sender: TObject; var Key: Char);
procedure CBGradoasKeyPress(Sender: TObject; var Key: Char);
procedure CBCicloasKeyPress(Sender: TObject; var Key: Char);
procedure CBNombreasKeyPress(Sender: TObject; var Key: Char);
procedure CBNivelasKeyPress(Sender: TObject; var Key: Char);
procedure CBSemestreasKeyPress(Sender: TObject; var Key: Char);
procedure EdcodigoempKeyPress(Sender: TObject; var Key: Char);
procedure BtnGuardarClick(Sender: TObject);
procedure BtnModificarClick(Sender: TObject);
procedure BtnEliminarClick(Sender: TObject);
procedure BtnSalirClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure BtnCtualizaClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FAsignatura: TFAsignatura;
implementation
uses UDTM;
{$R *.dfm}

// aqui empieza la parte nueva
procedure TFAsignatura.BtnActualizaClick(Sender: TObject);
begin
dtm.ASIGNATURA.Close;
dtm.ASIGNATURA.Open;
end;
// aqui termina

procedure TFAsignatura.BtnNuevoClick(Sender: TObject);
begin
// dtm.ASIGNATURA.Open; ya esta abierta la tabla en el FormShow
dtm.ASIGNATURA.Insert;
// dtm.ASIGNATURA.Edit; esto es innecesario
Edcodigoas.Enabled:=true;
CBNombreas.Enabled:=true;
CBGradoas.Enabled:=true;
CBCicloas.Enabled:=true;
CBNivelas.Enabled:=true;
CBSemestreas.Enabled:=true;
EdCodigoemp.Enabled:=true;
end;
procedure TFAsignatura.EdCodigoasKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
CBNombreas.SetFocus;
end;
end;
procedure TFAsignatura.CBGradoasKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
CBcicloas.SetFocus;
end;
end;
procedure TFAsignatura.CBCicloasKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
CBNivelas.SetFocus;
end;
end;
procedure TFAsignatura.CBNombreasKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
CBgradoas.SetFocus;
end;
end;
procedure TFAsignatura.CBNivelasKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
CBsemestreas.SetFocus;
end;
end;
procedure TFAsignatura.CBSemestreasKeyPress(Sender: TObject;
var Key: Char);
begin
if key = #13 then
begin
EdCodigoemp.SetFocus;
end;
end;
procedure TFAsignatura.EdcodigoempKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
btnGuardar.SetFocus;
end;
end;
procedure TFAsignatura.BtnGuardarClick(Sender: TObject);
begin
dtm.ASIGNATURA.Post;
Edcodigoas.Enabled:=false;
CBNombreas.Enabled:=false;
CBGradoas.Enabled:=false;
CBCicloas.Enabled:=false;
CBNivelas.Enabled:=false;
CBSemestreas.Enabled:=false;
EdCodigoemp.Enabled:=false;
btnguardar.SetFocus;
end;
procedure TFAsignatura.BtnModificarClick(Sender: TObject);
begin
if MessageDlg('Esta seguro que desea modificar este registro', mtInformation, [mbyes, mbno], 0) = mryes then
begin
// dtm.ASIGNATURA.Open;   Ya esta abierta
dtm.ASIGNATURA.Edit;
Edcodigoas.Enabled:=true;
CBNombreas.Enabled:=true;
CBGradoas.Enabled:=true;
CBCicloas.Enabled:=true;
CBNivelas.Enabled:=true;
CBSemestreas.Enabled:=true;
EdCodigoemp.Enabled:=true;
BtnGuardar.SetFocus;
end
end;
procedure TFAsignatura.BtnEliminarClick(Sender: TObject);
begin
if MessageDlg('Esta seguro que desea eliminar este registro', mtInformation, [mbyes, mbno], 0) = mryes then
begin
dtm.ASIGNATURA.Delete;
end
else
abort;
end;
procedure TFAsignatura.BtnSalirClick(Sender: TObject);
begin
Fasignatura.Close;
end;
procedure TFAsignatura.FormShow(Sender: TObject);
begin
dtm.ASIGNATURA.Open;
end;
end.
Espero lo entiendas.
Saludos

hamiltonfvi 05-01-2008 14:54:23

dbgrid
 
gracias caral, pero la solucion q propones es practicamente la misma q utilizar el boton 'nuevo' o 'modificar'. Lo q nosotros queriamos es q el dbgrid nos trajera los datos al abrir la forma sin pulsar nada, pero ni modo, agregaremos el boton 'actualizar'. Gracias por todo.:)

Caral 05-01-2008 15:04:27

Hola
No mal entiendas, el concepto es lo que importa.
No es necesario poner un boton, lo inportante es el concepto, eso lo puedes hacer en cualquier evento del form, no específicamente en un boton.
Lo puse asi, para que lo captaras, no para que fuera exactamente asi.
Saludos

hamiltonfvi 05-01-2008 15:21:25

dbgrid solucionado
 
Mil gracias, ahora si entendi, funciona a las mil maravillas, no se que haria sin tu ayuda. Hey, por cierto, muy bueno el minitutorial q preparaste, gente como tu hacen falta para que el mundo sea un sitio mejor. :p


La franja horaria es GMT +2. Ahora son las 22:24:51.

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