Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Slippa öppna ett recordset så många gånger.

Postades av 2005-12-14 14:52:41 - Johan Eriksson, i forum visual basic - allmänt, Tråden har 13 Kommentarer och lästs av 765 personer

Hej

Koden nedanför har gått bra enstund, dock börjar databasarna bli så pass stora nu så nu går det jättesegt.

Do while RecSet.EOF

nummer = RecSet("nummer")

RecEXL.Open "Select * From [status$] where nummer='" & nummer & "'", ConnEXL

hej = RecEXL("hej")

strUpdate "Update sRex Set hej='" & hej & "' where nummer='" & nummer & "'"
Update.Open strUpdate, Conn, adOpenStatic, adLockOptimistic

RecSet.movenext
loop



Om vi säger att det finns 25000 poster i RecEXL och 10000 poster i RecSet så kanske ni förstår att det börjar gå segt :) RecEXL är ett Exceldokument kanske ska tilläggas.

Finns det något bättre sätt att göra det här på? Funderar på om man ska lägga allt i en sträng sen leta igenom den med hjälp utav instr() och mid().

Det är dock inte bara en parameter som jag ska skicka över utan ca 15st så det kan vara jobbigt och lägga allt i en sträng också.

Jag ska alltså föraöver information från exceldokumentet till Access-databasen där 'nummer' är lika


Svara

Sv: Slippa öppna ett recordset så många gånger.

Postades av 2005-12-14 15:26:08 - Martin Adrian

Sortera båda och loopa i båda på en gång

(Är inte så bra på VB men du förstår principen)
<code=vb>
recexl.open "Select * From [status$] Sort By nummer"
recset.open "Select * From sRex Sort By nummer"

do while not recSet.eof
do while not recexl.eof and recexl("nummer") < recset("nummer")
recexl.movenext
loop
if recexl.eof then goto klart
if recexl("nummer) = recset("nummer") then
recset("hej") = recexl("hej")
...
recset.update
end if
recset.movenext
loop
</code>


Svara

Sv:Slippa öppna ett recordset så många gånger.

Postades av 2005-12-14 15:30:59 - Johan Eriksson

Tyvärr fungerar inte det då nummer inte bara är nummer om man säger så. Det kan stå ex, 3ert45df333 eller dylikt.


Svara

Sv: Slippa öppna ett recordset så många gånger.

Postades av 2005-12-14 15:57:20 - Jenny Månsson

Något sådant här i en enda update sats istället för att jobba med datan i koden
<code>update sRex SET hej = (select hej from [status$] where nummer='" & nummer & "') where nummer='" & nummer & "'"</code>


Svara

Sv: Slippa öppna ett recordset så många gånger.

Postades av 2005-12-14 16:14:26 - Martin Adrian

>Tyvärr fungerar inte det då nummer inte bara är nummer om man säger så. Det kan stå ex, 3ert45df333 eller dylikt.

Det går väl att sortera på fältet iallafall?


Svara

Sv: Slippa öppna ett recordset så många gånger.

Postades av 2005-12-14 18:02:40 - Andreas Hillqvist

Varför öppnar/länkar excel arket i access?

Då kan du köra en fråga:

Dim strSQL As String
Dim RecordsAffected As Long
Dim con As ADODB.Connection
    strSQL = "UPDATE (SELECT *" + vbCrLf + _
             "FROM sRex INNER JOIN " + vbCrLf + _
             "    [Excel 5.0;" + vbCrLf + _
             "     HDR=YES;" + vbCrLf + _
             "     IMEX=2;" + vbCrLf + _
             "     DATABASE=D:\My documents\Book1.xls].[status$] As Exl ON sRex.nummer =  Exl.nummer)" + vbCrLf + _
             "SET sRex.hej = Exl.Hej;"
    Set con = CurrentProject.Connection
    con.Execute strSQL, RecordsAffected
    
    MsgBox "Du har uppdaterat " & RecordsAffected & " poster!"


Svara

Sv:Slippa öppna ett recordset så många gånger.

Postades av 2005-12-15 08:20:51 - Johan Eriksson

Det står: "PM, OLE eller hyperlänkobject (sRex.nummer=EXL.nummer) är inte tillåtet i kopplingar."


Aha, nu förstår jag, tog ett tag där :)


