webForumDet fria alternativet

SQL-fråga!

Databaser & SQLur Databashanterare & SQL

24 svar · 517 visningar · startad av trexter.com

Medlem sedan apr. 20021 203 inlägg
Frågan#1

Jag har en databas med tre kolummer,
ID & Number & Reference

... jag kommer få ett värde som ska jämföras med Reference. Där det stämmer överens ska Number plussas med ett.
Men om "Reference-värdet" inte finns ska detta _skrivas in och en ett under "Number"_.

Hur ska SQL-frågan då se ut?

:)

Medlem sedan apr. 20007 588 inlägg
#2

Det här är ju inte något som specifikt handlar om ASP så inlägget bör flyttas till SQL-forumet.

Det du vill göra kräver två SQL-satser, först en utplockning:
SELECT * FROM foo WHERE reference=<?>

Sen en kontroll om frågan inte gav några träffar, i så fall kör du en insättning:
INSERT INTO foo(number, reference) VALUES(1, <?>)

Där <?> är värdet på reference som du fått. Insertsatsen förutsätter att kolumnen ID är autoräknande, annars får du själv skicka in ett ID-nummer.

Medlem sedan feb. 200112 078 inlägg
#3

Så rätt, så. Tråden flyttas.

Medlem sedan dec. 200012 464 inlägg
#4
connect.execute "update t set number = number + 1 where reference = " & reference",rows,128
if  rows = 0 then
connect.execute "insert into t(reference,number) values(" & reference & ",1)",,128
end if
Medlem sedan apr. 20021 203 inlägg
#5

Men om frågan ger några träffar då? Då kommer ju insättningen hoppas över?!

Jag försåtr inte riktigt hur du menar...

r) Lars kod löser nog problemet...

:)

Medlem sedan apr. 20021 203 inlägg
#6

Jag får ett felmeddelande:

Microsoft VBScript compilation error '800a0409' 
Unterminated string constant 
/v2/default.asp, line 6 
Connect.Execute "Update Counter SET Number = Number + 1 Where Reference = " & Reference ",rows,128
--------------------------------------------------------------------------------------------------^

Men det blir inte heller rätt om jag avslutar med ett extra ".

Koden ser (som sagt) ut så här:

<!--#include file="includes/connstring.asp" -->
Reference = Trim(LCase(Request.ServerVariables("HTTP_REFERER"))) & ""
Connect.Execute "Update Counter SET Number = Number + 1 Where Reference = " & Reference ",rows,128

If  Rows = 0 Then
	Connect.Execute "Insert into Counter(Reference,Number) Values(" & Reference & ",1)",,128
End If

Connect.Close
Set Connect = Nothing

:)

Medlem sedan juni 200032 967 inlägg
#7

Ta bort det sista citationstecknet, det före rows.

Medlem sedan apr. 20021 203 inlägg
#8
Microsoft VBScript compilation error '800a03ea' 

Syntax error 

/v2/Default.asp, line 6 

Connect.Execute "Update Counter SET Number = Number + 1 Where Reference = " & Reference & ,rows,128"
------------------------------------------------------------------------------------------^
Connect.Execute "Update Counter SET Number = Number + 1 Where Reference = " & Reference & ,rows,128"
Medlem sedan dec. 200012 464 inlägg
#9
Connect.Execute "Update Counter SET Number = Number + 1 Where Reference = " & Reference ,rows,128

Det förutsätter att reference är numeriskt i databasen.

Medlem sedan apr. 20021 203 inlägg
#10

Ok. Men det är text. Hur göra då?

:)

Medlem sedan dec. 200012 464 inlägg
#11
Connect.Execute "Update Counter SET Number = Number + 1 Where Reference = '" & replace(Reference,"'","''") & "'" ,rows,128
Medlem sedan apr. 20021 203 inlägg
#12

Tack, men...
Jag får "Object required: 'Connect'" på koden... går det inte att länka in en koppling som jag gjort på detta sätt? :q

<!--#include file="includes/connstring.asp" -->

:)

Medlem sedan apr. 20021 203 inlägg
#13

Connstring.asp:

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=password;Data Source=" & Server.MapPath("/mapp/undermapp/databas.mdb")
Medlem sedan apr. 20021 203 inlägg
#14

Ska tillägga att om jag har koden direkt i filen i stället för i en inkluderingsfil får jag "Syntax Error in Update Statement"...

:)

Medlem sedan juni 200032 967 inlägg
#15

Det är inte ovanligt att Syntax Error-felmeddelanden innebär att man har ett reserverat ord med i SQL-frågan, tabell- eller fältnamn alltså.

Number är reserverat. Byt namn.

Ang ditt andra problem med Object expected så får du nog visa lite kod. Visst kan man inkludera filer, det spelar ingen roll vad som är i dem. Innehållet i de olika filerna klistras ju bara ihop, så det ska inte spela någon roll om du använder include eller skriver koden rätt i filen.

Mvh,

Medlem sedan apr. 20021 203 inlägg
#16
Microsoft VBScript runtime error '800a01a8' 
Object required: 'Connect' 
/v2/Default.asp, line 6
<!--#include file="includes/variables.asp" -->
<%
' Kod för att räkna varifrån besökare kommit
Reference = Trim(LCase(Request.ServerVariables("HTTP_REFERER"))) & ""
<!--#include file="includes/connstring.asp" -->
[b]Connect.Execute "Update Counter SET Numero = Numero + 1 Where Reference = '" & replace(Reference,"'","''") & "'" ,rows,128[/b]
If  Rows = 0 Then
	Connect.Execute "Insert into Counter(Reference,Numero) Values(" & Reference & ",1)",,128
End If
%>

Den markerade raden blir det om man räknar <!--#include file="includes/connstring.asp" --> som en ad och inte vad den innehåller...

:)

Medlem sedan apr. 20021 203 inlägg
#17

btw, counter är inte reserverat?!

Medlem sedan dec. 200012 464 inlägg
#18

Jo, i Access så är det det.

Medlem sedan juni 200032 967 inlägg
#19

Du ska inte ha includen inne i asp-context. Du skall alltså i din includefil ha <% och %> runt innehållet, och lägga includedirektivet 'löst' i din asp-fil. (precis som du gjort ett par rader ovan den raden).

Medlem sedan juni 200032 967 inlägg
138 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)