Avatar billede steensommer Praktikant
03. marts 2005 - 01:39 Der er 15 kommentarer og
1 løsning

Excel og SQL igen

Hej
Fra Excel har jeg følgende kode der henter data fra SQL databasens tabel: Kartotek. Imidlertid vil jeg helst hente fra en Forespørgsel: "Union" (der er en sammensætning af 3 tabeller). Den fejler imidlertid når jeg forsøger. Det skal siges at det fungerede fint inden jeg konverterede til MSDE. Er der en ekspert der kan hjælpe?

vh Steen

Sub GetTable1(TargetCell As Range)
Dim strSQL As String
Dim HCVno As String, Cpr As String
Dim Conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim tmp As String
     
'On Error GoTo notfound

  Set Conn = New ADODB.Connection
  Set rs = New ADODB.Recordset

  Conn.Open "Provider=sqloledb;" & _
          "Data Source=STEENS;" & _
          "Initial Catalog=PatientregisteretSQL3;" & _
          "Integrated Security=SSPI;"
   
  'Her indsættes navn og sti
  tmp = TargetCell.Value
   
  strSQL = "SELECT * FROM Kartotek WHERE [Patient nr] ='" & tmp & "';"
  rs.Open strSQL, Conn
   
  With TargetCell
      .Offset(0, -4) = rs("Fornavn").Value & " " & rs("Efternavn").Value
      .Offset(X, -2) = rs("CPR nr")
      .Offset(X, 0) = rs("Patient nr").Value
      .Offset(X, 16) = rs("INDKALDELSE DATO").Value
      .Offset(X, 18) = rs("Adresse").Value

  End With
 
  rs.Close
  Set rs = Nothing
  Exit Sub

notfound:
'  rs.Close
  Set rs = Nothing
  MsgBox "Enkelte poster kan mangle"
End Sub
Avatar billede lorentsnv Nybegynder
03. marts 2005 - 10:32 #1
Hvis det fungerede fint under SQL Server, men fejler uder MSDE, kunne det godt være et rettighedsproblem. Kan du forsøge at logge på med sa eller dbo-bruger?
Avatar billede sjap Praktikant
03. marts 2005 - 11:23 #2
Er "Patient nr" en streng eller et tal? Du søger på det som om det er en streng i

strSQL = "SELECT * FROM Kartotek WHERE [Patient nr] ='" & tmp & "';"

Jeg har faktisk ikke prøvet det, så jeg ved ikke om det betyder noget, men du kan eventuelt prøve med

strSQL = "SELECT * FROM Kartotek WHERE [Patient nr] =" & tmp & ";"
Avatar billede steensommer Praktikant
03. marts 2005 - 13:03 #3
sjap --> Jeg søger på en streng.
lorentsnv --> Nu må jeg da vist hellere fortælle at vedr MS SQL er jeg fuldstændig grøn. Jeg har da endnu ikke stødt på et sted hvor man skal logge på med sa/dbo (eller andre for den sags skyld) - du må nok specificere hvad du mener :0)
Avatar billede lorentsnv Nybegynder
03. marts 2005 - 20:48 #4
Der er flere måder at koble sig op til MSDE på, og du bruger den sidste af de to metoder der er beskrevet nedenfor, hvilket betyder at du forsøger at logge dig på med en NT-bruger. Jeg er lidt usikker på om det i dit tilfælde er den bruger der kører ASp-siden, eller om det er den NT-bruger som IIS kører under. Sandsynligvis det sidste.

For Standard Security:
oConn.Open "Provider=sqloledb;" & _
          "Data Source=myServerName;" & _
          "Initial Catalog=myDatabaseName;" & _
          "User Id=myUsername;" & _
          "Password=myPassword"

For a Trusted Connection:
oConn.Open "Provider=sqloledb;" & _
          "Data Source=myServerName;" & _
          "Initial Catalog=myDatabaseName;" & _
          "Integrated Security=SSPI"

Nu kender jeg ikke så meget til MSDE, da jeg kun er vandt med at bruge SQL Server og Enterprise Manager. Men enhver SQL Server/MSDE har som default en sa account (System administrator), og ved installation, bliver du bedt om at give et password til sa. Kan du huske om du har givet et password til sa? Det kan også være at sa har blankt password, noget jeg mener var default på SQL Server 7.0.

Men hvis du kender password på din sa-account, kan du bruge følgende connection string:
Conn.Open "Provider=sqloledb;" & _
          "Data Source=STEENS;" & _
          "Initial Catalog=PatientregisteretSQL3;" & _
          "User Id=sa;" & _
          "Password=myPassword"
Hvis du kan logge dig på med denne, kan du i det mindste checke om dine problemer skyldes manglende rettigheder til den NT-bruger der laver forespørgselen. SA har som default rettigheder til alle objekter, og du skulle derfor kunne lave din forespørgsel uden fejl.

Hvis du finder at sa brugeren kan køre forespørgselen, men den ikke kører når du bruger Trusted connection, skal du sørge for at din NT bruger har rigtige rettigheder til dit object (forespørgsel/view). Dette gøres med GRANT, som du kan læse lidt mere om her:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ga-gz_8odw.asp

Din NT bruger skal også være oprættet som login på din SQL Server/MSDE. Se sp_grantlogin :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_ga-gz_8dri.asp

Derefter skal du bruge sp_grantdbaccess for at give login'et adgang til en bestemt database:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_ga-gz_290z.asp

Du kan læse om Security i SQL Server på:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adminsql/ad_security_05bt.asp
Her bør du finde nødvendige informationer.
Avatar billede steensommer Praktikant
03. marts 2005 - 21:46 #5
Jeg har indsat connection string men følgende fejlmeddelelse fremkommer:
Login failed for user 'sa'. Reason: Not associated with a trusted SQL Server connection.
Jeg har dog fortsat lidt svært ved at forstå hvorfor jeg kan søge på en MSSQL tabel men ikke en forespørgsel (hvor jeg har samme rettighed)

Steen
Avatar billede steensommer Praktikant
04. marts 2005 - 01:41 #6
Jeg løste problemet ved at køre en UNION Select kommando fra Excel - det virker uden problemer (Mærkeligt)
Tak for interessen, information og links.
Svar så får du selvfølgelig point :0)
Avatar billede lorentsnv Nybegynder
04. marts 2005 - 09:51 #7
Hej Steen.
Jeg synes du skal beholde en del af poengene selv, da du selv har fundet en løsning.
Men måden du beskriver det på, gør mig ret sikker på at det er et spørgsmål om rettigheder. Måske skulle du forsøge at køre en Grant på dit view/forespørgsel til public. Nedenfor har jeg vist Grant for select, update, insert og delete. Du kan fjerne de statements du ikke ønsker:

GRANT  SELECT ,  UPDATE ,  INSERT ,  DELETE  ON [vDitView]  TO [public]
Avatar billede steensommer Praktikant
04. marts 2005 - 12:58 #8
Hej igen
Det fungerede kun "næsten". Jeg må prøve det du foreslår. Skal SQL sætningen med GRANT SELECT køres sammen med eller før den SQL man ønsker kørt?? (Det er nok et dumt spørgsmål)
Avatar billede lorentsnv Nybegynder
04. marts 2005 - 13:16 #9
GRANT skal kun køres en gang, for at definere rettighedern til en bruger/gruppe. Du må derfor køre GRAN inden du første gang laver den SQL du ænsker kørt. Men næste gang igen hvor du kører din SQL, er der ikke behov for at køre en Grant på ny.

Ved at grante dit view/forespørgsel til gruppen public, får alle brugere adgang til dette view.

Tak for pointerne, men jeg fortjener dem vel ikke før jeg har løst dit problem.
Avatar billede steensommer Praktikant
04. marts 2005 - 13:17 #10
Kan man eks. skrive:

strSQL = "GRANT SELECT * ON aUnion TO [public] WHERE [Cpr nr] LIKE '" & iBox & "%';"
Avatar billede lorentsnv Nybegynder
04. marts 2005 - 14:00 #11
Nej, du må sende en Grant afsted seperat, én gang.

Den vil se ud som:  GRANT SELECT ON aUnion TO [public]

Når du har gjort dette én gang, skulle du efterfølgende kunne køre din select:
strSQL = "SELECT * From aUnion WHERE [Cpr nr] LIKE '" & iBox & "%';"
Avatar billede steensommer Praktikant
04. marts 2005 - 14:40 #12
Følgende kode fejler ved første:    rs.Open strSQL, Conn
med ordene:
Granted or revoked privilege SELECT is not compatible with object.

Kode:
    Set Conn = New ADODB.Connection
    Set rs = New ADODB.Recordset

    Conn.Open "Provider=sqloledb;" & _
          "Data Source=STEENS;" & _
          "Initial Catalog=PatientregisteretSQL3;" & _
          "Integrated Security=SSPI;"
   
    strSQL = "GRANT SELECT ON aUnion TO [public]"
    rs.Open strSQL, Conn

    strSQL = "SELECT * FROM aUnion WHERE [Cpr nr] LIKE '" & iBox & "%';"
    rs.Open strSQL, Conn
Avatar billede lorentsnv Nybegynder
04. marts 2005 - 14:55 #13
Problemet er et den bruge du logger dig på med, ikke har nødvendie rettigheder, hverken til at lave SELECT, eller til at lave GRANT med.

Spørgsmålet er så hvordan du kan logge dig på med en bruger med fornødne rettigheder. Kan du huske hvilket password du brugte på sa, da du installerede MSDE?

Har du kigge på internet efter administratioinsprogrammer til MSDE?
http://msde.biz/ kan du finde gratis Query tool og et administrationsmodul til $22, hvor du bl.a. kan styre rettigheder. Jeg tror det ville være en god investering, og gøre det langt nemmere at styre dine rettigheder.
Avatar billede lorentsnv Nybegynder
04. marts 2005 - 15:10 #14
Til privat brug, finder du et gratis admin.tool her:
http://www.whitebearconsulting.com/utilities.htm

Ellers har du en del udbydere af admin-tools her:
http://www.microsoft.com/sql/msde/partners/default.asp
Avatar billede steensommer Praktikant
04. marts 2005 - 21:11 #15
Det er noget fint værktøj og godt til at teste ens sql-streng. Når jeg forsøger at logge på med SQL Server Autorisation opstår fejl: Error: Login failed for user 'ssa' . Reason: Not associated with a trusted SQL server connection.
Avatar billede steensommer Praktikant
06. marts 2005 - 07:21 #16
Med MSDE Query lykkedes det at få alt til at fungere og det havde ikke noget med rettigheder at gøre i dette tilfælde ;0)
Tak for hjælpen
Steen
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