Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Ne radi program = VB i Access

[es] :: Visual Basic 6 :: Ne radi program = VB i Access

[ Pregleda: 2920 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Robinsonk@

Član broj: 14124
Poruke: 41
*.dr-ludwig.com



Profil

icon Ne radi program = VB i Access18.09.2003. u 14:23 - pre 250 meseci
Sledeci kod upisuje novu vrstu u tabeli:

Private Sub cmdSave_Click()
On Error GoTo labela
adorecordset.MoveFirst
Do
If txtKolonaTabele.Text = adorecordset!KolonaTabele Then
MsgBox "Unesite drugu KolonuTabele, ovaj vec postoji u bazi"
Exit Sub
Else
adorecordset.MoveNext
End If
Loop Until adorecordset.EOF
adorecordset.Update
adorecordset.Requery
frmImeForme.Hide

Exit Sub
labela:
MsgBox "Greska", , "Error"
End Sub

Medjutim, on upise novu vrstu, ali ipak javi poruku:

MsgBox "Unesite drugu KolonuTabele, ovaj vec postoji u bazi"

Iako ime ne postoji u bazi. Postavi odgovarajuce textbox-ove na drugu vrstu koja postoji u bazi.

Bez do petlje program radi, u cemu bi mogao biti problem?
 
Odgovor na temu

mladenovicz
Zeljko Mladenovic
Xoran Technologies, Inc., Ann Arbor, MI,
USA / Software Engineer
Ann Arbor, MI, USA

Član broj: 6598
Poruke: 2065
*.yubc.net

Jabber: mladenovicz@elitesecurity.org
ICQ: 95144142
Sajt: yubc.net/~mz


Profil

icon Re: Ne radi program = VB i Access18.09.2003. u 14:45 - pre 250 meseci
Pretpostavljam da ti je to textualno polje boundovano. Kad uradis AddNew, broj zapisa u tom recordsetu se povecava za 1, iako nisi uradila Update (zapis u bazi jos uvek ne postoji). Taj novi zapis sadrzi podatke koji se trenutno nalaze u kontrolama koje su boundovane.

Znaci moras da promenis nacin provere duplikata. Resenje je da proveru duplikata radis sa drugim recordsetom. Znaci kreiras novi recordset sa istim sourceom i proveru radis sa njim, a ne sa recordsetom koji ti je datasource.
 
Odgovor na temu

Robinsonk@

Član broj: 14124
Poruke: 41
*.dr-ludwig.com



Profil

icon Re: Ne radi program = VB i Access18.09.2003. u 17:43 - pre 250 meseci
Vjerovatno je tako.
Kreiram novi rekordset, ne stavljam da je datasource textbox-a taj recordset, ali kako da ga postavim da mi pokazuje na tu tabelu u bazi? Za prvi recordset sam to radila sa sgl upitom koji je u okviru procedure koju posle pozivam. Da li sad treba isto da pravim proceduru za drugi?

P.S. Sta znaci da je text polje boundovano?
Hvala.
 
Odgovor na temu

mladenovicz
Zeljko Mladenovic
Xoran Technologies, Inc., Ann Arbor, MI,
USA / Software Engineer
Ann Arbor, MI, USA

Član broj: 6598
Poruke: 2065
*.yubc.net

Jabber: mladenovicz@elitesecurity.org
ICQ: 95144142
Sajt: yubc.net/~mz


Profil

icon Re: Ne radi program = VB i Access18.09.2003. u 18:04 - pre 250 meseci
Kontrola je boundovana, ako je njen DataSource property podesen na neki DataSource, s tim sto treba setovati i DatField property na polje iz datasourcea.

Kod bi trebao otprilike ovako da izgleda (nisam testirao)

Code:

Private Sub cmdSave_Click()
Dim adoTempRS   As ADODB.Recordset
Dim Qry         As String

    On Error GoTo labela
    
    Set adoTempRS = New ADODB.Recordset
    
    If Not adorecordset Is Nothing Then
        Qry = adorecordset.Source ' SQL upit
    Else
        GoTo proc_exit
    End If
    
    
    ' adorecordset.ActiveConnection konekcija koju koristi adorecordset objekat
    adoTempRS.Open Qry, adorecordset.ActiveConnection
       
    While Not adoTempRS.EOF
        If txtKolonaTabele.Text = adoTempRS!KolonaTabele Then
            MsgBox "Unesite drugu KolonuTabele, ovaj vec postoji u bazi"
            GoTo proc_exit
        Else
            adoTempRS.MoveNext
        End If
    Wend
    
    adorecordset.Update
    adorecordset.Requery
    frmImeForme.Hide
    
proc_exit:
    adoTempRS.Close
    Set adoTempRS = Nothing
    Exit Sub
    
labela:
    MsgBox "Greska", , "Error"
    Resume proc_exit
End Sub


Znaci kreiras recordset koji ima isti source (SQL upit kao i adorecordset) i kroz njega ides i proveravas duplikate. Ovaj recordset moze da koristi postojecu konekciju ka bazi, a mozes i da kreiras novu. Ako izadjes iz petlje regularno (nije bilo duplikata) adorecordset ce biti updateovan, inace prikaze se msgbox i izadje se iz procedure.
 
Odgovor na temu

Robinsonk@

Član broj: 14124
Poruke: 41
*.dr-ludwig.com



Profil

icon Re: Ne radi program = VB i Access18.09.2003. u 22:24 - pre 250 meseci
Otprilike tako nesto sam napisala.
Rijesen je ovaj problem, ne javlja da vec postoji u bazi ali uvijek odradi labelu za gresku.
Kad sam korak po korak gledala program vidjela sam da je greska u

Adorecordset.update

Time moram da se pozabavim sama jer samo ja mogu vidjeti gdje sam to napravila gresku pa ne moze da odradi update.

Hvala ti puno.
 
Odgovor na temu

Robinsonk@

Član broj: 14124
Poruke: 41
*.dr-ludwig.com



Profil

icon Re: Ne radi program = VB i Access19.09.2003. u 12:52 - pre 250 meseci
Jos pitanja:

Nakon sto upisem novu vrstu u bazi ponudim mogucnost da upisem jos jednu vrstu.
Kada prihvatim onda moram da napisem isti kod kao kada iz druge forme pozivam sledecu:
To otprilike izgleda ovako:


adorecordset.Update
'adorecordset.Requery
LRValue = MsgBox("Nova vrsta je upisana u bazu" & "Zelite li da pokusate ponovo", vbYesNo, "Potvrda")
If LRValue = vbYes Then
adorecordset.AddNew
frmImeForme.txtPrvi.Text = CStr(adorecordset.RecordCount)
frmImeForme.txtDrugi.Text = ""
frmImeForme.txtTreci.Text = ""
frmImeForme.txtCetvrti.Text = ""
frmImeForme.txtPeti.Text = ""
'frmImeForme.txtSesti.Text = ""
Exit Sub
Else
frmImeForme.Hide
End If

Postoji li neki jednostavniji nacin?

A kada odradim adorecordset.Requery (koji je sada kao komentar) onda mi prilikom izbacivanja ovog MsgBox-a:

MsgBox("Novi radnik je upisan u bazu" & "Zelite li da pokusate ponovo", vbYesNo, "Potvrda")

U text box-u stoji prva vrsta tabele? Zasto? Mogu li adorecordset.Requery da izbacim onda?


I jos jedno pitanje:
Posto imam opciju brisanja vrste, kada npr. Obrisem 5-tu vrstu a ima ih 8, posle brisanja ce ih ostati 7 i izraz iz zagrade:

frmImeForme.txtPrvi.Text = CStr(adorecordset.RecordCount)

ce da upise broj 8 u prvom text box-u. Medjutim kako on vec postoji u bazi, a nema ponavljanja (jer je to (jedini) primarni kljuc u bazi) javlja gresku. Kako ovo treba da sredim?

Hvala Ti puno ( za ovo dosad i za ubuduce).



 
Odgovor na temu

mladenovicz
Zeljko Mladenovic
Xoran Technologies, Inc., Ann Arbor, MI,
USA / Software Engineer
Ann Arbor, MI, USA

Član broj: 6598
Poruke: 2065
*.yubc.net

Jabber: mladenovicz@elitesecurity.org
ICQ: 95144142
Sajt: yubc.net/~mz


Profil

icon Re: Ne radi program = VB i Access19.09.2003. u 13:19 - pre 250 meseci
Code:

adorecordset.AddNew
frmImeForme.txtPrvi.Text = CStr(adorecordset.RecordCount)
frmImeForme.txtDrugi.Text = ""
frmImeForme.txtTreci.Text = ""
frmImeForme.txtCetvrti.Text = ""
frmImeForme.txtPeti.Text = ""
'frmImeForme.txtSesti.Text = ""


Ovaj kod izdvoj u proceduru/funkciju, pa pozivas funkciju, a ne moras da radis copy/paste. Posto imas frmImeforme onda mozes da stavis to i u modul recimo.
Ako su ti polja boundovana, mislim da ti ne treba frmImeForme.txtDrugi.Text = "" i ostalo, posto bi polja trebalo da se sama obrisu posle addnew.

Razlog prikazivanja prvog zapisa je to sto radis Requery. Requery ce ponove povuci podatke iz baze i recordset ce biti pozicioniran na prvi zapis. Znaci Requery ti u principu ne treba. Bez Requery ostaces pozicinirana na poslednji zapis, tj. onaj koji je upravo dodat.

Sto se tice problema sa kljucem, resenje je to polje bude autonumber (ovo menjas u bazi), onda baza vodi racuna o tome i ne moze doci do dupliranja kljuca. Drugo resenje je da selektujes iz baze maksimalnu vrednost za to polje i na to dodas 1 i da ti to bude kljuc. Preporucio bih ti resenje sa autonumberom.


 
Odgovor na temu

Robinsonk@

Član broj: 14124
Poruke: 41
*.dr-ludwig.com



Profil

icon Re: Ne radi program = VB i Access19.09.2003. u 15:26 - pre 250 meseci
Ok, ako ne moze drugacije onda ovako.

A za brojeve se nismo razumjeli. U bazi je podeseno da ne prihvati duplicate, ali on u kodu samo ode na labelu za gresku (jer je nedozvoljen unos).

Da li onda postoji mogucnost da mi prilikom brisanja vrste promijeni “redne brojeve”, da ih imam od 1 pa do broja vrsta? U tom slucaju ce mi

CStr(adorecordset.RecordCount)

Uvijek izracunati tacno sledeci redni broj.
 
Odgovor na temu

mladenovicz
Zeljko Mladenovic
Xoran Technologies, Inc., Ann Arbor, MI,
USA / Software Engineer
Ann Arbor, MI, USA

Član broj: 6598
Poruke: 2065
*.yubc.net

Jabber: mladenovicz@elitesecurity.org
ICQ: 95144142
Sajt: yubc.net/~mz


Profil

icon Re: Ne radi program = VB i Access19.09.2003. u 15:44 - pre 250 meseci
Ako stavis da je to polje autonumber, ono se ne unosi u aplikaciji, nego kad kazes AddNew baza sama uzima prvi sledeci slobodan i stavlja tu vrednost u polje.

Shiftovanje kljuca nakon brisanja nije lep nacin, osim toga kod velikog broja zapisa, ko zna kako bi to radilo, a brisanje i shiftovanje kljuca bi morala da radis u transakciji. Uz to, ako se taj kluc nalazi i u nekim drugim tabelama kao veza sa tom tabelom i tamo bi morao da se azurira i onda je to cirkus :)
 
Odgovor na temu

Robinsonk@

Član broj: 14124
Poruke: 41
*.dr-ludwig.com



Profil

icon Re: Ne radi program = VB i Access19.09.2003. u 15:53 - pre 250 meseci
Da, opet si u pravu, shiftovanje bi napravilo cirkus, posebno zato sto je i vezano za druge tabele

Kako da uradim autonumber u access-u?
 
Odgovor na temu

mladenovicz
Zeljko Mladenovic
Xoran Technologies, Inc., Ann Arbor, MI,
USA / Software Engineer
Ann Arbor, MI, USA

Član broj: 6598
Poruke: 2065
*.yubc.net

Jabber: mladenovicz@elitesecurity.org
ICQ: 95144142
Sajt: yubc.net/~mz


Profil

icon Re: Ne radi program = VB i Access19.09.2003. u 15:59 - pre 250 meseci
Otvoris bazu, selektuj tabelu, desni klik pa Design View. Selektuj polje koje hoces da promenis i u Data Type stavi Autonumber, zatim dole imas General tab, tamo podesi NewValues na Increment recimo, i Indexed property na Yes (No Duplicates)
 
Odgovor na temu

Robinsonk@

Član broj: 14124
Poruke: 41
*.dr-ludwig.com



Profil

icon Re: Ne radi program = VB i Access19.09.2003. u 21:33 - pre 250 meseci
Hm.. to resenje vodi i novom pravljenju baze(jer ne prihvata promjenu tipa) i mijenjaju koda.
Krenula sam sa tim, ali moguce je da cu napraviti neku f-ju koja ce provjeravati koji brojevi su zauzeti od 1 pa do maksimalnog, pa cu njima popunjavati.

Hvala ti. Puno si mi pomogao.
 
Odgovor na temu

[es] :: Visual Basic 6 :: Ne radi program = VB i Access

[ Pregleda: 2920 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.