Avatar billede dsjk Novice
07. februar 2002 - 21:18 Der er 16 kommentarer og
1 løsning

slette/tilføje i flere tabeller

Hvis I ser nedenstående link, kan I se noget navn og tlf, mv og så noget med nogle afdelinger.

http://www.densortejakke.dk/icea/admin/retansat.asp?staffid=3&afdnr=1

Det med navn, tlf, mv bliver opdateret når jeg trykker på gem knappen, og data gemmes i en tabel "ansat".

Mens afdelingerne endnu kun er til info, men det er det jeg vil lave om.
oplysningerne om afdelingerne får jeg fra en tabel der indeholder ansatid og afdelingsnr, og såfremt den ansatte og afdelingen findes i denne tabel (ansatafdeling) bliver afdelingen hakket af.
Hvordan får jeg den til, når jeg trykker på gem knappen at slette poster i "ansatafdeling" tabel hvis der er fjernet et kryds, og tilføje en post hvis der er tilføjet et kryds???

Hele koden kan ses her:
http://www.densortejakke.dk/icea/retstaff.txt

dsjk
Avatar billede coltau Juniormester
07. februar 2002 - 21:56 #1
Hallo - du har afvist svaret. ?
Jeg har desværre været forhindret indtil nu. Hjem fra arbejde - hente børn - hente bil fra rep. - til fodbold osv. Er lige kommet ind af døren.

Du har heller ikke lavet det helt som jeg beskrev - men det gør ikke noget.

For at opdatere felterne kan du anvende disse:

sub DelIns(Value)
  if Request.Form(Value) <> "" then
    ' Indsæt værdi i tabel (hvis ikke den findes allerede.)
  else
    ' Slet værdi hvis den fidnes.
  end if
end sub

DelIns("chk_management")
DelIns("chk_workbags")
DelIns("chk_sales")

Jeg kan desværre ikke komme det nærmere da jeg ikke kender koderne i tabellen. (afdnr, ansatid)
Avatar billede coltau Juniormester
07. februar 2002 - 22:00 #2
Du har kaldt checkboxene for chk_management osv. Det vil lette opdateringen hvis navnet var chk_?? hvor ?? er afdnr.
Avatar billede dsjk Novice
07. februar 2002 - 22:16 #3
ja, det var først en fejl jeg afviste svaret, men fik så lavet med at vise hvilke afdelinger den ansatte er i.
Jeg kunne ikke få det til at virke på din måde, desværre.

Jeg er ikke helt med på hvad du mener, med linierne. Hvor skal jeg indsætte dem?
ok, jeg retter lige dem til chk_??

Hvad mangler du for at kunne give lidt mere hjælp? se evt. http://www.densortejakke.dk/icea/retstaff.txt

dsjk
Avatar billede coltau Juniormester
07. februar 2002 - 23:05 #4
I asp-koden: MM_editAction skal linierne puttes ind. Altså der hvor du normalt opdatere navne-oplysninger.

Hvis stafid er ID for den ansatte så kan det laves nogelunde således:

sub DelIns(Value) ' Value = afdnr
  RS.Open "select * from tabelansatiafdeling where afdnr=" & CStr(Value) & " and ansatid=" & stafid
  Found = RS.RecordCount > 0
  RS.Close
  if Request.Form("chk_" & Value) <> "" then
    if not Found then
      Conn.Execute("insert into tabelansatiafdeling (afdnr,ansatid) values (" & CStr(Value) & ", " & stafid) ' Indsæt
    end if
  else
    if Found then
      conn.Execute("delete from tabelansatiafdeling where afdnr=" & CStr(Value) & " and ansatid=" & stafid
    end if
  end if
end sub

DelIns("1") ' I stedet for disse linier kan du lave et udtræk fra
DelIns("2") ' afdelingstabellen og gennemløbe den i en while-løkke
DelIns("3") ' do while ... DelIns(afdRS("afdid")) ... Next
osv.

Jeg har selvfølgelig ikke testet det - men det er noget i denne stil.
Avatar billede dsjk Novice
07. februar 2002 - 23:32 #5
jeg har sat fra sub DelIns... til end Sub ind.
gemt og testet, og jeg får følgende fejl:

Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][ODBC Microsoft Access Driver] Table 'ansatafdeling' is exclusively locked by user 'Admin' on machine 'KENNETH'.
/icea/admin/retansat.asp, line 138

og linie 138 er rsansatte.Open() og det den åbner er :
rsansatte.Source = "SELECT *  FROM ansatte, afdeling, ansatafdeling  WHERE (afdelingsnr = afdelingid) And (id = ansatid) And (id = " + Replace(rsansatte__staffid, "'", "''") + ")"

Så den kan ikke have den samme tabel åben 2 gange...
og jeg har brug for ansatafdeling i denne sql da det er den jeg bruger når jeg finder ud af hvilke afdelinger den ansatte er i.

dsjk
Avatar billede dsjk Novice
07. februar 2002 - 23:46 #6
fandt fejlen.
Det var mig selv der have tabellen åben, så jeg prøver lige igen.
Avatar billede dsjk Novice
07. februar 2002 - 23:53 #7
ok.
Så snart jeg indsætter DelIns("1") linierne kommer følgende fejl:

Error Type:
Microsoft VBScript runtime (0x800A01A8)
Object required: 'RS'
/icea/admin/retansat.asp, line 11

Jeg har sat linierne ind lige efter end sub. Er det korrekt forstået at der i første linie stadig skal stå sub DelIns(Value)
og den value henter den fra linierne efter end sub?
og skal DelIns("1") linierne, altså det der står i () være det samme som navnet på checkboxene?

dsjk
Avatar billede coltau Juniormester
08. februar 2002 - 09:28 #8
Fejlen: Object required skyldes at der mangler Set-kommando foran linien:
sub DelIns(Value) ' Value = afdnr
  Set RS.Open "select * from tabelansatiafdeling where afdnr=" & CStr(Value) & " and ansatid=" & stafid

DelIns("1") parametren "1" skal være afdnr på den checkbox der skal kontrolleres i DelIns og kun afdnr. DelIns putter selv resten af navnet på: Request.Form("chk_" & Value)
Avatar billede dsjk Novice
08. februar 2002 - 10:03 #9
ok, da jeg satte Set ind foran RS.open sagde den at den manglede et =.
Det satte jeg så ind efter RS.Open, men så kom Object required fejlen igen.
Det løste jeg ved at sættet følgende ind før Set Rs.open
  set rs = Server.CreateObject("ADODB.Recordset")
  rs.ActiveConnection = MM_cicea_STRING
og fjernede så set foran rs.open
Er det korrekt?
Den kommer så med følgende fejl:
Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'afdelingid=1 and ansatid='.
/icea/admin/retansat.asp, line 14

og linie 14 ser jo sådan ud:
  RS.Open = "select * from ansatafdeling where afdelingid=" & CStr(Value) & " and ansatid=" & staffid

Så vidt jeg kan regne ud er det fordi staffid er tom?
eg kan så fortælle at i ansat tabellen er navnet id brugt som id. dvs ansatid = id, men i det jeg henter retansat.asp siden frem lyder kommandoen således:
http://localhost/icea/admin/retansat.asp?staffid=3

dsjk
Avatar billede dsjk Novice
08. februar 2002 - 11:28 #10
pyyyh, det er hårdt det her.

Jeg har nu endelig fået det til at virke (næsten) Den kommer nu ind på siden og koden ser nu sådan ud:
  sub DelIns(value) ' Value = afdnr
  set rs = Server.CreateObject("ADODB.Recordset")
  rs.ActiveConnection = MM_cicea_STRING
  '"SELECT *  FROM ansatte, afdeling, ansatafdeling  WHERE (afdelingsnr = afdelingid) And (id = ansatid) And (id = " + Replace(rsansatte__staffid, "'", "''") + ")" '& Request.Querystring("staffid") &")"
  RS.Open = "SELECT * FROM ansatafdeling WHERE afdelingid='" & CStr(Value) & "' and ansatid='" & Request.Querystring("staffid") &"'" 
  Found = RS.RecordCount > 0
  RS.Close
  if Request.Form("chk_" & Value) <> "" then
    if not Found then
      Conn.Execute("insert into ansatafdeling (afdelingid,ansatid) values ('" & CStr(Value) & "', '" & Request.Querystring("staffid") &"'") ' Indsæt
    end if
  else
    if Found then
      conn.Execute("delete from ansatafdeling where afdelingid='" & CStr(Value) & "' and ansatid='" & Request.Querystring("staffid") &"'")
    end if
  end if
end sub
DelIns("1")
DelIns("2")
DelIns("3")
...
DelIns("11")

Men når jeg så trykker på Gem knappen kommer følgende:

Error Type:
Microsoft VBScript runtime (0x800A01A8)
Object required: 'Conn'
/icea/admin/retansat.asp, line 19

Og jeg går så ud fra at det er det same som før med at der mangler set for an, men så kommer den igen og spørger efter =.
Du kan se det her (bare tyrk på - ret oplysninger)
http://www.densortejakke.dk/icea/admin/admstaff.asp?afdnr=1

dsjk
Avatar billede coltau Juniormester
08. februar 2002 - 11:29 #11
Med hensyn til stafid så skal den indeholde id-nummer på den ansat det drejer sig om. Den har du sikkert allerede i en anden variabel. Brug den i stedet for stafid.
Avatar billede dsjk Novice
08. februar 2002 - 11:34 #12
ok, fandt lige ud af lidt mere
Det ser nu således ud:
altså jeg har sat "set con... & conn.activeconnection..." ind

if Request.Form("chk_" & Value) <> "" then
    if not Found then
  set conn = Server.CreateObject("ADODB.Recordset")
  conn.ActiveConnection = MM_cicea_STRING
   
      Conn.Execute =("insert into ansatafdeling (afdelingid,ansatid) values ('" & CStr(Value) & "', '" & Request.Querystring("staffid") &"'") ' Indsæt
    end if
  else
    if Found then
      conn.Execute ("delete from ansatafdeling where afdelingid='" & CStr(Value) & "' and ansatid='" & Request.Querystring("staffid") &"'")
    end if
  end if

men nu siger den:
Object doesn't support this property or method: 'conn.Execute'
/icea/admin/retansat.asp, line 22

og linie 22 er delete linien.

dsjk

Men jeg arbejder videre med det, men sig endelig til hvis du finder løsningen, eller det jeg har gang i er helt galt.
Avatar billede dsjk Novice
08. februar 2002 - 11:48 #13
sorry ikke delete linien insert linien
Avatar billede dsjk Novice
08. februar 2002 - 13:04 #14
er nok først tilbage i morgen eftermiddag.
Avatar billede coltau Juniormester
08. februar 2002 - 15:48 #15
Det er fordi at
set conn = Server.CreateObject("ADODB.Recordset")
skal være
set conn = Server.CreateObject("ADODB.Connection")

Jeg er desværre ikke hjemme i weekenden. !
Avatar billede dsjk Novice
10. februar 2002 - 17:40 #16
perfekt, nu virker det.
Der var lige et par ting mere der skulle rettes, men nu virker det.
Jeg lader lige spm. være åbent lidt endnu da der lige er et par ting jeg skal have afprøvet.

dsjk
Avatar billede dsjk Novice
11. februar 2002 - 21:01 #17
nu har jeg afprøvet det hele, så her er dine point.
Tak for hjælpen
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