Vous êtes sur la page 1sur 14

ElmodelodeaccesoadatosADO

1.Presentacin
LabibliotecadeobjetosADO(ActiveXDataObjects)lepermiteescribirunaaplicacinqueaccedeadatossituadosen
unservidordebasesdedatosymanejarstasmedianteunproveedorOLEDB.
ADO tiene la ventaja de ser fcil de usar, con buen rendimiento y usando poca memoria y espacio de disco. ADO
ofrecelasfuncionalidadesbsicasquepermitencrearaplicacionescliente/servidoryaplicacionesWeb.
Para poder utilizar la biblioteca de objetos ADO, es necesario seleccionar la referencia Microsoft ActiveX Data
Objects 6.0 Library en la lista de referencias a las bibliotecas de objetos. Si esta referencia no est disponible,
debeseleccionarelarchivoMSADO15.dllmedianteelbotndecomandoExaminar.Generalmente,estearchivoest
ubicadoeneldirectorioC:\Archivosdeprograma\CommonFiles\System\ADO.
Igualmente puede utilizar las extensiones ADO seleccionando la referencia Microsoft ADO Ext 6.0 for DLL and
Security(archivoMSADOX.DLL).Estasextensioneslepermitenaccederaobjetoscomplementarios(catalgo,users,
views)delmodeloADO.
El

archivo

de

ayuda

ADO210.chm

ubicado

en

el

directorio

C:\Archivos

de

Programa\Common

Files\MicrosoftShared\Office 15\1036, le permite obtener informacin detallada sobre la utilizacin de los modelos
ADO.

2.ADOyOLEDB
OLE DB es una tecnologa que permite un acceso uniforme a los datos almacenados en diversas fuentes de
informacin:basesdedatosrelacionalesonorelacionales,correo,sistemasdearchivosPrcticamentetodoslos
datosdelaempresasonaccesiblesmedianteOLEDB.
ADO (ActiveX Data Objects) es la interfaz de programacin utilizada para acceder a los datos de todos los
proveedoresdedatosOLEDB.
Arquitecturatecnolgica

Editions ENI Tous droits rservs Copie personnelle de jose rodriguez

- 1-

LosproveedoresdedatosoProviderssoncontroladoresquepermitencomunicarconlosorgenesdedatos.

3.JerarquadelosobjetosADO

- 2-

Editions ENI Tous droits rservs Copie personnelle de jose rodriguez

4.ModelodebasedeprogramacinADO
ADOlepermiteejecutarlasiguientesecuenciadeacciones:

establecerunaconexinaunabasededatosOLEDBoODBCpormediodelobjetoConnection,

crearuncomandoquepermitaenviarunaconsultaSQLalservidorutilizandoelobjetoCommand,

ejecutarelcomando.Sielcomandodevuelvefilas,almacenarlasenunobjetoRecordset,

utilizarlosdatosdelobjetoRecordset:ordenar,filtrar,modificar,eliminarlosregistros,

actualizar los datos: validar los eventuales cambios del objeto Recordset, incorporar las actualizaciones en una

Editions ENI Tous droits rservs Copie personnelle de jose rodriguez

- 3-

transaccin,
l

sisehautilizadounatransaccin:aceptarodesecharlasactualizacionesaportadasdurantesta.

Ejemplo

Dim cnn As New ADODB.Connection


Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset

Etapa 1: establecer una conexin a un origen de datos


SQL Server mediante la tecnologa OLEDB
cnn.Open "Provider=SQLOLEDB.1;Data Source=SRV; _
& "Initial Catalog=Presupuesto;" _
& "Integrated Security=SSPI;Persist Security Info=False;"

Etapa 2: crear un comando


Set cmd.ActiveConnection = cnn
cmd.CommandText = "SELECT * FROM Clientes"

Etapa 3: ejecutar el comando

rs.CursorLocation = adUseClient
rs.Open cmd, , adOpenStatic, adLockBatchOptimistic

Etapa 4 : manipular los datos

rs.Filter = "CLI_CIUDAD LIKE Barcelona"


Do While Not rs.EOF
rs("CLI_PAS") = "E"
rs.MoveNext
Loop

Etapa 5: actualizar los datos modificados

cnn.BeginTrans
rs.UpdateBatch

Etapa 6: terminar la actualizacin de la base SQL

If MsgBox("Desea confirmar las actualizaciones?", _


vbYesNo) = vbYes Then
cnn.CommitTrans
Else
cnn.RollbackTrans
End If

5.DescripcindelosobjetosADO

- 4-

Connection

Representaunaconexinconunorigendedatos.

Command

Defineuncomandoespecficoquedebeejecutarsesobreunorigendedatos.

Editions ENI Tous droits rservs Copie personnelle de jose rodriguez

Recordset

Representa el conjunto de registros completo de una tabla de bases de datos o los


resultadosdeuncomando(ej: resultadosdeunaconsultaSQL).

Record

Funciona esencialmente como un objeto Recordset de una sola lnea. El origen de los
datos en un objeto Record puede ser un comando que devuelve una lnea de datos a
partirdelservidor.LautilizacindeobjetosRecordenlugardeRecordsetpararecibirlos
resultados de una consulta que devuelve una sola lnea de datos elimina el exceso de
tratamientovinculadoalainstanciacindelobjetoRecordset,queesmscomplejo.

Stream

Proporciona el medio para leer, escribir y gestionar un flujo de bytes formado por texto
odatosbinarios.

6.LascoleccionesADO
Parameters

ColeccindetodoslosobjetosParameterdeunobjeto Command.ElobjetoParameter
representa un parmetro o argumento asociado a un objeto Command basado en una
consultaconparmetrosounprocedimientoalmacenadoconparmetros.

Properties

Coleccin de todos los objetos Property para un objeto determinado (Connection,


Command, Recordset).ElobjetoProperty representa una caracterstica dinmica de un
objetoADOdefinidoporelusuario.

Errors

Coleccin de todos los objetos Error creados en respuesta a un error nico vinculado al
proveedorOLEDB.Elobjeto Error contiene informaciones relativas a un error de acceso
alosdatos.

Fields

Coleccin de todos los objetos Field correspondientes a una columna (o campo) de un


objetoRecordset.

7.LosobjetosConnection
Mtodos

BeginTrans

Empiezaunanuevatransaccin.

Cancel

Interrumpe y anula la ejecucin de una consulta iniciada en modo asncrono


mediantelosmtodosExecuteuOpen.

Close

Cierraunaconexinabierta,ascomotodoslosobjetosquedependendesta.

CommitTrans

Guardaloscambiosefectuadosalosdatosydetienelatransaccinencurso.

Execute

Ejecuta la consulta, la instruccin SQL, el procedimiento almacenado o el texto


propiodelproveedorOLEDB.

Open

Abreunaconexinaunorigendedatosparapoderejecutarcomandos.

OpenSchema

Obtiene informaciones procedentes del proveedor OLE DB, relativas al esquema de


labasededatos.

RollbackTrans

Anula los cambios realizados a los datos durante la transaccin en curso y detiene
estaltima.

Propiedades

Attributes

DefineodevuelveunaovariascaractersticasdeunobjetoConnection.Elvalor
pordefectoescero.

CommandTimeout

Indicaelintervalodeespera,ensegundos,quedeberespetarsealintentarla
ejecucin de un comando, antes de interrumpir el intento y generar un

Editions ENI Tous droits rservs Copie personnelle de jose rodriguez

- 5-

mensajedeerror.Elvalorpordefectoes30.
ConnectionString

Defineodevuelvelainformacinutilizadaparaestablecerunaconexinconel
origendedatos.

ConnectionTimeout

Indica el intervalo de tiempo, en segundos, que debe respetarse al intentar


una conexin, antes de abortarla y generar un mensaje de error. El valor por
defectoes15.

CursorLocation

Defineodevuelveeltipodecursorquedebeemplearsepordefectoparaesta
conexin(cursordelladoclienteocursordelladoservidor).

DefaultDatabase

IndicalabasededatospordefectodeunobjetoConnection.

IsolationLevel

IndicaelniveldeaislamientodeunobjetoConnection.

Mode

IndicalospermisosdemodificacindedatosdeunobjetoConnection.

Provider

IndicaelnombredelproveedorOLEDBdelobjetoConnection.

State

IndicasielobjetoConnectionestabiertoocerrado.Slolectura.

Version

IndicaelnmerodeversinADO.Slolectura.

Ejemplo
Creacindeunareferenciasobrelabasededatosactual.

Dim cncPresupuesto as ADODB.Connection


Set cncPresupuesto = CurrentProject.Connection

Aperturadeunabasededatosexterna.

Dim cncPresupuesto as ADODB.Connection


cncPresupuesto.Open "Provider=Microsoft.ACE.OLEDB.15.0.;" _
& "Data Source = C:\Presupuesto\Presupuesto.accdb";

UtilizacindelosmtodosCommitTransyRollbackTransparaconfirmaroanularlaactualizacinderegistros.

Dim cnc As ADODB.Connection


Dim strSQL As String
Dim strMessage As String

Abre la conexin.

Set cnc = CurrentProject.Connection

Inicio de la transaccin

cnc.BeginTrans

Consultas SQL de actualizacin

strSQL = "UPDATE CLIENTES SET CLI_PAIS = Espaa" _


& "WHERE CLI_CIUDAD = Madrid"
cnc.Execute strSQL
strSQL = "UPDATE CLIENTES SET CLI_PAIS = Francia" _
& "WHERE CLI_CIUDAD = Pars"
cnc.Execute strSQL

- 6-

Editions ENI Tous droits rservs Copie personnelle de jose rodriguez

Pregunta al usuario si desea validar las actualizaciones

If MsgBox("Desea confirmar la actualizacin de los pases?", vbYesNo) _


= vbYes Then

Guarda los cambios

cnc.CommitTrans
Else

Anula los cambios

cnc.RollbackTrans
End If

8.LosobjetosCommand
Mtodos

Cancel

Interrumpe y cancela la ejecucin de una consulta iniciada en modo asncrono


medianteelmtodoExecute.

CreateParameter

CreaunnuevoobjetoParameteryespecificasuspropiedades.

Execute

Ejecuta la consulta, la instruccin SQL o el procedimiento almacenado


especificadomediantelapropiedadCommandText.

Propiedades

ActiveConnection

IndicaelobjetoConnectionalqueestasociadoelcomando.

CommandText

ContieneeltextodelcomandoquedebeenviarsealproveedorOLEDB.

CommandTimeout

Indicaelintervalodetiempo(ensegundos)quedeberespetarsealintentarla
ejecucin del comando, antes de interrumpir el intento y generar un mensaje
deerror.Elvalorpordefectoes30.

CommandType

IndicaeltipodelobjetoCommand.

Name

IndicaelnombredelobjetoCommand.

Prepared

Indica si es necesario guardar una versin compilada del comando en el


servidorantesdelaejecucin.

State

IndicasielobjetoCommandestabiertoocerrado.Enslolectura.

Ejemplo
UtilizacindelobjetoCommandparacrearunconjuntoderegistros.

Dim cnc As New ADODB.Connection


Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset

Abre la conexin

cnc.Open "Provider=Microsoft.ACE.OLEDB.15.0.;" _
& "Data Source = C:\Presupuesto\Presupuesto.accdb;PersistSecurity
Info=False"

Editions ENI Tous droits rservs Copie personnelle de jose rodriguez

- 7-

Ejecuta el comando Select

Set cmd.ActiveConnection = cnc


cmd.CommandType = adCmdText
cmd.CommandText = "SELECT * FROM CLIENTES WHERE" _
& " CLI_CIUDAD = Madrid"
Set rst = cmd.Execute

Muestra el nombre de la empresa

en la ventana Inmediato

Do While Not rst.EOF


Debug.Print rst("CLI_EMPRESA")
rst.MoveNext
Loop
rst.Close
cnc.Close

9.LosobjetosRecordset
Mtodos

AddNew

CreaunnuevoregistroparaunobjetoRecordsetquepuedaactualizarse.

Cancel

CancelalaejecucindeunaoperacinOpenasncronaenespera.

CancelBatch

Cancelaunaactualizacinporlotesenespera.

CancelUpdate

Cancela todas las modificaciones aportadas al registro actual o a un nuevo


registroantesdellamaralmtodoUpdate.

Clone

CreaunobjetoRecordsetduplicadoapartirdeunobjetoRecordsetexistente.

Close

Cierra el objeto Recordset abierto, as como todos los objetos que dependen
deste.

CompareBookmarks

Compara dos marcadores y devuelve un valor que indica sus posiciones


relativas.

Delete

Eliminaelregistroactualoungrupoderegistros.

Find

Busca en un objeto Recordset el registro correspondiente a criterios


especficos.

GetRows

ExtraevariosregistrosdeunobjetoRecordsetyloscolocaenunamatriz.

GetString

DevuelveunobjetoRecordsetenformadecadena.

Move

DesplazalaposicindelregistroactualenunobjetoRecordset.

MoveFirst

Desplaza la posicin del registro actual hasta el primer registro del objeto
Recordset.

MoveLast

Desplaza la posicin del registro actual hasta el ltimo registro del objeto
Recordset.

MoveNext

Desplaza la posicin del registro actual hasta el registro siguiente del objeto
Recordset.

MovePrevious

Desplaza la posicin del registro actual hasta el registro anterior del objeto
Recordset.

NextRecordset

Devuelve el conjunto de registros siguiente en el caso de que un comando


conllevevariasconsultasdeseleccin.

- 8-

Editions ENI Tous droits rservs Copie personnelle de jose rodriguez

Open

Abre un cursor que representa los registros de una tabla o los resultados de
unaconsulta.

Requery

Actualiza los datos de un objetoRecordsetvolviendoaejecutarlaconsultaen


laquesebasaelobjeto.

Resync

Actualizalosdatosdelobjeto Recordset en curso a partir de la base de datos


subyacente.

Save

GuardaelobjetoRecordsetenunarchivo.

Seek

Busca en el ndice de un objeto Recordset un registro correspondiente a un


valoryreemplazaelregistroactualporelregistroencontrado.

Supports

DeterminasiunobjetoRecordsetsoportauntipodefuncionalidadparticular.

Update

GuardaloscambiosaportadosalregistroactualdelobjetoRecordset.

UpdateBatch

Guardaeneldiscotodaslasactualizacionesporlotesenespera.

Propiedades

AbsolutePage

Indicalapginadelregistroactual.

AbsolutePosition

IndicalaposicinordinaldelregistroactualdentrodeunobjetoRecordset.

ActiveCommand

IndicaelobjetoCommandquehacreadoelobjetoRecordsetcorrespondiente.
Slolectura.

ActiveConnection

IndicaaquobjetoConnectionperteneceelobjetoRecordset.

BOF

Indica si el puntero de registro est posicionado antes del primer registro del
objetoRecordset.Slolectura.

Bookmark

Devuelve un marcador que identifica de manera nica el registro actual en el


objetoRecordsetodesplazaelregistroactualaunregistroidentificadoporun
marcadorvlido.

CacheSize

Indica el nmero de registros de un objeto Recordset almacenado en


memoriacach.

CursorLocation

Defineodevuelveeltipodecursorpordefectoparaestaconexin(cursorlado
clienteocursorladoservidor).

CursorType

IndicaeltipodecursorutilizadoparaesteobjetoRecordset.

DataMember

Indica el nombre del miembro de datos que debe extraerse del objeto
definidoporlapropiedadDataSource.Slolectura.

DataSource

Indica que un objeto que contiene datos debe representarse como objeto
Recordset.Slolectura.

EditMode

Indicaelestadodemodificacindelregistroactual.Slolectura.

EOF

Indicasielpunteroderegistroestposicionadodespusdelltimoregistroen
elobjetoRecordset.Slolectura.

Filter

DefineunfiltrodedatosenelRecordset.

Index

IndicaelnombredelndiceactualparaelRecordset.

LockType

Indicaeltipodebloqueodelosregistrosdurantelasmodificaciones.

MarshalOptions

Indicaquregistrossedevuelvenalservidor.

MaxRecords

IndicaelnmeromximoderegistrosquesedevuelvenaunobjetoRecordset
desdeunamismaconsulta.Elvalorpordefectoescero(nohaylmite).

PageCount

IndicaelnmerodepginasdedatoscontenidasenelobjetoRecordset.Slo
lectura.

PageSize

IndicaelnmeroderegistroscontenidosenunapginadelRecordset.

Properties

ReferenciaalaColeccindelosobjetosPropertydelobjetoRecordsetactual.

Editions ENI Tous droits rservs Copie personnelle de jose rodriguez

- 9-

RecordCount

IndicaelnmeroderegistrosenelobjetoRecordset.Slolectura.

Sort

Especifica uno o varios nombres de campos segn los cuales se ordena el


