Avatar billede steensommer Praktikant
28. oktober 2003 - 08:19 Der er 28 kommentarer og
2 løsninger

Hente data fra Access

Jeg har en projektmappe der bl.a. skal hente data fra en Access-database ("Patientregisteret.mdb"). Den fungerer fint når den kun skal søge i en af tabellerne ex [Kartotek 2003] men jeg ville gerne ha' den til at søge i alle årets tabeller som hedder [PCI og KAG 2003] og [Radiofrekvensablation 2003]. Såfremt der intet findes skal søgningen fortsætte med tidligere årgange (som hedder det samme blot med ændret årgang). Kan det lade sig gøre. Jeg har forsøgt med en Array men den viser fejl ved linien med Array (uanset om tabellerne er i "" eller ej):

Public listen As Variant
Public Sub GetData()

    Dim rsData As ADODB.Recordset
    Dim szConnect As String
    Dim szSQL As String
    Dim c As Variant
    Dim IBox As String
    Dim strSQL As String
    Dim MinSøgning As String
   
    MinSøgning = Array([Kartotek 2003], [PCI og KAG 2003], [Radiofrekvensablation])
    ' Create the connection string.
    szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=\\srv\faelles\Registre\Patientregisteret.mdb;"

    IBox = InputBox("Indtast søgestreng")
   
    szSQL = "SELECT * FROM MinSøgning WHERE [Efternavn] LIKE'" & IBox & "%'"
   
    Set rsData = New ADODB.Recordset
    rsData.Open szSQL, szConnect, adOpenForwardOnly, adLockReadOnly, adCmdText
   
    If Not rsData.EOF Then
      listen = TransposeDim(rsData.GetRows)
    End If
   
    Set rsData = Nothing
   
End Sub


vh Steen
Avatar billede steensommer Praktikant
28. oktober 2003 - 08:35 #1
Hov en lille fejl opdaget:

    If Not rsData.EOF Then
      listen = TransposeDim(rsData.GetRows)
    Else
        MsgBox "Ingen fundet", vbCritical
        UserForm1.ListBox1.Clear
    End If
Avatar billede steensommer Praktikant
28. oktober 2003 - 16:09 #2
Jeg ændrede Dim As Variant og følgende:

    szSQL = "SELECT * FROM " & MinSøgning & " WHERE [Efternavn] LIKE'" & IBox & "%'"

Hvorefter den viser fejl udfor linien og skriver Type Mismatch
Avatar billede kabbak Professor
28. oktober 2003 - 16:47 #3
szSQL = "SELECT * FROM " & MinSøgning & " WHERE [Efternavn] LIKE '" & IBox & "%'"

hej steen jeg indsatte et mellemrum efter LIKE, mon ikke det manglede
Avatar billede steensommer Praktikant
28. oktober 2003 - 16:51 #4
Hej kabbak
Det var desværre ikke det - den laver fortsat samme fejl
Avatar billede bak Forsker
28. oktober 2003 - 18:36 #5
Jeg tror ikke du kan gøre sådan. MinSøgning er et array på 3 og jeg tror at du er nødt til at køre de tre SQL sætninger igennem i en løkke. feks.

for X=1 to 3
szSQL = "SELECT * FROM " & MinSøgning(X) & " WHERE [Efternavn] LIKE'" & IBox & "%'"

"
   
    Set rsData = New ADODB.Recordset
    rsData.Open szSQL, szConnect, adOpenForwardOnly, adLockReadOnly, adCmdText
   
    If Not rsData.EOF Then
      listen = TransposeDim(rsData.GetRows)
    End If
next X
Avatar billede steensommer Praktikant
28. oktober 2003 - 19:38 #6
Hej bak
Den viser fortsat: "Type Mismatch" udfor szSQL. :0(
Avatar billede terry Ekspert
28. oktober 2003 - 19:43 #7
MinSøgning is in the position of the table name and I cant see much table name in (Kartotek 2003], [PCI og KAG 2003], [Radiofrekvensablation])

SELECT * FROM SomeTableOrOther ......
Avatar billede terry Ekspert
28. oktober 2003 - 19:47 #8
You cant search in more than one table at a time like you are trying to do!

You could try making a UNION JOIN on the three tables and then search through the result.

SELECT * FROM [Kartotek 2003] UNION
SELECT * FROM [PCI og KAG 2003] UNION
SELECT * FROM [Radiofrekvensablation]


but the fields in the output MUST be the same type!
Avatar billede steensommer Praktikant
28. oktober 2003 - 20:22 #9
og hvorledes skal ovenstående skrives jvf koden øverst:

    szSQL = "SELECT * FROM [Kartotek 2003] UNION WHERE [Efternavn] LIKE'" & IBox & "%'"  ....etc
Avatar billede terry Ekspert
28. oktober 2003 - 20:28 #10
You make the UNION query in Access and then you select from this.
You would select from a query as though it were a table.
Lets say you have a union query in Access named qryYourUnion
then you would use

szSQL = "SELECT * FROM qryYourUnion WHERE [Efternavn] LIKE'" & IBox & "%'"  ....etc
Avatar billede terry Ekspert
28. oktober 2003 - 20:29 #11
NOTE>You can NOT alter the data in a UNION query!
Avatar billede steensommer Praktikant
28. oktober 2003 - 20:33 #12
Vil det sige at arbejdet IKKE kan udføres i Excel men SKAL udføres i Access (som jeg desværre ved endnu mindre om) :0(
Avatar billede bak Forsker
28. oktober 2003 - 20:57 #13
jeg tror godt det kan køre med et par mindre ændringerDim rsData As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String
Dim c As Variant
Dim IBox As String
Dim strSQL As String
Dim MinSøgning As Variant

MinSøgning = Array("Kartotek 2003", "PCI og KAG 2003", "Radiofrekvensablation")
' Create the connection string.
szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=\\srv\faelles\Registre\Patientregisteret.mdb;"

IBox = InputBox("Indtast søgestreng")

For x = 0 To 2
    szSQL = "SELECT * FROM [" & MinSøgning(x) & "] WHERE [Efternavn] LIKE'" & IBox & "%'"
    Set rsData = New ADODB.Recordset
    rsData.Open szSQL, szConnect, adOpenForwardOnly, adLockReadOnly, adCmdText
   
    If Not rsData.EOF Then
      listen = TransposeDim(rsData.GetRows)
    End If
    Set rsData = Nothing
Next x
Avatar billede steensommer Praktikant
28. oktober 2003 - 21:04 #14
Hallo bak,  det fungerer da NÆSTEN. Den lister desværre kun data fra sidste tabel [Radiofrekvensablation 2003]
Avatar billede terry Ekspert
28. oktober 2003 - 21:05 #15
bak>I like your optimism, but have you tried it? If so what is the result?

steensommer>You only need to create a UNION query in Access and thats it. The rest is done in Excel. If you send me your dB I can create the UNION query for you.
Avatar billede bak Forsker
28. oktober 2003 - 21:10 #16
steen->ja, selvfølgelig. :-)  Du resetter jo listen efter hver sql-query.
Vil du ha' en løsning på det :-)

Terry-> nej, jeg har ikke testet (mangler også databasen), men der skal ikke være noget der hindrer at man kører 3 sql-querys efter hinanden.
Problemet ligger i at fylde "listen"
Avatar billede steensommer Praktikant
28. oktober 2003 - 21:13 #17
-->bak - har du en løsning på det? Det var jo meningen at den skulle give resultatet fra alle 3 tabeller :0)
Avatar billede terry Ekspert
28. oktober 2003 - 21:14 #18
steensommer>You have three tables all with a field named Efternavn, is that correct?
OK, if that is correct which tables efternavn are you using in the WHERE?

I will be VERY surprised if you can get this to work as you are tying now!

bak>try making three tables in Access and make a query in Access which gives you the result. Then when you have done that lets us see it!
Avatar billede terry Ekspert
28. oktober 2003 - 21:15 #19
why make this easy when you can make it difficult :o)

Night guys!
Avatar billede steensommer Praktikant
28. oktober 2003 - 21:16 #20
--> Terry . Jeg vil da meget gerne se hvorledes man laver en UNION query og hvorledes den fungerer. Det skal dog anføres at kun [Kartotek 2003] er 100% ok vedr struktur/felter; de 2 andre skal være ligeledes opbygget.
Avatar billede terry Ekspert
28. oktober 2003 - 21:21 #21
NOSPAMeksperten@santhell.dkNOSPAM

you need to remove NOSPAM
Avatar billede terry Ekspert
28. oktober 2003 - 21:26 #22
Nice mail Steen, but can you either ZIP or rename the dB Outlook is rejecting it!
Avatar billede terry Ekspert
28. oktober 2003 - 21:49 #23
I have sent the dB back.

qryUnion> I only select the fields which exist in all three tables and which have the same data type!

SELECT R.Fornavn, R.Efternavn, R.[Patient nr], R.[Cpr nr], R.Adresse, R.[Postnr og bynavn], R.[Indkaldelse Dato]
FROM [Radiofrekvensablation 2003] AS R
UNION
SELECT P.Fornavn, P.Efternavn, P.[Patient nr], P.[Cpr nr], P.Adresse, P.[Postnr og bynavn], P.[Indkaldelse Dato]
FROM [PCI og KAG 2003] AS P
UNION SELECT K.Fornavn, K.Efternavn, K.[Patient nr], K.[Cpr nr], K.Adresse, K.[Postnr og bynavn], K.Indkaldelsedato
FROM [Kartotek 2003] AS K;
Avatar billede bak Forsker
29. oktober 2003 - 00:10 #24
Terry, du har ret i at det er nemmere at lave queryen een gang for alle i access, men jeg har nu testet min kode og den virker fint.

for at overføre data til variablen "listen" har jeg for nemheds skyls brugt at extra ark.

Dim listen
Public Sub GetDataver2()

 
Dim szConnect As String
Dim szSQL As String
Dim c As Variant
Dim IBox As String
Dim strSQL As String
Dim MinSøgning As Variant
Dim wks As Worksheet
Set wks = ActiveWorkbook.Worksheets.Add
MinSøgning = Array("test1", "test2", "test3")
' Create the connection string.
szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=c:\salesdb.mdb;"

IBox = InputBox("Indtast søgestreng")

For X = 0 To 2
    szSQL = "SELECT * FROM [" & MinSøgning(X) & "] WHERE [Customer] LIKE'" & IBox & "%'"
    Set rsdata = New ADODB.Recordset
    rsdata.Open szSQL, szConnect, adOpenForwardOnly, adLockReadOnly, adCmdText
   
    If Not rsdata.EOF Then
    wks.Range("a2000").End(xlUp).CopyFromRecordset (rsdata)
    End If
    Set rsdata = Nothing
Next X
listen = wks.Range("A2").CurrentRegion
Application.DisplayAlerts = False
wks.Delete
Application.DisplayAlerts = True

End Sub
Avatar billede steensommer Praktikant
29. oktober 2003 - 00:27 #25
--> bak  Det er utrolig dejligt at du gider blive ved med at få det til at fungere. Jeg ved desværre ikke helt hvad der går galt i min version af projektmappen. Man kan kort se at der oprettes et ekstra ark som kortvarigt indeholder data hvorefter man er tilbage ved udgangspositionen - altså ser jeg aldrig Listen (som hidtil har været rigtig velfungerende).

vh Steen
Avatar billede bak Forsker
29. oktober 2003 - 00:36 #26
Husk at øverst at Dimme listen public, det smuttede lige her.
Public Listen
Avatar billede steensommer Praktikant
29. oktober 2003 - 00:40 #27
Det hjalp desværre ikke - samme problem :0(
Avatar billede steensommer Praktikant
30. oktober 2003 - 14:26 #28
Jeg havde tænkt mig at fordele point ligeligt mellem bak og Terry - er det ok med jer?
SQL-Union fungerer fint og så behøver jeg jo ikke ændre i den kode som bak tidligere har lavet til mig.
-->bak. Jeg fik desværre ikke det sidste vedr. Listen til at fungere men resten fungerer godt jvf ovenstående. I øvrigt har jeg ikke glemt at jeg skylder dig noget men det bliver nok ikke før dec ;0)
Tak for hjælpen til jer begge.
Avatar billede terry Ekspert
30. oktober 2003 - 19:40 #29
Thats great with me :o)
Avatar billede bak Forsker
30. oktober 2003 - 23:11 #30
Fint med mig også :-)
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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