20. juli 2004 - 19:52Der er
30 kommentarer og 2 løsninger
Alter Table xxx add yyy
Jeg har en række databaser ude omkring i landet som skal have foretaget nogle ændringer. Til det formål havde jeg regnet med at udarbejde en form for Implementerings-modul som stort set lavede hele arbejdet for mig.
En af opgaverne består i, at der skal tilføjes en række nye felter i nogle eksisterende tabeller. Her har jeg umiddelbart benyttet :
Alter Table TabelNavn Add NytTabelIndhold .....
men jeg har behov for også at angive nogle feltegenskaber såsom decimaltal o.s.v. ....
Er der nogen som kender syntaxen, eller er der en nemmere måde ???
Dim SQL1 As String Dim db As DAO.Database Set db = CurrentDb Dim tbl As TableDef SQL1 = "Alter Table mintabel add nytfelt Text" DoCmd.RunSQL SQL1 Set tbl = db.TableDefs("mintabel") tbl.Fields("nytfelt").DefaultValue = "daw do'"
Hej Mugs > Det er ikke lige tekst-feltegenskaben jeg var ude efter, men derimod muligheden for både at angive at der var tale om tal ( decimaltal ovenikøbet )
disse egenkaber kan IKKE sættes vha SQL, desværre (i Access i hvert fald). I stedet er man nødt til at referere til dem f.eks. vha DAO og Tabledefs. Jeg skal prøve at se om jeg kan huske eller finde noget kode....
Dim db47 As Database Dim tdfNew As TableDef Dim a As String On Error GoTo Errorhandler a = InputBox(Prompt:="Indtast navnet på den nye tabel:", Title:="Opret ny tabel.", Default:="") Set db47 = OpenDatabase("D:\XP\db47") Set tdfNew = db47.CreateTableDef(a) With tdfNew .Fields.Append .CreateField("tekst", dbText, 30) .Fields.Append .CreateField("memo", dbMemo) .Fields.Append .CreateField("dato", dbDate) .Fields.Append .CreateField("tal", dbInteger) .Fields.Append .CreateField("tal1", dbLong) .Fields.Append .CreateField("tal2", dbDouble) db47.TableDefs.Append tdfNew End With
Så lykkedes det. Denne funktion opretter formattet "Short date" på feltet "DATO" i tabellen "TBL":
Public Sub SætEgenskab() Dim db As Database Dim prp As Property Dim tdef As TableDef Set db = CurrentDb Set tdef = db.TableDefs("tbl") Set prp = tdef.Fields("Dato").CreateProperty("Format", dbText, "short date") tdef.Fields("Dato").Properties.Append prp End Sub
Denne funktion lister alle egenskaber for et bestemt felt i en tabel:
Public Function VisEgenskaber() On Error Resume Next Dim db As Database Dim prp As Property Dim tdef As TableDef Set db = CurrentDb Set tdef = db.TableDefs("tbl") Dim n As Integer For n = 0 To 100 Debug.Print Format(tdef.Fields("dato").Properties(n).Name, "@@@@@@@@@@@@@@@@@@"), , tdef.Fields("dato").Properties(n).Type, tdef.Fields("dato").Properties(n).Value Next n End Function
Problemet er, at det kan være lidt svært at finde de rigtige værdier og navne, men med denne list, kan du se hvad de hedder. Da feltet ikke allerede har en Format-egenskab, så vil den ikke komme med på denne liste. Derfor er det en god ide at oprette den manuelt og derefter køre denne funktion, hvorved du kan aflæse værdierne.
Godmorgen venner ... Kaffen var udemærket og den efterfølgende tur i sengen, je vil straks kaste mig over dagens udfordringer, og vender snarest tilbage c",)
Jeg er nogenlunde på ligeså dybt vand, som dig. Jeg har aldrig brugt dette i praksis, men har kun engang (og igår) leget lidt med det for se hvad mulighederne var.
Jeg kan heller ikke oprette et decimal-felt, men alt det andet virker fint hos mig.
decimal-typen er vist også lidt speciel - jeg læste et eller andet om det engang, men kan huske præcist hvad...?
Jamen, jeg står selv overfor måske at skulle bruge noget lignende inden for de nærmeste måneder, så jeg vil dda være meget interesseret i at høre, hvis du finder ud af noget. Jeg skal også nok vende tilbage, hvis jeg finder ud af noget.
det er også pi... irriterende at man ikke kan scripte ændringer som man kan på f.eks. SQL server :o(
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.