Tabel i Access oprettet pba Excel - max Feltstørrelse 50
Hej Eksperter
Jeg har et lille problem, som jeg håber I kan hjælpe mig med. Jeg har et Excel ark med +180 kolonner og 3 rækker. Jeg skal bruge en tabel i Access, der afspejler Excel arket. 1 række i Excel skal være overskrift på feltet i Access og de 2 øvrige rækker i Excel bliver indhold i tabellen.
Når jeg anvender standard funktionaliteten i Access til at lave en tabel på baggrund af et Excel ark, så bliver feltstørrelsen på 255. Det betyder, at der ikke er plads til indholdet i felterne i Access databasen. Så hvis der er nogen, der kan fortælle, hvordan jeg sætter feltstørrelsen til andet end 255, når jeg oprette databasen - eller hvordan jeg ændre feltstørrelsen for mange felter på en gang, så vil jeg blive meget glad.
Umiddelbart vil jeg aldrig selv designe en tabel sådan, men det program der skal læse fra Access databasen forstår kun data såden.
Ved konverteringen ser Access på indholdet i cellerne i regnearket og bestemmer felttypen ud fra det. Hvis dine celler indeholder tekst, vil Access lave et tekstfelt - max. feltstørrelse for tekstfelter er 255 tegn - Hvis du skal bruge flere tegn, skal felttypen være Notat. Hvis ikke Access selv opretter et notatfelt, hvis den støder på en celle med mere end 255 tegn, er der nok ikke andet for, end at gøre følgende: Importér Exceltabellen. De flettyper, der ikke er rigtige, korrigeres (tekstfelter ændres til notatfelter). Lav en sammenkædning til excelarket (dvs. så arket optræder som en sammenkædet tabel i Accessdatabasen. Brug en opdateringsforespørgsel til at overføre data fra Excelarket til Accesstabellen.
Måske behøver du ikke importere excelarket - du kan måske nøjes med at lave sammenkædningen ?
@MSchlamovitz - Jeg har ikke behov for mere plads end 255, men mindre. Det jeg gerne vil undgå, er at skulle ændre hvert eneste felt manuelt, da det er lidt et stort arbejde.
@supertekst - Jeg har ikke noget VBA inde over, men det kan være løsningen? Hvis du kan finde noget VBA kode, der kan ændre feltstørrelse for alle felter på en gang, så vil det være en stor hjælp?
Jeg skal igennem +180 felter og rette feltstørrelsen på hver enkelt. Og det er en tilbagevendende opgave i en periode, hvor vi er i gang med opstarten af et system. Så hver gang der ændres i regnearket vil jeg skulle igennem samme manuelle øvelse. Og det vil jeg meget gerne undgå. Da jeg kender den maksimale feltlængde, behøver jeg ikke registrere den enkelte længde - jeg skal bare sikre, at der er plads til den længste. Og den vil aldrig bliver over 50 pga de begræsningser der er i det system data kommer fra.
Hvorfor er det nødvendigt at ændre feltlængden til noget andet end 255?
Du skriver indledningsvist: "Når jeg anvender standard funktionaliteten i Access til at lave en tabel på baggrund af et Excel ark, så bliver feltstørrelsen på 255. Det betyder, at der ikke er plads til indholdet i felterne i Access databasen."
Er det helt forkert at læse ovenstående som, at 255 tegn er for lidt?
Det kan da godt være, at forklaringen kunne være bedre, men som jeg skrev i overskriften, så må feltstørrelse max være 50 - og det er samme feltstørrelse for alle felterne.
Det der sker, er, at når jeg har oprettet tabellen med alle felterne i str 255, så komme data ikke med til alle felterne. Dvs. at en lang række felter bliver blanke, og hvis jeg forsøger at skrive noget deri, får jeg en fejlbesked om, at posten er for stor.
Du kunne jo overveje at importere dine data og så bruge VBA til at rette længderne. Nedenstående løber alle felter i en tabel igennem og retter tekstfelters længde:
Sub RetTekstLængder() Const TabelNavn = "Tabel1" Const NyLængde = 50
Dim Db As Database Dim Tdf As TableDef Dim Fld As Field
Set Db = CurrentDb For Each Tdf In Db.TableDefs If Tdf.Name = TabelNavn Then For Each Fld In Tdf.Fields If Fld.Type = 10 Then '10=Tekstfelt DoCmd.RunSQL ("ALTER TABLE " & TabelNavn & " ALTER COLUMN " & Fld.Name & " Text(" & NyLængde & ");") End If Next Fld End If Next Set Tdf = Nothing Set Db = Nothing End Sub
Tak for forslaget, tror sagtens VBA kan være en mulig løsning. Jeg har forsøgt mig med det kode eksempel du har lavet, men jeg får en fejl i DoCMD.RunSQL statementet.
Det virker - delvist. Jeg får ændret feltlængde på en række af mine felter, men jeg får en ny Run-time error. Jeg får en kode 3190. Teksten hertil er "Der er defineret for mange felter". I MS hjælpen skriver de følgende: "You tried to perform an operation that involves more than 255 fields. Reduce the number of fields, and then try the operation again." Det kan jeg så ikke få til at give mening, eftersom der er under 200 felter i tabellen?
Vi ændrer jo felterne ét efter ét, så hvis du har færre end 200 felter, giver det jo ingen mening overhovedet.
Lidt søgen på nettet antyder, at et for stort antal index kunne være en forklaring; men du har jo ingen index. Så ...???
Er det helt umuligt for dig at bryde tabellen op i en række mindre tabeller?
Jeg har desværre ikke meget mere intelligent at sige :O(
Synes godt om
Ny brugerNybegynder
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.