Avatar billede rookie44 Juniormester
11. december 2009 - 16:41 Der er 17 kommentarer og
1 løsning

Tilføje et felt til en tabel via VBA

Når brugeren åbner programmet, vil jeg checke om et bestemt felt eksisterer i en tabel. Hvis ikke (= gammel version), så skal tabellen opdateres og feltet skal tilføjes via VBA kode.
Avatar billede terry Ekspert
11. december 2009 - 16:55 #1
Alter TABLE AAA ADD COLUMN ProductQuantity Single;
Avatar billede terry Ekspert
11. december 2009 - 16:56 #2
Docmd.RunSQL "Alter TABLE AAA ADD COLUMN ProductQuantity Single;"
Avatar billede rookie44 Juniormester
11. december 2009 - 17:29 #3
terry,

How do I check that the Field ProductQuantity exits ?

If the Field ProductQuantity is a text field, how do I tell the length ?
Avatar billede terry Ekspert
11. december 2009 - 17:32 #4
Avatar billede terry Ekspert
11. december 2009 - 17:34 #5
"How do I check that the Field ProductQuantity exits ?"

Well I would just try and create the field and if it exists you get an error which you can catch and react on
Avatar billede rookie44 Juniormester
11. december 2009 - 17:44 #6
terry,

I have read the document. I will try it.
My program exits in 97, 2000, XP and 2003.

When I have tested it I will return.
Avatar billede rookie44 Juniormester
13. december 2009 - 17:24 #7
terry;

ALTER TABLE T_Projdata ADD COLUMN RealKurs Single;

When I write this line I get -
Compie Error:
Expected: End of Statement
Avatar billede terry Ekspert
13. december 2009 - 17:40 #8
where are you writing it?
Avatar billede rookie44 Juniormester
13. december 2009 - 17:47 #9
Function Version302()
On Error GoTo Fejl_Version302
  ALTER TABLE T_Projdata ADD COLUMN RealKurs Single;
Exit Sub


Fejl_Version302:
'Her kommer du hvis feltet eksisterer i forvejen, dvs kunne ikke oprettes igen
Resume Next



End Function
Avatar billede terry Ekspert
13. december 2009 - 19:04 #10
Function Version302()
On Error GoTo Fejl_Version302
  Docmd.Runsql "ALTER TABLE T_Projdata ADD COLUMN RealKurs Single;"
Exit Sub


Fejl_Version302:
'Her kommer du hvis feltet eksisterer i forvejen, dvs kunne ikke oprettes igen
Resume Next



End Function
Avatar billede rookie44 Juniormester
13. december 2009 - 21:36 #11
Now I get the Message:
Compile Error:
Exit Sub not allowed in Function or Property

The Access version is Access 97
Avatar billede rookie44 Juniormester
13. december 2009 - 21:38 #12
I change the Function to Sub
Avatar billede rookie44 Juniormester
13. december 2009 - 21:45 #13
Terry

It Don't works.

Faillure: Can't execute data definition statements on linked data source.

Do you now how to do on linked tables?
Avatar billede terry Ekspert
14. december 2009 - 13:23 #14
You will need to make a connectin to the dB, but one problem is going to be if the loaction of the backend changes. I'll let you figure that proble out yourself


This code isnt tested


Set cnn = New ADODB.Connection
cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test.mdb;Persist Security Info=False"
Set rec = New ADODB.Recordset
cnn.Open

cnn.Execute "ALTER TABLE T_Projdata ADD COLUMN RealKurs Single;"
Avatar billede rookie44 Juniormester
23. december 2009 - 11:00 #15
I have 2 backends and they can change.
So I have added a table with versionnumber to my Backend.
Then I can check for the version and make an update on the specific table and refrsh the link.

I use DAO, so I have found this code, which is working on linked tables.


Sub Tilføjfelt_Restmandetimer()
'Tilføjer feltet Restmandetimer til tabellen T_Kapacitet
On Error Resume Next
Dim WdsData As DAO.Database
Dim MyTabel As DAO.TableDef
Dim fld As DAO.Field
Set WdsData = CurrentDb()
Set MyTabel = WdsData.TableDefs!T_Kapacitet
Set fld = MyTabel.CreateField("Restmandetimer", dbSingle) 'Feltnavn = Restmandetimer, og egenskab = Single decimaltal
MyTabel.Fields.Append fld
WdsData.TableDefs.Refresh
If MyTabel.Updatable = True Then
  With MyTabel
      .Fields.Append .CreateField("Restmandetimer", dbSingle)
  End With
End If

End Sub
Avatar billede rookie44 Juniormester
24. december 2009 - 09:02 #16
Terry

Do I owe you any points?
Avatar billede terry Ekspert
24. december 2009 - 10:15 #17
No, if you've found your own solution then you should give yourself them.

I'm actually surprised that your code works on linked tables if the code i previously gave doesnt. (DoCdm.RunSQL ...)

But if it does then great.

Have a good Christmas
Avatar billede rookie44 Juniormester
24. december 2009 - 12:48 #18
OK, lukker
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