Šta je novo?

Visual Basic 6 problem sa Data1.Recordset.AddNew - Run time error '3020'

endrezr

Slavan
Učlanjen(a)
29.01.2009
Poruke
214
Poena
319
Imam jedan manji problem u VB6, koji me izuzetno nervira. Naime pisem neki program koji barata nekom bazom podataka na osnovu citanja broja sa smart kartica (halo kartica). Mikrokontroler iscita broj halo kartice pa salje na serijski port kompjutera. Kompjuter dobija broj i na osnovu broja ukazuje na neki od unosa.
U programu imam komandno dugme koje inicira dodavanje novog podatka u bazu sa (.addnew) i posle upisa trazenih podataka imam dugmad za sacuvanje (.update) ili otkaz (.cancelupdate) upisa. To sve funkcionise dobro i bas kako i hocu.

Medjutim, hocu da unesem deo koji u zavisnosti od odgovora na pitanje postavljeno u messagebox-u radi isto. I to radim na sledeci nacin (podebljani deo):

Kod:
                    If DBGrid1.ApproxCount = 0 Then
                            'MsgBox ("Ubacena kartica ne postoji u bazi!")
                            'MsgBox("Ubacena kartica ne postoji u bazi! Da li zelite da je dodate u bazu?, vbQuestion + vbYesNo + vbDefaultButton2, "Confirm") = vbNo
                            response = MsgBox("Ubacena kartica ne postoji u bazi! Da li zelite da je dodate u bazu?", vbYesNo + vbQuestion + vbDefaultButton2, "Izbor")
[B]                            If response = vbYes Then
                                SSTab1.Tab = 1
                                
                                cmdDodavanje_Click
                                txtSBK.Text = SerijskiBrojKartice[/B]
                                'Data1.RecordSource = "select * from pin"
                                'Data1.Refresh
                                'Data1.Recordset.AddNew
                                'vba.
                                'frmmain.cmdDodavanje.
                            Else
                            End If
                            Data1.RecordSource = "select * from pin"
                            Data1.Refresh
                        Else
                            Beep
                            
                            'PIN = ""
                            
                            temp2 = Data1.Recordset.Fields("ime")
                            temp3 = Data1.Recordset.Fields("prezime")
                            temp4 = temp2 & " " & temp3
                            txtMonitor.Text = "Dobrodosli " & temp4 & "!" & " Unesite Vas PIN!"
                            
                            flagPIN = True
                            
                            
                            cmd0.Enabled = True
                            cmd1.Enabled = True
                            cmd2.Enabled = True
                            cmd3.Enabled = True
                            cmd4.Enabled = True
                            cmd5.Enabled = True
                            cmd6.Enabled = True
                            cmd7.Enabled = True
                            cmd8.Enabled = True
                            cmd9.Enabled = True
                            
                            cmdPotvrdi.Enabled = True
                            cmdObrisi.Enabled = True
                            
                            txtTest3.Text = temp4
                            txtTest4.Text = PIN
                            
                            'ubaciti funkciju ili flag za dalji rad
                        End If

Ali tada mi je neuspesno, jer program mi pripremi sve prozore koje hocu ali ja pre nego sto bilo sta unesem pritisnem command button Odustani i dobijem gresku:

run time error '3020'
update or cancel update without addnew or edit

Nije mi jasno zasto dobijam ovu gresku kada program sam zove cmddodavanje? Naravno ne dobijam je kada ja kliknem na cmddodavanje na UI prilikom koriscenja programa. Gde mi nestane poziv od Recordset.Addnew ili Recordset.Edit ili zasto se ne generise kada program sam zove cmddodavanje? Najverovatnije sam dosta nejasan, pa ako se neko razume u materiju nek me pita ono sto treba da blize objasnim.

P.S. Mogao bih da smislim neku zaobilaznicu, ali to mi nije to. Ako neko ima bilo kakvu ideju bio bih zahvalan na pomoci.

P.P.S.: Probao sam da umesto cmdDodavanje_click stavim kod iz cmddodavanje, ali i dalje mi je rezultat greska. Iako u kodu postoji addnew.
 

Prilozi

Sorry, ali ne da nemam VB6 na ovom racunaru, nego trenutno ni na jednom racunaru nemam nijedan VB instaliran. Zato ne mogu da upotrebim tvoj attachment, mogu samo naglas da razmisljam...

Meni nije jasno kako ti mozes da pritisnes dugme Odustani dok ti je otvoren Msgbox???? Ako ti je iskocio Msgbox "Ubacena kartica ne postoji u bazi! Da li zelite da je dodate u bazu?", ti valjda moras da pritisnes OK ili Cancel, pre nego sto uradis bilo sta drugo u programu?

- ako pritisnes Cancel, pa onda dugme Odustani, normalno je da ces dobiti gresku, jer procedura cmdDodavanje_Click nije pozvana

- ako pritisnes OK, pa onda dugme Odustani, ne bi trebalo da dobijes gresku. Ako je ipak dobijes, onda treba da proveris spoljni IF (ovaj sto proverava DBGrid1.ApproxCount)

Mozda te negde nisam dobro razumeo?

EDIT: Sve sam ovo ispisao i onda pogledam tvoj kod jos jednom...
I vidim da ti je naredba koja izbacuje Msgbox pretvorena u komentar. Tebi onda Msgbox i ne izlazi? U tom slucaju ces naravno dobiti gresku...

Posto je velika sansa da smo u nekom nesporazumu, necu ni razmisljati ni pisati dalje dok ne cujem tvoj komentar :type:
 
Meni nije jasno kako ti mozes da pritisnes dugme Odustani dok ti je otvoren Msgbox???? Ako ti je iskocio Msgbox "Ubacena kartica ne postoji u bazi! Da li zelite da je dodate u bazu?", ti valjda moras da pritisnes OK ili Cancel, pre nego sto uradis bilo sta drugo u programu?

Ne mogu da idem na odustani, dok ne odgovorim na MSGBOX. Greska se javlja kada kliknes na OK, pa na Odustani.

EDIT: Sve sam ovo ispisao i onda pogledam tvoj kod jos jednom...
I vidim da ti je naredba koja izbacuje Msgbox pretvorena u komentar. Tebi onda Msgbox i ne izlazi? U tom slucaju ces naravno dobiti gresku...

Izlazi msgbox zbog sledeceg koda:
Kod:
                    response = MsgBox("Ubacena kartica ne postoji u bazi! Da li " & _
  "zelite da je dodate u bazu?", vbYesNo + vbQuestion + vbDefaultButton2, "Izbor")
                    If response = vbYes Then


- ako pritisnes OK, pa onda dugme Odustani, ne bi trebalo da dobijes gresku. Ako je ipak dobijes, onda treba da proveris spoljni IF (ovaj sto proverava DBGrid1.ApproxCount)

Sad sam nasao gresku prilikom ponovnog citanja mog posta. Greska se ne javlja kada iskomentarisem sledeca dva reda:

Kod:
                            Data1.RecordSource = "select * from pin"
                            Data1.Refresh

Bas u tom "spoljnom" IF-u. 🙂

Hvala. Veceras cu da vidim kako da to ispravim

EDIT: Bio sam nestrpljiv, pa sam probao i sledece:
Kod:
If DBGrid1.ApproxCount = 0 Then
                            response = MsgBox("Ubacena kartica ne postoji u bazi! Da li zelite da je dodate u bazu?", vbYesNo + vbQuestion + vbDefaultButton2, "Izbor")
                            If response = vbYes Then
                                [B][COLOR="red"]Data1.RecordSource = "select * from pin"
                                Data1.Refresh[/COLOR][/B]
                                SSTab1.Tab = 1
                                cmdDodavanje_Click
                                txtSBK.Text = SerijskiBrojKartice 'ako ovo radi, prebaci gore
                            Else
                            End If
[COLOR="seagreen"]                         '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
                         'IMPORTANT IMPORTANT: OVO DOLE GENERISE GRESKU!!!!!!!!!!!!!!!
                         
                            'Data1.RecordSource = "select * from pin"
                            'Data1.Refresh
                         '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''[/COLOR]
                        Else
                            Beep
                            
                            temp2 = Data1.Recordset.Fields("ime")
                            temp3 = Data1.Recordset.Fields("prezime")
                            temp4 = temp2 & " " & temp3
                            txtMonitor.Text = "Dobrodosli " & temp4 & "!" & " Unesite Vas PIN za nastavak!"
                            flagPIN = True
                            cmd0.Enabled = True
                            cmd1.Enabled = True
                            cmd2.Enabled = True
                            cmd3.Enabled = True
                            cmd4.Enabled = True
                            cmd5.Enabled = True
                            cmd6.Enabled = True
                            cmd7.Enabled = True
                            cmd8.Enabled = True
                            cmd9.Enabled = True

                            cmdPotvrdi.Enabled = True
                            cmdObrisi.Enabled = True
                            
                            txtTest3.Text = temp4
                            txtTest4.Text = PIN
                            
[COLOR="seagreen"]                            'ubaciti funkciju ili flag za dalji rad[/COLOR]
                        End If

Zasad radi. Moracu videti da li se generisu neke greske.
 
Poslednja izmena:
Izlazi msgbox zbog sledeceg koda:
Kod:
                    response = MsgBox("Ubacena kartica ne postoji u bazi! Da li " & _
  "zelite da je dodate u bazu?", vbYesNo + vbQuestion + vbDefaultButton2, "Izbor")
                    If response = vbYes Then
Video sam tu naredbu, ali nisam bio svestan da takva "C like" naredba radi u tako staroj verziji VB 🙂, pa mi je palo na pamet da bi to moglo biti uzrok greske...
(Ima jedno 7 godina kako nisam radio u VB6)
 
Nazad
Vrh Dno