objetoRecordset,ydeterminaelcriteriodeordenacindecadacampo.

Source

IndicaelorigendelosdatosdeunobjetoRecordset.

State

Indica el estado del Recordset: abierto, cerrado u operacin asncrona en


curso.Slolectura.

Status

Indica el estado del registro actual correspondiente a las actualizaciones por


lotesuotrasoperacionesglobales.Slolectura.

StayInSync

Indica, en un objeto Recordset jerrquico, si la fila principal debe cambiar


cuando cambia el conjunto de los registros secundarios subyacentes. Slo
lectura.

Ejemplo
TransformacinenmaysculasdeloscaracteresdelcampoCli_EmpresaenlatablaClientes.

Dim cnc As New ADODB.Connection


Dim rstCli As New ADODB.Recordset
Creacin del Recordset
Set cnc = CurrentProject.Connection
rstCli.Open "Select from Clientes", cnc, _
adOpenKeyset, adLockOptimistic
Recorrido de los registros
With rstCli
Do Until .EOF
rstCli("Cli_Empresa") = _
UCase(rstCli("Cli_Empresa"))
Actualizacin
.Update
Registro siguiente
.MoveNext
Loop
End With
rstCli.Close
cnc.Close

UtilizacindelmtodoSeek:bsquedadeunclienteapartirdesucdigo.

Dim cnc As New ADODB.Connection


Dim rstCli As New ADODB.Recordset
Dim strCodigoCli As String

Creacin del Recordset

Set cnc = CurrentProject.Connection


rstCli.Open "Clientes", cnc, adOpenKeyset, _
adLockReadOnly, adCmdTableDirect
With rstCli

Entrada del cdigo cliente

strCodigoCli = _

- 10 -

Editions ENI Tous droits rservs Copie personnelle de jose rodriguez

InputBox("Introduzca el cdigo cliente")

ndice actual: clave primaria

.Index = "PrimaryKey"

Bsqueda

.Seek strCodigoCli, adSeekFirstEQ

Registro no encontrado

If .EOF Then
MsgBox "Cliente no encontrado"
Else

Registro encontrado
MsgBox "Empresa: " & rstCli("Cli_Empresa")

End If
End With
rstCli.Close
cnc.Close

UtilizacindelmtodoFind:bsquedadelosclientescuyonombredeEmpresaempieceporunvalordeterminado.

Dim cnc As New ADODB.Connection


Dim rstCli As New ADODB.Recordset
Dim strEmp As String
Dim strCrit As String
Dim bkm As Variant

Creacin del Recordset

Set cnc = CurrentProject.Connection


rstCli.Open "Clientes", cnc, adOpenKeyset, _
adLockReadOnly, adCmdTableDirect
With rstCli

Entrada del cdigo cliente

strEmp = InputBox("Introduzca las primeras "_


& "letras de la Empresa")

Bsqueda

strCrit = "Cli_Empresa Like " & strEmp & "%"


.Find strCrit, , adSearchForward

Registro no encontrado

If .EOF Then
MsgBox "Cliente no encontrado"
Else

Si encuentra: bsqueda de los siguientes

Do While Not .EOF


MsgBox rstCli("Cli_Empresa")

Posicin actual

bkm = .Bookmark
.Find strCrit, 1, adSearchForward, bkm
Loop
End If
End With
rstCli.Close
cnc.close

Editions ENI Tous droits rservs Copie personnelle de jose rodriguez

- 11 -

10.LacoleccinFields
Mtodos

Append

AgregaunobjetoFieldaunacoleccinFields.

Delete

EliminaunobjetoFielddelacoleccinFields.

Refresh

ActualizalosobjetosFieldenlacoleccinFields.

11.LosobjetosField
Mtodos

AppendChunk

AgregadatosaunobjetoFielddetipobinarioodegrantamao.

GetChunk

Devuelve todo o parte del contenido de un objeto Field de tipo binario o de


grantamao.

Propiedades

ActualSize

Indicalalongituddelvalordeuncampo.Slolectura.

Attributes

IndicaunaovariascaractersticasdeunobjetoField.

DefinedSize

IndicaeltamaodelobjetoField.Slolectura.

Name

IndicaelnombredelobjetoField.

NumericScale

IndicalaescaladelosvaloresnumricosdelobjetoField.Slolectura.

