Es mostren els missatges amb l'etiqueta de comentaris ACCESS-VBA. Mostrar tots els missatges
Es mostren els missatges amb l'etiqueta de comentaris ACCESS-VBA. Mostrar tots els missatges

dissabte, 9 de setembre del 2023

Nul o cadena buida en Access

 És de pre-escolar en Access, però mai m'havia trobat.

Parteixo d'aquesta taula amb 18 registres:


Faig una consulta sobre el camp REBUT amb criteri = "" i espero els 18 registres, però em surten molts menys.

Si hagués fet el mateix amb criteri = EsNulo em sortirien altres, però no els 18.



El problema és que en uns casos és una cadena buida i en altres és un camp Null. Ho puc evidenciar amb una consulta de longitud del camp Rebut:



Els que són null no tenen longitud; els que són buits, tenen longitud 0.

Com ho puc resoldre?

Dos opcions.

a) A la consulta de selecció escric Es nulo o ""

b) Amb una consulta d'actualització converteixo els null en una cadena buida amb la funció Nz. La funció Nz converteix un tipus a un valor. En aquest cas, passem de tipus null al valor ""

Es nulo o cadena vacía en Access.

IsNull or empty string in Access.



dimecres, 21 d’octubre del 2015

Insertar un retorno de carro o salto de línea en una función Access

Trobat a

http://www.todoexpertos.com/categorias/tecnologia-e-internet/bases-de-datos/microsoft-access/respuestas/460171/introducir-un-retorno-de-carro

Carlosflan pregunta:

Como puedo insertar un retorno de carro entre dos valores que inserto en un campo "memo".
Es decir, ahora mismo tengo este campo "memo" de cada registro, con una línea super larga.
Utilizo macros, en concreto la de "EstablerValor".
[campo_memo]= ahora()&"TEXTO"&[campo_memo]
Me gustaría meter un retorno de carro después del TEXTO.
Así tengo un "histórico del cambio de este registro.


Es a dir, vol, a partir de 
21/10/2015 Barcelona Finalizado
obtenir
21/10/2015 Barcelona 
Finalizado

on Barcelona sería el texto i Finalizado el camp memo

Asturcon3 li contesta

=ahora() & texto" & chr(13) & chr(10) & [memo]

I efectivament funciona
Totalment d'acord amb l'agraiment de carlosflan:
Eres un MONSTRUO! Parece una tontería, pero uso estos históricos desde hace cinco años y no había conseguido que nadie me respondiera, es más, yo creo que no entendían siquiera lo quería hacer.

dimecres, 18 de març del 2015

Renomenar un camp en Access amb VBA

Renomenar un camp en Access amb VBA
Renombrar un campo en Access con VBA
Change field name in Access with VBA

Tenim una taula TablaAlfa que conté un camp anomenat Id
Canviarem el nom d'aquest camp per IdAccess

We've got a table named TablaAlfa which contains a field named Id
We'll change its name by IdAccess

Tenemos una tabla llamada TablaAlfa que contiene un campo llamado Id
Le cambiaremos el nombre a IdAccess

Public Function CanviaNomCamp()


  Dim db As DAO.Database
  Dim tb As DAO.TableDef
  Dim fd As DAO.Field

  Set db = CurrentDb()
  Set tb = db.TableDefs("TablaAlfa")

  Set fd = tb.Fields("Id")
  fd.Name = "IdAccess"


  tb.Fields.Refresh

End Function

dilluns, 22 de desembre del 2014

dbOpenDynaset DAO

Feia temps que no veia unes explicacions tan clarificadores:

Sobre dbOpenDynaset

http://allenbrowne.com/ser-29.html

Microsoft Access Tips for Serious Users

Provided by Allen Browne.  Last updated April 2010.

VBA Traps: Working with Recordsets

This article highlights ten common traps with DAO recordsets in VBA code.
Most of the traps yield no syntax error; they are bugs lying dormant in your code until particular conditions are met. Your program then fails, or returns inaccurate results.

1. DAO versus ADO

The DAO and ADO libraries both have a Recordset object, but with different methods, properties, and options.
DAO is the native Access library (what Access itself uses), whereas ADO is a more generic library (now superseded by the vastly different ADO.NET library.)
Different versions of Access default to different libraries. See Solving Problems with Library References for details.
This article assumes DAO recordsets.

Solution:

To ensure your code works reliably:
  1. Set your references to use just the library you want.
  2. If you must use both, list your main one first.
  3. Disambiguate by specifying which library's recordset you want. Use:
        Dim rs As DAO.Recordset
    not:
        Dim rs As Recordset

2. Recordset types

There are different types of DAO recordset, with different methods.
When you OpenRecordset() on a query or attached table, Access defaults to a Dynaset type (dbOpenDynaset). When you OpenRecordset() on a local table, it defaults to a Table type (dbOpenTable.)
The Table type has different methods (e.g. Seek instead of FindFirst), but it cannot be used with attached tables. So if you later split your database so the tables are attached, the code fails when you use a method that no longer applies.

Solution:

Always specify the type you want. Dynaset guarantees your code will work for all queries and tables, local and attached. Example:
    Set rs = db.OpenRecordset("Table1", dbOpenDynaset)


Sobre dbSeeChanges
https://www.microsoftaccessexpert.com/Microsoft-Access-Code-dbSeeChanges.aspx

While working with a Microsoft Access database using linked Microsoft SQL Server tables, you may receive the following error message:
  • You must use the dbSeeChanges option with OpenRecordSet when accessing a SQL Server table that has an IDENTITY column

  • Solution: Set rst = CurrentDb.OpenRecordset("SELECT * From tblName", dbOpenDynaset, dbSeeChanges)



dissabte, 20 de setembre del 2014

dimarts, 5 d’agost del 2014

Is Null in VBA


If you are an absolute beginner -like me- in VBA the most normal is you try to use IS NULL to find a cell without values:

            While Not rs.EOF
                If rs![Resp] is null Then
                    z = z + 1
                Else
                    i = i + 1
                End If
            rs.MoveNext
            Wend

But it won't work...

You can solve it by using IF IS NULL ( ) THEN like in this sample

            While Not rs.EOF
                If IsNull(rs![Resp]) Then
                    z = z + 1
                Else
                    i = i + 1
                End If
            rs.MoveNext
            Wend

dissabte, 19 d’abril del 2014

Eliminar una taula si existeix en VBA

Com ja és habitual, comences a buscar solucions per una cosa que ha de ser força freqüent i et trobes un munt de solucions complexes. Pot ser d'aquí a un temps canviaré la meva opinió però, de moment, si veig una solució simple no veig perquè complicar-me la vida.

En aquest cas vull eliminar la taula EstadosX sols si existeix i que no passi res si no existeix.
Faig un botó, en aquest cas Comando197 i a l'event click l'asocio aquest codi:

Private Sub Comando197_Click()

    On Error GoTo BorraTaules_Err

        If CurrentDb.TableDefs("EstadosX").Name = "EstadosX" Then
           CurrentDb.TableDefs.Delete "EstadosX"
        End If

BorraTaules_Exit:
    Exit Sub

BorraTaules_Err:
    Resume BorraTaules_Exit

End Sub

No hi ha segona part en el if perquè no és resol. Si no existeix dona error. Per tant, ho gestionem amb un error. Si vols, per comprovar-ho, pots possar un debug.print sota BorraTaules_Err: Veuràs que en cas de no existència, el codi s'en va cap a aquest subprocediment.

Tags:
Eliminate table if exists
Eliminar una tabla si existe
Comprobar que una tabla existe
Comprovació que una taula existeix
Verify if a table exists and delete

Basat en:
http://www.todoexpertos.com/categorias/tecnologia-e-internet/bases-de-datos/microsoft-access/respuestas/900406/macro-condicion

dissabte, 12 d’abril del 2014

Capturar text d'un msgbox

A vegades voldriem capturar alguna part d'un msgbox per poder lliurar-ho o per copiar-ho i pegar-ho en alguna altra part. Sovint llegim i ens ho apuntem a ma o simplement ho recordem.

Hi ha una solució tan pràctica que sobta el poc coneguda que és.

Polsem simultàniament les dues tecles

                     CTRL         C

 (es a dir, un copy normal i corrent) tenint el focus sobre el msgbox. El resultat es va al portapapers. Obrim el portapapers i alli fem un cutypaste de la part que volguem.
Simple!.

Trobat a:
http://www.propiedadprivada.com/copiar-el-texto-de-un-alert-o-msgbox/820/

Tags:
Copy text from msgbox
Copiar texto de un msgbox
Copiar text d'un msgbox

dimecres, 9 d’abril del 2014

Taules buides. Recordset buit. Access VBA

Les taules buides són una mica un maldecap.

El primer és que no les pots actualitzar.

