Jag är rätt grön på ADO så har en enkel(tror jag) fråga, Jag vill lägga till poster, i en tabell, men Jag får ett felmeddelandet. det är iof möjligt att Hela koden ä fuxxor... hur skall jag göra helt enkelt... Du kan inte använda Execute metoden i detta fallet. Efterson den skapar ett recordset som är ForwardOnly och Readonly. Wow, det hjälpte en hel del det. Tack hmm, lite strul ble det... 1, 2 - Connection strängen: Vill lägga till poster i en databas men den vägrar...
FELMEDDELANDE:
"Rowset does not support fetching backward."
KOD:
Private Sub Command3_Click()
Dim Connection1 As New ADODB.Connection
Dim DataBase1 As New ADODB.Recordset
Dim ConnectionString As String
ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=D:\Visual basic Programs\Database Test 2\Testbase1.mdb;" & _
"DefaultDir=C:\;" & _
"Uid=Admin;Pwd=;"
Connection1.Open ConnectionString
ConnectionString = "SELECT * FROM tabell1"
Set DataBase1 = Connection1.Execute(ConnectionString)
DataBase1.MoveLast
DataBase1.AddNew
DataBase1.Close
Connection1.Close
End SubSv: Vill lägga till poster i en databas men den vägrar...
Använd istället Open metoden:
<code>
Private Sub Command3_Click()
Dim Conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim ConnectionString As String
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source= D:\Visual basic Programs\Database Test 2\Testbase1.mdb;"
Set Conn = New ADODB.Connection
Conn.Open ConnectionString
Set rs = New ADODB.Recordset
rs.Open "SELECT * FROM tabell1", Conn, adOpenKeyset, adLockOptimistic
rs.AddNew
'rs("Fältnamn") = "Ditt värde"
rs.Update
rs.Close
Conn.Close
End Sub
</code>Sv: Vill lägga till poster i en databas men den vägrar...
vill gärna ställa nåra följd frågor, om det går bra.
Det är ju en del skilnader i din kod gentemot min i övrigt oxo. det verkar som dom flesta exempel följer din typ av kod, kan du snabbt förklara fördelarna/skillnaderna med:
1)
"Provider=Microsoft.Jet.OLEDB.4.0;" vs "Driver={Microsoft Access Driver (*.mdb)};"
2)
"Data Source= D:\Visual basic Programs\Database Test 2\Testbase1.mdb;" vs "Dbq=D:\Visual basic Programs\Database Test 2\Testbase1.mdb;"
3) SET vs OPEN. (hämntar bara SET data, medans OPEN skapar en kopling till databasen...eller ?) är det ena elelr andra mer kapacitets krävande (minne/process).
4) att deklarera ADODB kopplingen och recordsetet som "new" direkt (som jag gjort) och att göra det senare (som du). (verkar ha nåt med SET vs OPEN att göra...
I vilket fall som helst verkar det mest funka bättre på ditt vis :)
Tack igenSv: Vill lägga till poster i en databas men den vägrar...
EXECUTE vs OPEN måste det nog vara :/
5)
vad innebär "adOpenKeyset, adLockOptimistic", dom verkar ju vara null värderade... Sv: Vill lägga till poster i en databas men den vägrar...
ADO är gränssnittet för att kommunicera med OLEDB Providerns som läser och skriver till databasen. Jag använder mig av OLEDB providern för Jet vilket arbetar direkt mot accessfilen. Du använder dig av ODBC drivrutinen vilket innebär att ADO måste arbeta mot en OLEDB drivrutin för ODBC som arbetar mot din databas.
3, 5 - Skapa och öppna ett recordset:
Execut metoden skapar en ny instans av ett recordset och öppnar den med angiven källa. Du kan inte ange vilken typ av cursoer eller någon ytterligare egenskap.
Det är därför en fördel att själv skapa en instans. Du kan ange vilken cursor den ska ha. adOpenKeyset är en updaterbar cursor som är resursnålar än adOpenDynamic.
Du kan dessutom återanvända en instans av ett recordset genom att stänga det och öppna det med en annan radkälla.
adOpenKeyset är en konstant som är deklarerade i ADODB biblioteket. Den har värdet 1. adLockOptimistic är likaså en konstant med värdet 3.
Vilket anger att den skall bara låsa posten först när recorsdsetet anropar Update-metoden.
4 - Instanisera objekt:
I VB 5 & 6 innebär att deklarera en variabels som new. Att den instansieras om den är nothing och man anropar den. Deta får till konsekvensa att en kontroll måste göras för varje anrop. Vilket gör det lite långsamare att anropa objektets medlemmar.Det är inte så nämnvärt. Men det är då bätre att instansiera det för egenhand. Eftersom man då får mer kontroll.
Detta betende har dock ändrats under VB.NET då en ny instans tilldelas till objektet när den har deklarerats. Och kontrollen har tagits bort.