PDA

Ver la Versión Completa : Algo mas sobre ADOTable


Ledian_Fdez
20-08-2007, 14:51:09
Hola amigos:

Pues hoy estoy acá con la siguiente inquietud.

Antes que nada decirle quiero que mi aplicación esta en Delphi7, la Base de Datos en Access y me conecto a través de ADO.

Supongamos que tenemos una ADOTable1 con una serie de controles y entre ellos el Button1. Mi pregunta es: ¿Cómo podré deshabilitar el Button1 mientras que el ADOTable1 este en edición o insertándole un nuevo registro, en fin que se estén manipulando sus datos, para después ser guardado?

El problema es que el Button1 me llama a un formulario donde me es necesario que el usuario no intente llegar a el sin antes tener guardado todos los datos del ADOTable1.

Espero que me hayan entendido.

Salu2
Ledian

roman
20-08-2007, 14:59:38
Aunque no es exactamente lo que preguntas, podrías comenzar el código de ese botón preguntando por el estado del dataset:


procedure TForm1.Button1Click(Sender: TObject);
begin
if not (ADOTable1.State in dsEditModes) then
begin
{
Aquí tu código
}
end;
end;


De esta manera te aseguras de no abrir esa ventana si el dataset está en edición o inserción.

Más allá de eso, si usas un ActionList para las acciones de tus botones, puedes usar su evento OnUpdate para ese tipo de cosas:


Action1.Enabled := not (ADOTAble1.State in dsEditModes);


// Saludos

Ledian_Fdez
20-08-2007, 15:11:39
Roman este codigo:


procedure TModelo1Form.RxSpeedButton8Click(Sender: TObject);
begin
if not (DM.TblModelo1.State in dsEditModes) then
begin
Try
Application.CreateForm(TAnalisisForm, AnalisisForm);
AnalisisForm.ShowModal;
Finally
AnalisisForm.Free;
AnalisisForm := nil;
End
end
else ShowMessage('Debes guardar los datos primero');
end;


me genera el sgte error:
[Error] Modelo1.pas(127): Undeclared identifier: 'dsEditModes'


salu2
Ledian

roman
20-08-2007, 15:13:30
¿Y crees que poniéndome un signo de desaprobación es la mejor manera de pedir ayuda?

// Saludos

Ledian_Fdez
20-08-2007, 15:20:44
Lo siento. No entiendo lo que me quieres desir.

Salu2
Ledian

Caral
20-08-2007, 15:33:08
Hola
Vamos Roman, que se refiere al error, no te lo tomes personal.:)
Prueba asi:

procedure TModelo1Form.RxSpeedButton8Click(Sender: TObject);
begin
If not (DM.TblModelo1.State = dsEdit) or (DM.TblModelo1.State = dsInsert) then
begin
Try
Application.CreateForm(TAnalisisForm, AnalisisForm);
AnalisisForm.ShowModal;
Finally
AnalisisForm.Free;
AnalisisForm := nil;
End
end
else ShowMessage('Debes guardar los datos primero');
end;
Saludos

Ledian_Fdez
20-08-2007, 15:45:52
Roman, Caral tiene razon, no me mal interprete. Me referia al ERROR.


Bueno volviendo al tema señores el error persiste. Tendré que agregar alguna use, o tendré alga mal escrito, por favor les agradesería que me ayudaran con esto.

Salu2
Ledian

Caral
20-08-2007, 15:49:20
Hola
Perdona pero no te puede salir el mismo error.
Cual error te da?.
Saludos

Ledian_Fdez
20-08-2007, 15:56:29
[Error] Modelo1.pas(115): Undeclared identifier: 'dsIsert'
[Error] Modelo1.pas(115): Undeclared identifier: 'dsEdit'

Caral
20-08-2007, 16:19:30
Hola
Estos son los uses que tengo, quizás sea el problema, no lo se.

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Mask, DBCtrls, ComCtrls, DB, ADODB,
Buttons, Grids, DBGrids;
Revisalo.
Saludos

Ledian_Fdez
20-08-2007, 16:41:55
Así mismo, ese era el problema.
Tenía que agregar al uses DB y ya me funciona, aunque en el Insert no me funciona bien, pero busque en la ayuda y mi código me queó asi:

if (DM.TblModelo1.State = dsBrowse) then
begin
Try
Application.CreateForm(TAnalisisForm, AnalisisForm);
AnalisisForm.ShowModal;
Finally
AnalisisForm.Free;
AnalisisForm := nil;
End
end
else ShowMessage('Debes guardar los datos primero');

Aunque a decir verdad. En si no es lo que buscaba pero bueno, podría usarse momentáneamente de esa manera.

Caral miles de gracias por tu paciencia


Salu2
Ledian