Svara

Sv: Slippa öppna ett recordset så många gånger.

Postades av 2005-12-15 09:53:09 - Andreas Hillqvist

Har du löst det?


Svara

Sv:Slippa öppna ett recordset så många gånger.

Postades av 2005-12-15 10:02:53 - Johan Eriksson

Ja, det var ju bara att jag hade nummer som PM i databasen.

Hittills har det fungera utmärkt. går snabbt och bra men, kan jag använda sum-funktionen samt group by på exceldokumentet nu? Hittar inga exempel på msdn om det.

 
[nummer], SUM([summa]) as skuld From [status$] GROUP BY [nummer]", Conn


Men, om inte annat borde det gå att vända på det så man öppnar exceldokumentet först sen databasen i inner join?


Svara

Sv: Slippa öppna ett recordset så många gånger.

Postades av 2005-12-15 12:14:07 - Andreas Hillqvist

Om du öppnar anslutningen i access, som jag visade, har du samma möjligheter att skriva sql frågor.

strSQL = "SELECT [status$].[nummer], SUM([status$].[summa]) as skuld " + vbCrLf + _
             "FROM [Excel 5.0;" + vbCrLf + _
             "     HDR=YES;" + vbCrLf + _
             "     IMEX=2;" + vbCrLf + _
             "     DATABASE=D:\My documents\Book1.xls].[status$]" + vbCrLf + _
             "GROUP BY [status$].[nummer];"


Svara

Sv:Slippa öppna ett recordset så många gånger.

Postades av 2005-12-15 12:57:08 - Johan Eriksson

Jag får det då f*n inte å fungera :)


strSQL = "UPDATE (SELECT *" + vbCrLf + _
             "     FROM sRex INNER JOIN " + vbCrLf + _
             "     SELECT [status$].[nummer], SUM([status$].[nummer2]) as skuld " + vbCrLf + _
             "     FROM [Excel 5.0;" + vbCrLf + _
             "     HDR=YES;" + vbCrLf + _
             "     IMEX=2;" + vbCrLf + _
             "     DATABASE=" & App.Path & "" + vbCrLf + _
             "     /status.xls].[status$] as EXL" + vbCrLf + _
             "     ON sRex.personnummer = EXL.nummer)" + vbCrLf + _
             "     SET sRex.ihopskuld = Exl.nummer2;"




Nu klagar den på att det finns sytaxfel i From-instruktion istället :)


Svara

Sv: Slippa öppna ett recordset så många gånger.

Postades av 2005-12-15 13:31:18 - Andreas Hillqvist

Tyvärr kan blir int frågan uppdaterbar om du joinar den med en icke uppdaterbar fråga. Vilket din summerande fråga är.

Följande kod skiljer sig på den punkt att den uppdaterar samtliga personer. Inte endast de i exelfilen:

strSQL = "UPDATE sRex SET sRex.ihopskuld = (SELECT SUM([status$].[nummer2]) as skuld " + vbCrLf + _
             "         FROM [Excel 5.0;" + vbCrLf + _
             "         HDR=YES;" + vbCrLf + _
             "         IMEX=2;" + vbCrLf + _
             "         DATABASE=" & App.Path & "/status.xls].[status$]" + vbCrLf + _
             "      WHERE [status$].[nummer] = sRex.personnummer)" + vbCrLf 

Det kan du ju lösa med att lägga till en IN. Mend då tycker jag frågan blir att för komplex.

Jag rekomenderar:
* Skapa en temporär tabell för summerade värden i din access databas.
* Importera värdena dit från excel.
* Uppdatera din riktiga tabbel med en join mot temporärtabellen.


Svara

Sv:Slippa öppna ett recordset så många gånger.

Postades av 2005-12-15 15:12:44 - Johan Eriksson

Okej, aja, tror jag fått ordning på det mesta nu.

Tack Andreas!


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 722
27 958
271 751
392
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies