Jag är tyvärr ingen hejsare på Access och databser men försöker efter bästa förmåga. >Om jag vill ha redigerbara så lägger jag bara till "adOpenKeyset, adLockOptimisstic" Sök inte ut mer fält än du behöver Ett annan viktig aspekt att ta hänsyn till om man vill ha snabba svar är hur man refererar till de fält som du hämtat till recordsetet Detta är bara en skurk i stora loopar.Om man bara hämtar enstaka poster så är inte vinsten så stor. Synpunkter !?
Har ett antal programsekvenser nedan med connections och recordsets som jag skulle vilja ha synpunkter på. Vad jag strävar efter liksom dom flesta är att uppnå en så bra prestanda som möjligt, kanske jag använder helt fel teknik !?
Noteras bör att ca: 6 användare jobbar mot samma baser sammtidigt !
Jobbar i VB6 och Access.
Följande använder jag som connection.
<code>
Sub DataOrder()
Dim con As New ADODB.Connection 'öppnar allmän grunddata
constr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & strSökväg & "Order.mdb"
con.ConnectionString = constr
con.Open constr
Set conOrderdata = con
End Sub
</code>
Följande är ett recordset för rak enkel läsning.
<code>
rst.Open "SELECT * FROM tblTillbehor " & _
"WHERE ordernr = " & lngOrdernummer & " ORDER BY Pos", conOrderdata
</code>
Om jag vill ha redigerbara så lägger jag bara till "adOpenKeyset, adLockOptimisstic"
Kan man göra detta på ett annat och bättre sätt vad gäller prestanda och delningsmässiga aspekter !?
Och en följdfråga ...
Nu kör jag rakt emot en antal accessdatabaser, när bör man använda MySql eller SQL-server ?
/kom med synpunkter !Sv: Synpunkter !?
Ett alternativ till redigerbara recordsets är att köra sql-satser som skapar, redigerar och tar bort poster (INSERT INTO, UPDATE, DELETE). Det blir lite snabbare, men troligtvis inte märkbart i ditt fall.
>Nu kör jag rakt emot en antal accessdatabaser, när bör man använda MySql
>eller SQL-server ?
Ett enkelt svar: När det går _för_ långsamt. När det kommer inträffa är oerhört svårt att säga, det beror på så många olika saker.
/JohanSv: Synpunkter !?
Iofs kanske du vill ha alla fälten (select *), men behöver du inte alla fält är det ju onödigt att skicka med mer data i "ledningen" än vad som behövs.
(Select field1, field2 from table)Sv: Synpunkter !?
Enligt artikel som jag läst kan man nå "stora" tidsvinster genom att referera till columnens relativa plats och inte till fältnamnet.
Ex med sql satsen
<code>
rst = SELECT namn from tblNamn
a = rst(0) 'är 3 ggr snabbare än
a = rst("namn")
</code>
/JohnSv: Synpunkter !?
Man tjäna mer på att deklarera fält variabler än at använda index:
<code>
Dim fldNamn As ADODB.Field
rs.Open "SELECT namn from tblNamn", Conn
Set fldNamn = rs("namn")
Do Until rs.EOF
Debug.Print fldNamn.Value
rs.MoveNext
Loop
</code>
Detta är snabbare än att anropa rs(0) vilket egentligen motsvarar:
<code>
Debug.Print rs.Fiels.Item(0).Value
Debug.Print rs.Fiels.Item("namn").Value
</code>
Med fältvariabler slipper du, i loopen, slå upp fältet ur Fields:
<code>
Debug.Print fldNamn.Value
</code>