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


Långsamt med ADO!!!

Postades av 2002-06-11 22:56:44 - Torbjörn Karlberg, i forum databaser, Tråden har 14 Kommentarer och lästs av 813 personer

Hej
Jag håller på att lära mig databas hantering med ADO men tycker att det går sämre med ADO än med gammla DAO.

Om jag kör det här så tar det några långsama sekunder extra med ADO.

Dim rs As New ADODB.Recordset
Dim DB As ADODB.Connection
Set DB = New ADODB.Connection

rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic

DB.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source= '" & FrmDataLoc.Text1(0).Text & "' ;Persist Security Info=False"

DB.Open

rs.Source = ("select(MODELL),(NAMN),(ADRESS1),(POSTNUMMER),(POSTADRESS),(BRUKARE),(TELEFON),(ID) from GRUND where REG_NUMMER ='" & txtRegnr(0).Text & "'")

Set rs.ActiveConnection = DB
rs.Open

Do Until rs.EOF
Text1(1).Text = rs!MODELL & vbNullString
Text1(2).Text = rs!Namn & vbNullString
Text1(3).Text = rs!ADRESS1 & vbNullString
Text1(4).Text = rs!Postnummer & vbNullString
Text1(5).Text = rs!Postadress & vbNullString
Text1(6).Text = rs!BRUKARE & vbNullString
Text1(7).Text = rs!TELEFON & vbNullString
Text1(8).Text = rs!Id & vbNullString
rs.MoveNext
Loop

Vad gör jag för fel ?

Jag kör mot en Access databas i ett nätverk.

Hälsningar
Tobbe


Svara

Sv: Långsamt med ADO!!!

Postades av 2002-06-12 10:51:50 - Andreas Hillqvist

Testa Istället:

Dim strSQL as String
Dim rs As ADODB.Recordset
Dim DB As ADODB.Connection

Set DB = New ADODB.Connection

DB.Open "Provider=Microsoft.Jet.OLEDB.3.51;Data Source= '" & FrmDataLoc.Text1(0).Text & "' ;Persist Security Info=False"


strSQL = "SELECT [MODELL], [NAMN], [ADRESS1], [POSTNUMMER], [POSTADRESS], [BRUKARE], [TELEFON], [ID]" & vbCrLf & _
"FROM [GRUND]" & vbCrLf & _
"WHERE [REG_NUMMER] ='" & txtRegnr(0).Text & "'"

Set rs = New ADODB.Recordset
rs.Open strSQL, DB

Do Until rs.EOF
Text1(1).Text = rs!MODELL & vbNullString
Text1(2).Text = rs!Namn & vbNullString
Text1(3).Text = rs!ADRESS1 & vbNullString
Text1(4).Text = rs!Postnummer & vbNullString
Text1(5).Text = rs!Postadress & vbNullString
Text1(6).Text = rs!BRUKARE & vbNullString
Text1(7).Text = rs!TELEFON & vbNullString
Text1(8).Text = rs!Id & vbNullString
rs.MoveNext
Loop


Svara

Sv: Långsamt med ADO!!!

Postades av 2002-06-12 22:45:01 - Torbjörn Karlberg

Hej Andreas
Jag testade din kod men då verkar inte rs.recordcount funka
t.ex
If KeyAscii = 13 Then
MousePointer = vbHourglass

Dim strSQL As String
Dim rs As ADODB.Recordset
Dim db As ADODB.Connection

Set db = New ADODB.Connection

db.Open "Provider=Microsoft.Jet.OLEDB.3.51;Data Source='" & FrmDataLoc.Text1(1).Text & "';Jet OLEDB:Database Password=XXXX"

strSQL = "SELECT [Namn] FROM [EmplID] where [EmplId] = '" & txtLogon.Text & "'"
Set rs = New ADODB.Recordset
rs.Open strSQL, db

Do Until rs.EOF
LblUser.Caption = "Välkommen" & " " & rs!Namn & vbNullString
rs.MoveNext
Loop

If rs.RecordCount < 1 Then

rs.Close
db.Close
Set rs = Nothing
Set db = Nothing

LblUser.Caption = "Fel användar identitet eller så saknas användaren försök igen ?"
txtLogon.SetFocus
txtLogon.SelStart = 0
txtLogon.SelLength = Len(txtLogon.Text)
MousePointer = vbNormal