Sembla que tenen un registre en blanc però, en realitat, no en tenen cap.Per això, si vols afegir dades cal fer una consulta d'annexió de dades. De fet és lògic.

Però quan la cosa encara és més fastidiosa és quan les converteixes en recordset. Per la mateixa raó, es a dir, perquè en realitat no tenen cap línia, si intentes fer un rs.movefirst, el programa petarà.

Conforme, però com puc saber si hi ha un o més d'un registre o, pel contrari, no hi ha cap?

Una bona solució seria "If rs.EOF And rs.BOF Then":

El que fem es validar que, en un recordset (en aquest cas anomenat rs) el principi [Begining Of File] i el final [End Of File] es troben en la mateixa línia. Per tant, te zero registres!!!

Un exemple de codi:

Private Sub subSumatori()
Set dbs = CurrentDb
Set rs = dbs.OpenRecordset("tempDedicacion")
Dim mbsumatori As String

    If rs.EOF And rs.BOF Then
        MsgBox "No hi ha registres de temps imputats aquest dia"
       Usuaria = ""
        lblUsuaria.Caption = Usuaria
       rs.Close
        End
    Else
         rs.MoveFirst
            While Not rs.EOF
                mbsumatori = mbsumatori & "Dia " & data....
                rs.MoveNext
            Wend
         rs.Close
            MsgBox mbsumatori
    End If

End sub

Tags:
Empty table. Empty recordset
Tablas vacías. Recordset vacio
Taules buides. Recordset buit.
VBA Access
Error recordset vacío
Error recordset buit

dimarts, 8 d’abril del 2014

Crear una taula en access amb VBA

En general hom fa servir sistemes de tipus DAO o ADO que, personalment, encara trobo bastant complicats.

Pels que simplement volem crear una taula temporal amb VBA, aquesta seria una solució.

Creem una taula tempTaula amb quatre camps:

  • ID de tipus integer
  • Nom de tipus text amb longitud 10
  • Cognom de tipus text amb longitud 20
  • Anys de tipus integer
Un cop creada la taula, l'omplim -amb una taula d'annexió- amb els valors 1,Pepe, Gotera i 50
Tot ho fem polsant un botó.


Font: http://www.access-programmers.co.uk/forums/showthread.php?t=149613

El codi (es recomana pasar-ho a Notepad++ amb llenguatge vb)




Option Compare Database
Option Explicit

Private Sub Form_Load()
    DoCmd.SetWarnings False
End Sub

Private Sub cmdCreaTaula_Click()
    crearTaula
    subqryPersonatges
End Sub

Private Sub crearTaula()
'Font: http://www.access-programmers.co.uk/forums/showthread.php?t=149613
    Dim qryCrearTaula As String
        qryCrearTaula = "CREATE TABLE tempTaula (ID integer, Nom text (10), Cognom text (20), Anys integer )"
    DoCmd.RunSQL qryCrearTaula
End Sub

Private Sub subqryPersonatges()
    Dim qryPersonatges As String
        qryPersonatges = "INSERT INTO tempTaula ( ID, Nom, Cognom, Anys )" _
        & "SELECT 1 AS Expr1, ""Pepe"" AS Expr2, ""Gotera"" AS Expr3, 50 AS Expr4;"
    DoCmd.RunSQL qryPersonatges
End Sub




Tags:
Make a table with VBA in Access
Crear una tabla con VBA en Access
Crear una taual amb VBA en Access

divendres, 4 d’abril del 2014

Format DATA europeu i americà en Acces VBA

Capto una data d'un control ActiveX de tipus calendari:

data = calendari.value

fico aquesta variable dins una select:

...
'WHERE (((OCUPACION.FECHA)= #" & data & "# )
...

funciona fantàsticament pel dia 31 de març però el dia 03 d'abril me'l considera com a 4 de març.
Se que la data la capta en format americà, però fent un debug aparentment està bé...

Busco una mica i dins
http://www.lawebdelprogramador.com/foros/Access/1304492-Formato_de_fechas_Europeo_-_Americano.html
trobo la solució:

