CalippoMedlem sedan aug. 2002536 inlägg Nån som vet hur man smidigast kopierar ett recordset i en databas? Har en tabell med typ 200 st fält, både text och tal.
Jag vill kunna kopiera en rad och modifiera den efteråt.
(recordset.clone metoden fungerar tydligen inte eftersom den uppdaterar alla sina kopior)
Förklara lite mer vad du vill göra med den kopierade raden ?
strSql = "Update [tabell] set [column] = '"&strString&"' where [colum] = '"&strString&"'"
??
CalippoMedlem sedan aug. 2002536 inlägg Jo, det är så att jag har en tabell med en massa data om tex en bilmodell. Om det är så att man vill lägga till en snarlik bilmodell så har man ju inte nån större lust o fylla i alla 200 fält igen, utan jag vill ta en kopia på en befintlig bilmodell och sen bara justera datan i den lite....
En vanlig sql kod med insert funkar ju bra om man har några enstaka fält i databasen, men jag har ju 200 st så det blir ju en jäkla lång sql-sats isåfall...
Gör såhär.
Välj de fälten som du tänker fylla i med t.ex. Checkboxar.
Hämta det fältet som är mest likt det du skall lägga in.
Loopa ut svaren i gömda textfält. Och fyll i det du valde att du skulle fylla i. På så sätt så kommer ju det att kopieras utan att du behöver fylla i en massa i onödan.
CalippoMedlem sedan aug. 2002536 inlägg Problemet är inte hur jag ska få in datan, utan hur jag ska göra det med så lite kod som möjligt.
Ungefär som när man klonar ett recordset:
Dim rs1, rs2, f
Set rs1 = CreateObject("ADOCE.Recordset.3.1")
rs1.open "MSysTables"
Set f = rs1.Fields(0)
Msgbox f.Value, ,f.Name
Set rs2 = rs1.Clone
Set f = rs2.Fields(0)
Msgbox f.Value, ,f.Name
Nackdelen med den koden är att när man uppdatera ett recordset så uppdateras alla klonade....
hopparnMedlem sedan nov. 20011 551 inlägg ehh, 200 fält i en tabell låter mycket, jag skulle nog lagt dem i flera tabeller och joinat ihop dem, för att till fullo använda relationsdatabasens möjligheter... sorry, inget svar på din fråga men en liten funderare bara =)
CalippoMedlem sedan aug. 2002536 inlägg Japp, jag håller med dig att det är många fält i en tabell.
Har importerat in all data från en excelfil och pga tidsbrist inte hunnit göra en kod som splittar upp fälten i flera tabeller...
Dim objConn, strSql, i, intId, Rs, intColumns
intId = CInt(Request.Form("id"))
' id:t som är likt det som du skall lägga in
intColums = 44
'hur många kolumner du har i databasen
objConn = databaskoppling
strSql = "Select * From [Tabell] where"
Set Rs = objConn.Execute(strSql)
Do Until Rs.Eof
i = 1
For i to intColumns
Response.Write "<input type=""text"" name="""&i&""" value="""&Rs(i)&"""><br>"
Next
Rs.MoveNext
Loop
Sedan får du ändra det du vill ändra
och skicka tillbaka använd då en for each loop när du tar emot med request.form
JPSMedlem sedan nov. 2001101 inlägg Behöver samma funktion!
Testade med
KOD]Select * Into TABELL1 from TABELL1 WHERE Id = " & Request("Id")[
och fick error - Tabell1 är både källa samt mål.
Hör av dig om du har fått det att funka!
@ndersMedlem sedan juni 200032 969 inlägg JPS; Exakt vad är du ute efter?
Engine^Medlem sedan dec. 20003 887 inlägg INSERT INTO tabell SELECT * FROM tabell WHERE Id = " & Request("Id")
JPSMedlem sedan nov. 2001101 inlägg @nders - Jag är ute efter samma funktion som Calippo.
Ville bara säga att jag hade testat Select * Into utan att lyckas!
Provade Engine^ förslag men det blir fel på primärnyckel och relationer. Mitt Id är unikt - någon ide?
@ndersMedlem sedan juni 200032 969 inlägg Du får specificera vilka fält du vill kopiera då i så fall, dvs alla utom räknarvärdet.
INSERT INTO tabell (fält1, fält2, fält3) SELECT fält1, fält2, fält3 FROM tabell WHERE ID = 1
Mvh
Engine^Medlem sedan dec. 20003 887 inlägg tja... du får lov att ange alla kolumner... :l
INSERT INTO tabell(k1, k2, k3, ..., k[i]n[/i]) SELECT k1, k2, k3, ..., k[i]n[/i] WHERE Id = " & Request("Id")
Men med dina 200 kolumner så låter det som en dum lösning. Utveckla Nickemannens lösning.
JPSMedlem sedan nov. 2001101 inlägg Hade hoppats på en enklare lösning :-( då även jag har nästan 200 st fält och det blir en sjutusans sql-sats av det!
Engine^Medlem sedan dec. 20003 887 inlägg Dim strSQL, objRS, objConn, lngNewID
objConn = [i]databaskoppling[/i]
strSQL = "INSERT INTO tabell (namn) VALUES ('bla')"
objConn.Execute strSQL
strSQL = "SELECT Max(Id) AS lngNewID FROM tabell"
Set objRS = objConn.Execute (strSQL)
lngNewID = objRS("lngNewID")
strSQL = "SELECT * FROM tabell WHERE Id = " & Request("Id")
Set objRS = objConn.Execute (strSQL)
For i = 0 To objRS.Fields.Count
If NOT objRS.Fields(i).Name = "Id" Then
strSQL = "UPDATE tabell SET " & objRS.Fields(i).Name & " = '" & objRS.Fields(i) & "' WHERE Id = " & lngNewID
objConn.Execute strSQL
End If
Next
Den här metoden kanske fungerar... testa ;)
JPSMedlem sedan nov. 2001101 inlägg Provade ditt exempel men får Typblandningsfel i villkorsuttryck då jag har olika fält typer?
Jag har själv gjort en liknande process där en post först skapas och där efter uppdateras all data. Jag hade redan skrivit en SQL-sats för UPDATE så då slipper jag skriva en Insert-sats.
Dessutom blir det mindre att hålla koll på om något databasfält skulle ändras.
Tackar för ditt exempel. :birp
Engine^Medlem sedan dec. 20003 887 inlägg Ok, du kanske måste ändra till
For i = 0 To objRS.Fields.Count
If NOT objRS.Fields(i).Name = "Id" Then
Select Case VarType(objRS.Fields(i))
Case 6, 8
strValue = "'" & objRS.Fields(i).Value & "'"
Case 7
strValue = "#" & objRS.Fields(i).Value & "#"
Case Else
strValue = objRS.Fields(i).Value
End Select
strSQL = "UPDATE tabell SET " & objRS.Fields(i).Name & " = " & strValue & " WHERE Id = " & lngNewID
objConn.Execute strSQL
End If
Next
Otestat från min sida men jag hoppas att det kan fungera... :)