En la aplicación necesitaremos dos ASP .NET Page (paginas aspx). En una suministraremos los datos necesarios para realizar una consulta dinamica usando BdpDataReader y en la otra mostramos los resultados en un DataGrid. Durante el desarrollo del proyecto utilizaremos nuevos controles, nuevos objetos y nuevas características que estan disponibles en Delphi 2006. Así mismo usaremos la Base de Datos Employee.gdb que viene con Interbase 7.5. 1. Empecemos creando un nuevo proyecto ASP.NET Web Application. A éste proyecto lo llamaremos WebDemoOne. El asistente se encargara de crear el nuevo proyecto con los archivos necesarios. Es necesario agregar un nuevo ASP .NET Page. ( File | New | Other) al que llamaremos WebForm2.aspx. 2. En WebForm1.aspx, diseñaremos un formulario de ingreso de datos como se muestra en la figura de abajo. En ella utilizaremos dos nuevos controles de validación de datos: RequiredFieldValidator y ValidationSummary. Estos nuevos controles son muy necesarios cuando se quiere exigir la introducción de valores antes de que la consulta sea procesada en el servidor.
 |
 |
- RequiredFieldValidator1, un control que servira para verificar que se ha ingresado el dato esperado.
- ValidationSummary1, que se encargara de mostrar los mensajes personalizados del RequiredFieldValidator1.
3. El botón Consultar se encargara de enviar los parametros a la pagina WebForm2.aspx en la que construiremos la consulta SQL.
procedure TWebForm1.Button1_Click(sender: System.Object; e: System.EventArgs);
begin
Cache['country']:= txtPais.Text;
Response.Redirect('WebForm2.aspx');
end;
4. En WebForm2.aspx, colocamos un
DataGrid
y personalizamos su presentación usando el asistente de Clic-derecho en el
DataGrid
y seleccione
Formato Automatico
, luego añadimos las líneas de código que se encargaran de hacer todo el trabajo pesado. Como queremos que éste código se ejecute en el momento en que se carga la pagina, la añadiremos en el evento
Load
. No olvide incluir en la clausula
uses
los siguientes espacio de nombre: System.Data.Common, System.Data, Borland.Data.Provider, Borland.Vcl.SysUtils;
procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs);
var
sPais: String;
Trans : BdpTransaction;
MyConeccion: BdpConnection;
ConnStr, ConnOptions: String;
Cadena: BdpCommand;
MySql: String;
CatalogoReader : BdpDataReader;
begin
ConnStr := 'Provider=Interbase;' +
'assembly=Borland.Data.Interbase, Version=2.5.0.0,' +
'Culture=neutral, PublicKeyToken=91d62ebb5b0d1b1b;' +
'vendorclient=gds32.dll;pooling=True;' +
'grow on demand=True;database=localhost:C:\Archivos de programa\Archivos comunes\Borland Shared\Data\EMPLOYEE.GDB;' +
'username=sysdba;max pool size=100;password=masterkey';
ConnOptions := 'LoginPrompt=False;SQLDialect=3;RoleName=None;' +
'CommitRetain=true;ServerCharSet=NONE;RollbackRetain=False;' +
'TxnIsolation=ReadCommitted;WaitOnLocks=true';
MyConeccion:= BdpConnection.Create(ConnStr);
MyConeccion.ConnectionOptions:= ConnOptions;
try
MyConeccion.Open;
except
on e: exception do Response.Write(e.Message);
end;
Trans := MyConeccion.BeginTransaction();
sPais:= string(Cache.Get('country'));
Mysql := 'select * from employee where job_country = '+ QuotedStr(sPais.ToUpper);
Cadena := BdpCommand.Create(Mysql, MyConeccion, Trans);
CatalogoReader := Cadena.ExecuteReader;
DataGrid1.DataSource:=CatalogoReader;
DataGrid1.DataBind;
CatalogoReader.Close;
MyConeccion.close;
Trans.Commit;
Trans.Free;
MyConeccion.Free;
end;
5. En el código mostrado se han especificado las variables necesarias para crear el objeto de conección, de transacción, y de lectura de datos. La variable ConnStr especifica los valores necesarios para establecer la conección con la base de datos. Entre ellos: el tipo de proveedor de datos, el ensamblado a usar, la llave pública, si se usara o no el nuevo soporte a
pool de conecciones
, así como la ubicación física de la Base de Datos.
ConnStr := 'Provider=Interbase;' +
'assembly=Borland.Data.Interbase, Version=2.5.0.0,' +
'Culture=neutral, PublicKeyToken=91d62ebb5b0d1b1b;' +
'vendorclient=gds32.dll;pooling=True;' +
'grow on demand=True;database=localhost:C:\Archivos de programa\Archivos comunes\Borland Shared\Data\EMPLOYEE.GDB;' +
'username=sysdba;max pool size=100;password=masterkey';
6. Así también es necesario establecer el nivel de aislamiento a manejar en las transacciones:
ConnOptions := 'LoginPrompt=False;SQLDialect=3;RoleName=None;' +
'CommitRetain=true;ServerCharSet=NONE;RollbackRetain=False;' +
'TxnIsolation=ReadCommitted;WaitOnLocks=true';
7. El código siguiente se encarga de crear el objeto conección usando las variables anteriormente descritas, si en el proceso de creación hubiera algún error, se dispara un excepción y se muestra el correspondiente mensaje; en caso contrario se inicia una nueva Transacción.
MyConeccion:= BdpConnection.Create(ConnStr);
MyConeccion.ConnectionOptions:= ConnOptions;
try
MyConeccion.Open;
except
on e: exception do Response.Write(e.Message);
end;
Trans := MyConeccion.BeginTransaction();
8. Para construir la consulta SQL es necesario recuperar de la cache el valor de la variable country, con esto evitamos enviar los parametros por la URL. Almacenamos la consulta SQL en Mysql y la pasamos como parametro al crear el objeto Cadena. Para leer los datos recuperados invocamos al método
ExecuteReader
del objeto CatalogoReader que a su vez es una instancia de
BdpDataReader
. Para mostrar los resultados del
BdpDataReader
en la pagina, vamos a enlazar el
DataGrid
con CatalogoReader mediante la propiedad
DataSource
.
sPais:= string(Cache.Get('country'));
Mysql := 'select * from employee where job_country = '+ QuotedStr(sPais.ToUpper);
Cadena := BdpCommand.Create(Mysql, MyConeccion, Trans);
CatalogoReader := Cadena.ExecuteReader;
DataGrid1.DataSource:=CatalogoReader;
DataGrid1.DataBind;
CatalogoReader.Close;
MyConeccion.close;
Trans.Commit;
9. Es necesario especificar
DataBind
para que los datos sean permanentes en el control
DataGrid
. Luego, cerramos el
BdpDataReader
y el objeto conección. Finalmente confirmamos la transacción.
Este artículo ha usado una de las técnicas mas simples de acceso y lectura de base de datos usando BdpDataReader
, así como el uso de nuevos controles para validar y presentar información de una manera rapida y sencilla con Delphi 2006.
Connect with Us