Avatar billede jensen363 Forsker
20. juli 2004 - 19:52 Der 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 ???
Avatar billede mugs Novice
20. juli 2004 - 20:05 #1
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'"
Avatar billede jensen363 Forsker
20. juli 2004 - 20:08 #2
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 )
20. juli 2004 - 20:10 #3
nå, så lykkedes det :o)

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....
Avatar billede jensen363 Forsker
20. juli 2004 - 20:12 #4
Thomas > Det nævnte hyperlink ville simpelthen ikke vises på min arbejdscomputer, så jeg har måtte vente med at få oprettet spørgsmålet hjemmefra c",)
Avatar billede mugs Novice
20. juli 2004 - 20:19 #5
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
20. juli 2004 - 20:25 #6
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
Avatar billede jensen363 Forsker
20. juli 2004 - 20:40 #7
Runtime Error 3265 ( Item not found in this collection ) ved :

Set prp = tdef.Fields("Dato").CreateProperty("Format", dbText, "short date")
20. juli 2004 - 20:41 #8
har du et felt, som hedder dato, som har datatypen "dato/klokkeslet"?
Avatar billede jensen363 Forsker
20. juli 2004 - 20:45 #9
Silly me ... selvfølgelig ikke ... jeg kunne jo bare læse din løsning igennem ...
... men den fejler alligevel Type Makværk
20. juli 2004 - 20:46 #10
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.

Det er lidt besværligt - indrømmet :o(
Avatar billede jensen363 Forsker
20. juli 2004 - 20:54 #11
Kaffen og sengen kalder, så jeg vender tilbage i morgen ... foreløbig tak for hjælpen
20. juli 2004 - 20:56 #12
Det er usundt at drikke kaffe lige før sengetid (afhængigt af, hvad man skal lave i sengen selvfølgelig ;)
Avatar billede mugs Novice
20. juli 2004 - 21:09 #13
Hvis man skal andet end sove - Hvad skal man så med kaffe?

Det er ligeledes ubehageligt med krummer i sengen, specielt hvis man skal sove - Ellers klør det så dejligt :o)
Avatar billede jensen363 Forsker
21. juli 2004 - 07:02 #14
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",)
Avatar billede jensen363 Forsker
21. juli 2004 - 07:12 #15
Her er en oplistning af de egenskaber som det nye felt skal "arve" ... hvordan ser syntaxen så ud ?

        Attributes                        4            2
    CollatingOrder                        3            18
              Type                        3            20
              Name                        12          pctvaegt11
  OrdinalPosition                        3            79
              Size                        4            16
      SourceField                        12          pctvaegt11
      SourceTable                        12          PakkeaftaleBTBTabel
    DataUpdatable                        1            False
      DefaultValue                        12          0
    ValidationRule                        12         
    ValidationText                        12         
          Required                        1            False
  AllowZeroLength                        1            False
      ColumnWidth                        3            -1
      ColumnOrder                        3            0
      ColumnHidden                        1            False
            Format                        10          General Number
    DecimalPlaces                        2            255
    DisplayControl                        3            109
              GUID                        9            ????????
Avatar billede jensen363 Forsker
21. juli 2004 - 08:12 #16
Som jeg fortolker funktionaliteten, ændres property pr. egenskab altså :

Set prp = tdef.Fields("Dato").CreateProperty("Format", 10, "General Number")

... Men den fejler fortsat ( Type mismatch )
21. juli 2004 - 08:56 #17
Nu er "General number" ikke så velegnet til et Dato-felt ;o)
Kan det være det?

Skulle linien ikke hedde:
Set prp = tdef.Fields("pctvaegt11").CreateProperty("Format", 10, "General Number")
Avatar billede jensen363 Forsker
21. juli 2004 - 09:05 #18
Det hedder den også i den faktiske udgave ... men intet hjælper ...

Er der mulighed at foretage kopiering i tabellen via VBA ? ... altså en kopiering af den aktuelle pctvaegt11 til en ny ?
21. juli 2004 - 09:17 #19
Hvordan ser hele koden ud?
Jeg har lige prøvet at oprette et nyt felt og efterfølgende lørt koden, uden problemer....
Avatar billede jensen363 Forsker
21. juli 2004 - 09:26 #20
Felt oprettes med nedenstående :

Dim SQL1 As String
Dim db As DAO.Database
 
Set db = CurrentDb

  Dim tbl As TableDef
 
    SQL1 = "Alter Table PakkeaftaleBTBTabel add pctvaegt11 Byte"

  DoCmd.RunSQL SQL1

Set tbl = db.TableDefs("PakkeaftaleBTBTabel")
tbl.Fields("pctvaegt11").DefaultValue = 0

Og herefter :

Dim db As Database
Dim prp As Property
Dim tdef As TableDef

  Set db = CurrentDb
    Set tdef = db.TableDefs("PakkeaftaleBTBTabel")
      Set prp = tdef.Fields("pctvaegt13").CreateProperty("Format", 10, "General Number")

  tdef.Fields("pctvaegt13").Properties.Append prp
Avatar billede jensen363 Forsker
21. juli 2004 - 09:27 #21
Ups ... pctvaegt13 i den første kode naturligvis ...
21. juli 2004 - 09:31 #22
hvilken linie giver type mismatch?
Avatar billede jensen363 Forsker
21. juli 2004 - 09:32 #23
Set prp = tdef.Fields("pctvaegt13").CreateProperty("Format", 10, "General
Avatar billede jensen363 Forsker
21. juli 2004 - 09:34 #24
Hvad er egentlig årsagen til af Data type Decimal ikke kan anvendes i :

SQL1 = "Alter Table PakkeaftaleBTBTabel add pctvaegt13 Byte"
21. juli 2004 - 10:03 #25
Hmmm...beats me!

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...?
Avatar billede jensen363 Forsker
21. juli 2004 - 10:06 #26
Øv ... jeg troede jeg var i gang med en genial Implementeringsrutine ... suk ... jeg leger lidt videre ... I hører nærmere ...
21. juli 2004 - 10:09 #27
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(
Avatar billede jensen363 Forsker
21. juli 2004 - 10:25 #28
Du høre nærmere c",)
Avatar billede jensen363 Forsker
30. august 2004 - 07:27 #29
Hmmm ... desværre ingen løsning på problemet.

Lukker spørgsmålet for en god ordens skyld ....
Avatar billede jensen363 Forsker
30. august 2004 - 07:28 #30
Mugs > læg lige et svar, så kan I dele point c",)
Avatar billede mugs Novice
30. august 2004 - 08:12 #31
Tak - Men mit forslag løste jo ikke dit problem.
Avatar billede jensen363 Forsker
30. august 2004 - 08:32 #32
Noget har I jo trods alt ydet ... c",)
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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