[ vujkev @ 07.11.2005. 11:40 ] @
Treba da dodam kolonu u Accessu, ali tako da imam i default vrednost u toj koloni (0). Pokušao sam sa raznim kombinacijama ove komande

Code:

Alter Table Table1 add column NovaKolona numeric default 0


ali naravno bez uspeha. Tražio sam i po netu i po njima ovaj kod je ispravan za SQL server. Kako to isto uraditi u Access-u


[ banem @ 07.11.2005. 12:39 ] @
Mislim da ti treba i db.Execute, nešto nalik ovome:

Dim db As DAO.Database
Set db = CurrentDb
db.Execute "ALTER TABLE MyTable ADD COLUMN MyField NUMERIC DEFAULT 0;"


[Ovu poruku je menjao banem dana 07.11.2005. u 13:40 GMT+1]
[ vujkev @ 07.11.2005. 12:44 ] @
znam da mi treba neka veza sa accessom i to nije problem (nisam početnik u radu sa bazama), nego mi treba sql naredba za dodavanje kolone.

Ova naredba koju si ti postavio ne radi ni u samom access-u
Citat:
Sintax error in ALTER TABLE statement

i selektuje mi "0" (nulu)
[ mladenovicz @ 07.11.2005. 13:49 ] @
Ne znam napamet kako bi islo sa sql statementima, ali mozes koristiti DAO. Imas table i field objekte, kreiras novi field CreateField metodom, i onda mozes setovati DefaultValue property. Sve u svemu par linija koda.
[ banem @ 07.11.2005. 19:59 ] @
Zar se DefaultValue ne odnosi _samo_ na novi zapis?

Ako prijavljuje onu grešku sa DefaultValue, izbaci taj deo pa napravi jedan Update upit gde će uslov biti IIf(IsNull(MyField);0;MyField). Dakle prvo kreiraš kolonu i onda sa SQL "protrčiš" kroz nju i izmeniš sve IsNull vrednosti sa 0.
[ vujkev @ 07.11.2005. 20:23 ] @
@mladenovicz

Znam za to i koristim ga već u programu, ali hteo sam da uradim preko jedne SQL komande i onda me iznervirao što ne radi i morao sam da pitam kako se radi.


@banem

nije problem za recorde koji postoje, ali šta je sa rekordima koji će tek biti dodati. Onda bih morao da prepravljam aplikaciju da upisuje "0" u to polje, a to mi se bas ne radi
[ banem @ 08.11.2005. 07:22 ] @
db.Execute "ALTER TABLE MyTable ADD COLUMN MyField NUMERIC SET DEFAULT '0';"

Obrati pažnju na iskaz SET. Za apostrofe oko nule nisam siguran, proveri.

[Ovu poruku je menjao banem dana 08.11.2005. u 08:29 GMT+1]
[ vujkev @ 08.11.2005. 08:30 ] @
Da probao sam i to ali prijavljuje grešku kod DEFAULT reči
[ banem @ 08.11.2005. 11:29 ] @
Veoma interesantan problem, ali rešenje uvek postoji. :)

Kod Accessa u raznim verzijama su ljudi prijavljivali različite probleme u zavisnosti od verzije. U A97 DEFAULT je nemoguć, kod A2000 je (tako kažu) nekad radi kada naziv tabele ogradiš sa [], nekada kada postaviš apostrofe na vrednost, a nekada kada ukloniš tačka-zarez (;) na kraju izraza.

Međutim, postoji drugi način da ne moraš da misliš o verziji. Ovo *sigurno* radi:

Code:

Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim fld As DAO.Field

Set db = CurrentDb

db.Execute "ALTER TABLE [NazivTabele] ADD COLUMN NazivPolja NUMERIC"
Set tdf = db.TableDefs("NazivTabele")
Set fld = tdf.Fields("NazivPolja")
fld.DefaultValue = "0"


Za slučaj da imaš opet grešku (ali ne verujem) idi u Tools/Options/ Tables/Queries i uključi polje "This Database" opcije SQL Server Compatibility Syntax (ANSI 92). Meni u Acc2000 radi na oba načina i kada je uključeno i kada je isključeno.

PS. E, da, u VBA prozoru Tools/References mora biti uključeno "Microsoft DAO 3.6 Object Library.

[Ovu poruku je menjao banem dana 08.11.2005. u 12:31 GMT+1]
[ vujkev @ 08.11.2005. 11:46 ] @
Hvala što si se toliko potrudio, ali kao što rekoh mladenovicz-u taj način znam nego sam hteo sve preko jedne SQL komande. No nije bitno rešiću ga ovako jer kao što reče *sigurno* radi

Pozdrav
[ Trtko @ 08.11.2005. 12:39 ] @
Dosta davno sam to radio . pa ti saljem dio koda.
Tablica je bila na formi u gridu i dodavao sam u tu tablicu novo polje
u koje sam zbrajao sumu neke odabrane kolone

Application.SetOption "Default Field Type", 2
DoCmd.RunCommand acCmdInsertTableColumn
Set ctlCurrentControl = Screen.ActiveControl
novop = ctlCurrentControl.Name
, novop je nastalo novo polje poslije komande accmdinsert........


DoCmd.SetWarnings True

' tu sam ja zbrajao rezultate i upisivao u novo polje

defpolj = tekuce + "+" + baznopolje

noviid = "UPDATE " + tabla + " set " + tabla + "." + novop + "=" + defpolj
DoCmd.RunSQL noviid
DoCmd.SetWarnings False


Nadam se da sam pomogao

Pozdrav Trtko
[ vujkev @ 08.11.2005. 12:43 ] @
Problem je bio postaviti DEFAULT u novom polju za za svaki novi record , a ne dodavanje polja u bazu. Hvala u svakom slučaju