01. februar 2005 - 14:31Der er
16 kommentarer og 1 løsning
Excel og SQL
Hej
Følgende kode fungerer helt efter hensigten og slår op i SQL server databasens (STEENS) tabel RFA. Den skal dog helst slå op i en FORESPØRGSEL: 2003Union - kan det ikke lade sig gøre?
Public Sub GetDataCPRRFA()
Dim strSQL As String Dim Conn As ADODB.Connection Dim Rs As ADODB.Recordset Dim iBox As String
szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=\\server\faelles\Lotte og Susanne\Registre\Patientregisteret.mdb;"
iBox = InputBox("Indtast søgestreng")
Set Conn = New ADODB.Connection Set Rs = New ADODB.Recordset
strSQL = "SELECT * FROM [RFA] WHERE [Cpr nr] LIKE '" & iBox & "%';" Rs.Open strSQL, Conn
If Not Rs.EOF Then listen = TransposeDim(Rs.GetRows) With UserForm1 .Caption = "Søgeresultat" .ListBox1.ColumnCount = 29 .ListBox1.ColumnWidths = "35,20,55,80,65,115,80,55,50,35,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" .Show End With
Rs.Close Else MsgBox "Ingen fundet", vbCritical UserForm1.ListBox1.Clear Rs.Close End If
Jeg går ud fra at du ikke har Enterprise Manager, da det ser ud til at du bruger MSDE. Jeg har ikke erfaring selv i at bruge denne, da jeg bruger den fulde SQL Server. Men du kan lave en Grant på dit view, hvor xxxx i GRANT SELECT on 2003Union to xxxx er navnet på en bruger. Jeg kender ikke helt til hvor du kører en sql mod din database. Brugeren som kører denne sql mod databasen, skal også have rettigheder til at sette Grant-permission.
Nu vil jeg ikke kloge så meget i det her, da jeg ikke har adgang til ms sql men her er et bud. Min vba vil ikke accepter navnet 2003union så den har jeg omdøbt til a2003union jeg går ud fra at din forespørgsel indeholder "SELECT * FROM [RFA] WHERE [Cpr nr] LIKE " + en parameter, hvor du vil indsætte indholdet af iBox og "%"
Public Sub GetDataCPRRFA()
Dim strSQL As String Dim Conn As ADODB.Connection Dim Rs As ADODB.Recordset Dim iBox As String
Set Conn = New ADODB.Connection Set Rs = New ADODB.Recordset objConn.Open szConnect iBox = iBox & "%" objConn.a2003Union iBox, Rs 'Conn.Open "Provider=sqloledb;" & _ "Data Source=STEENS;" & _ "Initial Catalog=PatientregisteretSQL;" & _ "Integrated Security=SSPI;"
'strSQL = "SELECT * FROM [RFA] WHERE [Cpr nr] LIKE '" & iBox & "%';" 'Rs.Open strSQL, Conn
If Not Rs.EOF Then listen = TransposeDim(Rs.GetRows) With UserForm1 .Caption = "Søgeresultat" .ListBox1.ColumnCount = 29 .ListBox1.ColumnWidths = "35,20,55,80,65,115,80,55,50,35,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" .Show End With
Rs.Close Else MsgBox "Ingen fundet", vbCritical UserForm1.ListBox1.Clear Rs.Close End If
Jeg er gået ud fra i eksemplet at du i SQL har lavet en forespørgsel der søger på cpr-numre og har sat fortalt den at cpr-nummeret er en parameter som du indgiver (via iBox). det er måske ikke rigtigt ? Ellers skal jeg nok have det lavet lidt om.
objConn.a2003Union iBox, Rs åbn connection med forespørgsel a2003Union med parameteren iBox og afleverer resultatet i Rs
Hov jeg tror at vi alligevel har misforstået hinanden. a2003Union er en forespørgsel i Access (MS SQL Server) der sammensætter 3 forskellige tabeller. Det er udfra denne tabel at søgningen skal foregå for at få personer/patienter med fra alle 3 tabeller!
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.