OriginalValue

IndicaelvalordelobjetoFieldantesdelamodificacin.Slolectura.

Precision

IndicaelgradodeprecisindelosvaloresdetiponumricoenelobjetoField.
Slolectura.

Properties

ContienetodoslosobjetosPropertydeunobjetoField.

Type

IndicaeltipodedatosdelobjetoField.

UnderlyingValue

IndicaelvaloractualdelobjetoFieldenlabasededatos.Slolectura.

Value

IndicaelvalordelobjetoField.

12.LacoleccinParameters
Mtodos

Append

AgregaunobjetoParameteralacoleccinParameters.

Delete

EliminaunobjetoParameterdelacoleccinParameters.

Refresh

ActualizalosobjetosParameterenlacoleccinParameters.

Ejemplo
Muestralalistadetodosloscampos(nombreytipo)delatablaClientesenlaventanaInmediato.

- 12 -

Editions ENI Tous droits rservs Copie personnelle de jose rodriguez


Dim cnc As New ADODB.Connection
Dim rstCli As New ADODB.Recordset
Dim fld As ADODB.Field

Creacin del Recordset

Set cnc = CurrentProject.Connection


rstCli.Open "Empleados", cnc, adOpenKeyset, adLockReadOnly, _
adCmdTableDirect
For Each fld In rstCli.Fields
Debug.Print fld.Name & " " & fld.Type
Next
rstCli.close

13.LosobjetosParameter
Mtodos

AppendChunk

AgregadatosaunobjetoParameterdetipobinariootextodegrantamao.

Propiedades

Attributes

IndicaunaovariascaractersticasdeunobjetoParameter.

Direction

Indica si el objeto Parameter corresponde a un parmetro de entrada, de


salida, o ambos, o si el parmetro es el tipo de retorno de un procedimiento
almacenado.

Name

IndicaelnombredelobjetoParameter.

NumericScale

IndicalaescaladelosvaloresnumricosdelobjetoParameter.

Precision

Indica el grado de precisin de los valores de tipo Numeric del objeto


Parameter.

Properties

ContienetodoslosobjetosPropertydeunobjetoParameter.

Size

Indicaeltamaomximo,enbytesoencaracteres,deunobjetoParameter.

Type

IndicaeltipodedatosdelobjetoParameter.

Value

IndicaelvaloratribuidoalobjetoParameter.

14.LacoleccinProperties
Mtodos

Refresh

Actualiza los objetos Property en la coleccin Properties a partir de las


informacionesdelproveedor.

15.LosobjetosProperty

Editions ENI Tous droits rservs Copie personnelle de jose rodriguez

- 13 -

Propiedades

Attributes

IndicaunaovariascaractersticasdeunobjetoProperty.

Name

IndicaelnombredelobjetoProperty.Enslolectura.

Type

IndicaeltipodedatosdelobjetoProperty.

Value

IndicaelvalordelobjetoProperty.

16.LacoleccinErrors
Mtodos

Clear

EliminaelconjuntodelosobjetosErrordelacoleccinErrors.

Refresh

ActualizalosobjetosErrorapartirdelasinformacionesdelproveedorOLEDB.

Propiedades

Count

IndicaelnmerodeobjetosErrordelacoleccinErrors.Enslolectura.

Item

Permite la indexacin de la coleccin Errorsparareferenciaraunobjeto Error


especfico.Slolectura.

17.LosobjetosError
Propiedades

Description

DevuelvelacadenadescriptivaasociadaalobjetoError.Slolectura.

HelpContext

Indica el ContextID del archivo de ayuda asociado al objeto Error. Slo


lectura.

HelpFile

IndicaelnombredelarchivodeayudaasociadoalobjetoError.Slolectura.

NativeError

Indica el cdigo de error especfico del proveedor asociado al objeto Error.


Slolectura.

Number

Indicaelnmeroqueidentificademaneranicaelerrordelobjeto Error.Slo
lectura.

Source

Indicaelnombredelobjetoodelaaplicacinqueorigin elerror.Slolectura.

SQLState

Indica el valor devuelto por el proveedor OLE DB. Cadena de cinco caracteres
conformealanormaSQLANSI.Slolectura.

- 14 -

Editions ENI Tous droits rservs Copie personnelle de jose rodriguez

Vous aimerez peut-être aussi