Else
Combo1.Enabled = True
Combo1.SetFocus

End If
End If
MousePointer = vbNormal
Exit Sub

Funkade med min gammla kod. Skall man ändra på re.recordcout ?

Hälsningar
Tobbe


Svara

Sv: Långsamt med ADO!!!

Postades av 2002-06-13 00:55:45 - Andreas Hillqvist

Tycker din kod är lite skum:<br>
* Varför lopar du igenom recordsetet?<br>
* Varför stänger du bara objekten om inlogning misslyckades?
Jag skulle vilja ändradet till:
<code>
Dim strSQL As String
Dim rs As ADODB.Recordset
Dim db As ADODB.Connection

If KeyAscii = 13 Then
MousePointer = vbHourglass

Set db = New ADODB.Connection

db.Open "Provider=Microsoft.Jet.OLEDB.3.51;Data Source='" & FrmDataLoc.Text1(1).Text & "';Jet OLEDB:Database Password=XXXX"

strSQL = "SELECT [Namn] FROM [EmplID] where [EmplId] = '" & txtLogon.Text & "'"

Set rs = New ADODB.Recordset
rs.Open strSQL, db

If rs.EOF Then
LblUser.Caption = "Fel användar identitet eller så saknas användaren försök igen ?"
Combo1.Enabled = False
txtLogon.SetFocus
txtLogon.SelStart = 0
txtLogon.SelLength = Len(txtLogon.Text)
Else
LblUser.Caption = "Välkommen " & rs!Namn
Combo1.Enabled = True
Combo1.SetFocus
End If
rs.Close
Set rs = Nothing

db.Close
Set db = Nothing

MousePointer = vbNormal
End If
</code>
Svar på din fråga är: Visa cursor känner inte till antalet poster i ett recordset. Det retunerar då RecordCount = 0 om inga poster finns eller RecordCount = -1 om poster finns. Deta gäller för t.ex en ForwardOnly Cursor. Man kan komma runt detta genom att t.ex använda cursor på clienten istället för servern vilket är standard.


Svara

Sv: Långsamt med ADO!!!

Postades av 2002-06-13 22:47:46 - Torbjörn Karlberg

Hej & tack

Jag testade din kod och det verkar som det går både smidigare och snabbare skall testa i nätverket i morgon.

Men det där med rs.recordcount låter inte bra, hur ska man få reda på hur många poster det finns t,ex med samma datum eller tider.

Vad min skumma kod kommer i från vet jag inte förmodligen ett hopkok från pellesoft.nu´s forum och div böcker !!!!!.

Hälsningar
Tobbe


Svara

Sv: Långsamt med ADO!!!

Postades av 2002-06-14 08:29:45 - Emma Magnusson

Förslagsvis via en query i sql eller sammanräkning efter att du läst ut din
data i variabler...

/Emma


Svara

Sv: Långsamt med ADO!!!

Postades av 2002-06-14 14:57:37 - Raderat konto

DAO är i regel mycket snabbare än ADO mot JET och Access-databaser just därför att DAO är utvecklat för att fungera bra mot Access medan ADO är en teknik som innehåller mycket mer funktionalitet och är mer flexibel och därmed långsammare mot Access. De förändringar du kan göra rent kodmässigt kommer inte att ge samma prestanda som samma kod med DAO ger.


Svara

Sv: Långsamt med ADO!!!

Postades av 2002-06-14 15:25:36 - Torbjörn Karlberg

Hej

Tack då fick man svaret på mitt problem.

Tobbe


Svara

Sv: Långsamt med ADO!!!

Postades av 2002-06-16 14:14:21 - Patrik Berggren

du använder dig av en "gammal" jet driver. Tycker att du borde uppdatera till nyaste versionen av JET (inkl. sp).
Så istället för att köra:

Provider=Microsoft.Jet.OLEDB.3.51;

borde du köra:

Provider=Microsoft.Jet.OLEDB.4.0;

som är en bättre, säkrare och snabbare än 3.51

Det med att inte recordcount funkar beror på att du öppnar recordsetet med default värden för hur cursortype och locktype. Du får säkerligen tillbaka -1 som det nu är öppnat.

du borde öppna recordsetet på detta viset:

rs.Open strSQL, db, 1, 3

