webForumDet fria alternativet

ang. flytta data från tabell till annan tabell

ASP

34 svar · 1 074 visningar · startad av cyeclone

Medlem sedan dec. 2004143 inlägg
Frågan#1

Hejsan!

Jag såg en liknade post, som LarsG hade hjälp en med igår.
Han fick följande kod:(fast jag har ändrat lite efter mina behov)

connect.execute "insert into bestallning(<kolumner> ) " & _
"select <deKolumnerDuVillHa> from kundvagn" & _
" where KID = " & session("KID"),,128

connect.execute "delete from kundvagn " & _
" where KID = " & session("KID"),,128

nu är det ju så att jag använder access datasen, vet inte om det spelar någon roll?

Har aldrig flyttar över information förut, så tänkte fråga:

Hur ska jag skirva de kolumner jag vill flytta?
Jag vill flytta dess kolumner från tabell kundvagn:
PID
ProduktNamn
Pris
Antal
KID

Till samma kolumner fast i tabellen bestallning

Hur skall jag gå till väga då?

Mvh, Rickard

Medlem sedan feb. 200112 078 inlägg
#2

Under förutsättning att kolumnerna har samma namn i båda tabellerna.

connect.execute "insert into bestallning(PID, ProduktNamn, Pris, Antal, KID) " & _
"select k.PID, k.ProduktNamn, k.Pris, k.Antal, k.KID from kundvagn k" & _
" where k.KID = " & session("KID"),,128

connect.execute "delete from kundvagn " & _
" where KID = " & session("KID"),,128
Medlem sedan dec. 2004143 inlägg
#3

Tack så mycket!

Tänkte fråga en sak till. När jag flytta över allt till bestallning, så vill jag även att ALLT som flyttas över skall få ett OrderID, och det OrderID:et skall vara samma för alla poster som överfördes den gågnen. Går det att fixa så?

Medlem sedan feb. 200112 078 inlägg
#4

Var får du OrderId ifrån då?

Medlem sedan dec. 2004143 inlägg
#5

jadu ;)

jag får det från ingenstans, men eftersom alla poster flyttas till tabellen "bestallning" så vill jag ha ett gemensamt OrderID på alla dom posterna, och OrderID får ju aldrig bli samma på två beställningar, fast OrderId:et skall vara samma på just denna beställning. Fattar du då ?

Mvh

Medlem sedan feb. 200112 078 inlägg
#6

Man kan ha en tabell som heter tblOrder, vars primärnyckel (eller whatever) blir orderns identifierare. Denna tabell innehåller bara en rad per order, och det är orderhuvudet, ungefär. Sen kanske man har en tabell som heter tblOrderRows som innehåller alla rader som ordern innehåller, varav en kolumn heter "OrderId", där man lagrar identifieraren från ordertabellen, för att hålla koll på dem.

Annars kommer du få göra någon slags DISTINCT-fråga mot din beställningstabell varje gång du vill lista bara ordrarna.

Så, antingen genererar du ett OrderId själv i typ ASP som du skjuter in i en kolumn tillsammans med den andra datan, eller så bygger du om din tabellstruktur och får ID't genererat efter att ordern skapas i tblOrder.

Medlem sedan dec. 2004143 inlägg
#7

Så som du skriver har jag redan strukterat min databas.
Jag har en tabell "Order" där alla orders kommer ha ett OrderId, och även innehålla KID(KundID).

Därför vill jag ha OrderID i beställningar, för att man ska kunna se vilka som hör ihop. Men jag tror kanske jag har löst detta nu!

Tack för hjälpen iaf!
Ha det bra!

Mvh,
Rikard

Medlem sedan dec. 2004143 inlägg
#8

Nu är det bara ett litet problem kvar.

connect.execute "insert into bestallning(PID, ProduktNamn, Pris, Antal, KID) " & _
"select k.PID, k.ProduktNamn, k.Pris, k.Antal, k.KID from kundvagn k" & _
" where k.KID = " & session("KID"),,128

connect.execute "delete from kundvagn " & _
" where KID = " & session("KID"),,128

Nu har jag en session("OrderID") som jag vill skall sättas in i kolumnen "OrderID" på alla poster som skickas till tabellen "bestallning".
Går detta att ordna på ett enkelt sätt?

Mvh,
Rickard

Medlem sedan feb. 200112 078 inlägg
#9

Förutsätter att kolumnen OrderId är av typen Tal/Int.

