/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Kan strSQL ikke være lig med NULL eller "b~
Fra : itak


Dato : 11-07-05 08:37

Jeg forsøger at læse noget data fra en database (Access).
Scriptet skal tjekke om dataene overhovedet findes i databasen og
derefter - hvis de IKKE findes - skrive det til basen. Hvordan
tjekker jeg om dataene findes, hvis jeg ikke kan indlæse "blankt"
i f.eks. "strSQL"?

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Casper Bang (11-07-2005)
Kommentar
Fra : Casper Bang


Dato : 11-07-05 09:51

> Jeg forsøger at læse noget data fra en database (Access).
> Scriptet skal tjekke om dataene overhovedet findes i databasen og
> derefter - hvis de IKKE findes - skrive det til basen. Hvordan
> tjekker jeg om dataene findes, hvis jeg ikke kan indlæse "blankt"
> i f.eks. "strSQL"?

Hvis du i variablen "db" har forbindelsen til din database, gør du noget
ala:

strSQL = "SELECT bogstav FROM tabel WHERE tal = 1"
Set rs = db.execute(strSQL)
if rs.EOF then
db.execute("INSERT INTO tabel (bogstav, tal) VALUES ('a', 1)")
else
response.write("det findes!")
end if



Jens Gyldenkærne Cla~ (11-07-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 11-07-05 13:35

itak skrev:

> Scriptet skal tjekke om dataene overhovedet findes i databasen og
> derefter - hvis de IKKE findes - skrive det til basen.

Du tjekker ved at lave en normal select-sætning og så teste om du får et
tomt postsæt tilbage. Følgende eksempel leder efter værdien "foo" og
sætter den ind hvis den ikke er der i forvejen. På en rigtig side vil
værdien formentlig komme fra en form eller lignende.

' Tjek for feltværdi
findSQL = "SELECT TOP 1 idFelt FROM tabel WHERE testfelt = 'foo'

set rs = Conn.Execute(findSQL)

' Tjek for tomt postsæt:
If rs.EOF Then
' Posten skal oprettes
Else
' Posten skal ikke oprettes
End If

En alternativ måde er at bruge fejlhåndtering til at løse problemet. Den
er lidt sværere at håndtere end ovenstående løsning, men den er mere
effektiv hvis de fleste kørsler resulterer i en indsættelse (svarende
til at select-sætningen i eksemplet ovenfor oftest vil returnere et tomt
postsæt). Tricket er at lave et unikt indeks på det felt man tester på -
sådan så det ikke er muligt at have to poster med samme værdi i feltet.
Prøver man at indsætte en eksisterende værdi vil man så få en fejl
tilbage fra databasedriveren. Den kan man håndtere med ved hjælp af
Err-objektet og On Error Resume Next.

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Tomasz Otap (11-07-2005)
Kommentar
Fra : Tomasz Otap


Dato : 11-07-05 19:58

itak proclaimed as follows:
> Scriptet skal tjekke om dataene overhovedet findes i databasen og
> derefter - hvis de IKKE findes - skrive det til basen. Hvordan
> tjekker jeg om dataene findes, hvis jeg ikke kan indlæse "blankt"
> i f.eks. "strSQL"?

Ud over metoden nævnt af Casper og Jens kan du også indsætte din check
direkte i selve sql-sætningen:

strSQL = "if not exists (select * from minTabel where minFelt = 1) " &_
"insert into minTabel (minFelt, minFelt2) values(1, 2)"

t


--
Aequitas sequitur funera

Casper Bang (11-07-2005)
Kommentar
Fra : Casper Bang


Dato : 11-07-05 21:36

> Ud over metoden nævnt af Casper og Jens kan du også indsætte din check
> direkte i selve sql-sætningen:
>
> strSQL = "if not exists (select * from minTabel where minFelt = 1) " &_
> "insert into minTabel (minFelt, minFelt2) values(1, 2)"

Uden at vide det, tvivler jeg stærkt på at f.eks. Access kan finde ud af
noget sådant.
Men på SQL Server burde det ikke være et problem... meget smart egentligt.



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste