Avatar billede hnto Nybegynder
25. marts 2003 - 10:41 Der er 30 kommentarer og
1 løsning

MEGA problem med eksport.... haster

Jeg kører access 97 med et tilbagevendende problem.
I denne køres en kode der laver et output til excel fra en query på 22000 records samt 30 kolonner.
Dette i sig selv er jo ikke en excel begrænsning Men...

access kommer med flg. fejlkode :
Run-time error '2306':
There are too many rows to output, based on the limitation specified by the output format or by Microsoft Access.

koden der bruges er :

DoCmd.OutputTo acOutputQuery, "PIM med manglende lagerførte i PIM_subform_Niller", acFormatXLS, "", False, ""
Avatar billede terry Ekspert
25. marts 2003 - 10:49 #1
does the query return 22000 rows?
25. marts 2003 - 10:54 #2
Well, som den siger, så er du stødt på access begrænsning for eksport til Excel.
Jeg kan ikke huske om det er 18000 rækker....

Har du ikke mulighed for at splitte det op i 2 kørsler?
Avatar billede hnto Nybegynder
25. marts 2003 - 10:56 #3
Nope....
Fejlmed. kommer uden den genererer noget output.

På statusindikatoren kan man se den outputter objectet med den tænker meget når den er ca. 75 % i mål. da kommer fejlmedd. med mulighed for debug eller END.
Ved debug kommer man bare ind på linien hvor koden står.
Avatar billede hnto Nybegynder
25. marts 2003 - 11:05 #4
2 kørsler er meget uhensigtsmæssigt. Kan det gemmes i CSV som derved bibeholder dataindholdet, eller hvad er der af alternativer.
25. marts 2003 - 11:09 #5
Hvis formattet er underordnet, hvorfor så ikke bare eksportere det i Access-format (til en Access-database)?

Ang. .csv, .txt eller andre text-formater, så kan jeg heller ikke huske begrænsningerne i Access 97 (det er jo længe siden :o)

Men prøv det! Det er jo nemt af ændre output-formatet.

Har du forresten prøvet Docmd.Transferspreadsheet i stedet for Docmd.OutputTo?
Avatar billede hnto Nybegynder
25. marts 2003 - 11:11 #6
Ja jeg har prøvet Docmd.Transferspreadsheet. den store ulempe i denne er at man ikke får mulighed for navngivning samt lokation for filens ønskede placering.

Er der de samme limits på access - xls i access 2K ?
Avatar billede Brian Moos Lindberg Praktikant
25. marts 2003 - 11:21 #7
- ellers kan du vel bare omdøbe og flytte filen bagefter ?
25. marts 2003 - 11:24 #8
XP kan eksporterer det antal poster, som Excel er begrænset af - dvs 65536 rækker med 255 kolonner
Avatar billede terry Ekspert
25. marts 2003 - 11:24 #9
why can you not give the output file name and location?
The following works:

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "tbl1", "C:\test.xls"
25. marts 2003 - 11:26 #10
terry-> Docmd.Outputto åbner en SaveFile-dilaogboks, hvis du ikke angiver et filnavn. Derved kan brugeren selv bestemme fra gang til gang.
Avatar billede hnto Nybegynder
25. marts 2003 - 11:28 #11
terry>>
Det var i output øjemed jeg mente...
ved transfer skal du i scriptet have defineret din 'sti'
Denne er valgbar som en 'save as' når der benyttes 'output'
Avatar billede hnto Nybegynder
25. marts 2003 - 11:29 #12
TJ har givet min stof til eftertanke hvad angåtr opgradering af Access.

;-)
25. marts 2003 - 11:33 #13
'XP (og '2000) har mange nye gode fasciliteter i forhold til '97.

Access 97 var dog nok en af de mest stabile versioner af Access (sammen med version 2.0 (!)). Jeg oplever generelt lidt flere driftsproblemer i de nyere versioner hos mine kunder - skræmmende, ikke sandt?!!
Avatar billede ra1101 Nybegynder
25. marts 2003 - 12:05 #14
Hej, ikke fordi dette løser dit problem, men måske en forklaring. Jeg er selv stødt på samme problem, ikke kun ved eksport fra Access, men i diverse dataoverførsler fra bla. AS400. Excel 97 har i disse tilfælde en begrænsning på 16383 records. Årsagen tror jeg vi bliver nødsaget til at spørge "Bill" om.
25. marts 2003 - 12:15 #15
Har du nummeret? Eller skal du lige have det?
Avatar billede ra1101 Nybegynder
25. marts 2003 - 12:23 #16
Naaaj, jeg tror sgu ikke han har tænkt sig at lavet det om fordi, en eller anden nørd fra Danmark synes det er noget shi......, eller hvad???
Avatar billede nih Novice
25. marts 2003 - 15:58 #17
Jeg plejer at bruge denne function:
den virker både i 2000 og 97

Function tilExcell(strSQL As String)
On Error GoTo eHandler

    Screen.MousePointer = 11
   
    Dim objXlApp As New Excel.Application
    Dim objXlWrkBook As Excel.Workbook
   
    Set objXlWrkBook = objXlApp.Workbooks.Add
   
    Dim rs As DAO.Recordset
    Dim i As Integer, j As Integer
   
    Set rs = CurrentDb.OpenRecordset(strSQL)
   

    If rs.EOF And rs.BOF Then GoTo ExitHer
    rs.MoveLast
    rs.MoveFirst
    For j = 0 To rs.Fields.Count - 1
        objXlWrkBook.Sheets(1).Cells(1, j + 2).Value = rs.Fields(j).Name
    Next j
   
    For i = 1 To rs.RecordCount
      For j = 0 To rs.Fields.Count - 1
        objXlWrkBook.Sheets(1).Cells(i + 2, j + 2).Value = rs.Fields(j)
      Next j
      rs.MoveNext
    Next i
   
   
    objXlApp.Visible = True

    rs.Close
    Set rs = Nothing
    Set objXlWrkBook = Nothing
    Set objXlApp = Nothing

ExitHer:
   
    Screen.MousePointer = 0
    Exit Function

eHandler:
   
    MsgBox "Der skete en fejl :o("
    Resume ExitHer

End Function

Niels
Avatar billede hnto Nybegynder
26. marts 2003 - 10:02 #18
Hej Niels.

Jeg kan af din kode ikke se nogen sammenhæng på referencen til en given query eller table. ?!?
Avatar billede hnto Nybegynder
26. marts 2003 - 10:09 #19
Niels.

Den fejler i øvrigt første gang i din kode på:

Dim objXlApp As New Excel.Application

( jeg kører 97 )
Avatar billede hnto Nybegynder
26. marts 2003 - 10:30 #20
Niels>>

Jeg giver gerne point for en brugbar løsning !
Avatar billede nih Novice
26. marts 2003 - 11:31 #21
Du skal først i vba editoren sætte referencen til excel under tools - references.
Avatar billede nih Novice
26. marts 2003 - 11:40 #22
kopier koden ind i et modul

læg følgende kode på en knap i en formular:

Private Sub Kommandoknap0_Click()
  tilExcell CurrentDb.QueryDefs("Forespørgsel1").SQL
End Sub

Niels
Avatar billede hnto Nybegynder
26. marts 2003 - 11:50 #23
Niels >>

Der er 200 point for et eksempel i acces 97 som kan sendes til :

approved@solar.dk

hva' sir du til dette  ??
Avatar billede nih Novice
26. marts 2003 - 12:11 #24
Sendt

Og du skal ikke give point - dem behøves jeg ikke

Niels
Avatar billede nih Novice
26. marts 2003 - 14:28 #25
hva så -

Kan du overføre 22000 records ???
Avatar billede hnto Nybegynder
27. marts 2003 - 09:23 #26
Hej Niels.

Sorry jeg først kommer på mail nu..  ;-)

Jeg har modtaget din mail, men Db'en er blevet frasorteres i firewalen.
Kunne du zippe den og sende igen.

Og, jo... selvfølgelig skal du have point.
Avatar billede kujo Nybegynder
31. marts 2003 - 10:13 #27
Hej nih

Jeg arbejder samme sted som Hnto og er den der har brug for koden.

Når jeg bruger nedenstående modul fejler den på:

linien:  Set rs = CurrentDb.OpenRecordset(strSQL)

fejl:
Too few parameters. Expected <number>. (Error 3061)

This parameter query requires the specified number of parameters, which you didn't supply. Provide the expected number of parameters, and run the query again.
In some cases, this message is generated when unknown field names or expressions are interpreted as query parameters. Be sure to enclose field names containing spaces or punctuation with square brackets [ ].

hvordan får jeg rettet i koden, således at den også tillader "null" værdier som nogle gange består af 2-3 spaces

Det er muligvis fejlen?? eller er der andre forslag til hvorfor den fejler

ps. jeg forsøger at gemme 12 kolonner og 10 rækker

--------------------------------------

Function tilExcell(strSQL As String)
On Error GoTo eHandler

    Screen.MousePointer = 11
   
    Dim objXlApp As New Excel.Application
    Dim objXlWrkBook As Excel.Workbook
   
    Set objXlWrkBook = objXlApp.Workbooks.Add
   
    Dim rs As DAO.Recordset
    Dim i As Integer, j As Integer
   
    Set rs = CurrentDb.OpenRecordset(strSQL)
   

    If rs.EOF And rs.BOF Then GoTo ExitHer
    rs.MoveLast
    rs.MoveFirst
    For j = 0 To rs.Fields.Count - 1
        objXlWrkBook.Sheets(1).Cells(1, j + 2).Value = rs.Fields(j).Name
    Next j
   
    For i = 1 To rs.RecordCount
      For j = 0 To rs.Fields.Count - 1
        objXlWrkBook.Sheets(1).Cells(i + 2, j + 2).Value = rs.Fields(j)
      Next j
      rs.MoveNext
    Next i
   
   
    objXlApp.Visible = True

    rs.Close
    Set rs = Nothing
    Set objXlWrkBook = Nothing
    Set objXlApp = Nothing

ExitHer:
   
    Screen.MousePointer = 0
    Exit Function

eHandler:
   
  MsgBox "Der skete en fejl :o("
  Resume ExitHer

End Function

------------------------------
Avatar billede nih Novice
31. marts 2003 - 12:14 #28
prøv at tilføje 'dbOpenDynaset'

Set rs = CurrentDb.OpenRecordset(strSQL,dbOpenDynaset)


Niels
Avatar billede kujo Nybegynder
31. marts 2003 - 12:41 #29
Hej Niels

jeg rettede:
'Set rs = CurrentDb.OpenRecordset(strSQL)
til    Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)

Men den går stadig til - eHandler:
   
    MsgBox "Der skete en fejl :o("
    Resume ExitHer


se også http://exp.dk/spm/335409

Mvh Kujo
Avatar billede kujo Nybegynder
31. marts 2003 - 12:49 #30
Hej Niels

Eks. du sendte til Hnto virkede ok på en test DB.

indtil vi prøvede det på vores db med op 59000 rækker, som indeholder Null værdier, importede "null" vædier som kan bestå af spaces osv.

Kujo
Avatar billede nih Novice
31. marts 2003 - 13:01 #31
prøv at ændre:

Dim i As Integer, j As Integer
til
Dim i As long, j As long
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