Avatar billede _petrucci Nybegynder
05. december 2001 - 09:34 Der er 15 kommentarer og
1 løsning

Checke database felt værdi inden \"insert to\"

Hejsa :)

Hurtigt spørgsmål:

Jeg skal udfylde en form på en asp-side der skal indsætte en ny record i databasen. Hvordan får jeg den til at checke om det jeg indtaster i f.eks. \"Virksomhedsnavn\" allerede eksisterer i samme kolonne i databasen? Og hvordan får jeg udskrevet en \"virksomhed eksisterer allerede i databasen\" fejlmeddelse, efter man trykker submit?
Avatar billede nute Nybegynder
05. december 2001 - 09:36 #1
ved å fyre av en SQL SELECT:

SQL = \"SELECT * FROM tabell WHERE kolonne LIKE \'Virksomhedsnavn\'\"
Set RS = Conn.Execute

if( RS.EOF ) then
  SQL = \"INSERT INTO ...\"
  Conn.Execute( SQL )
  response.write \"Ny post opprettet\"
else
  response.write \"Den finnes\"
end if
Avatar billede kichian Nybegynder
05. december 2001 - 09:39 #2
Du definerer databasefeltet til at være unikt. Der vil så opstå en datasbasefejl ved indsættelse af en værdi, som allerede eksisterer.
Så i tilfælde af fejl, kan du så udskrive din fejltekst.
Avatar billede _petrucci Nybegynder
05. december 2001 - 09:45 #3
nute:
\"WHERE kolonne\" ? Hvor kommer \"kolonne\" fra? (sorry, er lidt newbie)

kichian:
har du evt. koden til at udskrive fejlteksten i forbindelse med det unikke felt?
Avatar billede nute Nybegynder
05. december 2001 - 09:47 #4
\'kolonne\' er navnet på din kolonne/dit felt i databasen. du har selv brukt ordet :

\"Hvordan får jeg den til at checke om det jeg indtaster i f.eks. \"Virksomhedsnavn\" allerede eksisterer i samme kolonne i databasen\"...
Avatar billede _petrucci Nybegynder
05. december 2001 - 09:49 #5
nute:
ah...så kolonne LIKE \'virksomhedsnavn\' =  kolonnenavnet (som er VIRK_NAVN) LIKE det navn som input formfeltet har, right?
Avatar billede _petrucci Nybegynder
05. december 2001 - 09:50 #6
men det skal da så ikke være i \' \' - eller?
Avatar billede _petrucci Nybegynder
05. december 2001 - 09:52 #7
her er min kode:

Dim myConn
Dim SQLStmt
Dim Stamdata

Set myConn = Server.CreateObject(\"ADODB.Connection\")
myConn.Open \"DRIVER=SQL Server;SERVER=servernavn;UID=user;PWD=kodeord;DATABASE=dbnavn;\"

SQLstmt = \"INSERT INTO Stamdata(Navn,adresse1,adresse2,postnr,Bynavn,Telefon,Telefax,Email,Kontaktperson,Brugernavn, Password) \"
SQLStmt = Sqlstmt & \"Values(\'\"&Request(\"Navn\")&\"\',\'\"&Request(\"Adresse1\")&\"\',\'\"&Request(\"Adresse2\")&\"\',\"&Request(\"Postnr\")&\",\'\"&Request(\"Bynavn\")&\"\',\'\"&Request(\"Telefon\")&\"\',\'\"&Request(\"Telefax\")&\"\',\'\"&Request(\"Email\")&\"\',\'\"&Request(\"Kontaktperson\")&\"\',\'\"&Request(\"Brugernavn\")&\"\',\'\"& pwd &\"\')\"

response.write sqlstmt
Set Stamdata = MyConn.Execute(SQLStmt)

if MyConn.Errors.Count > 0 then
myConn.Close

response.redirect \"fejl.asp\"
else
myConn.Close

---

vil sætte stor pris på hvis du kunne placere din kode ind i ovenstående kode (+10 points) :)
Avatar billede nute Nybegynder
05. december 2001 - 09:54 #8
nei...

hvis din kolonne heter VIRK_NAVN, så skal din SQL se sånn ut:

SELECT * FROM tabell WHERE VIRK_NAVN LIKE \'Virksomhedsnavn\'

WHERE: et ord som forteller at man setter noen betingelser på sin SQL
VIRK_NAVN: den kolonnen du legger en betingelse på
LIKE: betyr at innholdet av kolonnen skal matche den streng som kommer etter LIKE, i dette tilfelle: \'virksomhedsnavn\'

