[VB + ACCESS] INSERT statement traag

Pagina: 1
Acties:

  • akakiwi
  • Registratie: September 2000
  • Laatst online: 20-03 11:13

akakiwi

I believe in the ruling class.

Topicstarter
Goede morgen,

Ik ben in Visual Studio een applicatie aan het ontwikkelen. Het gaat om een tool waarin zonder internetverbinding bestanden (*.doc, *.exe, *.xls, e.d.) gepubliseerd kunnen worden. Wanneer een gebruiker verbinding heeft met internet moet de tool inloggen op de database (T-SQL) van de applicatie die online draait en alle lokale data (ACCESS DB) naar de online database transporteren.
Dat exporteren van het lokale systeem naar het remote online systeem gaat gewoon snel.
Vice versa is een ander verhaal. Wanneer ik van de SQL-server 3000 regels opvraag en deze INSERT in de lokale ACCESS database, resulteerd dat in een wachttijd van ruim 5 minuten. Dat is natuurlijk niet acceptabel en ik ben op zoek naar een manier om sneller data van de SQL server in de lokale ACCESS database te pompen.

Misschien nog makkelijk om te weten dat de 3000 regels die geINSERT moeten worden verdeeld worden over 12 tabellen en dat deze data afhankelijk is van de rechten die de gebruiker heeft.

Alvast bedankt. :)
edit:

Ik vind net iets over het invoegen van een tekstebestand in een database. Ben er nog niet uit hoe het werkt, maar misschien is dit een mogelijke oplossing voor mijn probleem.

[ Voor 11% gewijzigd door akakiwi op 13-05-2003 08:44 . Reden: extra info ]

| Life is a game (and games are fun) | homepage |


Verwijderd

Kun je wat code geven en iets meer uitleggen over de tabellen structuur? Nu is het een beetje koffiedik kijken, en dat op een tijdstip dat ik liever koffie drink.

Verwijderd

Kijk dan ook gelijk even naar je indexen. En geef die ook maar gelijk mee. Als je namelijk indexen heb staan op de meest onzinnige plaatsen dan zal het inserten ook niet echt sneller verlopen....

  • akakiwi
  • Registratie: September 2000
  • Laatst online: 20-03 11:13

akakiwi

I believe in the ruling class.

Topicstarter
De code en tabellen maken volgens mij niet zoveel uit, maar vooruit. ;)
Wat de code eigenlijk doet is het volgende.
ASP:
1
2
3
4
5
6
7
8
9
10
11
while not oRs.EOF
  sSQL = "INSERT INTO TBL_Teams VALUES(" & oRs(0) & ", " & oRs(1) & ", " & oRs(2) & ")"
  fnSaveRS(sSQL)
  oRs.movenext
wend

sub fnSaveRS(sSQL)
  oConn.open sConn
  oConn.execute sSQL
  oConn.close
end sub


TBL_Teams
------------------------------
Id, Name, OwnerUserId, DefaultSearchProfile, IsDeleted
number, text, number, number, yes/no

Volgens mij maakt het niet uit of er indexen in de database zitten.
Een index is toch alleen makelijk wanneer je een SELECT, UPDATE of DELETE uitvoert?

| Life is a game (and games are fun) | homepage |


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

akakiwi schreef op 13 May 2003 @ 14:57:
De code en tabellen maken volgens mij niet zoveel uit, maar vooruit. ;)
Wat de code eigenlijk doet is het volgende.
ASP:
1
2
3
4
5
6
7
8
9
10
11
while not oRs.EOF
  sSQL = "INSERT INTO TBL_Teams VALUES(" & oRs(0) & ", " & oRs(1) & ", " & oRs(2) & ")"
  fnSaveRS(sSQL)
  oRs.movenext
wend

sub fnSaveRS(sSQL)
  oConn.open sConn
  oConn.execute sSQL
  oConn.close
end sub


TBL_Teams
------------------------------
Id, Name, OwnerUserId, DefaultSearchProfile, IsDeleted
number, text, number, number, yes/no

Volgens mij maakt het niet uit of er indexen in de database zitten.
Een index is toch alleen makelijk wanneer je een SELECT, UPDATE of DELETE uitvoert?
Ja eeuh .. je performance probleem zit hem dat je bij elke save de connectie opent en weer dicht doet.. en dat 3000 keer zeg je.. met inlog van account ( zit niet in je save sub btw... :? ) tja eeuh.. dat gaat veel tijd kosten he.. zowiezo dus voor die while wend lus.. (bah.. vieze lussen.. ;) ) een connectie open.. en op het einde dus closen..
en dus de save sub wordt niet meer dan :
code:
1
2
3
sub fnSaveRS(sSQL)
  oConn.execute sSQL 
end sub

[ Voor 13% gewijzigd door henkleerssen op 13-05-2003 15:06 ]


  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

die while lus kun je waarschijnlijk voorkomen door "SELECT INTO" te doen ;)

kaart != map && bottel != fles
Wacht op antwoord


Verwijderd

Connection pooling staat volgens mij std. uit voor de access driver... dus of connection pooling aanzetten of connection open/close buiten loop zetten

  • akakiwi
  • Registratie: September 2000
  • Laatst online: 20-03 11:13

akakiwi

I believe in the ruling class.

Topicstarter
Bedankt voor de feedback.

Ik heb het nu als volgt opgelost.
Linked tables aangemaakt die naar een tekstbestand wijzen.
Wanneer er een update plaatsvind worden alleen de tekstbestanden vervangen en worden er op de echte tabellen
"INSERT INTO TBL_DocTemplateProperties
SELECT TXT_DocTemplateProperties.*
FROM TXT_DocTemplateProperties;"

gedaan. Daar doet ie 10 seconden over dus dat is snel zat.
dank je wel iig.

| Life is a game (and games are fun) | homepage |

Pagina: 1