Avatar billede hekla Nybegynder
31. marts 2004 - 12:07 Der er 4 kommentarer og
1 løsning

Findes feltet i to tabeller?

Jeg bruger følgende funktion til at finde ud af oom et felt, "BarnMobil" findes i min backend(http://www.eksperten.dk/spm/456482):

    Dim RS As New ADODB.Recordset
    Dim CN As ADODB.Connection
    Dim strSQL As String
   
    CurrentDb.TableDefs.Refresh
   
    Set CN = New ADODB.Connection
    CN.Provider = "Microsoft.Jet.OLEDB.4.0"
    CN.Open fGetLinkPath("t_adgang")
   
    Set RS = CN.OpenSchema(4) ' 4 = Kolonne-navne
   
    FindesFeltet = 0 'Feltet findes ikke
    Do Until RS.EOF
        If RS!Column_name = "BarnMobil" Then
                FindesFeltet = 1 ' Feltet findes
        End If
      RS.MoveNext
    Loop


fGetLinkPath("t_adgang") henter navnet på backend databasen.

Nu har jeg brug for at vide om det findes i både tabel1 og tabel2.

How to do?
31. marts 2004 - 12:42 #1
Jeg har tilladt mig, at skrive koden lidt om. Jeg syntes at det var nemmere at checke om der kommer en fejl, når man referere til feltet, end at skulle løbe alle felter gennem.
Og så forstod jeg ikke lige det med openSchema....hvorfor gøre det mere besværligt end nødvendigt ;o)

Public Function FindesFeltetIBeggeTabeller as Boolean
    Dim RS As New ADODB.Recordset
    Dim CN As ADODB.Connection
    Dim strSQL As String
    Dim Dummy as variant
   
    CurrentDb.TableDefs.Refresh
   
    Set CN = New ADODB.Connection
    CN.Provider = "Microsoft.Jet.OLEDB.4.0"
    CN.Open fGetLinkPath("t_adgang")
   
    rs.open "tabel1", cn, adOpenStatic
    On Error resume next
    Dummy = rs!BarnMobil
    If err = 0 then FindesFeltetIBeggeTabeller = true
    rs.close
    rs.open "tabel2", cn, adOpenStatic
    err.clear
    Dummy = rs!BarnMobil
    If err = 0 then
        FindesFeltetIBeggeTabeller = true
    else
        FindesFeltetIBeggeTabeller = false
    endif
End Function
Avatar billede hekla Nybegynder
31. marts 2004 - 15:04 #2
Hej Thomas
Efter at have kæmpet med det et stykke tid, har jeg fundet ud af at din kode har den store ulempe, at den undersøger om der er data i feltet (hvilket der ofte ikke er), og ikke om feltet eksisterer. Det betyder, at der kræves udelt adgang til backend, hvis der ikke er data i feltet. Koden bliver afviklet ifm. sammenkædning af tabeller, og det er uholdbart at kræve udelt adgang til backend, hver gang en ny frontend skal have sammenkædet tabellerne.
31. marts 2004 - 15:08 #3
ja, jeg kom selv til at tænke på det efter at jeg havde sendt mit svar :o(

Nå, men princippet i resten af koden er den samme. Gentag gennemløbet 2 gange med hver sin tabel. Bare husk at close' recordsettet imellem.
Avatar billede hekla Nybegynder
31. marts 2004 - 15:29 #4
Når det kommer til stykket er det jo såre simpelt, hvis man bare lige får øje på det. Man kan få FindesFeltet til at tælle antallet af felter med navnet BarnMobil:

    Dim RS As New ADODB.Recordset
    Dim CN As ADODB.Connection
    Dim strSQL As String
   
    CurrentDb.TableDefs.Refresh
   
    Set CN = New ADODB.Connection
    CN.Provider = "Microsoft.Jet.OLEDB.4.0"
    CN.Open fGetLinkPath("t_adgang")
   
    Set RS = CN.OpenSchema(4) ' 4 = Kolonne-navne
   
    FindesFeltet = 0 'Feltet findes ikke
    Do Until RS.EOF
        If RS!Column_name = "BarnMobil" Then
                FindesFeltet = FindesFeltet + 1 ' Antal felter med navnet BarnMobil
        End If
      RS.MoveNext
    Loop

Thomas læg et svar, så du kan få andel i pointene. Jeg var for hurtig til at afvise.
31. marts 2004 - 15:34 #5
nej, det behøves ikke. Mit svar var jo ikke helt gennemtænkt og du fandt selv svaret :o(
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester