Avatar billede coolcard Nybegynder
04. januar 2003 - 23:09 Der er 9 kommentarer og
1 løsning

Format felter i query

Jeg har en tabel (tabel1)med navne og adresser i (linket via ODBC fra Navision) og ud fra denne tabel skal jeg lave en ny tabel (tabel2) men hvert felt fra tabel1 skal tildeles en fast længde f.eks 30 karakterer i tabel2. Så hvis f.eks et felt fra tabel1 kun fylder 20 karakterer skal resten fyldes ud med blanke.
Tabel2 skal både indeholde tekst og numeriske felter der alle skal formatteres sådan.
Eftersom tabel1 er linket kan jeg ikke lave noget indtastnings filter på denne tabel.

Jeg forestiller mig at man kører en update query der opdaterer de poster der ligger i tabel1 til det rigtigeformat i tabel2...

Men jeg er ikke så stærk i formattering via querys sååå HJÆLP!

TAKKER

Lasse
Avatar billede mugs Novice
04. januar 2003 - 23:31 #1
Jeg er heller ikke skrap til formattering i Query. Så her et forslag i VBA:

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:\VBA funktioner\VBA\db47")
Set tdfNew = db47.CreateTableDef(a)
With tdfNew
.Fields.Append .CreateField("tekst", dbText)
.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
MsgBox "Tabellen:" & vbNewLine & vbNewLine & a & vbNewLine & vbNewLine & "er nu oprettet.", Title:="Udført."
End With
Errorhandler:
If Err = 3010 Then
MsgBox "Der findes allerede en tabel med dette navn." & vbNewLine & vbNewLine & "Procedüren forlades."
End If

Der opretter en ny tabel i databasen "db47". Jeg mener også du kan sætte feltlængde på, men det må jeg lige fundere lidt over. Du kan efter oprettelse så køre en tilføjelsesforespørgsel, der smide data fra Tabel1 over i Tabel2. 

Koden er hentet fra en lille testdb i Access97. Læg din e.mail, hvis du vil have den sendt
Avatar billede mugs Novice
05. januar 2003 - 07:26 #2
For at tilføje en feltlængde til tekstfeltet, skal den hedde:

.Fields.Append .CreateField("tekst", dbText, 30)

Du kan ikke sætte en feltlængde på numeriske felter, idet længden her er bundet af talstørrelsen (Integer, Long m.v.)
Avatar billede proaccess Nybegynder
05. januar 2003 - 08:55 #3
Du kan lave en funktion til at "udfylde" med mellemrum...

Public Function fyld(strTekst As String, intAntal As Integer) As String
  fyld = Left$(strTekst & Space$(intAntal), intAntal)
End Function

Denne kan så kaldes i en forespørgsel:

INSERT INTO Tabel2 (Navn, Adresse)
SELECT fyld(Tabel1.Navn, 30), fyld(Tabel1.Adresse, 30)
FROM Tabel1;
Avatar billede jkrons Professor
05. januar 2003 - 11:09 #4
Denne SQL opretter en tabel  Tabel1 og tilføjer tre felter, med tilhørende tekstlængde:


CREATE TABLE tabel2
(Id char (3) not null primary key, fornavn char (20), Efternavn char(30));

Som mugs skirver kan du ikke sætte længde på talfelter.
Avatar billede coolcard Nybegynder
05. januar 2003 - 20:50 #5
MUGS ->
Jeg har allerede tabellen da der bliver puttet mere i den løbende...
Derfor var jeg interesseret i hvordan man kunne formattere det der står i tabel2 hvergang man har kopieret noget ned i den.
Avatar billede coolcard Nybegynder
05. januar 2003 - 20:56 #6
proaccess :

Ser smart ud men hvordan får jeg det lige ind det rigtige sted ( hvor skal det ind henne ) ?
Avatar billede proaccess Nybegynder
07. januar 2003 - 08:51 #7
Funktionen Fyld skal du oprette i en modul (som kan kaldes "modFyld")...

Selve SQL'en (INSERT INTO...) er "bare" en forespørgsel, som du kan køre når det er nødvendigt...

Jeg kan se i din kommentar til mugs, at du nu hellere vil opdatére hele tabel2 end kun lave ændringen hver gang du flytter data fra tabel1 til tabel2.
Hvis dette er tilfældet, så skal din SQL være:

UPDATE Tabel2
SET Navn=fyld(Navn, 30), Adresse=fyld(Adresse, 30);
Avatar billede coolcard Nybegynder
09. januar 2003 - 19:07 #8
Proaccess >> Har desværre først fået tid til at kigge på dit eksempel nu, men det virker!

Hvis jeg nu har et tal fel der f.eks har værdien 35 og skal formattere det til 000000035 (35 -> 000000035 eller 700 -> 000000700) kan man så også gøre det ligeså smart (tal feltet skal fylde 9 felter ialt) ?

Point er i hvertfald til dig.....
Avatar billede proaccess Nybegynder
10. januar 2003 - 13:04 #9
>coolcard: Hvis de 35 og 700 er TAL-værdi'er, så skal du "bare" angive 000000000 i Format for kolonnenen (eller feltet, hvis det er på en formular/rapport)
Avatar billede coolcard Nybegynder
10. januar 2003 - 21:12 #10
>Pro Access :
Ok, det er jeg med på men hvordan grejer jeg at folk indtaster f.eks 2,00 eller bare 2 og det skal i feltet formatteres til 000000200?
På selve formen skal der blot stå 2,00 men i tabellen skal der stå 000000200, og man skal være sikker på at derstår det samme om folk taster 2,0 / 2 / 2,00.
Det største beløb er således 9999999,99 der kan indtastes....
Der er frit valg om det skal laves som tekst eller tal værdi.
Evt. er det ok at have to felter i tabellen een med den formatterede værdi og en med "komma" i ?

PS Tak for hjælpen indtil videre!
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