Descargar

Visual Basic

Enviado por aaaaa0264


    1. ¿Que es SQL?
    2. Ado net active x data object
    3. SQL select: consulta o despliegue o selección
    4. SQL insert: inserción o adición de registros
    5. SQL select: búsqueda
    6. Select where: filtros SQL
    7. SQL uppadte: operaciones con campos
    8. SQL delete: baja o eliminación
    9. SQL update: edición de registros
    10. Gráficos Sql select

    INTRODUCCIÓN

    Visual Basic es un lenguaje de programación de propósito general, con una gran potencia en toda su estructura. Su implementación en el sistema operativo Windows y sus herramientas visuales, han hecho de este

    lenguaje un líder indiscutible en lo que a desarrollo de aplicaciones se refiere. Con la versión 3.0. se implementó la gestión de bases de datos a muy alto nivel, pudiendo gestionar bases de datos de tipo Access, Paradox, dBASE, FoxPro, etc.

    Este paso de gigante ha hecho de Visual Basic uno de los lenguajes favoritos por los desarrolladores de aplicaciones de bases de datos, en especial el hecho de que

    Visual Basic implemente el lenguaje SQL, uno de los más potentes y sencillos lenguajes de bases de datos.

    ¿QUE ES SQL?

    SQL (Structured Query Language ó Lenguaje Estructurado de Consulta), es un lenguaje bastante sencillo, principalmente orientado a bases de datos y, sobre todo, al manejo de consultas. Visual Basic incorpora esta extensión junto a nuestras bases de datos, obteniendo potentes resultados. De hecho, las consultas que se realizan en Access, están desarrolladas o basadas en este lenguaje, por lo que su implementación en Visual Basic no es complicada.

    El objetivo principal de SQL es la realización de consultas y cálculos con los datos de una o varias tablas.

    Consejos para escribir mandatos en SQL: He aquí una serie de consejos (a veces normas), que hay que tener en cuenta a la hora de escribir mandatos SQL en nuestras aplicaciones en Visual Basic: 1. Un mandato en SQL se expresa en una cadena de caracteres o String. 2. Dicho mandato se puede escribir en la propiedad RecordSource de un

    control Data (más adelante, podremos prescindir del control Data para realizar nuestras consultas), con el fin de crear una consulta en la interfaz. 3. Los nombres de los campos especificados (y de las tablas), que contengan más de una palabra, han de encerrarse entre corchetes ([nombre]). Como norma general, se suelen escribir siempre entre corchetes. 4. Para especificar un determinado campo de una determinada tabla, se ha de escribir primero el nombre de la tabla, un punto y, a continuación, el nombre del campo (nombre_tabla.nombre_campo). 5. Al especificar una expresión de búsqueda, si ésta se refiere a una expresión de caracteres, éstos han de encerrarse entre comillas simples ('expresión_a_buscar'). 6. Para especificar una fecha en una búsqueda, ésta debe encerrarse entre signos numeral (#fecha#) en Access, Dbase X, etc., y entre comillas simples ('fecha') para bases Sql Server, Informix, etc. 7. Si se utiliza la propiedad RecordSource del control Data, para crear nuestras consultas en SQL, tras introducir el mandato SQL (siempre como una expresión de cadena) es necesario refrescar el control Data (control_data.Refresh).

    Mandato SQL Estándar:El lenguaje SQL está compuesto por una serie de sentencias y de cláusulas muy reducidas en número, pero muy potentes en efectividad. De entre todas las palabras, existen cuatro que son las más utilizadas, estando compuestas por una sentencia y por tres cláusulas: SELECT lista_campos FROM lista_tablas [WHERE criterios [ORDER BY lista_campos]]

    ADO NET ACTIVE X DATA OBJECT

    El Nuevo Modelo De Datos De Microsoft Es Ado Net Este Modelo Descansa En Una Serie De Objetos Especializados Que Facilitan El Procesamiento De Una Base De Datos.

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    Fuente Microsoft net

    Empezando:

    El problema es comunicar un programa o aplicación con una base de datos y más que comunicar se pretende que el programa o aplicación realice una serie de procesos u operaciones con la base de datos o mejor aun con el conjunto de tablas que contiene una base de datos.

    La primera nota a recordar es que una base de datos puede estar físicamente en el servidor y en algún fólder o directorio del disco duro de dicha maquina servidora por ejemplo, c:progfacilmisitiomibase.mbd, como se observa la base que se construyo en Access (mibase.mbd) se almaceno en el disco c en el fólder progfacil y dentro del subfolder misitio.

    Sin embargo también es necesario conocer que así como existen servidores de paginas ( Web Server ), servidores de correo ( mail server ), servidores de ftp ( ftp server ), etc., también existen servidores de bases de datos (database server), los mas comunes son el sqlserver de microsoft, oracle, mysql, etc., estos servidores también pueden crear, administrar y procesar una base de datos por supuesto que el procedimiento que se dio para crearla en access en el tema anterior no se puede usar para crear y cargar una base de datos en un servidor de bases de datos. El modo de comunicarse entre nuestro programa visual basic net o aplicación y la base de datos (ya sea física o un dbserver) implica que ambos manejen un lenguaje de programación común, es decir no se puede mandar una instrucción en C# o en borland delphi java a la base de datos y además esperar que esta ultima la entienda ( para entender esto, una razón muy sencilla es que la base de datos tendría que conocer o comprender todos los lenguajes de programación), para resolver este problema de comunicación es que se usa un lenguaje común de bases de datos que tanto los lenguajes de programación existentes como las bases de datos entienden, este lenguaje común de bases de datos es el SQL (structured query languaje) o lenguaje estructurado de consultas.

    La pregunta es ahora como mandamos las instrucciones sql a la base de datos, la respuesta son los OBJETOS ADO.NET que estamos analizando en orden y propósito de uso.

    OBJETO CONNECTION:- OBJETO QUE SE UTILIZA PARA ESTABLECER UNA CONECCION O ENLACE A LA BASE DE DATOS.

    Este objeto primero se tendrá que crear en el programa y luego se tendrá que cargar con dos parámetros (ver ejemplo mas abajo), el primer parámetro es el proveedor o la fuente que proporcionara los datos, los proveedores o fuentes de datos que existen son:

    SQLSERVER NET DATA PROVIDER.- QUE SE ESPECIALIZA EN COMUNICARSE Y PROCESAR BASES DE DATOS CONSTRUIDAS CON MICROSOF SQL SERVER V7.0

    OLEDB.NET DATA PROVIDER.- QUE SE ESPECIALIZA EN COMUNICARSE Y PROCESAR BASES DE DATOS QUE A LA FECHA DEL PRESENTE LIBRO UTILIZEN ALGUNOS DE LOS SIGUIENTES DRIVERS, SQLOLEDB ( VERSIONES ANTERIORES DE SQL SERVER DE MICROSOFT), MSDAORA (ORACLE), MICROSOFT.JET ( ACCESS Y ALGUNOS OTROS DBMS DE MICROSOFT)

    ODBC.NET .- BASES DE DATOS QUE USAN ODBC COMO MEDIO DE COMUNICACION CON OTRAS BASES DE DATOS Y APLICACIONES, COMO NOTA A CONSIDERAR ODBC.NET NO ESTA INCLUIDA POR DEFAULT EN MICROSOFT.NET, SE TIENE QUE BAJAR DE MICROSOFT.

    El segundo parámetro es la propia base de datos con la cual se comunicara el programa o aplicación.

    Ejemplo del objeto CONNECTION

    DIM coneccion AS OLEDBCONNECTION

    conation = NEW OLEDBCONNECTION("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:progfacillauromibase.mdb")

    Es una sola string y los dos parámetros mencionados van separados por el punto y coma.

    ATENCION es DATA SOURCE= no usar DATASOURCE= estan advertidos.

    Ejemplos de los otros proveedores o fuentes mencionados:

    Ejemplos de los otros proveedores o fuentes mencionados:

    //Provider=MSDAORA; Data Source=ORACLE8i7; User ID=OLEDB; Password=OLEDB

    //Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:binLocalAccess40.mdb;

    //Provider=SQLOLEDB;Data Source=MySQLServer;Integrated Security=SSPI;

    OBJETO COMMAND.- Este objeto puede contener directamente una instrucción SQL y enviarla al objeto conección ya descrito.

    Ya establecido el canal o enlace entre el programa aspx y la base de datos vía el objeto CONECCION, se debe mandar la instrucción SQL a la propia base de datos, sin embargo en un programa de vbasic por supuesto que no puede contener instrucciones de otros lenguajes de programación como el de SQL, es por esto que se deberán usar algunos de los otros objetos de ADO.NET para que estos objetos transporten la instrucción sql hacia la base de datos (y transporte de regreso al servidor los datos de alguna tabla), uno de estos objetos es el objeto COMMAND.

    Este objeto command primero se tendrá que crear y luego cargarle dos parámetros que son:

    La instrucción sql y el objeto conneccion que ya se vio en el párrafo anterior, ejemplo:

    DIM orden AS OLEDBCOMMAND

    Orden = NEW OLEDBCOMMAND("select * from mitabla", coneccion)

    Si esta muy grande o muy compleja la instrucción sql, es más conveniente crearla en una variable string y poner la variable como parámetro ejemplo:

    DIM orden AS OLEDBCOMMAND

    DIM q AS STRING

    q = "select * from mitabla"

    orden = NEW OLEDBCOMMAND(q, coneccion)

    Sin embargo ciertas instrucciones de sql, requieren que se manden los datos a la base de datos, respetando el tipo de dato con los cuales los creo el software de bases de datos, por ejemplo si edad en access se declaro como NUMBER, la instrucción sql que pretenda cargar dicho campo, tiene la obligación de mandarla con este tipo de dato asociado, instrucciones SQL que permiten cargar o capturar ese campo edad son INSERT o UPADTE.

    Para resolver este problema, usaremos en la string q, unas variables llamadas VARIABLES PARAMETROS que se simbolizan usando el símbolo @ antes de la variable y además al objeto COMMAND le agregamos dos instrucciones extras que permiten agregar a la string q el dato y el tipo de dato, ejemplo, se tienen seis renglones ya capturados en nuestra tabla y se quiere agregar un séptimo renglón con los siguientes datos, clave=7, nombre="rana" peso=3.14 , usaremos la instrucción SQL INSERT ej:

    DIM orden AS OLEDBCOMMAND

    DIM q, clave, nombre, peso AS STRING

    Clave = 7: nombre = "rana": peso = 3.14

    Q ="insert into mitabla(clave,nombre,peso) values(@CLAVE, @NOMBRE, @PESO)"

    orden= new OleDbCommand(q, coneccion)

    orden.Parameters.Add(new OleDbParameter("@CLAVE", OleDbType.Integer))

    orden.Parameters("@CLAVE").Value = clave

    orden.Parameters.Add(new OleDbParameter("@NOMBRE", OleDbType.VarWChar, 40))

    orden.Parameters("@NOMBRE").Value = nombre

    orden.Parameters.Add(new OleDbParameter("@PESO", OleDbType.Double))

    orden.Parameters("@PESO").Value = edad

    Observar que para cada variable parametro(@), se tienen que cargar dos elementos, el valor y el tipo de dato correpondiente.

    Aunque en valor se mandan string's, en oledbtype se hace un mapeo, relación o conversión al tipo de dato que se uso en access, tener mucho cuidado que exista una relación igual o cuando este programa se ejecute el servidor les va a mandar un error o excepción de sql, que les intenta decir que el tipo de dato que mandaron a la base de datos, no es igual al que se uso para crearlo en la base de datos.

    Los OLEDBTYPE más comunes son:

    BigInt A 64-bit signed integer (DBTYPE_I8). This maps to Int64.

    Binary A stream of binary data (DBTYPE_BYTES). This maps to an Array of type Byte.

    Boolean A Boolean value (DBTYPE_BOOL). This maps to Boolean.

    BSTR A null-terminated character string of Unicode characters (DBTYPE_BSTR). This maps to String.

    Char A character string (DBTYPE_STR). This maps to String.

    Currency A currency value ranging from -263 (or -922,337,203,685,477.5808) to 2 63 -1 (or +922,337,203,685,477.5807) with an accuracy to a ten-thousandth of a currency unit (DBTYPE_CY). This maps to Decimal.

    Date Date data, stored as a double (DBTYPE_DATE). The whole portion is the number of days since December 30, 1899, while the fractional portion is a fraction of a day. This maps to DateTime.

    DBDate Date data in the format yyyymmdd (DBTYPE_DBDATE). This maps to DateTime.

    DBTime Time data in the format hhmmss (DBTYPE_DBTIME). This maps to TimeSpan.

    DBTimeStamp Data and time data in the format yyyymmddhhmmss (DBTYPE_DBTIMESTAMP). This maps to DateTime.

    Decimal A fixed precision and scale numeric value between -1038 -1 and 10 38 -1 (DBTYPE_DECIMAL). This maps to Decimal.

    Double A floating point number within the range of -1.79E +308 through 1.79E +308 (DBTYPE_R8). This maps to Double.

    Empty No value (DBTYPE_EMPTY). This maps to Empty.

    Error A 32-bit error code (DBTYPE_ERROR). This maps to Exception.

    Filetime A 64-bit unsigned integer representing the number of 100-nanosecond intervals since January 1, 1601 (DBTYPE_FILETIME). This maps to DateTime.

    Guid A globally unique identifier (or GUID) (DBTYPE_GUID). This maps to Guid.

    IDispatch A pointer to an IDispatch interface (DBTYPE_IDISPATCH). This maps to Object. Note This data type is not currently supported by ADO.NET. Usage may cause unpredictable results.

    Integer A 32-bit signed integer (DBTYPE_I4). This maps to Int32.

    IUnknown A pointer to an IUnknown interface (DBTYPE_UNKNOWN). This maps to Object. Note This data type is not currently supported by ADO.NET. Usage may cause unpredictable results.

    LongVarBinary A long binary value (OleDbParameter only). This maps to an Array of type Byte.

    LongVarChar A long string value (OleDbParameter only). This maps to String.

    LongVarWChar A long null-terminated Unicode string value (OleDbParameter only). This maps to String. Numeric An exact numeric value with a fixed precision and scale (DBTYPE_NUMERIC). This maps to Decimal. PropVariant An automation PROPVARIANT (DBTYPE_PROP_VARIANT). This maps to Object.

    Single A floating point number within the range of -3.40E +38 through 3.40E +38 (DBTYPE_R4). This maps to Single.

    SmallInt A 16-bit signed integer (DBTYPE_I2). This maps to Int16.

    TinyInt A 8-bit signed integer (DBTYPE_I1). This maps to SByte.

    UnsignedBigInt A 64-bit unsigned integer (DBTYPE_UI8). This maps to UInt64.

    UnsignedInt A 32-bit unsigned integer (DBTYPE_UI4). This maps to UInt32.

    UnsignedSmallInt A 16-bit unsigned integer (DBTYPE_UI2). This maps to UInt16.

    UnsignedTinyInt A 8-bit unsigned integer (DBTYPE_UI1). This maps to Byte.

    VarBinary A variable-length stream of binary data (OleDbParameter only). This maps to an Array of type Byte. VarChar A variable-length stream of non-Unicode characters (OleDbParameter only). This maps to String.

    Variant A special data type that can contain numeric, string, binary, or date data, as well as the special values Empty and Null (DBTYPE_VARIANT). This type is assumed if no other is specified. This maps to Object.

    VarNumeric A variable-length numeric value (OleDbParameter only). This maps to Decimal.

    VarWChar A variable-length, null-terminated stream of Unicode characters (OleDbParameter only). This maps to String.

    WChar A null-terminated stream of Unicode characters (DBTYPE_WSTR). This maps to String.

    Aun mas con el ejemplo anterior el objeto COMMAND esta construido y preparado y cargado pero todavía no se manda desde el programa a la base de datos, es decir le falta usar las siguientes tres propiedades, ejemplo;

    DIM orden AS OLEDBCOMMAND

    DIM q, clave, nombre, peso AS STRING

    Clave = 7: nombre = "rana": peso = 3.14

    Q ="insert into mitabla(clave,nombre,peso) values(@CLAVE, @NOMBRE, @PESO)"

    orden= new OleDbCommand(q, coneccion)

    orden.Parameters.Add(new OleDbParameter("@CLAVE", OleDbType.Integer))

    orden.Parameters("@CLAVE").Value = clave

    orden.Parameters.Add(new OleDbParameter("@NOMBRE", OleDbType.VarWChar, 40))

    orden.Parameters("@NOMBRE").Value = nombre

    orden.Parameters.Add(new OleDbParameter("@PESO", OleDbType.Double))

    orden.Parameters("@PESO").Value = edad

    orden.Connection.Open()

    orden.ExecuteNonQuery()

    orden.Connection.Close()

    Sencillo abrir la conexión, mandar o ejecutar la instrucción y cerrar la conexión.

    OBJETOS DATAADAPTER Y DATASET:(dos por uno)

    Con los objetos CONNECTION y COMMAND ya se pueden efectuar cualquiera de la operaciones SQL descritas, el problema es que pasa con el usuario, cuando va a ver base de datos o mejor aun las tablas que estan en la base de datos en disco.

    DATASET:- Es una copia en memoria(de la maquina cliente) de la base de datos( y todas sus tablas) que se encuentra en disco.

    DATAADAPTER.- En principio es muy similar al objeto COMMAND es decir se usa para transportar instrucciones SQL a la base en disco, de hechos sus formatos e instrucciones son muy similares a los vistos para el objeto COMMAND, su diferencia principal es que dataadapter esta mas especializado y contiene una serie de métodos que facilitan la interacción entre el DATASET y la Base de Datos en disco.

    En particular muchos de los programas que se verán en temas posteriores solo usan los objetos CONNECTION, DATAADAPTER y DATASET.

    Otra vez, dataadpater se especializa en transportar instrucciones sql a la base de datos en disco pero además se utiliza para cargar la tabla en memoria o dataset del cliente.

    Ejemplo:

    ' abriendo la coneccion

    coneccion = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:progfaciltusitiomibase.mdb")

    ' cargando el adapter con la instruccion sql

    canal=new OleDbDataAdapter("select * from mitabla", coneccion)

    ' cargando el dataset

    tabla= new DataSet()

    canal.Fill(tabla, "mitabla")

    Como se observa en este ejemplo muy sencillo, el dataadapter(canal) esta funcionando de manera muy similar al primer ejemplo que se vio del objeto COMMAND, pero tengan la seguridad que también se pueden usar variables parámetros y agregarles los dos tipos de parámetros a este objeto dataadpater.

    Observar que su propiedad FILL carga el DATASET(tabla) con una de las tablas en disco, recordar que en la base de datos puede contener muchas tablas.

    Además esa propiedad FILL es equivalente a las tres ultimas instrucciones del objeto COMMAND, es decir open, executenonquery y close, mas facil verdad.

    DATAREADER y DATASET:

    Observar que también se usan en forma conjunta, primero es muy similar en uso y función que el objeto DATAADAPATER, la diferencia entre datareader y dataadapter es el tipo de base de datos con las cuales se pueden comunicar, dataadpater se especializan en bases de datos relacionales y datareader se especializa en archivos que no se estudian en este curso.

    También es importante mencionar que datareader es el objeto de ADO.NET mas parecido al objeto RESULTSET que uso mucho en el ADO anterior de microsoft.

    EN general se han visto de manera sencilla los principales objetos ADO.ASP( connection, command, datareader, dataadapter, dataset), sin embargo la tabla o las tablas y la base de datos que se tiene en disco o sirviéndola algún servidor de bases de datos, se ha quedado en la memoria de la maquina del cliente, ADO.NET ha terminado su trabajo y su función.

    Para mandar el dataset a el browser se tendrá que pasar a algún tipo de objeto visible que soporte el browser, los objetos que se pueden usar para mandar el dataset a pantalla son:

    1.- COMPONENTE TABLE DE HTML

    2.- COMPONENTE HTMLTABLE DE ASP

    3.- COMPONENTE DATAGRID DE ASP NET

    SQL SELECT: CONSULTA O DESPLIEGUE O SELECCION

    Existen una serie de operaciones y procesos que son muy comunes contra una tabla en una base de datos en disco la mas común es desplegar todos los renglones de la tabla que estan almacenados en disco, a este proceso le llamaremos SELECCION, consulta o despliegue (muy original).

    Como se indico anteriormente la comunicación con la base de datos se tendrán que dar usando el lenguaje especializado de bases de datos llamado SQL (structured query language), la instrucción sql que se usa para resolver este problema tiene el siguiente formato:

    SELECT [listacampos, * o ALL] FROM TABLA

    El procedimiento que se intenta seguir cuando se construya un programa asp.net que tenga que manipular una tabla en disco deberá seguir los siguientes pasos:

    1.- Crear una conección o enlace a la base de datos.

    2.- Abrir la conección a la base de datos.

    3.- Crear el enlace o adapater y cargarlo con la instrucción sql (o cargar primero la instrucción sql en un objeto command y mandarlo a través del adapter)

    4.- Crear el dataset y cargarlo a través del adapter

    5.- Cargar el DataGrid con el dataset y enlazarlo(binding)

    6.- Procesar el datagrid (editar un renglón, agregar un renglón, modificar un renglón, etc.)

    7.- Cerrar la conección

    Código prog25.aspx

    <%@ PAGE LANGUAGE=VB%>

    <%@ Import Namespace="System" %>

    <%@ Import Namespace="System.Data" %>

    <%@ Import Namespace="System.Data.OleDb" %>

    <FORM RUNAT=SERVER>

    <ASP:DATAGRID ID=TABLAGRID RUNAT=SERVER

    Width=400

    BackColor=#ccccff

    BorderColor=black

    ShowFooter=false

    CellPadding=3

    CellSpacing=0

    Font-Name=Verdana

    Font-Size=8pt

    HeaderStyle-BackColor=#aaaadd

    EnableViewState=false

    /></FORM>

    <html>

    <script runat=server>

    ' creando y cargando coneccion, adpater, dataset como variables globales

    DIM coneccion AS OLEDBCONNECTION

    DIM canal AS OLEDBDATAADAPTER

    DIM tabla AS DATASET

    SUB Page_Load(Sender As Object, E As EventArgs)

    ' enlazando coneccion a la base de datos

    coneccion = NEW OLEDBCONNECTION("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:progfaciltusitiomibase.mdb")

    ' cargando el adapter con la instruccion sql

    canal = NEW OLEDBDATAADAPTER("select * from mitabla", coneccion)

    ' cargando el dataset

    tabla = NEW DATASET()

    canal.FILL(tabla, "mitabla")

    ' cargando el datagrid

    TABLAGRID.DATASOURCE = tabla

    TABLAGRID.DATAMEMBER = "mitabla"

    TABLAGRID.DATABIND()

    ' cerrando conneccion

    coneccion.CLOSE()

    END SUB

    </script>

    corrida prog25.aspx

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    1.- Se sigue el procedimiento genérico para procesar tablas usando ADO.NET

    2.- Observar y siempre incluir los namespaces indicados.

    3.- Se usa una PAGINA (page) y su evento pageload() para desplegar la tabla(mitabla) que esta en la base de datos(mibase), se puede cargar e inicializar usando un objeto button=desplegar con este mismo código cargado en su evento onclick, pero es criterio de ustedes como se despliega la tabla.

    4.- Recordar que DATAGRID es un WEBCONTROL por tanto hay que crearlo e inicializarlo al principio del programa, también recordar que datagrid tiene muchas propiedades que le mejoran la interfase con que se despliega y es en esta parte donde se cargan dichas propiedades.

    5.- Se empieza creando las variables globales a ocupar y abriendo la conección a la base de datos, si se les hace muy grande la string del proveedor, pueden cargarla primero en una variable string y carguen la string en el constructor de la conección, pero esto es opcional.

    6.- Tomar nota como se hace la referencia a la base de datos.

    7.- Se crea el adapter y se carga el constructor con la instrucción sql y la conexión, aquí es necesario entender que existen varias maneras de hacer esto:

    Cargar una string con el sql y crear y usar un objeto command directamente por ejemplo comandtext=stringsql; y luego todavía se tendría que ejecutar con executenonquery(que ejecuta una string que no regresa datos por ejemplo insert o update para un adpater) o executereader(si en lugar de usar adapter se usa un reader) o executescalar( método que regresa un solo dato de la base de datos).

    Usar algunas de las funciones descritas del adapter por ejemplo adpatercommandselect(stringsql).

    Pero lo mas sencillo fue usar el método que se puso en el programa, es decir crear el adapter y pasarle directamente la instrucción sql.

    8.- Luego se creo el dataset y se cargo con toda la base de datos en disco, entender esto bien, dataset puede quedar cargado con todas las tablas que tenga la base de datos, por eso se usa un FILL para pasar al dataset solo una de las tablas(mi tabla), esto da origen a dos notas:

    8.1.- Al programar mas adelante se ocupara explícitamente indicarle al compilador con cual tabla se va a trabajar, es por esta razón que se verán instrucciones tales como tabla.tables["clientes"].etc.etc. Aquí se esta diciendo al compilador que del dataset(TABLA) se va a realizar una proceso con la tabla de clientes.

    8.2.- Para procesar dos o mas tablas, entonces se tendra que usar mucho el formato que se vio en la nota 8.1

    9.- Al final se carga el datagrid , se pega( binding ) al dataset y se cierra la base de datos.

    SQL INSERT: INSERCIÓN O ADICIÓN DE REGISTROS

    Insertar o agregar registros o renglones nuevos a una tabla en disco, es un proceso sencillo que usa la siguiente instrucción sql:

    INSERT INTO TABLA(CAMPO1,CAMPO2..) VALUES(VALOR1,VALOR2..)

    Recordar que solo se esta usando lo mínimo de cada instrucción sql.

    Prog26.aspx

    <%@ PAGE LANGUAGE=VB%>

    <%@ Import Namespace="System" %>

    <%@ Import Namespace="System.Data" %>

    <%@ Import Namespace="System.Data.OleDb" %>

    <FORM RUNAT=SERVER>

    CLAVE<ASP:TEXTBOX ID=CLAVE SIZE=3 RUNAT=SERVER/>

    NOMBRE<ASP:TEXTBOX ID=NOMBRE SIZE=10 RUNAT=SERVER/>

    EDAD<ASP:TEXTBOX ID=EDAD SIZE=3 RUNAT=SERVER/>

    <ASP:BUTTON ONCLICK=INSERTAR TEXT=INSERTAR RUNAT=SERVER /><BR>

    <ASP:DATAGRID ID=TABLAGRID RUNAT=SERVER

    Width=400

    BackColor=#ccccff

    BorderColor=black

    ShowFooter=false

    CellPadding=3

    CellSpacing=0

    Font-Name=Verdana

    Font-Size=8pt

    HeaderStyle-BackColor=#aaaadd

    EnableViewState=false/>

    </FORM>

    <script runat=server>

    ' creando y cargando coneccion, adpater, dataset como variables globales

    DIM coneccion AS OLEDBCONNECTION

    DIM canal AS OLEDBDATAADAPTER

    DIM tabla AS DATASET

    SUB Page_Load(Sender As Object, E As EventArgs)

    coneccion = NEW OLEDBCONNECTION("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:progfaciltusitiomibase.mdb")

    ' cargando el adapter con la instruccion sql

    canal = NEW OLEDBDATAADAPTER("select * from mitabla", coneccion)

    ' cargando el dataset

    tabla = NEW DATASET()

    canal.FILL(tabla, "mitabla")

    ' cargando el datagrid

    TABLAGRID.DATASOURCE = tabla

    TABLAGRID.DATAMEMBER = "mitabla"

    TABLAGRID.DATABIND()

    ' cargando el nuevo textbox con la nueva clave clave correpondiente

    DIM cren, nvaclave AS INTEGER

    cren = tabla.Tables("mitabla").Rows.Count

    nvaclave = tabla.Tables("mitabla").Rows(cren-1)(0) + 1

    CLAVE.Text=nvaclave

    END SUB

    SUB INSERTAR(Sender As Object, E As EventArgs)

    ' creando y cargando un objeto OLEDBCOMMAND

    ' instruccion sql insert into mitabla(listacampos) values(listadatos)

    ' @variable es una variable de tipo command o parametro

    DIM q AS STRING

    DIM orden as OLEDBCOMMAND

    q = "insert into mitabla(clave,nombre,edad) values(@CLAVE, @NOMBRE, @EDAD)"

    orden = NEW OLEDBCOMMAND(q, coneccion)

    orden.Parameters.Add(new OleDbParameter("@CLAVE", OleDbType.Integer))

    orden.Parameters("@CLAVE").Value = CLAVE.Text

    orden.Parameters.Add(new OleDbParameter("@NOMBRE", OleDbType.VarWChar, 20))

    orden.Parameters("@NOMBRE").Value = NOMBRE.Text

    orden.Parameters.Add(new OleDbParameter("@EDAD", OleDbType.Integer))

    orden.Parameters("@EDAD").Value = EDAD.Text

    orden.Connection.Open()

    orden.ExecuteNonQuery()

    orden.Connection.Close()

    ' REFRESCANDO DATASET con los nuevos datos de la tabla en disco

    canal=new OleDbDataAdapter("select * from mitabla", coneccion)

    ' creando el dataset y cargandolo

    tabla= new DataSet()

    canal.Fill(tabla, "mitabla")

    ' recargando el datagrid

    TABLAGRID.DataSource=tabla.Tables("mitabla").DefaultView

    TABLAGRID.DataBind()

    ' cargando otra vez la caja de CLAVE y limpiando las otras cajas

    DIM cren, nvaclave AS INTEGER

    cren = tabla.Tables("mitabla").Rows.Count

    nvaclave =tabla.Tables("mitabla").Rows(cren-1)(0)+ 1

    CLAVE.Text=nvaclave

    NOMBRE.Text=""

    EDAD.Text=""

    coneccion.Close()

    END SUB

    </script>

    corrida prog26.aspx

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    Notas:

    Se agregaron tres textboxs arriba del datagrid para capturar los nuevos datos a insertar en la tabla.

    En page_Load es el mismo código del programa anterior solo al final se usa el método row.count de dataset.tables[recuerdan la nota 8 del tema anterior] para conocer cuantos renglones tiene la tabla.

    Con esta información ya se puede leer la primera columna ( la cero 0 desde luego) para sacar el dato de la ultima clave.

    Luego se lee el ultimo renglón de la tabla con el método dataset.tables(tabla).rows(reng)(col).

    Es importante que se entienda que con este formato dataset.tables(tabla).rows(reng)(col) se puede leer o cargar(GET-SET) cualquier celda o columna de la tabla.

    Se descontó uno de la cantidad de renglones porque en tablas el primer renglón es el…

    El método devolvió el valor de la última clave que esta en el último renglón de la tabla, pero en string.

    Al final se incremento en uno la variable entera para obtener el valor de la nuevaclave o clavesiguiente, misma que se cargo en el textbox correspondiente.

    En función INSERTAR(), se crea la string q, con el formato apropiado sql( como se dijo al principio de este tema), observar que existen tres variables que llevan un @ antes, estas variables se llaman VARIABLES PARAMETROS, y se cargan con el objeto command.parameters().

    Otra vez, en este ejemplo para mandar la instrucción sql a la base de datos, se crea y se usa un objeto command (llamado orden) que lleva como datos la string q y la conexión, pero se agregan tres métodos command.parametro (orden.parameters()), en estos métodos se cargan las variables parámetro primero con el valor de dato del textbox asp y luego se transforman al tipo de dato apropiado usando los oledbtype(que hay que estudiar porque se tienen que asociar directamente a los tipos de datos que se usaron en access).

    Ya con el objeto COMMAND(orden) listo y cargado para comunicar la instrucción sql a la base de datos, se abre la conexión a la base de datos se manda el executenonquery(no se quiere regresar nada en esta parte, recordar la nota respectiva que se dio en un tema anterior) y se cierra la conexión y se mando el nuevo renglón a la base de datos en disco.

    Al final de esta función INSERTAR como ya se hizo un cambio en la base de datos, se tiene que volver a recargar el dataset con la nueva información(es el mismo código que se tiene en page_load) mas tantito código para limpiar y cargar los textboxs.

    SQL SELECT: BÚSQUEDA

    En este tema se analiza la búsqueda de un registro o renglón determinado en este proceso el usuario del programa quiere que se despliegue un y solo un registro de información proporcionando un dato de búsqueda generalmente la clave del registro.

    La solución es sencilla, solo usar otra vez la instrucción sql select con el siguiente formato:

    SELECT [ *, all, campos] FROM TABLA WHERE clave=claveabuscar;

    Código prog27.aspx

    <%@ PAGE LANGUAGE=VB%>

    <%@ Import Namespace="System" %>

    <%@ Import Namespace="System.Data" %>

    <%@ Import Namespace="System.Data.OleDb" %>

    <FORM RUNAT=SERVER>

    CLAVE A BUSCAR<ASP:TEXTBOX ID=CLAVE SIZE=3 RUNAT=SERVER/>

    <ASP:BUTTON ONCLICK=BUSCAR TEXT=BUSCAR RUNAT=SERVER /><BR>

    <ASP:DATAGRID ID=TABLAGRID RUNAT=SERVER

    Width=400

    BackColor=#ccccff

    BorderColor=black

    ShowFooter=false

    CellPadding=3

    CellSpacing=0

    Font-Name=Verdana

    Font-Size=8pt

    HeaderStyle-BackColor=#aaaadd

    EnableViewState=false

    /></FORM>

    <script runat=server>

    ' creando y cargando coneccion, adpater, dataset como variables globales

    DIM coneccion AS OLEDBCONNECTION

    DIM canal AS OLEDBDATAADAPTER

    DIM tabla AS DATASET

    SUB BUSCAR(Sender As Object, E As EventArgs)

    ' cargando conecion

    coneccion = NEW OLEDBCONNECTION("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:progfaciltusitiomibase.mdb")

    ' reando y cargando canal con q y sus variables parametros apropiadas

    DIM q AS STRING

    q = "select * from mitabla where clave = @CLAVE"

    canal=new OleDbDataAdapter(q, coneccion)

    canal.SelectCommand.Parameters.Add(new OleDbParameter("@CLAVE", OleDbType.Integer))

    canal.SelectCommand.Parameters("@CLAVE").Value = CLAVE.Text

    ' cargando el dataset

    tabla = NEW DATASET()

    canal.FILL(tabla, "mitabla")

    ' cargando el datagrid

    TABLAGRID.DATASOURCE = tabla

    TABLAGRID.DATAMEMBER = "mitabla"

    TABLAGRID.DATABIND()

    ' cerrando conneccion recordar que FILL NO OCUPA CERRAR

    coneccion.CLOSE()

    END SUB

    </script>

    Notas:

    No hay nada nuevo es una combinación de los dos programas anteriores con las mismas notas, solo se usa un textbox asp para pedir la clave, aunque se puede usar cualquier campo para buscar.

    RECORDAR QUE TODO ESTE CAPITULO ES SIMPLEMENTES SQL y las instrucciones o se mandan vía el DATAADAPTER o se mandan vía el COMMAND, esto depende del problema a resolver.

    Corrida prog27.aspx

    Para ver el gráfico seleccione la opción "Descargar" del menú superior 

    SELECT WHERE: FILTROS SQL

    Otro problema similar al anterior es el de filtros es decir en muchas ocasiones es necesario obtener información acerca de un subconjunto de renglones de la tabla.

    Por ejemplo todos los estudiantes que sean mayores de 17 años, todos los clientes que sean de Tijuana, etc., a esto le llamamos filtros o condiciones.

    También se resuelve de manera similar al anterior, es decir usando la instrucción select etc., from tabla, where CONDICION;

    Código prog28.aspx

    <%@ PAGE LANGUAGE=VB%>

    <%@ Import Namespace="System" %>

    <%@ Import Namespace="System.Data" %>

    <%@ Import Namespace="System.Data.OleDb" %>

    <FORM RUNAT=SERVER>

    EDAD >= QUE<ASP:TEXTBOX ID=EDAD SIZE=3 RUNAT=SERVER/>

    <ASP:BUTTON ONCLICK=BUSCAR TEXT=BUSCAR RUNAT=SERVER /><BR>

    <ASP:DATAGRID ID=TABLAGRID RUNAT=SERVER

    Width=400

    BackColor=#ccccff

    BorderColor=black

    ShowFooter=false

    CellPadding=3

    CellSpacing=0

    Font-Name=Verdana

    Font-Size=8pt

    HeaderStyle-BackColor=#aaaadd

    EnableViewState=false

    /></FORM>

    <script runat=server>

    ' creando y cargando coneccion, adpater, dataset como variables globales

    DIM coneccion AS OLEDBCONNECTION

    DIM canal AS OLEDBDATAADAPTER

    DIM tabla AS DATASET

    SUB BUSCAR(Sender As Object, E As EventArgs)

    ' cargando conecion

    coneccion = NEW OLEDBCONNECTION("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:progfaciltusitiomibase.mdb")

    ' creando y cargando canal con q y sus variables parametros apropiadas

    DIM q AS STRING

    q = "select * from mitabla where edad >= @EDAD"

    canal=new OleDbDataAdapter(q, coneccion)

    canal.SelectCommand.Parameters.Add(new OleDbParameter("@EDAD", OleDbType.Integer))

    canal.SelectCommand.Parameters("@EDAD").Value = EDAD.Text

    ' cargando el dataset

    tabla = NEW DATASET()

    canal.FILL(tabla, "mitabla")

    ' cargando el datagrid

    TABLAGRID.DATASOURCE = tabla

    TABLAGRID.DATAMEMBER = "mitabla"

    TABLAGRID.DATABIND()

    ' cerrando conneccion recordar que FILL NO OCUPA CERRAR

    coneccion.CLOSE()

    END SUB

    </script>

    Nota: siguen siendo combinaciones de los programas anteriores pero seria prudente mejor usar dos combobox uno para la variable, otro para el operador relacional y un text para el dato y mandar estos tres datos al prog28.aspx (se ocupan varios command.parameters()), pero eso queda de tarea.

    Recordar también que bases de datos en microsoft net es solamente SQL SQL SQL y se han usado tres versiones de select, por ejemplo si se usa en un programa:

    SELECT column1, SUM(column2) FROM "list-of-tables" ORDER BY "column-list" [ASC | DESC];

    [ ] = optional

    Corrida prog28.aspx

     Para ver el gráfico seleccione la opción "Descargar" del menú superior 

    SQL UPPADTE: OPERACIONES CON CAMPOS

    Este es también un caso común con elementos de una tabla, sin embargo es también fácil de resolver.

    Es necesario recordar primero algunas cosas elementales:

    1.- Recordar que el numero de columna en una tabla empieza en 0, esto es que para realizar alguna operación por ejemplo la columna edad del ejemplo que estamos siguiendo, su numero de columna es la 2.

    2.- La operación que se plantee se puede realizar con todos los renglones de la tabla o con un solo renglón de la tabla(del dataset), para procesar todos los renglones se usa un ciclo for, si solo se quiere procesar un solo renglón o una celda o columna nada mas, solo recordar GET-SET y solo usar un tabla.tables.rows(r)(c) con los métodos strings apropiados.

    3.- Para realizar aritmética con toda una columna, solo usar el GET-SET de tabla.tables.rows(ren)(col) para leer(get)o cargar(set), en leer recordar que saldra una string y en cargar recordar que se tendrá que cargar también una string, otra vez;

    string alfa=tabla.Tables("Clientes").Rows(4)(5) –>carga como string la variable alfa con el dato que se tiene en la sexta columna del quinto renglón de la tabla clientes.

    tabla.Tables("alumnos").Rows(2)(3)="MAMA" –> carga con la string MAMA la cuarta columna del tercer rennglon de la tabla alumnos.

    5.- En el ejemplo se realiza la operación con todos los renglones de la tabla y no olvidar que se tiene que usar la instrucción sql Update para que la nueva información se actualice en disco, recordar que los cambios que se hacen a la tabla, es realmente al dataset, que a su vez es una tabla o base de datos en la memoria de la maquina del cliente o usuario, y estos cambios hay que actualizarlos o pasarlos o UPDATE a la base de datos en disco.

    El siguiente programa le aumenta 50 a todas las edades.

    Prog29.aspx

    <%@ PAGE LANGUAGE=VB%>

    <%@ Import Namespace="System" %>

    <%@ Import Namespace="System.Data" %>

    <%@ Import Namespace="System.Data.OleDb" %>

    <FORM RUNAT=SERVER>

    <ASP:BUTTON ONCLICK=SUMAR TEXT=EDAD+50 RUNAT=SERVER /><BR>

    <ASP:DATAGRID ID=TABLAGRID RUNAT=SERVER

    Width=400

    BackColor=#ccccff

    BorderColor=black

    ShowFooter=false

    CellPadding=3

    CellSpacing=0

    Font-Name=Verdana

    Font-Size=8pt

    HeaderStyle-BackColor=#aaaadd

    EnableViewState=false

    /></FORM>

    <script runat=server>

    ' creando y cargando coneccion, adpater, dataset, command

    ' como variables globales

    DIM coneccion AS OLEDBCONNECTION

    DIM canal AS OLEDBDATAADAPTER

    DIM tabla AS DATASET

    DIM orden AS OLEDBCOMMAND

    SUB Page_Load(Sender As Object, E As EventArgs)

    ' enlazando coneccion a la base de datos

    coneccion = NEW OLEDBCONNECTION("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:progfaciltusitiomibase.mdb")

    ' cargando el adapter con la instruccion sql

    canal = NEW OLEDBDATAADAPTER("select * from mitabla", coneccion)

    ' cargando el dataset

    tabla = NEW DATASET()

    canal.FILL(tabla, "mitabla")

    ' cargando el datagrid

    TABLAGRID.DATASOURCE = tabla

    TABLAGRID.DATAMEMBER = "mitabla"

    TABLAGRID.DATABIND()

    ' cerrando conneccion

    coneccion.CLOSE()

    END SUB

    SUB SUMAR(Sender As Object, E As EventArgs)

    ' variables a usar

    DIM q AS STRING

    DIM temp, r, cren, nvaclave AS INTEGER

    ' procesando el dataset

    cren = tabla.Tables("mitabla").Rows.Count

    FOR r = 0 TO cren-1

    ' cargando clave del renglon actual a procesar (get-set)

    nvaclave =tabla.Tables("mitabla").Rows(r)(0)

    ' pasando columna edad a variable temp (get-set)

    temp =tabla.Tables("mitabla").Rows(r)(2)

    'sumando 50 a la edad(temp)

    temp = temp + 50

    ' cargando la nueva edad en el dataset (get-set)

    tabla.Tables("mitabla").Rows(r)(2)= temp

    ' pasando dataset a disco con update

    q = "UPDATE mitabla SET edad = "&temp.ToString()&" where clave= "&nvaclave.ToString()

    orden = new OleDbCommand(q, coneccion)

    orden.Connection.Open()

    orden.ExecuteNonQuery()

    orden.Connection.Close()

    'termina for y empieza nuevo renglon

    NEXT R

    'refrescando el datagrid

    TABLAGRID.DataSource = tabla

    TABLAGRID.DataMember= "mitabla"

    TABLAGRID.DataBind()

    END SUB

    </script>

    nota: como se observa se puede construir directamente la string q, y no usar command.parameters(), si se esta muy seguro que los tipos de datos que se mandan a disco son los apropiados para access.

    Corrida prog29.aspx

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    SQL DELETE: BAJA O ELIMINACION

    Eliminación es otro proceso simple y común con las bases de datos el modelo con ADO.NET que estamos usando hace este tipo de operaciones muy fáciles:

    La instrucción sql a usar es: DELETE FROM TABLA WHERE CONDICION

    Prog30.aspx

    <%@ PAGE LANGUAGE=VB %>

    <%@ Import Namespace="System" %>

    <%@ Import Namespace="System.Data" %>

    <%@ Import Namespace="System.Data.OleDb" %>

    <FORM RUNAT=SERVER>

    CLAVE A BORRAR<ASP:TEXTBOX ID=CLAVE SIZE=3 RUNAT=SERVER/>

    <ASP:BUTTON ONCLICK=BORRAR TEXT=BORRAR RUNAT=SERVER /><BR>

    <ASP:DATAGRID ID=TABLAGRID RUNAT=SERVER

    Width=400

    BackColor=#ccccff

    BorderColor=black

    ShowFooter=false

    CellPadding=3

    CellSpacing=0

    Font-Name=Verdana

    Font-Size=8pt

    HeaderStyle-BackColor=#aaaadd

    EnableViewState=false />

    </FORM>

    <script runat=server>

    DIM coneccion AS OleDbConnection

    DIM tabla AS DataSet

    DIM canal AS OleDbDataAdapter

    DIM orden AS OleDbCommand

    SUB Page_Load(Sender as Object, E as EventArgs )

    coneccion = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:progfaciltusitiomibase.mdb")

    canal = new OleDbDataAdapter("select * from mitabla", coneccion)

    tabla = new DataSet()

    canal.Fill(tabla, "mitabla")

    TABLAGRID.DataSource = tabla

    TABLAGRID.DataMember = "mitabla"

    TABLAGRID.DataBind()

    END SUB

    SUB BORRAR (Sender as Object, E as EventArgs)

    DIM q AS STRING

    ' instruccion sql DELETE FROM TABLA WHERE CLAVE=DATO

    q = "delete from mitabla where clave=@CLAVE"

    orden= new OleDbCommand(q, coneccion)

    orden.Parameters.Add(new OleDbParameter("@CLAVE", OleDbType.Integer))

    orden.Parameters("@CLAVE").Value = CLAVE.Text

    orden.Connection.Open()

    orden.ExecuteNonQuery()

    orden.Connection.Close()

    ' REFRESCANDO DATASET

    canal = new OleDbDataAdapter("select * from mitabla", coneccion)

    tabla = new DataSet()

    canal.Fill(tabla, "mitabla")

    TABLAGRID.DataSource=tabla.Tables("mitabla").DefaultView

    TABLAGRID.DataBind()

    CLAVE.Text=""

    END SUB

    </script>

    corrida prog30.aspx

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    CUIDAR Y MEJOR VALIDEN EN PROGRAMA QUE LA CLAVE A BORRAR EXISTA EN EL DATASET O TENDRAN UN ERROR DE SQL Y MAS IMPORTANTE AUN SE TENDRA QUE RESETEAR EL SERVIDOR, ESTO LO NOTARAN CUANDO ENCUENTREN CON EL FTP UN ARCHIVO EN SU DIRECTORIO LLAMADO MIBASE.LDB QUE NO LO PODRAN ELIMINAR HASTA QUE YO RESETEE EL SERVIDOR ESTAN AVISADOS.

    SQL UPDATE: EDICIÓN DE REGISTROS

    Editar registros significa cambiar el contenido de algunos de los campos o columnas por nueva información o para corregir algún error de captura original o para agregar alguna columna que no existía por modificación de la tabla o la base de datos.

    En general se tiene otro problema de sql UPDATE, sin embargo ahora se aprovechan algunos elementos nuevos del objeto datagrid, como son la capacidad que tiene de crearle columnas de edición a los renglones que muestra el dataset, estas columnas de edición traen sus propios métodos, mismos que se pueden cargar con código para procesar.

    Prog31.aspx

    <%@ Import Namespace="System" %>

    <%@ Import Namespace="System.Data" %>

    <%@ Import Namespace="System.Data.OleDb" %>

    <HTML>

    <script language=VB runat=server>

    DIM coneccion As OleDbConnection=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:progfaciltusitiomibase.mdb")

    SUB Page_Load(Sender as Object, E as EventArgs)

    ' solo para cuando se carga por primera vez la forma

    if NOT IsPostBack Then

    DespTabla()

    end if

    END SUB

    SUB DespTabla()

    DIM canal as OleDbDataAdapter

    canal = new OleDbDataAdapter("select * from mitabla", coneccion)

    DIM tabla as DataSet

    tabla = new DataSet()

    canal.Fill(tabla, "mitabla")

    TABLAGRID.DataSource=tabla

    TABLAGRID.DataMember="mitabla"

    TABLAGRID.DataBind()

    END SUB

     SUB DataGrid_Edit(Sender as Object, E as DataGridCommandEventArgs)

    ' cargando el renglon donde se pidio la edicion

    TABLAGRID.EditItemIndex = E.Item.ItemIndex

    DespTabla()

    END SUB

     SUB DataGrid_Cancel(Sender as Object, E as DataGridCommandEventArgs)

    'para cancelar solo poner edititemindex en -1 (ningun renglon)

    TABLAGRID.EditItemIndex = -1

    DespTabla()

    END SUB

     SUB DataGrid_Update(Sender as Object, E as DataGridCommandEventArgs)

    DIM q AS STRING

    q = "UPDATE mitabla SET clave= @CLAVE, nombre= @NOMBRE, edad = @EDAD where clave= @CLAVE"

    DIM orden AS OleDbCommand

    orden = new OleDbCommand(q, coneccion)

    orden.Parameters.Add(new OleDbParameter("@CLAVE", OleDbType.Integer))

    orden.Parameters.Add(new OleDbParameter("@NOMBRE", OleDbType.VarWChar, 20))

    orden.Parameters.Add(new OleDbParameter("@EDAD", OleDbType.Integer))

    ' cargando textbox de clave con el valor de la clave

    orden.Parameters("@CLAVE").Value = TABLAGRID.DataKeys(E.Item.ItemIndex)

    ' creando y cargando los demas textboxs

    DIM nomcajas()= {"@CLAVE","@NOMBRE","@EDAD"}

    DIM i AS Integer

    FOR i=1 to 3

    DIM datocajas AS STRING

    Dim micaja As TextBox

    micaja = CType(E.Item.Cells(I).Controls(0), TextBox)

    datocajas = micaja.Text

    orden.Parameters(nomcajas(i-1)).Value = Server.HtmlEncode(datocajas)

    NEXT i

    orden.Connection.Open()

    orden.ExecuteNonQuery()

    'poniendo otra vez el datagrid en nada

    TABLAGRID.EditItemIndex = -1

    orden.Connection.Close()

    DespTabla()

    END SUB

    </script>

    <body style="font: 10pt verdana">

    <form runat="server">

    <h3><font face="Verdana">EDICION O ACTUALIZACION DE REGISTROS</font></h3>

    <span id="Message" EnableViewState="false" style="font: arial 11pt;" runat="server"/><p>

    <ASP:DataGrid id="TABLAGRID" runat="server"

    Width="400"

    BackColor="#ccccff"

    BorderColor="black"

    ShowFooter="false"

    CellPadding=3

    CellSpacing="0"

    Font-Name="Verdana"

    Font-Size="8pt"

    HeaderStyle-BackColor="#aaaadd"

    OnEditCommand="DataGrid_Edit"

    OnCancelCommand="DataGrid_Cancel"

    OnUpdateCommand="DataGrid_Update"

    DataKeyField="clave"

    >

    <Columns>

    <asp:EditCommandColumn EditText="Edit" CancelText="Cancel" UpdateText="Update" ItemStyle-Wrap="false"/>

    </Columns>

    </ASP:DataGrid>

    </form>

    </body>

    </html>

    Para entender el código veamos la corrida completa:

    Pantalla uno prog31.aspx

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    Observar que ahora el datagrid incluye una columna de edición especial, revisar la parte del código de propiedades del datagrid en el programa y las nuevas propiedades que se le agregaron.

    Pantalla dos prog31.aspx

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    Observar que la columna de edición del renglón seleccionado (clic en edit de cualquier renglón) ahora tiene dos opciones (update y cancel) y el renglón de edición se convirtió en puros textbox (ya se modificaron algunos valores), update y cancel tienen su propio código en el programa, revisarlo y usando opción update se tiene ahora;

    Pantalla tres prog31.aspx

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    Un registro editado o modificado en visual basic net , analizar con cuidado el codigo del programa, que esta documentado, suerte

    GRAFICOS SQL SELECT

    Campos de gráficos o de imágenes, se han convertido en elementos importantes de cualquier base de datos.

    Para manejar este elemento con ado asp net existen dos maneras:

    1.- Agregar un campo BLOB a la tabla en microsoft access y usar componentes asp net especializados en imágenes tanto para subirlas como para desplegar la imagen.

    Este método provoca que la base de datos crezca mucho recordar que una imagen aun de tipo jpg ocupa mucho espacio.

    2.- El segundo método es mas sencillo, primero subir las imágenes ( de preferencia jpg ) con un ftp normal a tusitio y después agregar un objeto asp net imageurl en el programa y además agregar un campo de texto llamado fotourl o foto a la tabla en microsoft access y grabar la dirección http de la imagen en este campo, por ejemplo http://programacionfacil.com/tusitio/pato.jpg aunque si estan juntos el aspx y el jpg se puede usar solo pato.jpg directamente.

    Después solo cargar este objeto asp net imageurl en la pagina que se construirá que no es otra cosa que el programa de búsqueda con el despliegue del campo extra, como lo muestra el programa ejemplo.

    Prog32.aspx

    <%@ PAGE LANGUAGE=VB %>

    <%@ Import Namespace="System" %>

    <%@ Import Namespace="System.Data" %>

    <%@ Import Namespace="System.Data.OleDb" %>

    <FORM RUNAT=SERVER>

    CLAVE A BUSCAR<ASP:TEXTBOX ID=CLAVE SIZE=3 RUNAT=SERVER/>

    <ASP:BUTTON ONCLICK=BUSCAR TEXT=BUSCAR RUNAT=SERVER /><BR>

    <ASP:IMAGE ID=FOTO IMAGEURL=" " RUNAT=SERVER/>

    <ASP:DATAGRID ID=TABLAGRID RUNAT=SERVER

    Width=400

    BackColor=#ccccff

    BorderColor=black

    ShowFooter=false

    CellPadding=3

    CellSpacing=0

    Font-Name=Verdana

    Font-Size=8pt

    HeaderStyle-BackColor=#aaaadd

    EnableViewState=false

    />

    </FORM>

    <html>

    <script runat=server>

    'creando y cargando la coneccion a la base de datos variable global

    DIM coneccion AS OleDbConnection=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:progfaciltusitiomibase.mdb")

    SUB BUSCAR (Sender As Object,E as EventArgs)

    DIM q AS String

    q = "select * from mitabla where clave = @CLAVE"

    DIM canal as OleDbDataAdapter = new OleDbDataAdapter(q, coneccion)

    canal.SelectCommand.Parameters.Add(new OleDbParameter("@CLAVE", OleDbType.Integer))

    canal.SelectCommand.Parameters("@CLAVE").Value = CLAVE.Text

    DIM tabla as DataSet = new DataSet()

    canal.Fill(tabla, "mitabla")

    TABLAGRID.DataSource=tabla

    TABLAGRID.DataMember="mitabla"

    TABLAGRID.DataBind()

    'cargando el objeto imageurl

    FOTO.ImageUrl=tabla.Tables("mitabla").Rows(0)(3).ToString()

    END SUB

    </script>

    </html>

    corrida: prog32.aspx

    Para ver el gráfico seleccione la opción "Descargar" del menú superior

    Recordar que para que no salga el campo fotourl en el datagrid el select de sql puede pedirse como select campo1, campo2, campo.. from mitabla etcétera.

    Y el objeto IMAGE de visual basic net tiene muchas propiedades usenlas. 

    GLORIA ALVITES