access - código 3

Upload: jamerino

Post on 03-Mar-2016

24 views

Category:

Documents


0 download

DESCRIPTION

Curso Access 2013

TRANSCRIPT

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 1/21

    Tabla Consulta Formulario Informe Macro Cdigo ActiveX Temasgenerales Volveraseleccin

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 2/21

    RecipCountAsLongFileCountAsLongEndTypeTypeMapiRecipReservedAsLongRecipClassAsLongNameAsStringAddressAsStringEIDSizeAsLongEntryIDAsStringEndTypeTypeMapiFileReservedAsLongFlagsAsLongPositionAsLongPathNameAsStringFileNameAsStringFileTypeAsStringEndTypeDeclareFunctionMAPISendMailLib"MAPI32.DLL"Alias"BMAPISendMail"_(ByValSession&,ByValUIParam&,MessageAsMAPIMessage,_Recipient()AsMapiRecip,File()AsMapiFile,ByValFlags&,_ByValReserved&)AsLong

    GlobalConstSUCCESS_SUCCESS=0GlobalConstMAPI_TO=1GlobalConstMAPI_CC=2GlobalConstMAPI_BCC=3GlobalConstMAPI_LOGON_UI=&H1

    '*************************************************************'FUNCION:CountTokens''PROPOSITO:'Calcularlacantidaddeitemsquehayenunstring,delimitadospor'undeterminadoseparador.Utilparadimensionarunamatrizpara'almacenarindividualmentelositems,antesdellamaraParseTokens.''PARAMETROS:'sSource:Lalistadeitemsdelimitados'sDelim:ElseparadorutilizadoensSourceparadelimitarlositems''RETORNO'ElnumerodeitemsensSource.SisSourceestvacio,devuelve0.'*************************************************************FunctionCountTokens(ByValsSourceAsString,ByValsDelimAsString)DimiDelimPosAsIntegerDimiCountAsIntegerIfsSource=""ThenCountTokens=0ElseiDelimPos=InStr(1,sSource,sDelim)DoUntiliDelimPos=0iCount=iCount+1iDelimPos=InStr(iDelimPos+1,sSource,sDelim)LoopCountTokens=iCount+IIf(Right(sSource,1)=sDelim,0,1)EndIfEndFunction

    '*************************************************************'FUNCION:GetToken'

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 3/21

    'PROPOSITO:'Deunstringdeitemsdelimitados,devuelveelprimeroyloeliminadelalista.''PARAMETROS:'sSource:Lalistadeitemsdelimitados'sDelim:ElseparadorutilizadoensSourceparadelimitarlositems''RETORNO'sSourceesmodificado,conelprimeritemeliminado.'LafuncindevuelveelitemeliminadodesSource.'*************************************************************FunctionGetToken(sSourceAsString,ByValsDelimAsString)AsStringDimiDelimPosAsInteger'BuscaelprimerdelimitadoriDelimPos=InStr(1,sSource,sDelim)If(iDelimPos=0)ThenGetToken=trim$(sSource)sSource=""ElseGetToken=trim$(LEFT$(sSource,iDelimPos1))sSource=Mid$(sSource,iDelimPos+1)EndIfEndFunction

    '*************************************************************'FUNCION:Mail''PROPOSITO:'PasalainformacindeloscamposTo,Subject,CC,Attach,yMensaje'delformularioactivoalafuncinSendMail.'CompruebaqueloscamposnoseanNULL,ysiesaslosconviertea"".'Muestratambinunmensajeindicandosielenvofueokono.'EstafuncinesactivadaporelbotnEnviardelformulario.''PARAMETROS:'Ninguno''RETORNO'Nada'*************************************************************FunctionMail()DimfAsForm,resultSetf=Screen.ActiveFormIfIsNull(f!To)Orf!To=""ThenExitFunctionIfIsNull(f!Subject)Thenf!Subject=""IfIsNull(f!CC)Thenf!CC=""IfIsNull(f!BCC)Thenf!BCC=""IfIsNull(f!Attach)Thenf!Attach=""IfIsNull(f!Message)Thenf!Message=""result=SendMail((f!Subject),(f!To),(f!CC),(f!BCC),(f!Attach),(f!Message))IfresultSUCCESS_SUCCESSThenMsgBox"Errorsendingmail:"&result,16,"Mail"ElseMsgBox"Messagesentsuccessfully!",64,"Mail"EndIfEndFunction

    '*************************************************************'SUB:ParseTokens''PROPOSITO:'Extraerlositemsdeunalistadelimitadaycolocarlosenunamatriz.'

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 4/21

    'PARAMETROS:'mArray():matriztipostringdeunadimensindondesecolocarnlositems.'sTokens:listadelimitadaconlositems.'sDelim:separadorutilizadoparadelimitar.''RETORNO'Nada'*************************************************************SubParseTokens(mArray()AsString,ByValsTokensAsString,ByValsDelimAsString)DimiAsIntegerFori=LBound(mArray)ToUBound(mArray)mArray(i)=GetToken(sTokens,sDelim)NextEndSub

    '*************************************************************'FUNCION:SendMail''PROPOSITO:'EstaeslafuncinqueinteractadirectamenteconMAPISendMail.'Pasandoleunaslistasdelimitadaspor""deTo,CC,BCC,yadjuntos,'yunmensaje,lafuncinpreparalasestructurasMapiRecipyMapiFile'conlaayudadeParseToken.'Unavezpreparadaslasestructuras,llamaalaAPIMAPISendMailpara'enviarelmensaje.''PARAMETROS:'sSubject:EstextoqueaparecercomoAsuntodelmensaje'sTo:Listadelimitadapor""conlosdestinatariosdelmensaje.'sCC:ListadelosdestinatariosCC(Copia)'sBCC:ListadelosdestinatariosBCC(Copiaoculta)'sAttach:Listadelosficherosaadjuntaralmensaje''RETORNO'SUCCESS_SUCCESSsinohayerror,oelcdigoMAPIdelerror.'*************************************************************FunctionSendMail(sSubjectAsString,sToAsString,sCCAsString,sBCCAsString,_sAttachAsString,sMessageAsString)Dimi,cTo,CCC,cBCC,cAttach'contadoresdeitemsDimMAPI_MessageAsMAPIMessage'ContarelnmerodeitemsencadalistacTo=CountTokens(sTo,"")CCC=CountTokens(sCC,"")cBCC=CountTokens(sBCC,"")cAttach=CountTokens(sAttach,"")'DimensionarlasmatricesparalaslistasReDimrTo(0TocTo)AsStringReDimrCC(0ToCCC)AsStringReDimrBCC(0TocBCC)AsStringReDimrAttach(0TocAttach)AsString'PasarelcontenidodelaslistasalasmatricesParseTokensrTo(),sTo,""ParseTokensrCC(),sCC,""ParseTokensrBCC(),sBCC,""ParseTokensrAttach(),sAttach,""'CrearlaestructuraMAPIRecipparaalmacenartodoslosdestinatariosReDimMAPI_Recip(0TocTo+CCC+cBCC1)AsMapiRecip'Cargarlos"TO:"enlaestructuraFori=0TocTo1MAPI_Recip(i).Name=rTo(i)MAPI_Recip(i).RecipClass=MAPI_TONexti'Cargarlos"CC:"

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 5/21

    Fori=0ToCCC1MAPI_Recip(cTo+i).Name=rCC(i)MAPI_Recip(cTo+i).RecipClass=MAPI_CCNexti'Cargarlos"BCC:"Fori=0TocBCC1MAPI_Recip(cTo+CCC+i).Name=rBCC(i)MAPI_Recip(cTo+CCC+i).RecipClass=MAPI_BCCNexti'CrearlaestructuraMAPI_FileparalosadjuntosReDimMAPI_File(0TocAttach)AsMapiFile'CargarlosadjuntosenlaestructuraMAPI_Message.FileCount=cAttachFori=0TocAttach1MAPI_File(i).Position=1MAPI_File(i).PathName=rAttach(i)Nexti'LlenarloscamposdelmensajeMAPI_Message.Subject=sSubjectMAPI_Message.NoteText=sMessageMAPI_Message.RecipCount=cTo+CCC+cBCC'EnviarelmensajeSendMail=MAPISendMail(0&,0&,MAPI_Message,MAPI_Recip(),_MAPI_File(),MAPI_LOGON_UI,0&)EndFunction

    Nmerosromanos

    CdigoBasicOptionCompareDatabaseOptionExplicit

    PublicFunctionromano(vAsVariant)AsVariant

    'Traduceunnmerosiestentre1y12aromano

    IfIsNumeric(v)ThenDimnumAsIntegernum=CInt(v)SelectCaseCInt(v)Case1:romano="I"Case2:romano="II"Case3:romano="III"Case4:romano="IV"Case5:romano="V"Case6:romano="VI"Case7:romano="VII"Case8:romano="VIII"Case9:romano="IX"Case10:romano="X"Case11:romano="XI"Case12:romano="XII"CaseElse:romano=""EndSelectElseromano=""EndIfEndFunction'***************************************************PublicFunctionFechaRomana(vAsVariant)AsString''Fechaconmesenformatoromano

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 6/21

    IfIsDate(v)ThenFechaRomana=Day(v)&""&romano(Month(v))&""&Year(v)ElseFechaRomana=""EndIfEndFunction'***************************************************PublicFunctionHoraRomana(vAsVariant)AsString''Horaenformatoromanoredondeadoacuartosdehora

    IfIsDate(v)Then'CalcularhoraDimhoraAsInteger:hora=Hour(v)

    'CalcularcuartosDimminsAsStringSelectCaseCInt(Minute(v)/15)Case0:mins=""Case1:mins="y"Case2:mins="y"Case3:hora=hora+1:mins=""'mins=""Case4:hora=hora+1EndSelect

    'Corregirhorahora=horaMod12Ifhora=0Thenhora=12

    'ConstruirlahoraHoraRomana=romano(hora)&mins&IIf(Hour(v)>=12,"p.m.","a.m.")'PostMeridiam,AnteMeridiamElseHoraRomana=""EndIfEndFunction'***************************************************PublicFunctionNumRomano(vAsVariant)AsString''Obtieneelequivalenteromanodeunnmerodehasta4cifras

    IfNotIsNumeric(v)ThenNumRomano=""ElseDimnumAsInteger:num=CInt(v)Dimn1AsInteger:n1=numMod10:num=num\10Dimn2AsInteger:n2=numMod10:num=num\10Dimn3AsInteger:n3=numMod10:num=num\10Dimn4AsInteger:n4=numMod10

    Dims1AsString:s1=romano(n1)Dims2AsString:s2=Reemplazar(Reemplazar(Reemplazar(romano(n2),"X","C"),"V","L"),"I","X")Dims3AsString:s3=Reemplazar(Reemplazar(Reemplazar(romano(n3),"X","M"),"V","D"),"I","C")Dims4AsString:s4=Reemplazar(Reemplazar(Reemplazar(romano(n4),"X","~M"),"V","~D"),"I","M")

    NumRomano=s4&s3&s2&s1EndIfEndFunction

    Reproducirsonidos

    CdigoBasicOptionCompareDatabase

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 7/21

    OptionExplicit

    DeclareFunctionsndPlaySoundLib"winmm"Alias"sndPlaySoundA"(ByValFileNameAsString,ByValsnd_asyncAsLong)AsLongDeclareFunctionmciSendStringLib"winmm"Alias"mciSendStringA"(ByVallpstrCommandAsString,ByVallpstrReturnStringAsAny,ByValuReturnLengthAsLong,ByValhwndCallbackAsLong)AsLong'************************************************************************************************************FunctionmyPlaySound(fichero,Tipo)DimlAsLongSelectCaseTipoCase"mp3"l=sndPlaySound(fichero,1)Case"wav"l=sndPlaySound(fichero,1)Case"mid"l=mciSendString("closemymid","",0,0)'detienemymidsiestabaenplayl=mciSendString("open"&fichero&"typesequenceraliasmymid"&Chr(0),"",0,0)l=mciSendString("playmymid","",0,0)EndSelectmyPlaySound=lEndFunction

    Funcinparacalculardiferenciaentrefechas/Horas

    OptionCompareDatabaseOptionExplicit

    'Funcinparacalculardiferenciaentrefechas/Horas'Estainformacinseaplicaa:Access2000,Access97

    'RESUMEN'Muestracmocrearseunafuncindeejemploquecalculeladiferenciaentredosfechas'dadasysepuedaespecificarelformatoconelqueobtendremoselresultado.

    'Unaformadepoderobtenerladiferenciaentredosfechasesusandolafuncinpredefinida'DifFecha.Elusodeestafucninsevelimitadoalahorademostrarelresultadoobtenido,'esdecir,losresultadossepodrnobteneroenhoras,oenminutos,oendas,peronocon'unformatocombinadodetodos.'Usandolafuncinincluidasepodrobtenerladiferenciaentrelas'funcionesademsdepoderespecificarenquformatoseobtendrelresultadodeladiferencia.'Losparmetrosquesepasarnalafuncinson:'FechaIncial.'FechaFinal.'Formatodelresultado.Esteparmetropodrtomarlossiguientesvalores:'a.ConDia,formatodelresultadodia:hora:minutos'b.ConHora,formatodelresultadohora:minutos'CmocrearyusarlafuncinDifHoras()'1.Abrirlabasededatosenlaquesequierautilizarlafuncin.'2.Desdelapestaademdulos,seleccionarnuevo.'3.Insertarelsiguientecdigo:'****************************************************************************************FunctionDifHoras(FechainicioAsDate,FechaFinalAsDate,formatoAsString)AsString'FormatoConDia,ConHoraDimdblIntervalAsDoubleDimlngTotalHoursAsLongDimlngTotalMinsAsLongDimlngdaysAsLongDimlngHoursAsLongDimlngMinsAsLongDimfechaesAsStringdblInterval=Abs(FechaFinalFechainicio)

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 8/21

    lngdays=Int(CSng(dblInterval))lngTotalHours=Int(CSng(dblInterval*24))lngTotalMins=Int(CSng(dblInterval*1440))'DeterminalasfraccionesdetiempolngHours=lngTotalHoursMod24lngMins=lngTotalMinsMod60SelectCaseformato'CalculanmerodehorasCase"ConHora"fechaes=lngTotalHours&":"&Format$(dblInterval,"nn")'CalculaennmerodedasCase"ConDia"fechaes=lngdays&"das"&lngHours&"Horas"&lngMins&"Minutos"

    EndSelectDifHoras=fechaesEndFunction

    '4.Guardarydarlenombrealmdulo.

    Funcinparacalculardiferenciaentrefechas

    OptionCompareDatabaseOptionExplicit

    'Funcinparacalculardiferenciaentrefechas'Estainformacinseaplicaa:Access2000,Access97

    'RESUMEN'Muestracmocrearseunafuncindeejemploquecalculeladiferenciaentredosfechas'dadasysepuedaespecificarelformatoconelqueobtendremoselresultado.

    'Unaformadepoderobtenerladiferenciaentredosfechasesusandolafuncinpredefinida'DifFecha.Elusodeestafucninsevelimitadoalahorademostrarelresultadoobtenido,'esdecir,losresultadossepodrnobteneroenhoras,oenminutos,oendas,peronocon'unformatocombinadodetodos.'Usandolafuncinqueincluidaposteriormentesepodrobtenerladiferenciaentrelas'funcionesademsdepoderespecificarenquformatoseobtendrelresultadodeladiferencia.'Losparmetrosquesepasarnalafuncinson:'FechaIncial.'FechaFinal.'Formatodelresultado.Esteparmetropodrtomarlossiguientesvalores:'a.ConDia,formatodelresultadodia:hora:minutos:segundos'b.ConHora,formatodelresultadohora:minutos:segundos'c.ConMin,formatodelresultadominutos:segundos'd.ConSeg,formatodelresultadosegundos.'CmocrearyusarlafuncinDarFecha()'1.Abrirlabasededatosenlaquesequierautilizarlafuncin.'2.Desdelapestaademdulos,seleccionarnuevo.'3.Insertarelsiguientecdigo:'************************************************************************************FunctionDarFecha(FechainicioAsDate,FechaFinalAsDate,formatoAsString)AsString'FormatoConDia,ConHora,ConMin,ConSegDimdblIntervalAsDoubleDimlngTotalHoursAsLongDimlngTotalMinsAsLongDimlngTotalSecsAsLongDimlngdaysAsLongDimlngHoursAsLongDimlngMinsAsLongDimlngSecsAsLong

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 9/21

    DimfechaesAsStringdblInterval=Abs(FechaFinalFechainicio)lngdays=Int(CSng(dblInterval))lngTotalHours=Int(CSng(dblInterval*24))lngTotalMins=Int(CSng(dblInterval*1440))lngTotalSecs=Int(CSng(dblInterval*86400))'DeterminalasfraccionesdetiempolngHours=lngTotalHoursMod24lngMins=lngTotalMinsMod60lngSecs=lngTotalSecsMod60SelectCaseformato'Calculanmerototaldesegundos.Case"ConSeg"fechaes=lngTotalSecs&"Segundos"'CalculaelnmerodeminutosysegundosrestantesCase"ConMin"fechaes=lngTotalMins&":"&Format$(dblInterval,"ss")&"Minutos:Segundos"'CalculanmerodehorasCase"ConHora"fechaes=lngTotalHours&":"&Format$(dblInterval,"nn")&":"&Format$(dblInterval,"ss")&"H:M:S"'CalculaennmerodedasCase"ConDia"fechaes=lngdays&"das"&lngHours_&"Horas"&lngMins&"Minutos"&_lngSecs&"Seconds"EndSelectDarFecha=fechaesEndFunction

    '4.Guardarydarlenombrealmdulo.

    Cdigosparabotones

    Podemosaadiranuestraaplicacinunmodulogenricoparaelcontroldelamayoradenuestrosbotones.

    OptionCompareDatabaseOptionExplicit

    PrivatebuttonPressedAsBoolean

    'Desplazaelbotn50pxeleshaciaabajo

    PublicFunctionbuttonDown(iconoAsControl)IfNotbuttonPressedThenicono.TOP=icono.TOP+50icono.LEFT=icono.LEFT+50buttonPressed=TrueEndIfEndFunction

    'Desplazaelbotn50pxeleshaciaarriba

    PublicFunctionbuttonUp(iconoAsControl)IfbuttonPressedThenicono.TOP=icono.TOP50icono.LEFT=icono.LEFT50buttonPressed=FalseEndIfEndFunction

    'Aadirnuevoregistro

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 10/21

    PublicFunctionbuttonNew()DimFAsForm:SetF=Screen.ActiveFormIfNotF.NewRecordThenDoCmd.RunCommandacCmdRecordsGoToNewEndIfEndFunction

    'BotnCancelar

    PublicFunctionbuttonCancel()SendKeys"{ESC}"EndFunction

    'Borrarregistro,soloborraregistrosguardadosenlaBD,modificandounpocoelcdigopodemoshacerquesirva'tambinparacancelarnuevosregistros

    PublicFunctionbuttonErase()OnErrorGoToErr_ComandoBorrarDimFAsForm:SetF=Screen.ActiveForm

    IfNotF.NewRecordAndvbYes=MsgBox("Borrarregistro?",vbQuestion+vbYesNo+vbDefaultButton2,"Confirmar")ThenDoCmd.SetWarningsFalseRunCommandacCmdSelectRecordRunCommandacCmdDeleteDoCmd.SetWarningsTrueEndIfExit_ComandoBorrar:ExitFunctionErr_ComandoBorrar:MsgBoxErr.Description,vbCriticalResumeExit_ComandoBorrarEndFunction

    'Cerrarformularioactivo

    PublicFunctionbuttonClose()'DimfAsForm:f=Screen.ActiveForm'DoCmd.CloseacForm,f.NameDoCmd.RunCommandacCmdCloseWindowEndFunction

    'Salirdelaaplicacin

    PublicFunctionbuttonExit()IfvbYes=MsgBox("Salirdelprograma?",vbQuestion+vbYesNo+vbDefaultButton2,"Confirmar")ThenDoCmd.QuitacQuitSaveAllEndIfEndFunction

    FuncinparaguardartodaslasconsultasdenuestraMDBenmodoSQLenunficherodetexto

    Anivelexplotacin:Ejecutaaccionesmasivascontablasaunavelocidadsorprendente

    Escompatibleconotrosmotoresdebasesdedatos.

    Hacequevariastablasfuncionenjuntas,enmuchoscasos,comosifueranunasola

    yestanfcildereutilizarcomoescribirenelblocdenotas!

    a.Consultasdeunasolatabla:filtrosysql

    Cuandoaunatablaoconsultaenpresentacinhojadedatoslediseamosunfiltro,en2.0aparecelapantalladediseodelfiltroquefuncionaigualquelapantalladediseodelaconsulta,ysipulsamosenelbotnGUARDARrealmenteguardaunaconsulta,osipulsamosenCARGARfiltrodesdeconsultaobtenemoslarelacindeconsultasaplicablescomofiltro.

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 11/21

    b.Mododever:Diseo,Hojadedatos,Sql

    Diseoeselmodopredeterminadoparanuevaconsulta.ParacomprobarsusresultadospasamosaEjecutarconsulta,loquenosllevaaHojadedatos(resultados).ParaaprenderSqlpodemosconfrontarlosotrosdosmodosdeverconelmodoSql.

    c.MododeverSQL:sugerencias

    Copiadeseguridad:mantenerabiertodefondoelblocdenotasoprocesadorSeleccionartextoSQL,Copiar,cambiaralblocoprocesador,pegar.GuardareldocumentoconelSQLunavezpegado.SimplificarElsqlautomaticoquegeneraaccessresultafarragoso:simplificando,sermslegibleydepasoexperimentamos.Encasodefallos,recuperamoseloriginaldeldocumentoqueguardamos.EnconsultassimplesnoesnecesarioprecederloscamposdelalistadeSELECTconelnombredelatablaalaquepertenecen)usaduneditor(comowordpad)confuncin"reemplazar".Ejemplo:paracambiarvarioscamposdeltipocompras.artculo>artculo,compras.precio>precio,compras.importe>importe...podemosbuscarcompras.yreemplazarpornada(dejarenblanco)Verificarcadareemplazo(reemplazandotodo,puedequenosreemplacealgoimprevisto)

    Anivelprogramacin:MuchasfuncionesdeVisualBasicparaAccessrequierenSQL

    DAOySQLestnntimamenteligados.

    ejemploconsultadiseoysql:pasoapaso,simplificarymodificaryparaincluirencodigo

    a.FuncinparaguardartodaslasconsultasdenuestraMDBenmodoSQLenunficherodetexto(sustituyeloselementosenrojosegntupathytubasededatos)

    FunctionExportarQuerydefs()Open"c:\chi\cw20\prueba.txt"ForOutputAs#1DimdbAsDatabase,qdAsQueryDef,msgAsStringDimfinAsString*2,iAsInteger,jAsIntegerfin=Chr$(13)&Chr$(10)'valeusarconstantesvbAJ

    Print#1,"Querydefscw20.mdb"msg="Querydefscw20.mdb"&finSetdb=CurrentDB()Forj=0Todb.Querydefs.Count1Setqd=db.Querydefs(j)msg=msg&qd.Name&fin'porsiquieresverlistaQdf'sPrint#1,qd.NamePrint#1,qd.sqlPrint#1,""NextjMsgBoxmsg'verlistaQdf'sdb.CloseClose#1EndFunction

    Crearregistrosdeprueba

    DurantemislaboresdesoportehecomprobadoqueconformeelconsultanteseplanteaunusodeAccessmsprofesional...selecrealanecesidaddehacerpruebasderendimiento:

    Unnmeromuyelevadoderegistrospuedellegaraseruninconveniente

    (...PEROdependiendomuchodecmosemanejen)

    Entalcaso,resultacmododisponerdeunmtodocomoelsiguiente,paraobtenerunnmeroimportantederegistrosconlosqueefectuarpruebas,biendevolumenobiendevelocidad,sobreunatablacualquieraqueacabamosdedisearyestvaca

    Estepequeofragmentoesun'motor'suficientepara'arrancar'

    FunctionAleatu(inf,sup)

    aleatu=Int((supinf+1)*Rnd+inf)

    EndFunction

    ElmotorAleatunogeneravaloresnicoscosaqueesdeagradecersalvoparaclavesnicas:Paraestecasoreservamoselprimercampodelatablafields(0)

    SilatablaallenartieneuncampoIDautonumricocomoclavenica,noslogeneraJETautomticamente.

    Siestenoesnuestrocaso,alaplicarelcdigo,elcampo1quedaenblancoamenosquemodifiquemosloslimitesdelbucleforb=1...porforb=0...

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 12/21

    Functionengorda2()

    DimdbAsDatabase,rsAsRecordset,i,jAsInteger,dAsDouble,bAsByte

    Constmxint=32000

    Constmxlng=2000000000

    Setdb=CurrentDb

    'sustituirCostesConveniosporlatablaaengordar

    Setrs=db.OpenRecordset("CostesConvenios",2)

    j=rs.Fields.Count1

    Ford=1ToInputBox("ndeRegistros","Aadirregistrosaleatorios",50000)

    rs.AddNew

    Forb=1Toj'0=ID

    SelectCasers.Fields(b).Type

    CasedbInteger

    rs.Fields(b)=aleatu(1,mxint)

    CasedbLong,dbDouble

    rs.Fields(b)=aleatu(1,mxlng)

    CasedbText

    rs.Fields(b)=v3(rs,b)'verdebajo

    Casedbdate

    'Clng(#1/1/90#)=32874,Clng(#31/12/99#)=36525

    rs.Fields(b)=CDate(aleatu(32874,36525))

    CaseElse

    Stop

    EndSelect

    Next

    rs.Update

    Next

    MsgBox"fin"

    EndFunction

    Explicacindelafuncinv3,querellenaloscamposdetextoconcaracteresasciicomprendidosentre65y90

    ElcampoDETEXTOtienetalTAMAO...

    llamarafuncinaleatu(elmotor)paraquedevuelvanumerodecaracteresarellenar(entre0ytamao)

    tantasvecescomocaracteresarellenar:aadircarcterentre65y90acadenaadevolver(tambinmediantelaoportunallamadaaaleatuofcourse).

    Elnuevofragmentitodecdigo

    Functionv3(rst,numerocampo)AsString

    'acepta:rst(recordset)(cuyo)numerocampo(esuncampotexto)

    'devuelve:unacadenaconlacualrellenamoselcampodetexto>rst(numerocampo)

    DimlongitAsByte

    longit=rst.Fields(numerocampo).Size1

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 13/21

    'lacantidadminimadecaracteresconquerellenaresecampoes0

    'lacantidadmxima,longit

    DimrellenarAsByte

    'establecerunnmeroaleatoriodecaracteresarellenar

    rellenar=aleatu(0,longit)

    DimnAsByte,cadenaAsString

    Forn=0Torellenar

    'montarlacadenaquerellenarelcampotexto

    'porejemplomayusculasdelaA(65)alaZ(90)

    cadena=cadena&Chr(aleatu(65,90))

    Next

    v3=cadena

    EndFunction

    Mejoras:Barradeprogresoymensajedetiempotranscurrido

    Functionv2()

    DimtAsDate:t=Time'contartiempotranscurrido

    DimNRAsLong:NR=500000'numeroderegistros

    DimIAsLong

    DimNADA

    'ensearmsgeiniciarbarraStatus

    NADA=SysCmd(acSysCmdInitMeter,"progreso",NR)

    ForI=0ToNR'bucleregistros

    NADA=SysCmd(acSysCmdUpdateMeter,I)'actualiza

    NextI

    NADA=SysCmd(acSysCmdRemoveMeter)'elimina

    t=Timet:MsgBox"terminadoen:"&t

    EndFunction

    Deunaspequeasnecesidades,graciasalareusabilidaddelcdigo,aratosmsomenosperdidos,casicualquiercosapuedellegaraconvertirseenunaherramienta.

    Ponermaysculaslaprimeraletrayminsculaselresto

    PublicFunctionCapitalizar(ByValtextoAsString)AsString

    Capitalizar=UCase(LEFT(texto,1))&LCase(Mid(texto,2))EndFunction

    Ponermaysculaslaprimeraletrayminsculaselrestoconexcepciones

    PublicFunctionMultiCap(textoAsVariant)AsVariant'Capitalizavariaspalabrascontemplandoalgunasexcepciones

    DimtempAsVariantDimiAsIntegerDimansiAsInteger

    temp=LCase(texto)'Empezarenminsculas

    IfLen(temp)>0Then'Novaco

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 14/21

    Mid(temp,1,1)=UCase(LEFT(temp,1))'1romaysculasFori=2ToLen(temp)1ansi=asc(Mid(temp,i,1))If(ansi>=65Andansi=97Andansi192)Then'letrasmaysculas,minsculasyacentuadasElseMid(temp,i+1,1)=UCase(Mid(temp,i+1,1))EndIf

    'CASOSESPECIALES*****'SiesapstrofeponerenminsculaselanteriorIfMid(temp,i,1)="'"ThenMid(temp,i1,1)=LCase(Mid(temp,i1,1))EndIf'*****NextEndIf

    'CASOSESPECIALES*****i=InStr(temp,"S/N")Ifi0ThenMid(temp,i,3)=LCase(Mid(temp,i,3))i=InStr(temp,"De")Ifi0ThenMid(temp,i,4)=LCase(Mid(temp,i,4))

    i=InStr(temp,"Del")Ifi0ThenMid(temp,i,5)=LCase(Mid(temp,i,5))

    i=InStr(temp,"La")Ifi0ThenMid(temp,i,4)=LCase(Mid(temp,i,4))i=InStr(temp,"Y")Ifi0ThenMid(temp,i,3)=LCase(Mid(temp,i,3))'*****

    MultiCap=temp

    EndFunction

    Funcinobtenersemana

    PublicFunctionObtenerSemana(diaSemanaAsInteger)AsStringStaticsemana(1To7)AsStringsemana(1)="Domingo"semana(2)="Lunes"semana(3)="Martes"semana(4)="Mircoles"semana(5)="Jueves"semana(6)="Viernes"semana(7)="Sbado"IfdiaSemana>=1AnddiaSemana

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 15/21

    Fori=0Tofrm.count1Setctrl=frm(i)Ifctrl.Section=acDetailThen'SECCINDETALLE=0If(TypeOfctrlIsTextBox)Or(TypeOfctrlIsComboBox)Or_(TypeOfctrlIsListBox)Or(TypeOfctrlIsOptionButton)_ThenIfctrl.SpecialEffect=BAJO_RELIEVEThenctrl.BackColor=colorctrl.Locked=estadoBloqueoEndIfElseIfTypeOfctrlIsSubFormThenSetsubfrm=ctrlCallBloquearControles(subfrm,estadoBloqueo)EndIfEndIfNext

    EndSub

    Corregirhipervnculodecorreoelectrnico

    PublicSubCorregirCorreo(cAsTextBox)'Alintroducirunhipervnculodecorreoelectrnico,'Accesssepiensaqueesdeweb.Despusdeactualizarelcampo'esteprocedimientoescapazdecorregireldesaguisado.

    OnErrorGoToErr_CorregirCorreoDimvAsStringDimiAsIntegerv=ci=InStr(v,"http://")Ifi0ThenMid(v,i,7)="mailto:"c=vEndIfExit_CorregirCorreo:ExitSubErr_CorregirCorreo:MsgBoxErr.Description,vbCriticalResumeExit_CorregirCorreoEndSub

    Correoobtienelacadenadelhipervnculo

    PublicFunctionElectrograma(OptionalvAsVariant="")AsVariant'Obtienelacadenadelhipervinculo

    OnErrorGoToError_Electrograma'DiminteractivoAsBoolean'interactivo=False'IfIsNull(v)Then'v=InputBox("Introduceunhipervnculo",,"textodelantero#mailto:[email protected]#")'interactivo=True'EndIf

    DiminicioAsIntegerDimfinAsIntegerinicio=InStr(v,"#mailto:")+8fin=InStr(inicio,v,"#")Electrograma=Mid(v,inicio,fininicio)'IfinteractivoThen'MsgBox"Elcorreoes:"&Electrograma,vbInformation'EndIfExit_Electrograma:ExitFunctionError_Electrograma:

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 16/21

    'MsgBoxError,vbCriticalElectrograma=vResumeExit_Electrograma

    EndFunction

    FuncinobtenerlaletradelNIF

    Estafuncindevuelvelaletracorrespondientealdnipasadocomoargumento.Eldnidebeserunnmeroenterolargo.Encasodequenoseencuentrelaletra,lafuncindevuelvelacadena"Error".

    PublicFunctionLetraNIF(dniAsLong)AsString

    DimtmpAsLong

    tmp=dni(Int(dni/23)*23)

    SelectCasetmp

    Case0,23:LetraNIF="T"

    Case1:LetraNIF="R"

    Case2:LetraNIF="W"

    Case3:LetraNIF="A"

    Case4:LetraNIF="G"

    Case5:LetraNIF="M"

    Case6:LetraNIF="Y"

    Case7:LetraNIF="F"

    Case8:LetraNIF="P"

    Case9:LetraNIF="D"

    Case10:LetraNIF="X"

    Case11:LetraNIF="B"

    Case12:LetraNIF="N"

    Case13:LetraNIF="J"

    Case14:LetraNIF="Z"

    Case15:LetraNIF="S"

    Case16:LetraNIF="Q"

    Case17:LetraNIF="V"

    Case18:LetraNIF="H"

    Case19:LetraNIF="L"

    Case20:LetraNIF="C"

    Case21:LetraNIF="K"

    Case22:LetraNIF="E"

    CaseElse:LetraNIF="Error"

    EndSelect

    EndFunction

    UsoenAccess

    Primerodebesescribirlafuncin.SilainsertasenlaseccinMdulosdelaventanadelabasededatos,serpblicaparatodosloselementos(sepodrusarentodoslosformularios,informesyconsultas).

    Crea,enunformulariooenuninforme,uncampodetextoindependiente.Siesenunformulario,asignaasuspropiedadesActivadoyBloqueado,losvaloresNoyS,respectivamente,paraqueelusuarionopuedamodificarelvalor.

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 17/21

    Seguidamente,ensupropiedadOrigendelcontrol,dalelasiguientefrmula:

    =LetraNIF([campo])

    DondecampoeselcampodelatabladedondesevaarecogerelDNI.Silatablaoelcamponosehanrecogidoenelformulariooenelinformedirectamente,debersindicarloas:

    =LetraNIF([Tabla]![campo])

    Silaintroducesenunaconsulta,enCampoescribelosiguiente:

    Nombre:LetraNIF([campo])

    DondeNombreeselnombredelnuevocampodondesevaa"guardar"laletradelDNI,ycampoelcampodedondeserecogeelDNI.Silatablaalaqueperteneceoelcamponosehanrecogidoenlaconsulta,debersindicarelnombredelatabla:

    Nombre:LetraNIF([Tabla}![campo])

    Porltimo,siquieresqueteaparezcaelnifcompleto(dni+letra),introducelosiguienteenlaconsulta,formulariooinforme:

    [campo]&LetraNIF([campo])

    Contadorpersonalizado

    OptionExplicit

    FunctionMicontador()

    DimdbAsDatabase,CUSTAsTable,INTERN,TEMP

    Setdb=CurrentDb()

    SetCUST=db.OpenTable("Clientes")

    CUST.Index="PRIMARYKEY"

    INTERN=2

    CUST.Seek">=",INTERN

    TEMP=CUST![CODI]

    DoWhileTEMP=INTERN

    INTERN=CUST![CODI]

    INTERN=INTERN+1

    CUST.Seek">=",INTERN

    IfCUST.NoMatchThen

    TEMP=0

    Else:TEMP=CUST![CODI]

    EndIf

    Loop

    Micontador=INTERN

    CUST.Close

    EndFunction

    Verimgenessinguardarlasenunabasededatos

    'Estafuncinvadedicadaatodasaquellaspersonasquedeseanverimgenesenunformulariooinforme,sintenerqueguardarlasen'labasededatosparanoincrementarendemasiadosutamao.

    'Elejemplosevaaexplicarsobreunformulario,parapoderimplementarlaposibilidaddecambiaroagregarunaimagen.Enun'informe,lonicoquehayquehaceresomitiresaparte.

    'Crearlatabla

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 18/21

    'Supongamosquetenemosunabasededatosdondeseguardalainformacindeunaseriedepersonas.

    'Cmonosabemosquinesson,deseamosguardarunafotosuyaparareconocerloscadavezqueveamossusdatos.Conlocual,'creamosunatablaconlossiguientescampos:

    'idAutonumricoSerelcampoclavedelatabla.

    'NombreTextoGuardarelnombreylosapellidosdecadapersona.

    'RutaImagenTexto255Contendrlarutaynombredelarchivogrfico.

    'Latablapuedecontenertodoslosdatosquesedeseeparaestafuncinelnico

    'imprescindibleesrutaImagen.Selehadadounalongitudde255caracteres(lamximapermitida)

    'aunquedependiendodelsistemasobreelcualsetrabaje,sepodrareducirestalongitud.

    'Hayqueadvertirquesiseabrelatablaenmodonormal,noseverningunaimagen

    'tanslolarutadestaenelrboldedirectoriosdelordenador.

    'Crearelformulario

    'Ahoraseprocedeacrearelformulario.Sepuedeutilizarunasistente,ocrearloapelodaigual,lacuestinesquesuorigenseala'tablaquehemoscreadoanteriormente

    'SisehautilizadoelAsistente,tendrsloscamposbasadosenlatabla.

    'Puesbien,ahorahayqueaadirunbotn,paraqueelusuariopuedabuscarlaimagen

    'quedesee,uncontrolImagenparapodervisualizarlaimagenyuncontrolCommonDialogpara

    'quesalgalaventanadeAbrirarchivo.

    'NoencuentraselcontrolCommonDialog?VeaInsertar|Controlespersonalizados,

    'yhayteaparecerunalistacontodosloscontrolesquepuedesagregaratuformulario.

    'Elquebuscamossellama"MicrosoftCommonDialogControl,versionx.x".Loseleccionas

    'ypulsasAceptar.Cuandolohayasinsertado,teapareceruniconodentrodelformulario.

    'Djaloenunlugardelformulariodondenotemoleste,ynotepreocupesporsu

    'visualizacin(Cuandoabraselformularioenmodonormal,noseverestecontrolporningunaparte).

    'SielcontrolImagentevuelveloco,porquetepideunaimagenparapoderinicializarse

    'pinchaenunacualquieray,unavezcreado,qutasela.

    'Yacontinuacin,laspropiedadesquevamosadaraestostrescontrolesquehemosaadido:

    'ControlImagenNombre:picGrafico

    'Tipodeimagen:Vinculado

    'ControlBotnNombre:btnRutaImagen

    'Ttulo:...

    'ControlCommonDialog:Nombre:cmmDialogo

    'Loscontrolesbasadosenlatablalosdejamosconlaspropiedadesqueleshayadado

    'elAsistente.SinoloshemoscreadoconelAsistente,selesdaelmismonombrequeeldesucampodeorigen.

    'Insertarelcdigo

    'LosiguienteescrearelcdigoenVBAnecesarioparatrabajarconimgenes.

    'Secrearparapoderhacerlosiguiente:

    'Visualizarlaimagencuandosecargueunregistroguardado.

    'Cargarunanuevaimagen.

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 19/21

    'Paraello,vealmenVer|Cdigo,einsertaelsiguientecdigo:

    PrivateSubForm_Current()

    DimmsgAsString

    OnErrorGoToerrForm_Current

    'Sedescargaelgraficoanterior

    picGrafico.Picture=""

    'Sihaylarutadeunaimagenguardada,semuestra

    IfLen(rutaImagen)>0Then

    picGrafico.Picture=rutaImagen

    Else

    'Aquisepuedeindicarquecargueunaimagenpordefecto:

    'Ellogodeunaempresa,unafoto,etc.

    EndIf

    ExitSub

    errForm_Current:

    SelectCaseErr

    Case52To76'Erroresdeentrada/salida

    msg="Nosepudocargarelarchivoindicado."

    Case481'Erroresconelformato

    msg="Elarchivonotieneunformatovalido."

    CaseElse'Otroserrores

    msg="Ocurriunerroralabrirelarchivo."

    EndSelect

    msg=msg&vbCrLf&"Porfavor,compruebeelarchivo."

    msg=msg&vbCrLf&"Debeserunarchivograficoy"

    msg=msg&"accesibledesdelabasededatos."

    msg=msg&vbCrLf&Err.Number&":"&Err.Description

    MsgBoxmsg,vbExclamation,"Errorconarchivografico"

    EndSub

    PrivateSubbtnRutaImagen_Click()

    DimfiltroAsString

    DimmsgAsString

    OnErrorGoToerrbtnRutaImagen_Click

    'Secarganlasextensionesposiblesdearchivosgrficos

    filtro="Todoslosarchivos(*.*)|*.*|"

    filtro=filtro&"Todoslosarchivosgraficos|*.jpg*.pcd"

    filtro=filtro&"*.gif*.drm*.pct*.hgl*.plt*.wpg"

    filtro=filtro&"*.cdr*.cgm*.dxf*.wmf*.bmp*.eps"

    filtro=filtro&"*.tif*.pcx*.ico*.dib*.emf|"

    filtro=filtro&"Mapasdebits(*.bmp*.dib)|*.bmp*.dib|"

    filtro=filtro&"Metaarchivos(*.wmf*.emf)|*.wmf*.emf|"

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 20/21

    filtro=filtro&"ArchivosdePaintbrush(*.pcx)|*.pcx|"

    filtro=filtro&"Iconos(*.ico)|*.ico|"

    filtro=filtro&"ArchivosTIF(*.tif)|*.tif|"

    filtro=filtro&"PostScriptencapsulado(*.eps)|*.eps|"

    filtro=filtro&"Formato2DdeAutoCad(*.dxf)|*.dxf|"

    filtro=filtro&"Metaarchivogrfico(*.cgm)|*.cgm|"

    filtro=filtro&"ArchivosdeCorelDraw(*.cdr)|*.cdr|"

    filtro=filtro&"GraficosdeWordPerfect(*.wpg)|*.wpg|"

    filtro=filtro&"GraficosHP(*.hgl*.plt)|*.hgl*.plt|"

    filtro=filtro&"ArchivosdeMacintosh(*.pct)|*.pct|"

    filtro=filtro&"MicrografxDesigner/Draw(*.drw)|*.drw|"

    filtro=filtro&"GIFCompuServe(*.gif)|*.gif|"

    filtro=filtro&"KodakPhotoCD(*.pcd)|*.pcd|"

    filtro=filtro&"ArchivosJPEG(*.jpg|*.jpg"

    cmmDialogo.Filter=filtro

    cmmDialogo.FilterIndex=2

    'SecarganotraspropiedadesdelCommonDialog

    cmmDialogo.CancelError=True

    cmmDialogo.DialogTitle="Cargararchivografico"

    'Sitenemosunaimagenenelformulario,secogesuruta

    'paramostrarlainicialmenteenlaventanaAbrir.

    IfLen(rutaImagen)>0Then

    cmmDialogo.FileName=rutaImagen

    EndIf

    cmmDialogo.ShowOpen

    'Siel/lausuario/aseleccionounaimagen,secomprueba

    'quelalongitudderutaynombrenosobrepaselos255

    'caracteres,yaquenoseguardariabienenlaBD

    IfLen(cmmDialogo.FileName)>255Then

    msg="Larutadelarchivoesmayorde255caracteres."

    msg=msg&vbCrLf&"Siintentarecogerestaimagen,"

    msg=msg&"surutaseveratruncada"

    msg=msg&vbCrLf&"ynopodrvisualizarladespus."

    msg=msg&vbCrLf&"Deseacargarladetodosmodos?"

    IfMsgBox(msg,vbQuestion+vbYesNo,_

    "Longituddelnombredearchivosuperada")=_

    vbNoThen

    ExitSub

    EndIf

    EndIf

    'Secargalaimagen

  • 29/10/2015 nitecAccessCdigo3

    http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF 21/21

    picGrafico.Picture=cmmDialogo.FileName

    rutaImagen=cmmDialogo.FileName

    ExitSub

    errbtnRutaImagen_Click:

    SelectCaseErr

    CasecdlCancel'ElusuariopulsoCancelar

    ExitSub

    Case52To76'Erroresdeentrada/salida

    msg="Nosepudocargarelarchivoindicado."

    Case481'Erroresconelformato

    msg="Elarchivonotieneunformatovalido."

    CaseElse'Otroserrores

    msg="Ocurriunerroralabrirelarchivo."

    EndSelect

    msg=msg&vbCrLf&"Porfavor,compruebeelarchivo."

    msg=msg&vbCrLf&"Debeserunarchivograficoy"

    msg=msg&"accesibledesdelabasededatos."

    msg=msg&vbCrLf&Err.Number&":"&Err.Description

    MsgBoxmsg,vbExclamation,"Errorconarchivografico"

    picGrafico.Picture=rutaImagen

    EndSub

    'As,cuandosevayaaunregistro,seactivareleventoAlactivarregistro,

    'quellamaralprocedimientoPrivateSubForm_Current()quehemoscreado,cargandolaimagen,

    'siesquehayunareferenciaaella(cuandosevayaaunregistronuevo,noocurrenada).

    'Encasodequeseproduzcaunerror,nosaparecerunmensajedeerrorynose

    'mostrarningunaimagen.

    'Despus,cuandosepulsesobreelbotn,sevisualizarunaventanaparaseleccionar

    'laimagendeseada,quesecargarenelcontrolImagensinoocurreningnerror.