Följande scenario finnes: Lagra det i en fast tabell. På ett dynamiskt sätt. ;O) Jag har en funktion som du kan ha nytta av... PRoblemet att modifiera tabellen dynamiskt är att det i princip inte går i ett fleranvändarsystem. Eftersom andra användare användersig av databasen måste du först se till att ingen av dessa är öppna. När du väl modifierar tabellen kommer användrae som försöker hämta data få felmedellande om att tabellen är låst.Skapa tabeller "dynamiskt"
al1=request("al1")
al2=request("al2")
al3=request("al3")
skall skivas in i DB (Access) i tabellen:
sql="insert into svar (al1,al2,al3) values ('"& al1 &"' , '"& al2 &"' , '"& al3 &"');"
Det visar sig att tabellen svar saknar fällten al2 och al3 hur kan man via en asp-sida känna av detta och därefter skapa de 2 fällten och sedan skriva in all data till db ?
Någonting med
IF NOT EXIST kanske ??????
BoboSv: Skapa tabeller "dynamiskt"
Tabell: Svar
Fält: RadID
Fält: Namn
Fält: Värde
<code>
Dim con
Dim rsTemp
Dim RadID
Set con = Server.CreateObject("ADODB.Connection")
con.Open "<<<Din Connectionstring>>>"
rsTemp = con.Execute(SELECT MAX(RadID) As LastRadID FROM svar")
If rsTemp.Eof Then
RadID = 1
ElseIf IsNull(rsTemp("LastRadID")) Then
RadID = 1
Else
RadID = rsTemp("LastRadID") + 1
End If
RadID = rsTemp("LastRadID")
rsTemp.Close
Set rsTemp = Nothing
sql = "INSERT INTO svar (RadID, Namn, Värde) VALUES ("& RadID &" , 'al1' , '"& al1 &"');"
con.Execute sql
sql = "INSERT INTO svar (RadID, Namn, Värde) VALUES ("& RadID &" , 'al2' , '"& al2 &"');"
con.Execute sql
sql = "INSERT INTO svar (RadID, Namn, Värde) VALUES ("& RadID &" , 'al3' , '"& al3 &"');"
con.Execute sql
con.Close
Set con = Nothing
</code>Sv: Skapa tabeller "dynamiskt"
Skapa först en connection till databasen och tabellen i fråga och sen kan du bläddra igenom och se vilka fält som finns i den...
<code>
Dim x, al1, al2
x = Rs.Fields.Count - 1
al1 = False
al2 = False
For i = 0 To x
If Rs.Fields(i).Name = "al1" Then
al1 = True
ElseIf Rs.Fields(i).Name = "al2" Then
al2 = True
End If
Next
If Not al1 = True And Not al2 = True Then
Set RsCom = Server.CreateObject("ADODB.Command")
RsCom.ActiveConnection = [Connectionsträng]
If al1 = True And al2 = True Then
RsCom.CommandText = "ALTER TABLE [tabell] ADD COLUMN al1 TEXT([Fältlängd]), al2 TEXT([Fältlängd])"
ElseIf al1 = True Then
RsCom.CommandText = "ALTER TABLE [tabell] ADD COLUMN al1 TEXT([Fältlängd])
Else
RsCom.CommandText = "ALTER TABLE [tabell] ADD COLUMN al2 TEXT([Fältlängd])
End If
RsCom.Execute
RsCom.ActiveConnection.Close()
Set RsCom = Nothing
End If
</code>
Testa och se...
Mvh ThomasSv: Skapa tabeller "dynamiskt"
Så är det bara en person som ska kunna använda den samtidigt så är det nog inte lika stort problem. Men att modifiera tabellen bara sådär under applikationes gång är inte att rekommendera.
Addministration av tabellen kanske sker mer sällan då sker förändringar.
Fördelen med mitt förslag den lättare hanterar detta. Nackdelen är att du får presentera data på ett anorlunda sätt än tidigare. Vilken beroende på projektetsstorlek innebär att du måste förändra befintlig kod.
Sedan fiss det ju oxå en begränsning i fur många kolumner du kan ha i en tabell. Om du äverstiger det. Är ju det ingen lösning att helatiden lägga till fält.
Du kan ju förklara lite mer nämnare varför du vill göra det så kanske vi kan föreslå en enklare datastruktur?