webForumDet fria alternativet

SQL-fråga!

24 svar · 517 visningar · startad av trexter.com

trexter.comMedlem sedan apr. 20021 203 inlägg
#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?

:)

sgtpepperMedlem 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.

OveRRidEMedlem sedan feb. 200112 078 inlägg
#3

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

LarsGMedlem 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
trexter.comMedlem 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...

:)

trexter.comMedlem 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

:)

@ndersMedlem sedan juni 200032 969 inlägg
#7

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

trexter.comMedlem 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"
LarsGMedlem 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.

trexter.comMedlem sedan apr. 20021 203 inlägg
#10

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

:)

LarsGMedlem sedan dec. 200012 464 inlägg
#11
Connect.Execute "Update Counter SET Number = Number + 1 Where Reference = '" & replace(Reference,"'","''") & "'" ,rows,128
trexter.comMedlem 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" -->

:)

trexter.comMedlem 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")
trexter.comMedlem 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"...

:)

@ndersMedlem sedan juni 200032 969 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,

trexter.comMedlem 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...

:)

trexter.comMedlem sedan apr. 20021 203 inlägg
#17

btw, counter är inte reserverat?!

LarsGMedlem sedan dec. 200012 464 inlägg
#18

Jo, i Access så är det det.

@ndersMedlem sedan juni 200032 969 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).

@ndersMedlem sedan juni 200032 969 inlägg
127 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)