connect.execute "insert into bestallning(PID, ProduktNamn, Pris, Antal, KID, OrderId) " & _
"select k.PID, k.ProduktNamn, k.Pris, k.Antal, k.KID, " & session("OrderID") & " from kundvagn k" & _
" where k.KID = " & session("KID"),,128

connect.execute "delete from kundvagn " & _
" where KID = " & session("KID"),,128
Medlem sedan dec. 2004143 inlägg
#10

Uuups, upstod visst ett problem till.
När man skickar iväg en order så skapas förs en post i tabellen "Best"(Annat namn för order :P)
Där får ordern ett OrderID av access databsen. Nu är det bara problemet, hur ska scriptet få reda på vilken "OrderID" han ska lägga i sessionen("OrderID") som sedan skall föras in med OveRRide script ovan ?

Hur skall jag gå till väga? Kan kankse göra så att den hämtar den nyaste posten? men hur skall man göra det då?

Även tacksam för andra fina lösningar

Medlem sedan juni 200032 967 inlägg
#11

Efter att du kört din INSERT hämtar du id:t posten fick, genom att ställa följande SQL-fråga:

SELECT @@IDENTITY [i]AS nytt_id[/i]
Medlem sedan jan. 20013 582 inlägg
#12

Va f**n! någon som snott min tråd ;)

Men va, bra!! Håller på med samma tankegångar!! Så skönt att slippa göra en ny tråd!

tblCart
tblOrder
tblOrderArticle

Med risk för att inte läst igenom inläggen ordentligt....

Mina tankar var att när ordern skapas så läggs info in i tblOrder. Posten får ett unikt orderId.

Därefter vill jag hämta det orderId´t och sedan lägga in alla artiklarna i tblOrderArticle. Kan man göra detta utan att ha en sesion för orderId?

Eller är det smartare att ha en session?

Jag snyltar lite på din tråd cyeclone !!!

mvh

Medlem sedan jan. 20013 582 inlägg
#13

:)
Har följande kod:

<%
Dim strSQL, orderDate, userId, customer

customer = Replace(Request.querystring("customer"), "'", "''")

orderDate = Date

Set objConn = Server.CreateObject("ADODB.Connection") 
objConn.ConnectionString = "DSN=IntranetSydostel"
objConn.Open
strSQL="INSERT INTO tblOrder (orderName, orderDate, userId) VALUES ('" & customer & "', #" & orderDate & "#, " & session("userId") & ")"
objConn.execute(strSQL),,128

strSQL="INSERT INTO tblOrderArticle(eNumber, articleName, quantity)SELECT eNumber, articleName, quantity FROM tblCart WHERE userId = " & session("userId") &""
objConn.execute(strSQL),,128

strSQL="DELETE FROM tblCart WHERE userId = " & session("userId") & ""
objConn.execute(strSQL),,128

objConn.Close
Set objConn = Nothing

%>

Den fungerar så här

1. skapa ett orderhuvud (orderId är en räknare i db)
2. Kopiera över artiklarna från tblCart till tblOrderArticle
3. Radera artiklarna i tblCart

Fungerar perfekt...

Men jag vill ju ha med det unika skapade ordernumret för varje artikel till tblOrderArticle...

Hur får jag det?

mvh :bire

Medlem sedan jan. 20013 582 inlägg
#14

Bumpa får man bara göra en gång per dag.... ;)

Husomhelst... Någon som vill hjälpa till??

mvh

Medlem sedan juni 200032 967 inlägg
#15

devotion skrev:

Men jag vill ju ha med det unika skapade ordernumret för varje artikel till tblOrderArticle...

Hämta ut det nyligen skapade ID:t direkt efter din INSERT:

strSQL = "SELECT @@IDENTITY"
set objRS = objConn.execute(strSQL)
lngID = objRS(0)

Släng sedan med värdet i din nästa insert i orderarticle.

mvh

Medlem sedan jan. 20013 582 inlägg
#16

:r
Känner mig lite trög

Men...

Är det

lngID

Som är variabeln....????

mvh

Medlem sedan nov. 20017 144 inlägg
#17

Japp, där ligger det senaste inlagda id:t

Medlem sedan jan. 20013 582 inlägg
#18

:e
Tack!

mvh

Medlem sedan jan. 20013 582 inlägg
#19

:)
cyeclone:

Hoppas du fått någon hjälp i denna tråden...

Den har löst mina problem i a f..
:e

mvh

Medlem sedan nov. 20017 144 inlägg
#20

Hur säker kan man vara på att SELECT @@IDENTITY/last_insert_id() är det senaste id:t?

När man kör klera sql:er ifrån ett script så ingår ju inte frågan i samma scope, eller?

262 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)