Avatar billede jansangill Nybegynder
07. maj 2007 - 23:31 Der er 18 kommentarer og
1 løsning

Kopeiere data fra tabel

Halloj

Okay jeg er igang med at prøve at kopiere noget data over i en anden tabel inden den updater selve tabellen.
Grunden til dette er at jeg gerne vil kunne vise hvad der er rettet, og hvad det er rettet til.

Jeg har prøvet at fikse det selv i lidt tid nu, men kunne ikke finde en optimal løsning på dette.

Håber der er en hjælpsom sjæl derude.( Det er nok mine SQl der fejler når jeg vil gøre det)

Her er koden:

Dim hyldeArr, infoArr, bruger, info

hyldeArr =split(request.form("hylde"),",")
infoArr = split(request.form("info"),",")
bruger = request("bruger")

  Dim myConnection
  Set myConnection=Server.CreateObject("ADODB.Connection")
    myConnection.ConnectionString="DRIVER={Microsoft Access Driver (*.mdb)};" & "DBQ=" & Server.MapPath("../database/jn.mdb")
    myConnection.Open
  Dim loginSQL
    LoginSQL = "SELECT * from hylde WHERE hylde1 = '" & hyldeArr(f) & "'"
  Dim myRS
    Set myRS=Server.CreateObject("ADODB.Recordset")
      myRS.Open loginSQL, myConnection
  Dim mainMessage
   
    info = myRS("info")
    'kilo = myRS("kilo")
      If myRS.EOF Then
      mainMessage="hyldeInfo=false"
    Else
      If(StrComp(myRS("hylde1"),hyldeArr(f), vbTextCompare) =0) Then

      for f=0 to uBound(hyldeArr)
     
    set backup = myconnection.execute("INSERT INTO backup (info) VALUES ('"&info&"') WHERE hylde1 = '"& hyldeArr(f) &"'")
    set opdater = myConnection.execute("update hylde SET info = '"& infoArr(f) &"', bruger = '"&bruger&"', dato = #"&date()&"#, tid = #"&time()&"#  WHERE hylde1 = '"& hyldeArr(f) &"'")
   
    next 
    dato = myRS("dato")
    mainMessage="hyldeInfo=true"&"&dato=" & dato
   
            Else
     
      mainMessage = "hyldeInfo=false"
   
      End If
    End If
 
  myRS.Close
Set myRS=Nothing
myConnection.Close
Set myConnection=Nothing
  Response.Write(mainMessage) %>
Avatar billede thesurfer Nybegynder
07. maj 2007 - 23:42 #1
Der skal ikke være nogen "where"-del i en Insert..

Kun i:
- Select (hent data ud af databasen)
- Update (opdater eksisterende data i databasen)
- Delete (slet eksisterende data fra databasen)

Eksempler:

select * from TabelNavn where id = 1

update TabelNavn set KolonneNavn = 'værdi', EndnuEnKolonne = 'endnu en værdi' where id = 1

delete from TabelNavn where id = 1


Sådan ser Insert ud:

insert into TabelNavn (KolonneNavn1, KolonneNavn2) values('værdi til KolonneNavn1','værdi til KolonneNavn2')


Og så skal du huske:
- Hvis felttypen (kolonnen) er af typen tekst, skal der '-tegn udenom værdien: 'hans'
- Hvis felttypen (kolonnen) er af typen tal, skal der IKKE '-tegn udenom værdien: 1

Osv.. Vær opmærksom på felttyperne..
Avatar billede thesurfer Nybegynder
07. maj 2007 - 23:43 #2
Kig evt på lektionerne 17-22 på: http://www.html.dk/tutorials/asp/
Avatar billede jansangill Nybegynder
07. maj 2007 - 23:56 #3
ja det vidste jeg godt nok ikke , mht insert.

Men felttyper det viste jeg nu godt nok:)

Problemet ved mig ligger i at jeg kan godt update infoen. Men inden jeg updater infoen vil jeg gerne have at det info der skal updates, det skal flyttes over i en backup tabel, inden det bliver updatet.

Hvis det giver mening:o

Lige nu flytter den ikke noget. Men jeg får heller ikke fejl.
Avatar billede thesurfer Nybegynder
07. maj 2007 - 23:59 #4
Hvor får du "f" fra, i denne linie?:

    LoginSQL = "SELECT * from hylde WHERE hylde1 = '" & hyldeArr(f) & "'"
Avatar billede jansangill Nybegynder
08. maj 2007 - 02:35 #5
tror jeg har sovet mens jeg har lavet dette her.

Nu skulle det meste være rettet til, så der (forhåbenligt) ikke er så mange fejl.

Men det her retten til giver mig et ekstra problem med i købet. Jeg vil jo gerne tjekke at de hyldetal jeg får fra et tekstfelt også matcher overens med det i databasen. Altså sådan at hvis alle hyldetal ikke findes i databasen, så er det frkert. Men hvordan er jeg lidt lost i.

Og ja, har stadig det oprindelige problem også:o

Alt hjælp vil være meget påsat.

jan
Avatar billede jansangill Nybegynder
08. maj 2007 - 02:37 #6
glemte det "rettede" kode:  Her tjekker jeg ikke alle tal, men kun "hylde". Vil  gerne at det er sådan at den tjekker "hyldeArr", dermed alle hyldetal. Ikke kun den ene

<%
Dim hyldeArr, infoArr, bruger, info, hylde, mainMessage,


hyldeArr =split(request.form("hylde"),",")
infoArr = split(request.form("info"),",")
bruger = request("bruger")

'åbner databasen
Set myConnection = Server.CreateObject("ADODB.Connection")
myConnection.open = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="& server.MapPath("../database/jn.mdb")





set myRS = myConnection.execute("select * from hylde where hylde1 ='"&hylde&"'")
   

   

   
    If myRS.EOF Then
      mainMessage="hyldeInfo=false"
   
    Else
   
  for f=0 to uBound(hyldeArr)

set opdater = myConnection.execute("update hylde SET info = '"& infoArr(f) &"', bruger = '"&bruger&"', dato = #"&date()&"#, tid = #"&time()&"#  WHERE hylde1 = '"& hyldeArr(f) &"'")
   
    next 
   
    dato = myRS("dato")
   
    mainMessage="hyldeInfo=true"&"&dato=" & dato
   
    End If

 

myConnection.Close
Set myConnection=Nothing
  Response.Write(mainMessage) %>
Avatar billede thesurfer Nybegynder
08. maj 2007 - 14:14 #7
Hvor får du "hylde" fra, i denne linie?:

set myRS = myConnection.execute("select * from hylde where hylde1 ='"&hylde&"'")

Mere præcist: where hylde1 ='"&hylde&"'"

:-)

Jeg kan se at du definere en variabel kaldet "hylde", og at du opretter en array kaldet hyldeArr her:

Dim hyldeArr, infoArr, bruger, info, hylde, mainMessage,


hyldeArr =split(request.form("hylde"),",")

Men hvor kommer værdien til "hylde" fra?

Er du sikker på, at det er al koden? Er der ikke mere?
Avatar billede jansangill Nybegynder
08. maj 2007 - 14:19 #8
hehe hylde og info kommer fra flash.
Avatar billede jansangill Nybegynder
08. maj 2007 - 14:21 #9
mere præcist: her er AS'en:

//***********************Opret/slet varer*********************************


//HVIS MAN HAR 2 hyldenumre, MEN KUN en INFO, SÅ SKAL DER VISES FEJLBESKED!!!!!


//*********************************UPDATE************************************
// gør besked_txt usynlig
besked_txt._visible = false;
// Starter med at lave et nyt obkekt af loadvars
update_lv = new LoadVars();

