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

Provera dupliranja podatka po unosu

[es] :: Access :: Provera dupliranja podatka po unosu

Strane: 1 2

[ Pregleda: 7495 | Odgovora: 23 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

srdjan ub
-

Član broj: 25171
Poruke: 147
212.200.183.*



+1 Profil

icon Provera dupliranja podatka po unosu19.02.2007. u 01:28 - pre 208 meseci
Imam tabelu KUPCI i u njoj podatak koji je ujedno i ključ Sifra_Kupca.
Treba mi da kod unosa Sifre_Kupca u formi, prilikom prelaska na sledeći podatak (u OnExit osobinu), postavim sigurnosnu proveru sa obaveštenjem ako taj unos već postoji da me vrati da ga ispravim.
 
Odgovor na temu

BiloKoje
Beograd

Član broj: 40147
Poruke: 401



+4 Profil

icon Re: Provera dupliranja podatka po unosu19.02.2007. u 06:52 - pre 208 meseci


Na osnovu čega određuješ da unos već postoji? I da li ti treba samo obaveštenje ili sprečavanje unosa? Iz pitanja nije jasno ni da li se radi o unosu u tabelu Kupci ili unosu u neku drugu povezanu tabelu gde je tabela Kupci na strani -više.
Ako se radi o samoj tabeli Kupci, a šifra je Auto Number ili neki drugi broj (ili tekst), znači da nemaš prirodni ključ, pa bi trebalo prvo o tome da razmisliš. Ima li razloga da ne koristiš prirodni ključ? Konkretno u Srbiji, svaka firma ili radnja ima PIB i matični broj. I jedan i drugi broj su jedinstveni i dobri kandidati za primarni kluč. No, bez obzira, na bilo koji od podataka možeš da odabereš u tabeli No Duplicates i Acces ti neće dozvoliti dupliranje podatka. Ako ti treba samo provera da li neki podatak postoji, a ti odlučuješ da li ćeš ga ipak uneti onda proveru vršiš u kodu naprimer na Before Update polja PIB.
.
.
.
uslov = "PIB=" & "'" & Me.PIB & "'"
proveraUnosa = DCount("[PIB]", "Kupci", uslov)

If proveraUnosa > 1 Then
MsgBox "Kupac sa PIB " & Me.PIB & " postoji u evidenciji"
End if

.
.
Slično je i ako kupca unosiš u neku drugu tabelu. Bolje je da duplikat sprečiš pomoću ključa, u tom slučaju bi bio složeni ključ, a ako to nije izvodljivo koristiš sličan kod.
 
Odgovor na temu

Getsbi

Moderator
Član broj: 124608
Poruke: 2828



+45 Profil

icon Re: Provera dupliranja podatka po unosu19.02.2007. u 06:57 - pre 208 meseci
Evo ti kod koji osim pronalaženja postojećeg prikazuje i eventualni pronađeni slig.

Code:

Private Sub Sifra_Kupca_Exit(Cancel As Integer)
        Dim Nova_sifra  As Long
          
    Nova_sifra = Me![Sifra_Kupca]
    
    If IsNull(DLookup("[Sifra_Kupca]", "KUPCI", "[Sifra_Kupca]=" & Nova_sifra)) = False Then
        Me![Sifra_Kupca].Undo   ' Ponistava vrednost unetog polja
        DoCmd.RunCommand acCmdUndo ' ponistava unos sloga
        Cancel = True
        MsgBox "Pod sifrom  " & Nova_sifra & "  imate unete podatke", vbCritical, "Paznja"
        DoCmd.FindRecord Nova_sifra 'nadje i prikaze slog sa sifrom koja je pokusana da se duplo unese
                                     ' varijanta kada su dostupni svi slogovi ,a ne samo novi
    End If
   End Sub

 
Odgovor na temu

srdjan ub
-

Član broj: 25171
Poruke: 147
212.200.183.*



+1 Profil

icon Re: Provera dupliranja podatka po unosu19.02.2007. u 12:16 - pre 208 meseci
Naravno da mi treba i sprečavanje unosa u tabelu KUPCI. To mi je glavna tabela i u njoj je Sifra_Kupca PRIMARNI ključ. Imam još jedan ključ, a to je PIB, ali mi Sifra_Kupca treba pri dovlačenju podataka. I Bilo_Koje, znam da mi access neće dati da unesem isti ali mi treba ranija provera kod unosa, da ne bih došao u situaciju da zatvaranjem forme izgubim sve poslednje upisane podatke u nju (jer access neće reagovati kada unesem postojeću sifru sve dok je forma u fokusu). Nadam se da sam bio donekle jasan.
Hvala!
I tebi Getsbi
Pozdrav !
 
Odgovor na temu

srdjan ub
-

Član broj: 25171
Poruke: 147
212.200.183.*



+1 Profil

icon Re: Provera dupliranja podatka po unosu19.02.2007. u 13:04 - pre 208 meseci
Citat:
BiloKoje
.
.
uslov = "PIB=" & "'" & Me.PIB & "'"
proveraUnosa = DCount("[PIB]", "Kupci", uslov)

If proveraUnosa > 1 Then
MsgBox "Kupac sa PIB " & Me.PIB & " postoji u evidenciji"
End if


Da treba mi samo obaveštenje i sprečavanje unosa, ali ovo tvoje za PIB obaveštenje ne radi
greška u liniji: proveraUnosa = DCount("[PIB]", "Kupci", uslov) ???????????????????
Ako sam dobro uradio, stavio sam ovaj kod u OnBeforeUpdate osobinu polja za unos?
Može li još neko pomoći?
I u Getsbijevom kodu prijavljuje mi grešku ovde: If IsNull(DLookup("[Sifra_Kupca]", "KUPCI", "[Sifra_Kupca]=" & Nova_sifra)) = False Then


[Ovu poruku je menjao srdjan ub dana 19.02.2007. u 18:33 GMT+1]
 
Odgovor na temu

izonic
ishab zonic
Tuzla

Član broj: 38128
Poruke: 591
*.PPPoE-2758.sa.bih.net.ba.

Sajt: www.icentar.ba


+2 Profil

icon Re: Provera dupliranja podatka po unosu19.02.2007. u 17:55 - pre 208 meseci
Private Sub ImePolja_AfterUpdate()
Dim a As Boolean
a = NadjiVrijednost("ImeTabele", "ImePolja", Me.ImeKontroleNaFormi)
If a = True Then
MsgBox "Ovaj podatak postoji"
Me.ImeKontrole.SetFocus
Me.ImeKontrole = Null
Me.ImeKontrole.SetFocus
End If
End Sub


Function NadjiVrijednost(ImeTabele As String, ImePolja As String, Vrijednost As Variant) As Boolean
Dim db As Database
Dim rst As Recordset
Dim Sql, a As Variant
'_________________________________________________ ____________
'Ova funkcija sluzi za trazenje zadanog podatka u zadanoj Tabeli u zadatom polju i vraca vrijednost
'ako ima True i ako nema podatka False
'Ulazne vrijednosti su: ImeTabela kao string ImePolja kao string i Vrijednost kao trazena vrijednost
'Ako je vrijednost string onda se pise pod znacimea navoda
'Ako je vrijednost datum onda se pise kao: "#05/05/2000#"
'Ako je vrijednost Yes/No onda se pise kao: Yes=-1 No=0
'Ako je vrijednost broj?ana onda se pise broj bez znakova navoda
'Autor funkcije(ZXZ)
'-------------------------------------------------------------------------------------
Set db = CurrentDb() 'Setovanje baze
On Error Resume Next
a = Val(Vrijednost) 'Brojcana vrijednost ulaznog podatka ako je ima
If a <> Vrijednost Then 'Ako je brojcana vrijednost razlicita od vrijednosti onda nije broj
If Left(Vrijednost, 1) <> "#" Then 'Ako je na prvom mjestu znak # onda je datum
Vrijednost = "'" & Vrijednost & "'" 'Posto je string treba dodati znake navoda
End If
End If
Sql = "SELECT " & ImeTabele & "." & ImePolja & " FROM " & ImeTabele _
& " WHERE (((" & ImeTabele & "." & ImePolja & ")=" & Vrijednost & "));"

Set rst = db.OpenRecordset(Sql) 'Setovanje tabele

If rst.RecordCount = 0 Then 'Ako je broj redova 0 tada
NadjiVrijednost = False ' NadjiVrijednost je false
Else 'Inace
NadjiVrijednost = True 'Vrijednost je true
End If
Set db = Nothing
rst.Close 'Zatvori rekordset(Qyery)
End Function

zxz
 
Odgovor na temu

Getsbi

Moderator
Član broj: 124608
Poruke: 2828



+45 Profil

icon Re: Provera dupliranja podatka po unosu19.02.2007. u 21:51 - pre 208 meseci
Kojeg je tipa podatak Sifra_Kupca iz tabele KUPCI ? Ovo što sam ti napisao važi za Number. I napiši mi koju poruku ti javlja.



[Ovu poruku je menjao Getsbi dana 19.02.2007. u 23:12 GMT+1]
 
Odgovor na temu

srdjan ub
-

Član broj: 25171
Poruke: 147
212.200.178.*



+1 Profil

icon Re: Provera dupliranja podatka po unosu20.02.2007. u 00:22 - pre 208 meseci
Ne, šifra mi je tipa text, a prikazuje mi run-time grešku '3464'
Moram sada proveriti i izonic-ev kod...
.
.
.
Radi !
U redu je briše postojeći podatak i daje mi obaveštenje, ali se postavlja na sledeći podatak, ne vraća se na isti?


[Ovu poruku je menjao srdjan ub dana 20.02.2007. u 12:58 GMT+1]
 
Odgovor na temu

Getsbi

Moderator
Član broj: 124608
Poruke: 2828



+45 Profil

icon Re: Provera dupliranja podatka po unosu20.02.2007. u 08:52 - pre 208 meseci
Ako je tekstualno polje onda probaj ovako.

Code:


Private Sub Sifra_Kupca_Exit(Cancel As Integer)
        Dim Nova_sifra  As String
          
    Nova_sifra = Me![Sifra_Kupca]
    
    If IsNull(DLookup("[Sifra_Kupca]", "KUPCI", "[Sifra_Kupca]= '" & Nova_sifra &"'")) = False Then
        Me![Sifra_Kupca].Undo   ' Ponistava vrednost unetog polja
        DoCmd.RunCommand acCmdUndo ' ponistava unos sloga
        Cancel = True
        MsgBox "Pod sifrom  " & Nova_sifra & "  imate unete podatke", vbCritical, "Paznja"
        DoCmd.FindRecord Nova_sifra 'nadje i prikaze slog sa sifrom koja je pokusana da se duplo unese
                                     ' varijanta kada su dostupni svi slogovi ,a ne samo novi
    End If
   End Sub

 
Odgovor na temu

srdjan ub
-

Član broj: 25171
Poruke: 147
212.200.177.*



+1 Profil

icon Re: Provera dupliranja podatka po unosu20.02.2007. u 11:57 - pre 208 meseci
Bravo, Majstore! To je to i dosta je bolje rešenje nego kod Izonic-a!
Hvala puno, pozdrav !
 
Odgovor na temu

izonic
ishab zonic
Tuzla

Član broj: 38128
Poruke: 591
*.PPPoE-188.sa.bih.net.ba.

Sajt: www.icentar.ba


+2 Profil

icon Re: Provera dupliranja podatka po unosu20.02.2007. u 12:49 - pre 208 meseci
Slazem se da je od Getsbi puno elegantnije rjesenje.

Ja sam imao ovo gotovo pa eto reko mozda niko ne odgovori.
zxz
 
Odgovor na temu

srdjan ub
-

Član broj: 25171
Poruke: 147
212.200.177.*



+1 Profil

icon Re: Provera dupliranja podatka po unosu20.02.2007. u 13:17 - pre 208 meseci
Ne, Hvala tebi Izonic na trudu, zahvalio sam ti se i ranije, ali mi je rešenje komplikovanije jer koliko sam razumeo svaki put ubacivati drugačiji modul?
Pozdrav!
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Provera dupliranja podatka po unosu20.02.2007. u 18:08 - pre 208 meseci
Postoji elegantnije resenje, sa mnaje koda. Prouci event Form_error u helpu. Tmo ima i primer koji upravo radi ono sto tebi treba. Radi se o sledecem:
Ako pokusas da uneses duplikat u bio koje polje koje je indeksirano UNIQUE indeksom Access ceti dozvoliti unos u polje. Kad Access pokusa da podatke sa forme prebaci u tabelu, sama tabela nece dozvoliti unos i dobices poruku na engleskom, uglavnom nerazumljivu za korisnika. Isto se desava ako u child tabelu pokusas da uneses neki ParentID koji ne postoji u parent tabeli. Isto se desava sa bilo kojom drugom greskom koju ne mozes da ulovis sa standardnim error handling. Event Form_error ti omogucuje da ulovis te greske i da ako hoces promenis poruku (prevdes je na tvoj maternji jezik) i odradis sta god drugo hoces, pre nogo sto korisniku vratis poruku.

U tvom slucaju, sve sto su ti kolege predlozile, islo bi u tu proceduru. Gde je prednost? Prvo, u brzini. Onako kako su kolege predlozile, provare se radi uvek, bio punos dobar ili los. Dlookup i OperRecordest nisu posebno brze operacije, kad imas mnogo podataka. Sa Form_Error eventom tek ako Access sam otkrije duplikat na unosu, ti odradis trazenje i poakzes gde se vec nalazi taj kluc, dlookup ili recordset, svejedno.
Drugo, ako bas hocu da cepam dlaku na cetvoro (a necu ;-) mogao bih svakom od predlozenih resenja da nadjem manu i da pokazem da je u odredjenim okolnostima moguce dobiti Accessovu poruku o duplikatu, koju smo hteli da izbegnemo. Ne kazem da te okolnosti nastupaju veoma cesto, stoga su resenja absolutno prihvatljiva za normalnu praksu. Predlazem samo da proucis Form_Error jer je veoma elegantno resenje i pametnim izborom reci za prevodjenje accessovih poruka moze se dobiti cut/paste resenja koje ce sa minimumo izmena da radi na bilo kojoj formi. Mislm da cak i u bazi znanja ima mozda primer (nisam 100% siguran)
 
Odgovor na temu

Fanta
Fanta Genije

Član broj: 119794
Poruke: 118
*.cmu.carnet.hr.



Profil

icon Re: Provera dupliranja podatka po unosu21.02.2007. u 21:56 - pre 208 meseci
Postoji li kakav način da se utvrdi da ako korisnici unose nekakav podatak u bazu preko forme i sličan podatak u bazi već postoji, ne znam razlikuje se samo u jednom slovu, dijelu riječi ili slično, pretpostavimo da idemo do slićnosi od 80% da nas forma upozori da sličan podatak (ili podaci) u bazi već postoje i da li smo sigurni da želimo unjeti taj podatak?
 
Odgovor na temu

Getsbi

Moderator
Član broj: 124608
Poruke: 2828



+45 Profil

icon Re: Provera dupliranja podatka po unosu22.02.2007. u 06:16 - pre 208 meseci
Taj pristup postupnog približavanja je ono što delom radi Combo Box ali bez slanja posebne poruke. Doduše on sve vreme ispisuje u polju one najbliže podatke koje je našao prilikom tvog ukucavanja. Dosta je napisano i o List Box-u i Datashitu. Pogledaj Zidarev post u temi "Query, relacije ,događaji i subfforma"

http://www.elitesecurity.org/t244687-0#1472145


 
Odgovor na temu

Fanta
Fanta Genije

Član broj: 119794
Poruke: 118
*.adsl.net.t-com.hr.



Profil

icon Re: Provera dupliranja podatka po unosu22.02.2007. u 13:28 - pre 208 meseci
Pa pokušaću promijeniti u combo box, ali to će mi pomoći kod unosa novih podataka u bazu koji se unose preko tipkovnice, ali većina podataka u moju bazu se unosi metodom copy/paste što znaći da bih trebao nešto što će mi provjeravati unešeni string sa onima unešenim u bazu u tablicu, a te iste podatke, inače sam napravio i listbox koji prikazuje sve unešene podatke(u pitanju je popis proizvoda) ispod textbox-a koji služi za unos.
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Provera dupliranja podatka po unosu22.02.2007. u 16:30 - pre 208 meseci
Ako se plasis duplikata koji nus tacno duplikati ali su 'veoma slicni' vec unesenim podacima, onda imas ozbiljan problem sa izborom PK. Sta god da je, autonumber ili nesto drugo, imas problem logicke prirode.

Razmisli sta je to sta zaista jedinstveno odredjuje rekord. Ako kod 123456 i kod 123465 mogu da oznacavaju u sustini isti rekord, onda ne valja kodiranje. Mora sda postoji nesto realno sto ti pomaze da raspoznas rekord od rekorda. Ako je tvoj kod na primer KupacID, da li dozvoljavas isto ime i prezime za dva kupca sa dva razlicita ID? Kako onda znas koji je koji? Ako imas neke document ID (prijemnica, faktura), mora da postoji jos nesto sto ti kaze da li su iste ili razlicite. Mogu li u istom danu da se unesu dve fakture za istog kupca pod razlicitim brojevima? Ako ne, onda je datum-kupacID moguc PK (alternate key). Ako ipak dozvoljavas, ali se ne desava cesto, da isti kupac ima vise faktura u istom danu, onda imas 'priblizan' PK. Tada onda mozes po (KupacID,Datum) da pronadjes potencijalni duplikat i kazes korisniku da jedan 'slican' vec postoji. Za to bi koristio kod koji su dali kolege, error_form ne radi za ovo.
 
Odgovor na temu

Fanta
Fanta Genije

Član broj: 119794
Poruke: 118
*.adsl.net.t-com.hr.



Profil

icon Re: Provera dupliranja podatka po unosu23.02.2007. u 08:59 - pre 208 meseci
Nije problem oko primarnih ključeva i takvih stvari, zahvaljujući vama to sam sve savladao i dobro baratam time, a i polje u tablici je postavljeno na index.

Kao što sam rekao korisnici mi unose podatke u bazu metodom copy/paste i sad zamislimo da imamo tablicu proizvodi u koju unosimo proizvode tom metodom, pored toga što se mogu i ručno unositi. Sve je Ok kad se unese proizvod istog imena, odbiće ga, i reći će da takvo što već postoji u bazi u tablici, da je u pitanju duplikat.Imamo i tablicu tvrtke, te tablicu tvrtke-proizvodi koja je u odnosu prema navedenim tablicama many to many.

Budući da meni više ljudi unosi podatke u moju bazu, pogotovo nove proizvode, zamislimo ovu situaciju: Korisnik A unese u tablicu Proizvod metodom Copy/Paste: "Adaptacija i uređenje" i njemu se dodijeli jedinstveni ID i pohrani ga u bazu. Isto tako poveže ga sa tvrtkama i sve se pohrani u tablicu tvrtke-proizvodi. Korisnik B, ne znam isti dan, za tjedan, mjesec,... istom metodom (Copy/Paste) unese podatak: "Adaptacije i uređenje" i njemu se također dodijeli jedinstven ID i pohrani u bazu te ga on također poveže sa tvrtkama i pohrani u bazu.

Radi se znači o potpuno istoj stvari, razlika mi je samo u jednom slovu, ali to je dovoljno da prođe, a ja da imam "duplikate" u bazi pod Proizvodima, a isto tako i u povezanim tabelama. Kako to spriječiti? Znači trebao bih nešto će provjeravati, kad se potvrdi unos podataka, ne znam proći kroz zadani string, te ga usporediti sa onim u bazi te izbaciti obavijest ako postoji kakav sličan rezultat, u cilju spriječavanja pojave "duplikata".

Ima li tko kakvu ideju ili savjet?
 
Odgovor na temu

Getsbi

Moderator
Član broj: 124608
Poruke: 2828



+45 Profil

icon Re: Provera dupliranja podatka po unosu23.02.2007. u 10:06 - pre 208 meseci
Ako pristup šifarniku proizvoda imaju svi useri i to sve privilegije nad njim onda je to problem. Računar nije dovoljno pametan da shvati da "Adaptacija i uređenje" i "Adaptacije i uređenje" jesu isti pojam kao što su "kosa" i "koza" dva različita pojma. Ja bih pre rekao da ti imaš organizacioni problem nego informatički. Nikako mi se ne sviđa ideja da svi mogu da ažuriraju šifarnik jer samo odgovoran pojedinac može da donese odluku o ispravnosti upisa gore navedenih pojmova.

Još nešto. Šta misliš zašto se teži uvođenju JMBG-a, PIB-a (ne znam tvoju lokaciju) ili broja socijalnog osiguranja u SAD. Upravo zbog jedinstvenosti slogova. Bilo bi zlo i naopako da svi mogu da ih dodeljuju.
 
Odgovor na temu

Fanta
Fanta Genije

Član broj: 119794
Poruke: 118
*.adsl.net.t-com.hr.



Profil

icon Re: Provera dupliranja podatka po unosu23.02.2007. u 12:31 - pre 208 meseci
Zamisli da si napravio program u koji je potrebno unjeti preko 100.000 podataka koji se tiču samo proizvoda (možda pretjerujem, ali desetina će na kraju sigurno biti). Kad bi to unosila samo jedna osoba onda bi stvarno potrajalo, a to je samo dio unosa, jer ima ih još (tvrtke, djelatnosti, proizvođači). Zato sam i nedavno pitao kako se dijele tablice lokalno, upravo iz tog razloga, u tvrtci više ljudi unosi podatke u istu bazu, a čak i da ih unosi jedna osoba, nakon mjesec dana ne bi se ni ona od mase podataka sjetila da li je nešto već unijela. Sve je sada napravito kako treba, svaki proizvod, tvrtka, djelatnost, proizvođač ima svoj id, polja su indexirana koja trebaju biti i tako dalje. Znači baza više nema mane. A sad još zamisli da si zaposlio hrpu crnaca koji te podatke unose, međusobno ih povezuju i nemaju pojma o tvom jeziku i razliku između riječi koja završava na a ili e.

Znaci izgleda da cu morati isprogramirati izgleda neku funkciju koja će to provjeravati.

Mislio sam da možda postoji neka gotova string funkcija ili barem približna koju bih mogao iskoristiti i koja bi mi olakšala programiranje
 
Odgovor na temu

[es] :: Access :: Provera dupliranja podatka po unosu

Strane: 1 2

[ Pregleda: 7495 | Odgovora: 23 ] > FB > Twit

Postavi temu Odgovori

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