Pozdrav svima.
Zna da se vec vise puta pisalo po pitanju ove teme, ali nikada nesto konkretno (ili bar ja nisam shvatio).
Evo sta me interesuje :
Pravim program u VB5 (isti djavo kao i da je VB6) i zelim da ga postavim na vise racunara (3-5 kom) ali da se samo na jednom nalazi baza podataka.
Koristim iskljucivo vb5/6 i DAO (znaci, nemojte odgovarati - ostavljati postove tipa predji na ADO, koristi nesto drugo, itd, itd, jer na kraju dodje do prepucavanja i totalnog skretanja sa teme, sto sa vec ovde i vidjao - unapred hvala na razumevanju).
Ovako:
- imam jednu bazu npr. test.mdb koja se nalazi iskljucivo na jednom comp-u, a prog. bi bio na svim racunarima.
- e sada: kako, koristeci DAO, da vrsim pristup toj bazi, jer ja sam pokusao sledece, sto cu i opistati, i na koje sam probleme naletao:
- baza "test.mdb" :
===================
Sifra dbLong
Prezime dbText,50
Ime dbText,50
Adresa dbText,50
Mesto dbText,50
Telefon dbText,50
Datum dbDate
UObradi dbBoolean
Indexes: PoSifra
otvaranje baze sam radio na sledeci nacin :
Module.bas:
-----------
Global ws as Workspace
Global db as Database
Global rs as Recordset
Global SifKor 'ako je 0 vrsi se novi upis, a ako je 1 i vise vrsi se izmena podataka
'ucivatavanje baze i recordset-a
Form1.frm:
----------
Sub ListajKorisnike()
'... upisivanje tj. ubacivanje podataka iz Recordset-a u Grid tabelu
End Sub
Sub Form1_Load()
compName = Environ("computername")
Set ws = CreateWorkspace(compName,"admin","") '-bez ono dbUseJet
Set db = ws.OpenDatabase("\\SERVER\Test\test.mdb")
Set rs = db.OpenRecordset("Podaci")
'inace, u ovoj formi se Grid (ComponentOne FlexGrid) u kojoj se nalazi spisak npr. radnika (neka vrsta evidencija radnika po objektima)
End Sub
Sub cmd_Upis()
SifKor = 0
Form1.Enabled = False
Form2.Show
End Sub
Sub smd_Izmena()
SifKor = 1
Form1.Enabled = False
Form2.Show
End Sub
Form2.frm:
----------
Sub Form2_Load()
If SifKor = 0 then
If rs.RecordCount > 0 Then
rs.Index = "PoSifra"
rs.MoveLast
SifKor = rs!Sifra + 1
Else
SifKor = 1
End If
ws.BeginTrans
rs.AddNew
rs!Sifra = SifKor
rs!UObradi = True
rs.Update
ws.CommitTrans
Else
rs.Index = "PoSifra"
rs.Seek "=", SifKor
'... Upisivanje podataka u TextBox-ove
End If
End Sub
Sub cmd_Save()
rs.Index = "PoSifra"
rs.Seek "=", SifKor
ws.BeginTrans
rs.Edit
rs!Sifra = SifKor
rs!UObradi = False
'... i upis ostalih podataka u RecordSet
rs.Update
ws.CommitTrans
Form1.Enabled = True
Unload Me
Form1.Show
Form1.ListajKorisnike
End Sub
E, o cemu se radi!
Kada vrsim upis podataka u recordset koristeci BeginTrans, AddNew i CommitTrans sve je ok - izvrsi se fizicki zapis u test.mdb
Ali, kada koristim BeginTrans, EDIT i CommitTrans - tu nastaju problemi.
Namerno sam postavio polje UObradi (True or False) da, cim neko od korisnika pokrene Izmenu podataka o selektovanom radniku, se automatski snimi kao False tako da ostali korisnici mogu vrsiti samo pregled a ne i obradu podataka o datom radniku.
I kada se vrsi novi upis radnika (mislim na novog radnika u firmi) odmah se u bazu upisuje nova sifra i UOBradi = True tako da data Sifra radnika bude automatski zuzeta... kako ne bi doslo do konflikta ako, kojim slucajem, dva korisnika pokrenu upis novih radnika - da se ne bi dodelila ista Sifra za dva razlicita radnika. Nadam se da ste me shvatili.
U cemu je problem?
Pokrenem Upis novog radnika, cim se ucita Form2 odmah se fizicki u test.mdb upisuje novi zapis (samo Sifra, a UObradi se postavlja na True),
izvrsi se upis podataka o radniku (u TextBox-ove) i klikne se na Snimi - gde se, ustvari, vrsi Seek vec rezervisanog zapisa i vrsi se rs.Edit.
Kada se odradi rs.Update i ws.CommitTrans, unload-uje se Form2, prikazuje se Form1 i pokrece se procedure ListajKorisnike... ALI, nista ne prikazuje.
Proverim test.mdb i, ono, nema nikakvog zapisa posle koriscenja rs.Edit-a ??!!???
Da li mi neko moze pomoci kako da resim ovaj problem?
Sve dok koristim AddNew radi ok, ali cim editujem postojeci zapis u recordset-u, ne samo da ne izvrsi editovanje/izmene nego i izbrise mi taj zapis koji je vec postojao sa delimicno popunjenim poljima.
Sve se svodi na to, kada neko edituje odredjeni zapis, ostali mogu sam da vrse pregled i da, cim se izvrsi promena podataka u recordset-u to iskaze i ostalima (jer, ako dobro shvatam, svaki korisnik koji pokrece program stvara se WorkSpace).
Unapred hvala svima mnogo.
P.S. Kao sto rekoh na pocetku poruke, iskljucivo VB5/6 i DAO. Znam da neki koriste (mozda i vecina) ADO itd.. ali ja stvarno nemam vremena da sve prepravljam da bih prilagodio ADO-u i jos da mozgam oko toga. Koristim DAO od prvog dana kako sam poceo sa prog. u vb-u i, verujte mi, da mije tesko da se sada, trenutno, prilagodjavam necemu drugome (mada sam malo gledao po forumima i rad sa ADO i jednostvano mi neke stvari ne idu u glavu).
A misljenja tipa, predji na MySQL i tako nesto... zamolio bih vas da to ostavite za neku drugu temu, nego da se bavimo iskljucivo ovom temom.
Jos jednom, unapred hvala svima.
Pozdrav.
Zna da se vec vise puta pisalo po pitanju ove teme, ali nikada nesto konkretno (ili bar ja nisam shvatio).
Evo sta me interesuje :
Pravim program u VB5 (isti djavo kao i da je VB6) i zelim da ga postavim na vise racunara (3-5 kom) ali da se samo na jednom nalazi baza podataka.
Koristim iskljucivo vb5/6 i DAO (znaci, nemojte odgovarati - ostavljati postove tipa predji na ADO, koristi nesto drugo, itd, itd, jer na kraju dodje do prepucavanja i totalnog skretanja sa teme, sto sa vec ovde i vidjao - unapred hvala na razumevanju).
Ovako:
- imam jednu bazu npr. test.mdb koja se nalazi iskljucivo na jednom comp-u, a prog. bi bio na svim racunarima.
- e sada: kako, koristeci DAO, da vrsim pristup toj bazi, jer ja sam pokusao sledece, sto cu i opistati, i na koje sam probleme naletao:
- baza "test.mdb" :
===================
Sifra dbLong
Prezime dbText,50
Ime dbText,50
Adresa dbText,50
Mesto dbText,50
Telefon dbText,50
Datum dbDate
UObradi dbBoolean
Indexes: PoSifra
otvaranje baze sam radio na sledeci nacin :
Module.bas:
-----------
Global ws as Workspace
Global db as Database
Global rs as Recordset
Global SifKor 'ako je 0 vrsi se novi upis, a ako je 1 i vise vrsi se izmena podataka
'ucivatavanje baze i recordset-a
Form1.frm:
----------
Sub ListajKorisnike()
'... upisivanje tj. ubacivanje podataka iz Recordset-a u Grid tabelu
End Sub
Sub Form1_Load()
compName = Environ("computername")
Set ws = CreateWorkspace(compName,"admin","") '-bez ono dbUseJet
Set db = ws.OpenDatabase("\\SERVER\Test\test.mdb")
Set rs = db.OpenRecordset("Podaci")
'inace, u ovoj formi se Grid (ComponentOne FlexGrid) u kojoj se nalazi spisak npr. radnika (neka vrsta evidencija radnika po objektima)
End Sub
Sub cmd_Upis()
SifKor = 0
Form1.Enabled = False
Form2.Show
End Sub
Sub smd_Izmena()
SifKor = 1
Form1.Enabled = False
Form2.Show
End Sub
Form2.frm:
----------
Sub Form2_Load()
If SifKor = 0 then
If rs.RecordCount > 0 Then
rs.Index = "PoSifra"
rs.MoveLast
SifKor = rs!Sifra + 1
Else
SifKor = 1
End If
ws.BeginTrans
rs.AddNew
rs!Sifra = SifKor
rs!UObradi = True
rs.Update
ws.CommitTrans
Else
rs.Index = "PoSifra"
rs.Seek "=", SifKor
'... Upisivanje podataka u TextBox-ove
End If
End Sub
Sub cmd_Save()
rs.Index = "PoSifra"
rs.Seek "=", SifKor
ws.BeginTrans
rs.Edit
rs!Sifra = SifKor
rs!UObradi = False
'... i upis ostalih podataka u RecordSet
rs.Update
ws.CommitTrans
Form1.Enabled = True
Unload Me
Form1.Show
Form1.ListajKorisnike
End Sub
E, o cemu se radi!
Kada vrsim upis podataka u recordset koristeci BeginTrans, AddNew i CommitTrans sve je ok - izvrsi se fizicki zapis u test.mdb
Ali, kada koristim BeginTrans, EDIT i CommitTrans - tu nastaju problemi.
Namerno sam postavio polje UObradi (True or False) da, cim neko od korisnika pokrene Izmenu podataka o selektovanom radniku, se automatski snimi kao False tako da ostali korisnici mogu vrsiti samo pregled a ne i obradu podataka o datom radniku.
I kada se vrsi novi upis radnika (mislim na novog radnika u firmi) odmah se u bazu upisuje nova sifra i UOBradi = True tako da data Sifra radnika bude automatski zuzeta... kako ne bi doslo do konflikta ako, kojim slucajem, dva korisnika pokrenu upis novih radnika - da se ne bi dodelila ista Sifra za dva razlicita radnika. Nadam se da ste me shvatili.
U cemu je problem?
Pokrenem Upis novog radnika, cim se ucita Form2 odmah se fizicki u test.mdb upisuje novi zapis (samo Sifra, a UObradi se postavlja na True),
izvrsi se upis podataka o radniku (u TextBox-ove) i klikne se na Snimi - gde se, ustvari, vrsi Seek vec rezervisanog zapisa i vrsi se rs.Edit.
Kada se odradi rs.Update i ws.CommitTrans, unload-uje se Form2, prikazuje se Form1 i pokrece se procedure ListajKorisnike... ALI, nista ne prikazuje.
Proverim test.mdb i, ono, nema nikakvog zapisa posle koriscenja rs.Edit-a ??!!???
Da li mi neko moze pomoci kako da resim ovaj problem?
Sve dok koristim AddNew radi ok, ali cim editujem postojeci zapis u recordset-u, ne samo da ne izvrsi editovanje/izmene nego i izbrise mi taj zapis koji je vec postojao sa delimicno popunjenim poljima.
Sve se svodi na to, kada neko edituje odredjeni zapis, ostali mogu sam da vrse pregled i da, cim se izvrsi promena podataka u recordset-u to iskaze i ostalima (jer, ako dobro shvatam, svaki korisnik koji pokrece program stvara se WorkSpace).
Unapred hvala svima mnogo.
P.S. Kao sto rekoh na pocetku poruke, iskljucivo VB5/6 i DAO. Znam da neki koriste (mozda i vecina) ADO itd.. ali ja stvarno nemam vremena da sve prepravljam da bih prilagodio ADO-u i jos da mozgam oko toga. Koristim DAO od prvog dana kako sam poceo sa prog. u vb-u i, verujte mi, da mije tesko da se sada, trenutno, prilagodjavam necemu drugome (mada sam malo gledao po forumima i rad sa ADO i jednostvano mi neke stvari ne idu u glavu).
A misljenja tipa, predji na MySQL i tako nesto... zamolio bih vas da to ostavite za neku drugu temu, nego da se bavimo iskljucivo ovom temom.
Jos jednom, unapred hvala svima.
Pozdrav.