för att recordcount m.m ska kunna funka.

För att kunna öka prestandan mer så kan man "spara" recordsetet på client-sidan (disconnected recordset)

Testa skapandet av recordsetet på detta viset:

Set rs = New ADODB.Recordset
Wtih rs
.ActiveConnection = db
.Source = strSQL
.CursorLocation = adUseClient
.CursorType = 1
.LockType = 3
.Open
.ActiveConnection = Nothing
End With

vill man inte räkna hur många poster som returneras, inga behov att uppdatera recordsetet så bör CursorType vara = 0 och LockType = 1

cya,
PatrikB


Svara

Sv: Långsamt med ADO!!!

Postades av 2002-06-17 15:34:13 - Patrik Löwendahl

DAO använder sig dirket av ODBC medans ADO använder sig av OLE DB ... om man kör dirket med OLE DB kan du få mycket bättre prestanda än med DAO.. hoppa dessutom över att skriva rs!fält .. använd istället rs.fields("fält").value eller explicita fält objekt .. då har inte dao en chans


Svara

Sv: Långsamt med ADO!!!

Postades av 2002-06-17 16:56:29 - Andreas Hillqvist

Lite synpunkter på din kod:<br>
* With satsen har ingen funktion ur prestanda synpunkt i detta fallet.<br>
* Minska antalet procedur anrop genom att använda open metoden. Ger bättre prestande helst när det gäller "out of process" anrop(t.ex word eller excel).<br>
* Namngivna konstaner är mer lätt lästa.<br>
<br>
Om man vill skapa ett uppdaterbart "Disconnected recordset" bör man använda adLockBatchOptimistic låsning.<br>
<br>
Skrivskyddat recordset:
<code>
Dim strSQL As String
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open strSQL, db, adOpenStatic, adLockReadOnly
Set rs.ActiveConnection = Nothing
</code>
<br>
Uppdaterbart recordset:
<code>
Dim strSQL As String
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open strSQL, db, adOpenKeyset, adLockBatchOptimistic
Set rs.ActiveConnection = Nothing
</code>


Svara

Sv: Långsamt med ADO!!!

Postades av 2002-06-17 17:14:35 - Martin Nyman

Om man bortser från defakto att man inte kan hitta på en bra anlednign att öppna ett rs som uppdaterbart om man inte skall uppdatera det så har jag en fråga:

Är det ngn prestandaskillnad på ett uppdaterbart resp skrivskyddat rs?


Svara

Sv: Långsamt med ADO!!!

Postades av 2002-06-17 21:02:41 - Andreas Hillqvist

Uppdaterbart kräver mer resurser. Så man bör undvika det om man inte behöver det.


Svara

Sv: Långsamt med ADO!!!

Postades av 2002-06-18 00:20:42 - Torbjörn Karlberg

Hej

Ms Jet 4,0 funkar den bättre mot Access97 än MS Jet 3.51 det var någon som sa att den är långsammare än 3.51 p.g.a att den laddar mera onödiga saker som en vanlig vb mot access97 inte behöver.?????


Tobbe




Svara

Sv: Långsamt med ADO!!!

Postades av 2002-06-18 14:52:54 - Raderat konto

Frågan är vad du bygger ditt påstående på om att DAO inte har en chans......DAO var designat helt för JET-motorn och har enligt mina egna tester betydligt bättre prestanda mot Access-databaser med JET-motorn än vad ADO har genom OLE DB. Eftersom frågan från början handlade om en Access-databas så kan jag inte ur prestandasynpunkt råda honom att använda ADO framför DAO. Det är dock så att ADO är en nyare teknik som är mer flexibel och inte bunden till JET-motorn utan är avsedd att användas mot en mängd olika datakällor. Om det inte finns något behov för att kunna ta del av ADO:s generellt utökade funktionalitet skulle jag ur prestandasynpunkt använda DAO.


Svara

Nyligen

  • 17:03 Getmancar your go-to carsharing
  • 14:07 Games
  • 17:54 Vegastars New Zealand
  • 16:56 Verde Casino Danmark
  • 13:54 Vegastars: Top Australian Online C
  • 21:28 Chicken Road Casino Game
  • 21:21 1xBet Promo Code 2025
  • 18:37 Remove the bumper in AUDI

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 986
27 965
271 785
851
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