//nu laver jeg funktion
update_lv.onLoad=function(){



   
//Kontrol om brugernavn og password er korrekt
    if(this.hyldeInfo == "true"){
//Hvis korrekt
    if(hylde_txt.text.length<5){
        besked_txt._visible = true;
        hylde = update_lv.hylde
        info = update_lv.info
        besked_txt.text = "Hylden er opdateret med:" + "\n" + "\n" + "Hyldeinformation" + "  " + hylde  + "\n" + "\n" + "Info " + "  " + info;
        hylde_txt.text="";
        info_txt.text="";
   
   
       
        }else{
            besked_txt._visible = true;
            hylde = update_lv.hylde
            info = update_lv.info
            besked_txt.text = "Hylderne er opdateret med:" +  "\n" + "Hyldeinformation" + "  " + hylde  + "\n" +  "Info " + "  " + info;
            hylde_txt.text="";
            info_txt.text="";
           
        }
        }else{
//ellers fejlfind
            besked_txt._visible = true;
            besked_txt.text = "Der skete en fejl:" +  "\n" + "\n" + "Husk at kontrollere om du har skrevet informationen korrekt ind";
           
       
    }
}

//Login button funktionen
onUpdate=function(){

    if (hylde_txt.text.length == 0) {
        besked_txt.text = "Vær venlig at skrive noget næste gang i hylde";
   
    }else if (info_txt.text.length == 0) {
        besked_txt.text = "Vær venlig at skrive noget næste gang i info";
   
    }else{
       
    //Hvis alt er OKAY så;
   
    //gemmer login oplysninger som loadvar
        update_lv.hylde=hylde_txt.text;
        update_lv.info=info_txt.text;
        update_lv.bruger=login_lv.username
    //sender oplysningerne til hjemmesiden og venter på at få info tilbage
        update_lv.sendAndLoad("http://www.123ogabc.dk/opret.asp", update_lv, "POST");
    }
}
Avatar billede jansangill Nybegynder
08. maj 2007 - 20:54 #10
Har fået det meste til at lykkedes nu:

Nu mangler jeg bare at kunne backup mere end en variabel af gangen.

Lige nu kan jeg kun få backup af en felt i databasen. Det skal jo helst foregå sådan at jeg kan gøre det ved flere variabler også.


<%
Dim hyldeArr, infoArr, bruger, info, hylde, mainMessage,backup

hyldeArr =split(request.form("hylde"),",")
infoArr = split(request.form("info"),",")
bruger = request("bruger")

'åbner databasen
Set myConnection = Server.CreateObject("ADODB.Connection")
myConnection.open = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="& server.MapPath("../database/jn.mdb")



For x = 0 To UBound(hyldeArr)
    myVar = Trim(hyldeArr(x))
    Set myRS = myConnection.Execute("SELECT * FROM hylde WHERE hylde1 = '" & myVar & "'")
    backup=myRS("info")
    If myRS.EOF Then
        mainMessage="hyldeInfo=false"
 
    else
   
  for f=0 to uBound(hyldeArr)

'backup af info før det felt opdateres
set backup= myConnection.execute("update backup SET info = '"& backup(f) &"' WHERE hylde1 = '"& hyldeArr(f) &"'")
'update felt
set opdater = myConnection.execute("update hylde SET info = '"& infoArr(f) &"', bruger = '"&bruger&"', dato = #"&date()&"#, tid = #"&time()&"#  WHERE hylde1 = '"& hyldeArr(f) &"'")
   
    next 
   
    dato = myRS("dato")
   
    mainMessage="hyldeInfo=true"&"&dato=" & dato
    End If
   
Next

myConnection.Close
Set myConnection=Nothing
  Response.Write(mainMessage) %>
Avatar billede thesurfer Nybegynder
09. maj 2007 - 20:28 #11
Kan du ikke lige beskrive layoutet/strukturen på din database?
Avatar billede jansangill Nybegynder
09. maj 2007 - 21:15 #12
jo, den færste er main tabellen, der hvor alt info er i. Den anden er backup tabel, der hvor outdated info skal være.  Databasen er lavet sådan at der ikke skal kan komme flere records ind, da det er en hvis antal records der kun skal være der.

tablename = hylde
id = primary
hylde1=text field
info= text field
kilo = text field
dato= dato
tid= dato
bruger = text field

tablename = backup
id = primary
hylde1 = text
info = text
kilo=text



Plus en login table, som jeg hvis ikke behøver beskrive.
Avatar billede thesurfer Nybegynder
10. maj 2007 - 20:37 #13
Jeg ser lige om jeg kan nå at kigge på det, her i aften.
Avatar billede thesurfer Nybegynder
10. maj 2007 - 22:21 #14
Det ser ikke ud til, at jeg får tid til det i aften..
Muligvis heller ikke de næste par dage (og halvdelen af næste uge), pga eksamensprojekt.

Men jeg undrer mig lidt over, at backup-tabellen ikke har samme felter som hylde-tabellen..?
Avatar billede jansangill Nybegynder
10. maj 2007 - 23:34 #15
Jeg valgte at slette nogle af disse felter, da de er irrelevante iforhold til hvad jeg ønsker. Vil kun vide hvad der er ændret i kilo og info.  Men hvad de kan liså godt have samme felter.
Avatar billede jansangill Nybegynder
10. maj 2007 - 23:34 #16
Hvis du kan kigge på det engang, vil jeg blive meget glad. Ellers overlever jeg nok også.
Avatar billede jansangill Nybegynder
14. maj 2007 - 14:34 #17
fik det hele til at virke, mange tak for hjæpen, smid du bare ets var.

her er koden til det:

%
Dim hyldeArr, infoArr, bruger, mainMessage,backup,iAntal,hAntal,antal


hyldeArr =split(request.form("hylde"),",")
infoArr = split(request.form("info"),",")
bruger = request("bruger")

'åbner databasen
Set myConnection = Server.CreateObject("ADODB.Connection")
myConnection.open = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="& server.MapPath("../database/jn.mdb")


hAntal = ubound(hyldeArr)
iAntal = ubound(infoArr)


antal = "&hAntal=" & hAntal & "&iAntal=" & iAntal



For x = 0 To UBound(hyldeArr)
    myVar = Trim(hyldeArr(x))
    Set myRS = myConnection.Execute("SELECT * FROM hylde WHERE hylde1 = '" & myVar & "'")
    backup=myRS("info")
   
    If Not(myRS.EOF) Then
        'backup af info før det felt opdateres
        myConnection.execute("update backup SET info = '"& backup &"' WHERE hylde1 = '"& myVar &"'")
        End If
Next



For p = 0 To UBound(hyldeArr)
    myVar = Trim(hyldeArr(p))
    Set myRS = myConnection.Execute("SELECT * FROM hylde WHERE hylde1 = '" & myVar & "'")

   
    If myRS.EOF Then
        mainMessage="hyldeInfo=false"
 
    else
   
  for f=0 to uBound(hyldeArr)


'update felt


set opdater = myConnection.execute("update hylde SET info = '"& infoArr(f) &"', bruger = '"&bruger&"', dato = #"&date()&"#, tid = #"&time()&"#  WHERE hylde1 = '"& hyldeArr(f) &"'")
   
    next 
   
    dato = myRS("dato")
   
    mainMessage="hyldeInfo=true"&"&dato=" & dato
    End If
   
Next

myConnection.Close
Set myConnection=Nothing
  Response.Write(mainMessage)
  Response.Write(antal)
  %>
Avatar billede thesurfer Nybegynder
14. maj 2007 - 20:40 #18
Snup du bare pointsne selv.. det er helt ok med mig.
Avatar billede jansangill Nybegynder
29. juni 2007 - 20:44 #19
lukket.
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