det skal stå i \'\' fordi det er en streng...
Avatar billede _petrucci Nybegynder
05. december 2001 - 09:58 #9
jo, men \'virksomhedsnavn\' kan jo variere, alt efter hvad jeg indtaster i formfeltet \"navn\". Hvis jeg da indtaster \"Microsoft\" skal den jo tage den værdi og lede efter i kolonnen.
Avatar billede nute Nybegynder
05. december 2001 - 09:59 #10
Dim myConn
Dim SQLStmt
Dim Stamdata

Set myConn = Server.CreateObject(\"ADODB.Connection\")
myConn.Open \"DRIVER=SQL Server;SERVER=servernavn;UID=user;PWD=kodeord;DATABASE=dbnavn;\"

SQLstmt = \"SELECT * FROM Stamdata WHERE Navn LIKE \'\" & Request(\"Navn\")& \"\'\"
Set RS = myConn.Execute( SQLstmt )

if( RS.EOF ) then

  SQLstmt = \"INSERT INTO Stamdata(Navn,adresse1,adresse2,postnr,Bynavn,Telefon,Telefax,Email,Kontaktperson,Brugernavn, Password) \"
  SQLStmt = Sqlstmt & \"Values(\'\"&Request(\"Navn\")&\"\',\'\"&Request(\"Adresse1\")&\"\',\'\"&Request(\"Adresse2\")&\"\',\"&Request(\"Postnr\")&\",\'\"&Request(\"Bynavn\")&\"\',\'\"&Request(\"Telefon\")&\"\',\'\"&Request(\"Telefax\")&\"\',\'\"&Request(\"Email\")&\"\',\'\"&Request(\"Kontaktperson\")&\"\',\'\"&Request(\"Brugernavn\")&\"\',\'\"& pwd &\"\')\"

  MyConn.Execute(SQLStmt)
else
  response.write Request(\"Navn\") & \" eksisterer i databasen\"
end if

/nute
Avatar billede _petrucci Nybegynder
05. december 2001 - 10:06 #11
Den returnerer desværre en errorpage :/

Skal måske lige sige at denne kode bliver udført på en seperat gem.asp side - hvor formkoden ligger på en login.asp side.

Avatar billede nute Nybegynder
05. december 2001 - 10:11 #12
\"...kode bliver udført på en seperat gem.asp side - hvor formkoden ligger på en login.asp side\"...det er jo derfor du requester verdiene...

hvilken feilmelding får du ? hvilken linje henviser den til, og hva ligger det i den linje ?
Avatar billede _petrucci Nybegynder
05. december 2001 - 10:22 #13
Tror sgu det er et database problem - hold on
Avatar billede _petrucci Nybegynder
05. december 2001 - 10:39 #14
Nedenstående kode virker ikke - den opretter det samme virksomhedsnavn som er i kolonnen i forvejen :(
-----------------

SQLstmt = \"SELECT * FROM Stamdata WHERE VIRK_Navn LIKE \'\" & Request(\"Navn\")& \"\'\"
Set RS = myConn.Execute( SQLstmt )

if( RS.EOF ) then
                   
SQLstmt = \"INSERT INTO Stamdata(VIRK_Navn,adresse1,adresse2,postnr,Bynavn,Telefon,Telefax,Email,Kontaktperson,Brugernavn,Password) \"
SQLStmt = Sqlstmt & \"Values(\'\"&Request(\"VIRK_Navn\")&\"\',\'\"&Request(\"Adresse1\")&\"\',\'\"&Request(\"Adresse2\")&\"\',\"&Request(\"Postnr\")&\",\'\"&Request(\"Bynavn\")&\"\',\'\"&Request(\"Telefon\")&\"\',\'\"&Request(\"Telefax\")&\"\',\'\"&Request(\"Email\")&\"\',\'\"&Request(\"Kontaktperson\")&\"\',\'\"&Request(\"Brugernavn\")&\"\',\'\"& pwd &\"\')\"

MyConn.Execute(SQLStmt)

else

response.redirect \"fejl.asp\"
myConn.Close

end if
Avatar billede _petrucci Nybegynder
05. december 2001 - 10:42 #15
wait...my mistake - request(\"navn\") skulle være request(\"virk_navn\") - så virker det! :)

mange tak for besværet :)
Avatar billede nute Nybegynder
05. december 2001 - 10:42 #16
oki...bytt ut denne linje:

if( RS.EOF ) then

med denne:

if( NOT RS.BOF OR RS.EOF ) then
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
Kurser inden for grundlæggende programmering

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