Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


En SQL fråga.

Postades av 2004-04-26 13:56:00 - Kristoffer Ljungqvist, i forum access, Tråden har 17 Kommentarer och lästs av 986 personer

Hejsan jag undrar hur ska man kontrollera två Id värden om dom finns med i databasen?
Kan man göra det på en ända sql fråga?
så att det blir
Sql= select * From Tabell Where id = Idnummer1 and id = Idnummer2
If not rst.eof
kan man göra så där?
Eller det kanske strullar då det är 2 unika poster man söker?
För man kan ju göra så när man kollar efter användarnamn och lösenordet.
Men då är det i samam post.
Men kan man göra samma sak men för 2 olika poster som inte tillhör varandra?
Någon som vet?


Svara

Sv: En SQL fråga.

Postades av 2004-04-26 15:32:06 - Fredrik Hansson

select * from tabell where id=idnummer1 or id=idnummer2

..och sen kollar du om du fick två rader tillbaka.


Svara

Sv: En SQL fråga.

Postades av 2004-04-26 15:36:34 - Kristoffer Ljungqvist

Tackar. Ska kolla det för tänkte så men tyckte det såg konstigt ut.


Svara

Sv: En SQL fråga.

Postades av 2004-04-26 21:29:15 - Andreas Hillqvist

Det är vackrare att skriva:
<code>
strSQL = "SELECT Count(*) AS Antal FROM TabellNamn WHERE IdFält IN (" & idnummer1 &", " & idnummer2 & ")"
Set rs = con.Execute(strSQL)
If rs("Antal") = 2 Then
''Båda id existerar
End if

rs.Close
Set rs = Nothing
</code>
Detta förutsätter att inga dubleter får förekomma i tabellen. Möjligheterna att skriva dubleter kan hindras med hjälp av ett un ikt index/primärnyckel eller en constrant.


Svara

Sv: En SQL fråga.

Postades av 2004-04-27 13:56:04 - Kristoffer Ljungqvist

<%
Id1 = Replace(Request.Querystring("Userid"),"''''","''''''''")
Id2 = Session("Userid")
Set con = Server.CreateObject("Adodb.Connection")
Con.open "Driver={Microsoft Access Driver (*.mdb)};Dbq=" & Server.MapPath("../../../Db/Community.mdb") & ";"
strSQL = "SELECT Count(*) AS Antal FROM User WHERE Id IN(" & id1 & "," & Id2 & ")"
Response.write StrSql
''''Response.end
Set rs = con.Execute(strSQL)
If rs("Antal") = 2 Then
''''''''Båda id existerar
End if

rs.Close
Set rs = Nothing
%>
Så ser koden ut.
Men får följande felmedelande:

Microsoft OLE DB Provider for ODBC Drivers error ''''80040e14''''

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression ''''Id IN(A9928520-F1AE-4C4F-937E-EFF86F869608},D32CA2FA-EBF6-4A5F-9DEF-C7BD3EA14753})''''.

/user/Friends/friends_save.asp, line 9


Men när jag skriver ut sql får jag fölajnde meddelande.

SELECT Count(*) AS Antal FROM User WHERE Id IN({A9928520-F1AE-4C4F-937E-EFF86F869608},{D32CA2FA-EBF6-4A5F-9DEF-C7BD3EA14753})

vad är då fel?


Svara

Sv: En SQL fråga.

Postades av 2004-04-27 16:32:12 - Andreas Hillqvist

Testa med:
<code>
<%

Id1 = Request.Querystring("Userid")
Id2 = Session("Userid")

Set con = Server.CreateObject("Adodb.Connection")
Con.open "Driver={Microsoft Access Driver (*.mdb)};Dbq=" & Server.MapPath("../../../Db/Community.mdb") & ";"

strSQL = "SELECT Count(*) AS Antal FROM User WHERE Id IN(''" & Replace(id1, "''", "''''") & "'', ''" & Replace(Id2, "''", "''''") & "'')"

If False Then
Response.write StrSql
Response.end
Else
Set rs = con.Execute(strSQL)
If rs("Antal") = 2 Then
Response.write "Båda id existerar"
Else
Response.write "Antal = " & rs("Antal")
End if
rs.Close
Set rs = Nothing
End if
%>
</code>
Eller:
Testa med:
<code>
<%

Id1 = Request.Querystring("Userid")
Id2 = Session("Userid")

Set con = Server.CreateObject("Adodb.Connection")
Con.open "Driver={Microsoft Access Driver (*.mdb)};Dbq=" & Server.MapPath("../../../Db/Community.mdb") & ";"

strSQL = "SELECT Count(*) AS Antal FROM User WHERE Id IN({guid " & Left(id1, 37) & "}, {guid" & Left(Id2, 37) & "})"

If False Then
Response.write StrSql
Response.end
Else
Set rs = con.Execute(strSQL)
If rs("Antal") = 2 Then
Response.write "Båda id existerar"
Else
Response.write "Antal = " & rs("Antal")
End if
rs.Close
Set rs = Nothing
End if
%>
</code>


Svara

Sv: En SQL fråga.

Postades av 2004-04-28 10:31:32 - Kristoffer Ljungqvist

Hejsan jag får fortfarande felmeddelande: Mern nu säger den följande.

Microsoft OLE DB Provider for ODBC Drivers error ''80040e14''

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression ''Id IN(guid A9928520-F1AE-4C4F-937E-EFF86F869608}, guidD32CA2FA-EBF6-4A5F-9DEF-C7BD3EA14753})''.

/user/Friends/friends_save.asp, line 15


Svara

Sv: En SQL fråga.

Postades av 2004-04-28 10:42:10 - Ulf Elfving

Du skall inte rama in variablerna som text?

strSQL = "SELECT Count(*) AS Antal FROM User WHERE Id IN({''guid " & Left(id1, 37) & "}'', {''guid" & Left(Id2, 37) & "}'')"


Svara

Sv: En SQL fråga.

Postades av 2004-04-28 11:42:58 - Kristoffer Ljungqvist

Hela iden är at den ska kolla upp om Användare1 och användare 2 finns med i databasen i en och samma sql fråga.
Som jag har gjort nu kontrollerar den
Först 1 användaren.
Sen kontrolleraren 2 användaren i 2 rst men jag vill ha den kontrollen i en och samma.
Och det är där som problemet strullar.


Svara

Sv: En SQL fråga.

Postades av 2004-04-28 12:27:54 - Ulf Elfving

Skrev fel förut... det skall ju vara '''''''''''''''' i sqlsatsen

<code>
strSQL = "SELECT Count(*) AS Antal FROM User WHERE Id IN({''''guid " & Left(id1, 37) & "}'''', {''''guid" & Left(Id2, 37) & "}'''')"
</code>

Har du testat att skriva ut och köra den frågan direkt i Access?

Sedan bara en liten fundering, varför kör du inte med en vanlig räknare (int) som unikt id för din user?


Svara

Sv: En SQL fråga.

Postades av 2004-04-28 13:50:20 - Kristoffer Ljungqvist

menar du vanliga räknte tal 1,2 osv?
istället för {EEE999E} osv.
Nja blev bara så tyckte det skulle vara bättre.
Får följande felmeddelande:

Microsoft OLE DB Provider for ODBC Drivers error ''80040e14''

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression ''Id IN(''''''''guid A9928520-F1AE-4C4F-937E-EFF86F869608''''''''}'''''''', ''''''''guidD32CA2FA-EBF6-4A5F-9DEF-C7BD3EA14753}'''''''')''.

/user/Friends/friends_save.asp, line 15


Svara

Sv: En SQL fråga.

Postades av 2004-04-28 15:34:56 - Ulf Elfving

Ja det menar jag, så mycket enklare och skonsammare mot databasen =)

Pelles SQLInjection stör koden som skrivs i formumet....

strSQL = "SELECT Count(*) AS Antal FROM User WHERE Id IN({<enkelfnutt>guid " & Left(id1, 37) & "}<enkelfnutt>, <enkelfnutt>{guid" & Left(Id2, 37) & "}<enkelfnutt>)"


Svara

Sv: En SQL fråga.

Postades av 2004-04-29 10:45:04 - Linus Enbom

Om man bara ska kolla upp om dom finns i databasen..
Är det inte bättre att söka igenom databasen (utan att skriva ut nåt) och sedan använda en if satts?
<code>
If RecSet("user1") = "lookup1" AND RecSet("user2") = "lookup2" Then
'' Skicka tillbaka användaren och generera felet att användarna redan finns
Else
'' Spara informationen
End If</code>
eller något sådant.. Tror ni inte att det skulle vara bättre?
Det kan ju bli mycket som kan bli fel om man sätter in det direkt i SQL:en.


Svara

Sv: En SQL fråga.

Postades av 2004-04-29 12:43:34 - Kristoffer Ljungqvist

SKa prova det nu direkt.
Tackar.
Det är perfekt att ha det så.
men det finns så många olika sätt ibland så det kan vara lite svårt att hänga med.


Svara

Sv: En SQL fråga.

Postades av 2004-04-29 18:20:26 - Andreas Hillqvist

Det är väldigt ineffektivt och resursslukande sätt att göra det på.

Kan du skriva ut dina värden? Innehåller de måsvingar?


Svara

Sv: En SQL fråga.

Postades av 2004-04-30 11:42:59 - Linus Enbom

Varför är det ineffektivt?
Kanske är mer kod men ändå. Det funkar ju och det tar ju inte upp så mycket resurser för att göra en liten if-satts.


Svara

Sv: En SQL fråga.

Postades av 2004-04-30 12:59:13 - Kristoffer Ljungqvist

För blir det förmycket trafik kanske hela allt llägger av då det blir förmycket. Och så vill vi inte ha det ju.


Svara

Sv: En SQL fråga.

Postades av 2004-04-30 20:20:45 - Andreas Hillqvist

Om man har insikt i vad som sker bakom kulisserna så kan man snabbt se vilken Ordo(Lite om ordo: http://www.dis.uu.se/dsv/education/courses/ht02/Algoritmer_datastrukt_oop/misc/Ordotal.doc)

Om du gör en SQL fråga så kan servern kontrollera index. Detta är ett mycket snabbt och effektivt sätt.

Att öppna ett recordset innebär att servern måste läsa hela tabellen. I/O operationer till hårdisken är en flaskhals vad det gäller prestanda. Därför bör man undvika det.
Att läsa ett index från hårdisken och att läsa en tabell är en oerhört stor skillnad.
När vi sedan går igenom tabellen genom ett recordset innebär att navigerings operationen move next anropas på ADO(genom late binndings dessutom, USH!) sedan genom OLEDB Providern för att slutligen läsa databasen och retundera svaret tillbaks.

Att jämföra dessa två är inte ens intressant. Det självklara valet är att använda en SQL fråga. Det skall gå smärtfritt. Att ge upp och lösa det medd en loop anser jag var ett mycket svagt karraktärsdrag. Ungefär som att köra EP traktor i 30Km/h på tyska autonbane.

Jag hoppas mitt inlägg förklarat skillnaderna mellan de olika sätten att angripa problemet. Om ni har fråger kan ni be mig förtydliga mig. JAg hoppas inte mitt inlkägg på något sätt förolämpat någon av er läsare.

/Mvh, Andreas Hillqvist



Svara

Nyligen

  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av
  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 769
27 960
271 761
1 005
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies