Nije mi bas jasno iz posta sta zelis da postignes i kako, odnosno sam dizajn baze mi je malo nejasan.
Ovako kako vidim:
Code:
command.connection="OleDBConnecioq"
Ne. Ovim si pridruzio STRING a ocekuje se referenca na Connection objekt.
Code:
command.connection = OleDbConnection1
ce odraditi posao ako ti je to ime koneksn objekta.
Dalje, nema sta da koristis Stored Procedure, ako vec koristis INSERT izraz. Stored procedure je nesto kao rutina koju napises u samoj bazi pa je onda pozivas iz svog programa. Potpuno druga stvar. Imaju mnogo prednosti i svakako ces ih koristiti kad malo savladas ove pocetne stvari :)
I trece, naravno tip podataka mora da se poklapa sa onim u bazi.
Da vidimo mi kako bi to sve trebalo da izgleda:
Code:
Dim strSQLInsert = "INSERT INTO Table1(Name) VALUES (@parametar1)"
Dim strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data " & _
"source=x:\temp\db1.mdb;"
Dim param As OleDbParameter
Dim rowsAffected As Integer
Dim conn As OleDbConnection = New OleDbConnection(strConnection)
Dim cmd As OleDbCommand = New OleDbCommand(strSQLInsert, conn)
param = New OleDbParameter("@parametar1", OleDbType.VarWChar)
param.Value = "pera"
cmd.Parameters.Add(param)
Try
conn.Open()
rowsAffected = cmd.ExecuteNonQuery()
MsgBox("Rows affected: " & rowsAffected.ToString)
Catch ex As OleDbException
MsgBox(ex.Message)
Finally
conn.Close()
End Try
Elem, ovo radi AKO ti je polje BROJ auto-increment, pa onda kako sam ti i napisao u prethodnom postu ne moras da nista prosledjujes u to polje, DB ce to sam da odradi.
Napominjem da je zaista pametno :))) koristiti SEH (structured error handling) - try-catch-finally-end try. Zasto? Pa nikad ne znas da li ce problem da se pojavi, a ako ces da ides pomocu command objekta, onda ovako uvek osiguras da je konekcija zatvorena blokom FINALLY koji se uvek izvrsava. UVEK je zatvori nakon rada sa bazom da bi smanjio opterecenje servera. Upravo zato se i koriste Dataset objekti, kada se pomocu adaptera automatski stvara i prekida veza sa bazom, pa ne moras da brines o tome.
Ako bi recimo imao vise kolona u tabeli koje hoces da popunis onda bi imao:
Code:
Dim strSQLInsert = "INSERT INTO Table1(polje1,polje2,polje3) VALUES (@parametar1, @parametar2, @parametar3)"
Naravno da mozes i da koristis razumljivija imena kao @Ime, @Prezime, itd. Napominjem da ako je neko polje auto-inc. (tj. Identity u SQL serveru) ne treba uopste da ga navodis nigde u INSERT izrazu - baza ce sama da ga popuni.
I naravno svaki bi parametar dodao u parameters kolekciju OleDbCommand objekta.
Code:
param = New OleDbParameter("@parametar1", OleDbType.VarWChar)
param.Value = "Zika"
cmd.Parameters.Add(param)
param = New OleDbParameter("@parametar2", OleDbType.VarWChar)
param.Value = "Slika"
cmd.Parameters.Add(param)
param = New OleDbParameter("@parametar3", OleDbType.VarWChar)
param.Value = "Uzice"
cmd.Parameters.Add(param)
posle cega ides na izvrsavanje try-catch-finally-end try.
HTH,
dejan
Commercial-Free !!!