28. oktober 2003 - 08:19Der 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
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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
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
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.
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"
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!
--> 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.
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;
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
--> 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).
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.
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.