WHERE (((OCUPACION.FECHA)= #" & Format([data], "mm/dd/yyyy") & "# )

Ara funciona perfectament



dijous, 13 de febrer del 2014

Consulta amb comodins en VBA Access

Tenim una taula (FIN) amb uns quants bitxos i volem annexar en una nova taula (FIN2) sols els registres que continguin aquestes cadenes.

PATO
GA*
*TO
*AT*

La taula podria ser aquesta:

La primera querie ens donaria sols PATO
La segona querie ens donaria sols els registres amb el camp BICHO igual a GATO
La tercera ens donaria PATO i GATO
La quarta PATO, RATA i GATO

Per consultes amb comodins no val copiar directament el SQL, cal retocar-ho una mica.

El codi (comentat perquè cal escollir una de les opcions) seria:

Private Sub Comando0_Click()
Dim ALFA As String
    'ALFA = "INSERT INTO FIN2 ( BICHO )SELECT FIN.BICHO FROM FIN WHERE (((FIN.BICHO)=""PATO""));"
    'ALFA = "INSERT INTO FIN2 ( BICHO ) SELECT FIN.BICHO FROM FIN WHERE (((FIN.BICHO) Like 'GA*'));"
    'ALFA = "INSERT INTO FIN2 ( BICHO ) SELECT FIN.BICHO FROM FIN WHERE (((FIN.BICHO) Like '*TO'));"
    'ALFA = "INSERT INTO FIN2 ( BICHO ) SELECT FIN.BICHO FROM FIN WHERE (((FIN.BICHO) Like '*AT*'));"
    DoCmd.RunSQL (ALFA)
End Sub

Es a dir, el tema està en:

Like 'GA*'
Like '*TO'
Like '*AT*'





dimecres, 20 de març del 2013

Afegir un text en cada línia

L'objectiu seria afegir a cada linia d'un txt el seu nom de fitxer. Exemple:



Es a dir, volem que cada linia del fitxer de Barcelona (08019) afegeixi, al principi de línia, aquest codi INE. Les dades es troben en una carpeta D:\addINE

El codi en VBA (es recomana llegir-ho amb Notepad++). S'ha fet en un formulari amb un únic botó.


Option Compare Database
Option Explicit
Dim dbs As Database
Dim rs As Recordset

Private Sub cmdCarregaINE_Click()
Dim qryTblINE As String 'Creem una variable per una query que funcionarà com a recordset
Dim strFitxer, strFitxerEscript As String 'Creem les variable pel fitxer origen i pel fitxer provisional on escriurem
Dim intFitxer, intFitxerEscript As Long 'Creem les variables per donar un número d'ordre al fitxer -origen i provisional-
Dim linFitxer, linFitxerEscript As String 'Creem les variables on desarem el que llegim i escribim
qryTblINE = "SELECT tblINE.INE FROM tblINE ORDER BY tblINE.INE;"
Set dbs = CurrentDb
Set rs = dbs.OpenRecordset(qryTblINE) 'Al cridar a una variable no possem les cometes. Si cridessim a una taula si caldria que fos amb cometes ("tblINE")
    While Not rs.EOF
        intFitxer = FreeFile 'obtenim un número de gestor de fitxer lliure per gestionar l'opertura de fitxer inicial
        strFitxer = "D:\addINE\" & rs![ine] & ".txt" 'Obtenim la ruta origen
        strFitxerEscript = "D:\addINE\" & rs![ine] & "Escript.txt" 'Obtenim la ruta destí provisional
        Open strFitxer For Input As #intFitxer 'Obrim el fitxer original per lectura donant-li un gestor ordenat
            While Not EOF(intFitxer) 'Mentre no arribem al final del fitxer. Fem servir un gestor ordenat, no el propi fitxer
                Line Input #intFitxer, linFitxer 'Escribim el contingut de la linia tractada en una variable
                linFitxer = rs![ine] & ";" & linFitxer 'Afegim el valor del rs![INE] + ; al principi de la linia tractada
                 
                    intFitxerEscript = FreeFile 'Obtenim un nou número de gestor de fitxer lliure pel fitxer provisional
                    Open strFitxerEscript For Append As #intFitxerEscript 'Obrim el fitxer provisional en mode escriptura amb el gestor
                        Print #intFitxerEscript, linFitxer 'Escribim dins el fitxer provisional,amb un gestor, la variable que hem llegit
                    Close #intFitxerEscript 'Tanquem el fitxer provisional. Cada vegada tindrà una linia més
            Wend
        Close #intFitxer 'Tanquem el fitxer inicial
        Kill strFitxer 'Matem físicament el fitxer inicial
        Name strFitxerEscript As strFitxer 'Canviem el nom del fitxer provisional pel nom del inicial
    rs.MoveNext 'anem al següent registre del recordset
    Wend
        MsgBox "Ja he acabat"
End Sub

dijous, 7 de febrer del 2013

Confirmar presència d'un fitxer en VBA for applications

Bassat en el capítol 13 del Curso Básico de Programación en Visual Basic de elguille


dilluns, 7 de gener del 2013

Fecha corta en Access amb namedformat

Si tenim un data amb aquest aspecte:

7-1-13 10:05

i ens cal que es vegi en format curt, es a dir:

7-1-13

hi ha una expressió que ho fa dins el grup CONVERSION. Es FormatoFechaHora


L'expressió queda així:

FormatoFechaHora («expresiónCadena»; «namedformat») 

El problema es que, pel que fa al namedformat,  l'ajuda de MicroSoft no ajuda gaire -com és habitual-.

Si tenim una mica de paciència trobarem aquest alta pàgina on veiem quin ha de ser el valor:

http://office.microsoft.com/es-es/access-help/formatdatetime-funcion-HA001228841.aspx?CTT=1



Exemple:

Data: FormatoFechaHora([DEDICACION]![FECHA_MOD];2)

dilluns, 24 de desembre del 2012

Formulari editable amb botons en VBA

Creem un formulari que llegeix una consulta que afecta a dues taules.
Es pot editar el contingut.
Presenta dos botons i gestiona quan arriba al principi i al final
Fa una comparativa marcant en vermell les diferencies entre la casella superior i la inferior.

Aspecte de les taules i la consulta. La consulta connecta pel nom de municipi i sols afecta als que tenen l'estat Activo. El recordset apunta a aquesta consulta.

Aspecte del formulari:


El codi (es pot veure amb colorins amb Notepad++):


Dim dbs As Database
Dim rs As Recordset

Private Sub cmdSortir_Click()
rs.Close
Set rs = Nothing
DoCmd.Close

End Sub

Private Sub Form_Load()
Set dbs = CurrentDb
Set rs = dbs.OpenRecordset("Qry01")
Correccio
End Sub
Private Sub cmdPrev_Click()
    rs.MovePrevious
        If rs.BOF Then
         rs.MoveFirst
        End If
    Correccio
End Sub
Private Sub cmdNext_Click()
    rs.MoveNext
        If rs.EOF Then
         rs.MoveLast
        End If
    Correccio
End Sub
Private Sub Correccio()
Me!txtM = rs![municipio]
Me!txtSA = rs![SuperficieA]
Me!txtSB = rs![SuperficieB]
Me!txtSC = rs![SuperficieC]
Me!txtTA = rs![TotalA]
Me!txtTB = rs![TotalB]
Me!txtTC = rs![TotalC]

Validacio
End Sub
Private Sub txtM_BeforeUpdate(Cancel As Integer)
rs.Edit
rs![municipio] = Me!txtM
rs.Update
End Sub
Private Sub txtSA_BeforeUpdate(Cancel As Integer)
rs.Edit
rs![SuperficieA] = Me!txtSA
rs.Update
End Sub
Private Sub txtSB_BeforeUpdate(Cancel As Integer)
rs.Edit
rs![SuperficieB] = Me!txtSB
rs.Update
End Sub
Private Sub txtSC_BeforeUpdate(Cancel As Integer)
rs.Edit
rs![SuperficieC] = Me!txtSC
rs.Update
End Sub
Private Sub txtTA_BeforeUpdate(Cancel As Integer)
rs.Edit
rs![TotalA] = Me!txtTA
rs.Update
End Sub
Private Sub txtTB_BeforeUpdate(Cancel As Integer)
rs.Edit
rs![TotalB] = Me!txtTB
rs.Update
End Sub
Private Sub txtTC_BeforeUpdate(Cancel As Integer)
rs.Edit
rs![TotalC] = Me!txtTC
rs.Update
End Sub
Private Sub Validacio()
    If rs![SuperficieA] = rs![TotalA] Then
    Me!txtValidA.ForeColor = RGB(0, 0, 0)
    Me!txtValidA = "OK"
    Else
    Me!txtValidA.ForeColor = RGB(255, 0, 0)
    Me!txtValidA = "Error"
    End If

End Sub

dilluns, 17 de desembre del 2012

Crear una carpeta amb data d'avui

Avui és 18 de desembre de 2012.
Volem crear una carpeta dins E:\DATOS\Empresa que es digui Entrega20121218. La idea es que l'aplicació calculi cada dia la data:

Fem un botó que anomenarem cmdMkdir



Private Sub cmdMkDir_Click()
Dim Avui
Dim AquestAny, AquestMes, AquestDia, AquestLliurament As String

Avui = Now
AquestAny = Year(Avui)
AquestMes = Month(Avui)
AquestDia = Day(Avui)
AquestLliurament = "Entrega" & AquestAny & AquestMes & AquestDia & "\"

MkDir "E:\DATOS\Empresa\" & AquestLliurament
End Sub

divendres, 14 de desembre del 2012

Obrir PDF des de Acces amb VBA

Queda explicat a http://www.mvp-access.com/buho/ficheros/abrirfichero.txt :


Hola a todos y gracias de antemano. Mi duda es la siguiente:
resulta q tengo un manual de mi aplicacion hecho en acrobat (pdf) y queria
que al apretar un command button se abriera. Es posible?? como??


BUHO
====

Para abrir un fichero (Del tipo que sea...Bmp, Jpg, Pdf) desde Access,
Windows guarda la asociacion de la extension de dicho fichero con un
ejecutable con lo cual .....
esto puede servirte como orientacion:
http://personal.telefonica.terra.es/web/medicofamilia/asociada.txt
http://www.iespana.es/mcpegasus/faqs/basEjecutarAplicacion.txt

o esto...


'esto en un modulo bas de tu aplicacion, por ejemplo
'en una sola linea
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Public Const SW_SHOW = 1

'***********************************

'Esto en cualquier boton de comando de tu formulario
ShellExecute Me.hwnd, "open", "C:\Carpeta\Manual.pdf", "", "", SW_SHOW


Jo ho he provat amb un parell de modificacions:

en el mòdul, en lloc de SW_SHOW= 1 he fet servir 3. A banda, li he fet obrir uns quants fitxers simultàniamente

La font per canviar de 1 a 3 ha estat

Si el valor 1 implica normal 
SW_SHOWNORMAL (1)
Activates and displays a window. If the window is minimized or maximized, Windows restores it to its original size and position. An application should specify this flag when displaying the window for the first time.
entenc que el valor 3 implicarà maximització:

SW_SHOWMAXIMIZED (3)
Activates the window and displays it as a maximized window.
I ha funcionat!!!

El meu codi en un botó:

Private Sub Comando0_Click()
ShellExecute Me.hwnd, "open", "E:\DATOS\Empresa\python-excel.pdf", "", "", SW_SHOW
ShellExecute Me.hwnd, "open", "E:\DATOS\Empresa\vbasic60.pdf", "", "", SW_SHOW
ShellExecute Me.hwnd, "open", "E:\DATOS\Empresa\vb.pdf", "", "", SW_SHOW
ShellExecute Me.hwnd, "open", "E:\DATOS\Empresa\Prestamos.pdf", "", "", SW_SHOW
End Sub


i el codi en el mòdul:

Option Compare Database
Option Explicit

Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Public Const SW_SHOW = 3

Ara provaré que el codi del botó ataqui a un recordset on tingui els PDF que vull obrir i d'aquesta manera estalviaré el anar obrint-los d'un en un des de l'explorador (que trist)

dimarts, 11 de desembre del 2012

While en Recordset i Actualitzar registres en un Recordset

Fem un recordset que recull les dades d'una consulta.
Tractarem tots els registres del camp Obra. De moment, simplement els escriurem.

Farem servir el While not rs.EOF per recorrer el recordset des del principi fins al final.

Per modificar els registres primer entrarem en mode edició, aplicarem el canvi i farem un update:


Interesant: Recordsets for Beginners
http://www.utteraccess.com/wiki/index.php/Recordsets_for_Beginners


Atenció: en aquest cas HEM ACTUALITZAT. Si hem d'afegir registres, fem servir rs.AddNew. El fet d'afegir implica que no cal el rs.movenext. Exemple per escriure en una taula PDF amb un camp FicheroPDF:


Private Sub Llistat()
    Set dbs = CurrentDb
    Set rs = dbs.OpenRecordset("PDF")
    EscriptorPDF
    'Tanquem el recordset  i el desasignem
    rs.Close
    Set rs = Nothing
End Sub




Private Sub EscriptorPDF()
Dim MiRuta As String
Dim MiNombre As String

MiRuta = "C:\temp\CompCQFinal\*.pdf"
MiNombre = Dir(MiRuta)    ' Recupera la primera entrada.
    While MiNombre <>; ""    ' Inicia el bucle.
        If MiNombre <> "." And MiNombre <> ".." Then
       
                rs.AddNew
                rs![FicheroPDF] = MiNombre
                rs.Update
        End If
        MiNombre = Dir    ' Obtiene siguiente entrada.
    Wend
End Sub