|
[ zormar @ 09.02.2007. 22:29 ] @
| Da li neko moze da mi objasni zasto pri upisivanju podataka u bazu novi zapis se ne dodaje na kraj vec na pocetak baze, i svaki sledeci zapis koji se dodaje upisuje se iza prethodnog, znaci ide redom?
Code: Private Sub cmdAdd_Click()
If cmdAdd.Caption = "&Dodaj" Then
cmdAdd.Caption = "&Ponisti"
rsRecordSet.AddNew
cmdSave.Enabled = True
txtDatum.Locked = False
txt1.Locked = False
txt2.Locked = False
txt3.Locked = False
txtDatum.SetFocus
ElseIf cmdAdd.Caption = "&Ponisti" Then
cmdAdd.Caption = "&Dodaj"
cmdSave.Enabled = False
txtDatum.Locked = True
txt1.Locked = True
txt2.Locked = True
txt3.Locked = True
End If
End Sub
Private Sub cmdSave_Click()
rsRecordSet.Update
txtDatum.Locked = True
txt1.Locked = True
txt2.Locked = True
txt3.Locked = True
rsRecordSet.Close
rsRecordSet.Open
lblEOF = rsRecordSet.EOF
lblBOF = rsRecordSet.BOF
End Sub
|
[ vujkev @ 09.02.2007. 23:49 ] @
Redosled pročitanih podataka iz tabele nije definisan ukoliko ne koristiš Order by. Drugim rečima svaki put kad uradiš "select * from tabela1" redosled podataka je nepredvidiv. Ukoliko ti treba određeni redosled koristi "order by"
Code:
Select * from tabela1 order by NazivKolone
[ zormar @ 16.02.2007. 18:03 ] @
Pri upisivanju podataka u bazu novi podatak se upisuje PREKO poslednjeg zapisa. Svaki novi zapis brise prethodni.
Sta treba uraditi da upis podataka ide redom jedan iza drugog?
[ goranvuc @ 17.02.2007. 00:08 ] @
Vidi, nemoj da se ljutis, ali imas izgleda problema sa osnovnim konceptom unosa podataka (vidim to po onoj zbrci "dodaj", "ponisti".... i koristenjem locked svojstva koje nema nikakve veze sa bilo cim) ne znam gde si "pokupio" primer za takav unos, ali je prilicno tragican i samo pokazuje tvoje osnovno nerazumevanje nacina rada sa rekordsetima.
Da samo banalizujem ono osnovno, posto bi ova tema zahtevala bar jednu knjigu:
1. Koristis surogat kljuceve (long tipa)
2. Koristis prirodne kljuceve (sifre, jmbg... i sl.)
1.1 Koristis usluge DBMS-a i kljucevi su ti autonumber
1.2 Koristis sopstvenu proceduru za dodelu vrednosti kljuca pri unosu novog podatka
1.1.1 Koristis dinamicki rekordset (ServerSide, Dynamic, informacije o autonumber kljucu su odmah "vidljive")
1.1.2 Ne koristis to, vec ClientSide, KeySet npr.
1.2.1 Takodje ClientSide, KeySet, jer nema potrebe za necim drugim.
Dodatne varijacije:
a) Radis unos na SQL upitu koji sadrzi samo jednu tabelu
b) Radis unos na slozenom SQL upitu
Predvidjene operacije:
I) Dodavanje
II) Odustajanje od dodavanja
III) Cuvanje
Sta je sa izmenom postojecih podataka, pozicioniranjem na postojece podatke, brisanjem postojecih podataka ...
Ako si me sve ovo razumeo, odgovori mi koja je tvoja varijanta, pa da idemo dalje.
P.S.
Moras shvatiti da kada pozoves metodu rsRecordset.Open pozicioniran si na prvi zapis (ako ga ima), a kada pozoves AddNew metodu, upises podatak pa zatim pozoves metodu Save nema potrebe da ponovo radis ono Close/Open osim u slucaju b) kada treba da se pozove Requery metoda da bi dobio vrednosti iz "stranih tabela" , a sve to naravno ako nije u pitanju slucaj pod 1.1.1
[ zormar @ 17.02.2007. 12:39 ] @
@goranvuc
Ne ljutim se ali ipak imam potrebu da ti odgovorim.
Shvatam da forum treba odrzavati na nekom nivou, ali posecuju ga i ljudi slicni meni koji nemaju puno iskustva u programiranju, ali imaju zelju da i oni nesto urade. Naravno uz pomoc i saradnju drugih ljudi.
Zahvaljujem ti na dosadasnjoj pomoci, i bilo bi dobro ako mozes konkretno da mi odgovoris na postavljeno pitanje.
Nista od onoga sto si mi odgovorio nisam razumeo.
Sto se tice primera koji sam dao, to je primer iz kratkog kursa na ovom forumu Korak po korak:VB6, Access ADO i SQL.
pozdrav
[ goranvuc @ 17.02.2007. 12:54 ] @
Zao mi je ako ti je moj odgovor izgledao arogantno, nije mi to bila namera, vec mi je bila namera da ti ukazem na kompleksnost problema u koji si se upustio. Dakle, pisanje aplikacije za rad sa podacima ne moze da se zasniva na "resavskoj skoli" tj. moze ali nije dobro za tebe na duzi rok, jer je u pitanju multidisciplinarna oblast, koja zahteva poznavanje programiranja kao i projektovanja baza podataka. Probaj da pre bilo kakve realizacije malo proucis recordset, connection, field ... objekte (njihova svojstva i dogadjaje), takodje treba da definises sta tvoja aplikacija treba da radi sa podacima (osnovne funkcije), pogledaj malo kako su realizovane aplikacije slicnog tipa i dobro, dooooobro razmisli i informisi se o problematici.
Ako ces povrsno pristupiti ovom problemu, ja ti ne mogu na pravi nacin pomoci. Shvati da je svako od nas nekad bio na pocetku kao i ti, ali neki od nas nisu imali srece da ih usmere kao sto ti imas. Sve sto sam ti napisao je iz krajnje dobre namere.
Srecno u radu!
P.S.
Da ne mislis kako umem samo da filozofiram, stavi ovde tvoj projekat pa cu ti objasniti kroz taj tvoj primer gde gresis. Ako se ne varam, par puta ranije sam te takodje zamolio da to uradis da bi mogli da ti pomognemo, ali ...
[ zormar @ 17.02.2007. 13:48 ] @
Evo kod:
Pitanje je zasto novi zapis upisuje PREKO poslednjeg a ne dodaje ga kao sledeci?
Code: Option Explicit
Private WithEvents connConnection As ADODB.Connection
Private WithEvents rsRecordSet As ADODB.Recordset
Dim mblnAddMode As Boolean
Private Sub ClearControls()
txtDatum.Text = ""
txtUkupno.Text = ""
txtGod.Text = ""
txt1.Text = ""
txt2.Text = ""
End Sub
Private Sub LoadDataInControls()
If rsRecordSet.BOF = True Or rsRecordSet.EOF = True Then
Exit Sub
End If
txtDatum.Text = rsRecordSet("DATUM").Value & " "
txtUkupno.Text = rsRecordSet("UK").Value & " "
txtGod.Text = rsRecordSet("GOD").Value & " "
txt1.Text = rsRecordSet("I").Value & " "
txt2.Text = rsRecordSet("II").Value & " "
End Sub
Private Sub Form_Load()
Dim strConnect As String
Dim strProvider As String
Dim strDataSource As String
Dim strDataBaseName As String
Dim X As Integer
strProvider = "Provider= Microsoft.Jet.OLEDB.4.0;"
strDataSource = App.Path
strDataBaseName = "\BAZA.mdb;"
strDataSource = "Data Source=" & strDataSource & strDataBaseName
strConnect = strProvider & strDataSource
Set connConnection = New ADODB.Connection
connConnection.CursorLocation = adUseClient
connConnection.Open strConnect
Set rsRecordSet = New ADODB.Recordset
rsRecordSet.CursorType = adOpenStatic
rsRecordSet.CursorLocation = adUseClient
rsRecordSet.LockType = adLockPessimistic
rsRecordSet.Source = "Select * From UKUPNO"
rsRecordSet.ActiveConnection = connConnection
rsRecordSet.Open
lblBOF.Caption = rsRecordSet.BOF
lblEOF.Caption = rsRecordSet.EOF
Adodc1.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=DBQ=" _
& App.Path & "\BAZA.mdb;DefaultDir=" & App.Path & " ;Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"
MSHFlexGrid1.ColAlignment = flexAlignCenterCenter
MSHFlexGrid1.ColWidth(0) = 500
MSHFlexGrid1.ColWidth(1) = 500
MSHFlexGrid1.ColWidth(2) = 1000
MSHFlexGrid1.ColWidth(3) = 500
MSHFlexGrid1.ColWidth(4) = 500
End Sub
Private Sub rsRecordSet_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
If mblnAddMode = False Then
Call LoadDataInControls
End If
End Sub
Private Sub cmdFirst_Click()
If rsRecordSet.BOF = False Then
rsRecordSet.MoveFirst
End If
Adodc1.Refresh
lblBOF.Caption = rsRecordSet.BOF
lblEOF.Caption = rsRecordSet.EOF
End Sub
Private Sub cmdLast_Click()
If rsRecordSet.EOF = False Then
rsRecordSet.MoveLast
End If
Adodc1.Refresh
lblBOF.Caption = rsRecordSet.BOF
lblEOF.Caption = rsRecordSet.EOF
End Sub
Private Sub cmdPrevious_Click()
If rsRecordSet.BOF = False Then
rsRecordSet.MovePrevious
If rsRecordSet.BOF = True Then
rsRecordSet.MoveFirst
End If
Else
rsRecordSet.MoveFirst
End If
Adodc1.Refresh
lblBOF.Caption = rsRecordSet.BOF
lblEOF.Caption = rsRecordSet.EOF
End Sub
Private Sub cmdNext_Click()
If rsRecordSet.EOF = False Then
rsRecordSet.MoveNext
If rsRecordSet.EOF Then
rsRecordSet.MoveLast
End If
Else
rsRecordSet.MoveLast
End If
Adodc1.Refresh
lblBOF.Caption = rsRecordSet.BOF
lblEOF.Caption = rsRecordSet.EOF
End Sub
Private Sub DisableNavigation()
cmdFirst.Enabled = False
cmdLast.Enabled = False
cmdNext.Enabled = False
cmdPrevious.Enabled = False
End Sub
Private Sub EnableNavigation()
cmdFirst.Enabled = True
cmdLast.Enabled = True
cmdNext.Enabled = True
cmdPrevious.Enabled = True
End Sub
Private Sub cmdAdd_Click()
If cmdAdd.Caption = "&Dodaj" Then
cmdAdd.Caption = "&Ponisti"
cmdSave.Enabled = True
Call DisableNavigation
mblnAddMode = True
Call ClearControls
cmdEdit.Enabled = False
cmdDelete.Enabled = False
txtDatum.Locked = False
txtUkupno.Locked = False
txtGod.Locked = False
txt1.Locked = False
txt2.Locked = False
txtDatum.SetFocus
ElseIf cmdAdd.Caption = "&Ponisti" Then
cmdAdd.Caption = "&Dodaj"
cmdSave.Enabled = False
Call EnableNavigation
cmdEdit.Enabled = True
cmdDelete.Enabled = True
mblnAddMode = False
txtDatum.Locked = True
txtUkupno.Locked = True
txtGod.Locked = True
txt1.Locked = True
txt2.Locked = True
End If
End Sub
Private Sub WriteDataFromControls()
rsRecordSet("DATUM").Value = txtDatum.Text
rsRecordSet("UK").Value = txtUkupno.Text
rsRecordSet("GOD").Value = txtGod.Text
rsRecordSet("I").Value = txt1.Text
rsRecordSet("II").Value = txt2.Text
End Sub
Private Sub cmdSave_Click()
If cmdAdd.Caption = "&Ponisti" Then
rsRecordSet.MoveLast
End If
Call WriteDataFromControls
rsRecordSet.Update
mblnAddMode = False
cmdSave.Enabled = False
If cmdAdd.Caption = "&Ponisti" Then
cmdAdd.Caption = "&Dodaj"
End If
If cmdEdit.Caption = "&Ponisti" Then
cmdEdit.Caption = "&Izmeni"
End If
txtDatum.Locked = True
txtUkupno.Locked = True
txtGod.Locked = True
txt1.Locked = True
txt2.Locked = True
Call EnableNavigation
cmdEdit.Enabled = True
cmdAdd.Enabled = True
cmdDelete.Enabled = True
rsRecordSet.Close
rsRecordSet.Open
lblBOF.Caption = rsRecordSet.BOF
lblEOF.Caption = rsRecordSet.EOF
Adodc1.Refresh
End Sub
Private Sub cmdDelete_Click()
If rsRecordSet.EOF = False And _
rsRecordSet.BOF = False Then
On Error Resume Next
connConnection.begtrans
rsRecordSet.Delete
connConnection.CommitTrans
rsRecordSet.MoveNext
If rsRecordSet.EOF = True Then
rsRecordSet.MoveLast
If rsRecordSet.BOF = True Then
Call ClearControls
End If
End If
lblBOF.Caption = rsRecordSet.BOF
lblEOF.Caption = rsRecordSet.EOF
End Sub
Private Sub cmdEdit_Click()
If cmdEdit.Caption = "&Izmeni" Then
cmdEdit.Caption = "&Ponisti"
cmdSave.Enabled = True
Call DisableNavigation
cmdAdd.Enabled = False
cmdDelete.Enabled = False
txtDatum.Locked = False
txtUkupno.Locked = False
txtGod.Locked = False
txt1.Locked = False
txt2.Locked = False
txtDatum.SetFocus
ElseIf cmdEdit.Caption = "&Ponisti" Then
cmdEdit.Caption = "&Izmeni"
cmdSave.Enabled = False
Call EnableNavigation
cmdAdd.Enabled = True
cmdDelete.Enabled = True
txtDatum.Locked = True
txtUkupno.Locked = True
txtGod.Locked = True
txt1.Locked = True
txt2.Locked = True
End If
End Sub
[ goranvuc @ 17.02.2007. 14:22 ] @
Inace, kao odgovor na tvoj problem, izgleda da si zaboravio rsRecordset.AddNew u proceduri cmdAdd_Click() tako da stalno "gazis" trenutni zapis na kom si pozicioniran, a evo ti kod sa tim dodatnim redom:
Code:
Private Sub cmdAdd_Click()
If cmdAdd.Caption = "&Dodaj" Then
cmdAdd.Caption = "&Ponisti"
cmdSave.Enabled = True
Call DisableNavigation
mblnAddMode = True
Call ClearControls
cmdEdit.Enabled = False
cmdDelete.Enabled = False
txtDatum.Locked = False
txtUkupno.Locked = False
txtGod.Locked = False
txt1.Locked = False
txt2.Locked = False
txtDatum.SetFocus
rsRecordSet.AddNew 'OVO JE NEDOSTAJALO
ElseIf cmdAdd.Caption = "&Ponisti" Then
cmdAdd.Caption = "&Dodaj"
cmdSave.Enabled = False
Call EnableNavigation
cmdEdit.Enabled = True
cmdDelete.Enabled = True
mblnAddMode = False
txtDatum.Locked = True
txtUkupno.Locked = True
txtGod.Locked = True
txt1.Locked = True
txt2.Locked = True
End If
End Sub
Ovo je ono sto sigurno nedostaje, naravno, nisam uspeo da bas potpuno sve da sagledam, ali probaj prvo ovo.
Inace, AddNew je bio u tvom prvom pitanju, zasto se u medjuvremenu izgubio? Zbog toga i nije moglo da se utvrdi gde je greska, jer je u tom prvom primeru koda naizgled bilo sve u redu.
[Ovu poruku je menjao goranvuc dana 17.02.2007. u 15:58 GMT+1]
[ goranvuc @ 17.02.2007. 14:57 ] @
Evo sad sam pogledao tutorijal na koji se ti pozivas "ADOStepByStep". Tutorijal je odlican i iz njega moze puno toga da se nauci, a tvoj primer nema nikakve veze sa doticnim tutorijalom (bar ne takve da se na njega pozivas, kao "pa tamo tako pise"). Da si se malo detaljnije udubio u problematiku nasa pomoc u vezi ovoga ti ne bi ni trebala, ali sta je tu je.
Tutorijal preporucujem svakom ko krene u programiranje aplikacija za rad sa bazama podataka u VB 6.0.
[ zormar @ 17.02.2007. 15:07 ] @
Ja sam malo stariji covek, pa mi je mozda nesto i promaklo.
Zahvaljujem ti na savetima i pomoci.
[ goranvuc @ 17.02.2007. 15:15 ] @
Citat: zormar: Ja sam malo stariji covek, pa mi je mozda nesto i promaklo.
Zahvaljujem ti na savetima i pomoci.
Nisam ni ja "u cvetu mladosti". Kako se zuris u sticanju znanja, rekao bih da si "srednjoskolac" (shvati to kao nesto pozitivno).
Pozdrav, ubuduce slobodno uploaduj projekat da ustedimo na vremenu, olaksaj nam da bi mogli da ti pomognemo.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|