06. juli 2013 - 21:55Der er
8 kommentarer og 1 løsning
Fyld en kolonne med data fra database
Jeg skal have "Fyldt" kolonne D fra række 6 og nedad til EOF Mine koder nedenfor virker men udfyldningen er enorm langsom.
Kan i hjælpe med koder der speeder denne proces op.
Dim strPath As String strPath = Application.ThisWorkbook.Path
Dim cnnProdukt As New ADODB.Connection Dim rstProdukt As New ADODB.Recordset cnnProdukt.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath & "\xxx.accdb"
rstProdukt.Open "Select Customer from [Customer Forespørgsel]", cnnProdukt, adOpenKeyset, adLockOptimistic, adCmdText
With Worksheets("Customer") i = 5 Do i = i + 1 .Range("D" & Right(i, 2)) = rstProdukt.Fields(0).Value
Tak for svaret Application.ScreenUpdating = False hjalp kun ganske lidt Der er kun ca 30 rækker men det tager 15 sek at lode ind.
Jeg bruger en anden ADO forbindelse til at fylde et helt Ark med 8 coloner og ligeledes ca 30 rækker. Det tager kun 1 sek. Kan denne forbindelse laves så den kun tager en colone fra start til EOF. Og vil den så være hurtigere. Her er koderne:
Dim strPath As String strPath = Application.ThisWorkbook.Path
Dim rsProdukter As ADODB.Recordset Set rsProdukter = New ADODB.Recordset rsProdukter.Open Source:="[Customer Forespørgsel]", ActiveConnection:="Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & strPath & "\xxx.accdb", CursorType:=adOpenStatic, LockType:=adLockOptimistic, Options:=adCmdTable With Worksheets("Ark1") .Range("A1").CurrentRegion.Clear Application.Intersect(.Range(.Rows(1), .Rows(rsProdukter.RecordCount)), .Range(.Columns(1), .Columns(rsProdukter.Fields.Count))).Value = MinTransponer(rsProdukter.GetRows(rsProdukter.RecordCount)) End With
Er det : cnnProdukt.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath & "\xxx.accdb"
rstProdukt.Open "Select Customer from [Customer Forespørgsel]", cnnProdukt, adOpenKeyset, adLockOptimistic, adCmdText
Denne der kun tager 1 sek hos dig?
Har du en forbindelse til Access. Jeg har Customer Forespørgsel med 5 Tabel. I Access tager det nul tid at vise. Samme forespørgsel ca 1 sek på et helt Excel ark med nr 2 ADO forbindelse. Hvad er der galt med den 1. ADO forbindelse?
Sæt breakpoints for at lokalisere hvor tidsrøveren er. Umildbart har jeg selv haft problemer med ado forbindelser hvor .open property tog ca. tog 5 sek. Brug eventuelt debug.print now() til at få udlæsninger af programmets scantid
Jeg kan ikke få det sat op i hastighed. Jeg vil bede jer holde fast i mit første spørgsmål:
Kan denne forbindelse laves så den kun tager en colone fra start til EOF. Og vil den så være hurtigere. Her er koderne:
Dim strPath As String strPath = Application.ThisWorkbook.Path
Dim rsProdukter As ADODB.Recordset Set rsProdukter = New ADODB.Recordset rsProdukter.Open Source:="[Customer Forespørgsel]", ActiveConnection:="Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & strPath & "\xxx.accdb", CursorType:=adOpenStatic, LockType:=adLockOptimistic, Options:=adCmdTable With Worksheets("Ark1") .Range("A1").CurrentRegion.Clear Application.Intersect(.Range(.Rows(1), .Rows(rsProdukter.RecordCount)), .Range(.Columns(1), .Columns(rsProdukter.Fields.Count))).Value = MinTransponer(rsProdukter.GetRows(rsProdukter.RecordCount)) End With
Dim cnnProdukt As New ADODB.Connection Dim rstProdukt As New ADODB.Recordset cnnProdukt.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath & "\xxx.accdb"
rstProdukt.Open "Select Customer from [Customer Forespørgsel]", cnnProdukt, adOpenKeyset, adLockOptimistic, adCmdText
Det tager ca 15 sek at åbne - MEN åbnes Workbook2 alene uden kald fra Workbook1 tager det 0-1 sek ???????
Altså Workbook1 SPÆRRER. Jeg tror det er noget med måden DB åbnes på. Kan i hjælpe med en løsning.
Spørgsmålet har ændret karakter så jeg lukker og opretter på ny
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.