Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Neregularan upis u tabelu bez ikakvih upozorenja!

  • 12 odgovora
  • 3.061 pregleda

Najnovija ↓

Neregularan upis u tabelu bez ikakvih upozorenja! 04.02.2008. u 13:02 · pre 228 meseci
izmenjeno 2 puta, poslednji put konstantin 05.02.2008. u 09:03
  1. konstantin05.02.2008. u 09:03zapis iz teksta poruke
  2. konstantin05.02.2008. u 09:01zapis iz teksta poruke
#1
Ljudi zabezeknuo sam se prije par dana. Imao sam zadatak da prihvatim neke podatke u access, iz source tabele prilagoditi podatke u destination tabelu. Napravio kod, sve prošlo kako treba ali shvatim da je broj insertovanih slogova manji nego što sam očekivao,iako nisam dobio nikakvu grešku!? Ganjao problem sa kolegom čitav sat i shvatim da su u source tabeli u kojoj nema primarnog ključa dozvoljeni duplirani slogovi i da ustvari nisu insertovani u destination tabelu naravno upravo oni slogovi koji se ponavljaju jer je u drugoj tabeli definisan primarni ključ.
E sada, sve bi to bilo normalno da sam ja dobio bilo kakvu grešku, međutim nikakvo upozorenje ni od Jet-a ni od VBA iako pokušavam da insertujem slogove koji imaju istu vrijednost PK kao neki drugi slogovi.

Da Vam ne bih komplikovao sa svojim velikim tabelama i svojim kodom, napravio sam sličan kod za 2 tabele:

test1:
f1 txt
f2 txt
f3 num
f4 txt
f5 num

i

test2:
p1 txt PK
p2 txt PK
p3 num PK
p4 txt
p5 num

Ručno ažurirajte tabelu test1 sa 10ak slogova ali da se prva 3 polja ponavljaju za neke slogove, kreirajte dugme cmdBozeSacuvaj i probajte da se uvjerite:

Private Sub cmdBozeSacuvaj_Click()
Dim db As Database
Dim rst1, rst2 As Recordset
Dim str5, strIns5 As String

Set db = CurrentDb
db.Execute "delete * from test2;"
str5 = "SELECT f1,f2,f3,f4,f5 from test1;"
Set rst1 = db.OpenRecordset(str5)
rst1.MoveLast

MsgBox "Tabela test1 ima ukupno slogova-" & rst1.RecordCount

rst1.MoveFirst
While Not rst1.EOF


strIns5 = "insert into test2 (p1,p2,p3,p4,p5) values('" & rst1!f1 & "','" & rst1!f2 & "'," & rst1!f3 & ", '" & rst1!f4 & "', " & rst1!f5 & ");"
db.Execute (strIns5)


rst1.MoveNext
Wend
Set rst2 = db.OpenRecordset("select count(*) as brsl from test2;")


MsgBox "Kraj prenosa u tabelu test2 ukupno samo" & " " & rst2!brsl & " slogova!"

End Sub



Prvo kako je ovako nešto uopšte moguće , a drugo kako se odbraniti od ovako hinjske situacije?
Re: Neregularan upis u tabelu bez ikakvih upozorenja! 04.02.2008. u 16:18 · pre 228 meseci #2
Očigledno da nije isto direktno raditi u tabeli i vršiti importovanje. Sećem se od ranije, recimo konverzija:
Informix -> Clipper. Morao sam da uklonim sva ograničenja (Constraint) da bi konverzija bila valjana. Nakon toga postavljao sam indekse i ostalo. U ovom slučaju Primarne ključeve.
Potpis
https://mzahorjanski.wixsite.com/mzahorjanski
https://www.fiverr.com/miroljubzahorja?up_rollout=true
https://www.youtube.com/@miroljubzahorjanski


Re: Neregularan upis u tabelu bez ikakvih upozorenja! 05.02.2008. u 09:10 · pre 228 meseci #3
Nije stvar u generalnim problemima oko importa.
Mene interesuje kako da spriječim NEUPOZORAVANJE sa bilo kog nivoa dok se prilikom importa krše takva pravila kao što je nemogućnost dupliranja primarnog ključa.
Evo napunite tabelu test1 sa 10 probnih slogova i izvršite gore postavljeni testni kod. Stvarno bezveze.

Npr. Test1:

1 2 4 3 3 2
1 2 4 2 3 2
1 1 1 4 1 6
1 1 1 3 3 1
2 2 2 3 5 6
1 2 4 3 3 2
1 2 4 2 3 2
1 1 1 4 1 6
1 4 9 3 3 1
2 2 2 3 5 6

Stvarno bezveze.
Ima li neko odgovor na gore postavljeno pitanje?
Re: Neregularan upis u tabelu bez ikakvih upozorenja! 06.02.2008. u 09:36 · pre 228 meseci #4
Radio sam i update (takođe sa db.execute) poslije inserta i takođe ne dobijem nikakve greške ni upozorenja sa "bilo koje strane".
Da li je moguće da generalno za metod Execute pri objektu db nema nikakvih upozorenja?
Re: Neregularan upis u tabelu bez ikakvih upozorenja! 06.02.2008. u 11:59 · pre 228 meseci #7
Ako hoćeš da ti neko istestira nešto, trebalo bi da napraviš primer i zakačiš ga. Malo ljudi ima vremena da od početka kreira tabele po tvom uputsvu i implementira code. Deviza je : Pomozi da bi ti pomogli. :-)
Potpis
https://mzahorjanski.wixsite.com/mzahorjanski
https://www.fiverr.com/miroljubzahorja?up_rollout=true
https://www.youtube.com/@miroljubzahorjanski


Re: Neregularan upis u tabelu bez ikakvih upozorenja! 06.02.2008. u 12:20 · pre 228 meseci #9
Napravio sam ja i upravu je covjek, kopira samo one koji nemaju iste vrijednosti PK a one druge ne bez ikakvog upozorenja ili obavjestenja da ih nije kopirao

Al nisam skontao poentu svega ovoga, zasto jednostavno ne uradis copy paste i ako nesto ne valja napravice 'paste error' tabelu.
Re: Neregularan upis u tabelu bez ikakvih upozorenja! 06.02.2008. u 12:26 · pre 228 meseci
izmenjeno 1 put, poslednji put konstantin 06.02.2008. u 12:41
  1. konstantin06.02.2008. u 12:41zapis iz teksta poruke
#10
Zato što prihvatam veliku količinu podataka za tačno zadani format i pripremam ih za migraciju u buduću bazu podataka. Vrlo je osjetljiv posao a mdb mi je u ovom slučaju samo tranziciona baza.
Re: Neregularan upis u tabelu bez ikakvih upozorenja! 06.02.2008. u 15:04 · pre 228 meseci #12
Treba ovako:

db.Execute (strIns5), dbFailOnError

db.Execute treba uvek izvrsavati sa opcijom dbFailOnError. Ako se pojavi greska, cela transakciaj se ponistava (rollback). Ako dodas Error handling, videces i koja je greska u pitanju. Ako ne dodas error handling, dobices Error: End, Debug poruku i onda mozes da vidis i koja je linija proizvela gresku.

Ako trazis Help za Execute mozes da vidis ovo:

dbFailOnError Rolls back updates if an error occurs (Microsoft Jet workspaces only).


Zakacio sam fjl sa malim prepravkama koda. Ne prolaze podaci s greskom i dobijes lepu poruku.

:-)




Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme