[ nensika @ 25.05.2006. 12:31 ] @
kako cu da napisem macro da se word dokument konektuje na bazu i dobija podatke iz baze odredjene sql upitom,ili postoji drugi nacin!? hvala
[ misk0 @ 25.05.2006. 14:52 ] @
Mislim da ovo stvarno nema veze sa bazama podataka vec sa Microsoft Office paketom
[ Jpeca @ 26.05.2006. 06:59 ] @
Postoji mogućnost da se podaci iz baze uvuku u Word koristeći Mail Merge. Ova opcije pogodna je ne samo za cirkularna pisama, nego i pojedinačne dokumente vezane sa bazom -npr. razne kataloge. Startuješ Tools/Letters and Mailing/Mail Merge i pratiš proceduru korak po korak.
U okviru procedure - korak 3- definišeš vezu sa bazom - Use names and addresses from a file or a database. koristeći Edit recipient list.... možeš da ograničiš koji zapisi iz baze treba da se učitaju (umesto WHERE uslova). U koraku 4 postavljaš polja iz baze na dokument - izaberi More items... da dobiješ spisak svih polja iz baze.
Detaljnije informacije možeš pronaći na netu npr.
http://office.microsoft.com/en-gb/assistance/HA010349201033.aspx









[ nensika @ 29.05.2006. 09:10 ] @
Da,da,za to vec znam,ali meni treba da se konektujem sa bazom iz worda,postavim SQL upit i dobijem trazene podatke. Mail Merge sve to cini ali mi nezadovoljava SQL upit.Ako je neko nesto slicno radio nek javi!!!!Hvala
[ Jpeca @ 29.05.2006. 11:28 ] @
Neznam zašto je upit koje se formira kroz mail merge nezadovoljavajući da bi mogao da ti pomognem.
Naravno makro pruža veću fleksibilnost pa evo kod koji to radi. Prethodno je potrebno da dodaš referencu na Microsoft ActiveX Data Objects 2.8 Library (Tools/Reference iz VBA editora)

Code:

Option Explicit

Private Sub Popuni_Bookmarke()
' Popunjava bukmarke iz baze
' U primeru je Access  - promeniti parametre pristupa  za druge baze
' P.Jovanovic   29/5/2006
  
  Dim oConn As ADODB.Connection
  Dim sConn As String
  Dim oRS As ADODB.Recordset
  Dim sFileName As String
  Dim sName As String
  Dim sPhone As String
  Dim sFax As String
' Otvaranje konekcije
  sFileName = "E:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb "  ' Putanja do baze
  sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sFileName & ";Persist Security Info=False"
  Set oConn = New ADODB.Connection
  oConn.ConnectionString = sConn
  oConn.Open
' Ucitavanje podataka za upit
  Set oRS = oConn.Execute( _
    "SELECT ContactName, Phone, Fax  FROM Customers")

' Petlja za prolazak kroz ucitanje vrednost
 If Not oRS.EOF Then
      sName = "" & oRS("ContactName")
      sPhone = "" & oRS("Phone")
      sFax = "" & oRS("Fax")
 End If
 
 ' Zatvaranje konekcije
 oRS.Close
 Set oRS = Nothing
 oConn.Close
 Set oConn = Nothing
 
 ' Popunjavanje bukmarka
   ActiveDocument.Bookmarks("bmkFrom").Range.Text = sName
   ActiveDocument.Bookmarks("bmkPhone").Range.Text = sPhone
   ActiveDocument.Bookmarks("bmkFax").Range.Text = sFax
End Sub



Imaš puno primera i na Netu - pozivanje baze iz Worda, kao popunjavanje Word dokumenta iz aplikacije ili Access baze.

Zaboravih da kažem da prvo napraviš Word dokument sa tri bukmarka: bmkFrom, bmkPhone i bmkFax, pa da pozoveš ovaj makro da bi isprobao
[ nensika @ 29.05.2006. 13:12 ] @
hvala vam puno,puno,puno!!!!!
[ nensika @ 31.05.2006. 14:47 ] @
Set oRS = oConn.Execute( _
"SELECT CRVW.project_name, CRVW.item_type, CRVW.approved_date, CRVW.change_date, CRVW.change_issue, CRVW.change_number, exp_CRVW.completion_date, exp_CRVW.cost, CRVW.from_vendor, CRVW.required_date, CRVW.responded_date, CRVW.start_date, CRVW.status, CRVW.spec_section, CRVW.title, CRVW.to_vendor, PROJ.company_name, PROJ.job_number, PROJ.project_number, PROJ.project_title
FROM CRVW, Item, PROJ, VNMT
WHERE (ITEM.module_name=CNTE) And (CRVW.project_name=PROJ.project_name) And (CRVW.item_type=ITEM.acronym) And (PROJ.company_abbrev=VNMT.vendor_abbrev) And (CRVW.project_name=DEMO) And (VNMT.project_name='DEMO') Or (exp_ITEM.module_name Is Null) And (CRVW.project_name=PROJ.project_name) And (CRVW.item_type=TEM.acronym) And (PROJ.company_abbrev=VNMT.vendor_abbrev) And (CRVW.project_name=DEMO) And (VNMT.project_name=DEMO);
")


kako da postavim ovaj upit da bi funkcionisalo??????
[ Jpeca @ 01.06.2006. 08:15 ] @
Komande se u VBA standardno pišu u jednom redu. Ukoliko komadu želiš da nastaviš u sledećem redu stavi se _ (underscore) na kraju reda. Dakle obavezno stavi _ umesto ; i probaj. Ukoliko je potrebno da sam upit pišeš u više redova podeli ga na manje stringove koje spajaš sa & pa _ za prelazak u sledeći red. Ukoliko želiš da ti upit bude čitljiviji u tekst upita možeš da ubaciš chr(13) - prelazak u novi red Dakle nešto ovako:
Code:

Set oRS = oConn.Execute( _
  "SELECT CRVW.project_name, CRVW.item_type, CRVW.approved_date, CRVW.change_date, " & _
  "CRVW.change_issue, CRVW.change_number, exp_CRVW.completion_date, exp_CRVW.cost, "  & _
  "CRVW.from_vendor, CRVW.required_date, CRVW.responded_date, CRVW.start_date, " & _ 
  "CRVW.status, CRVW.spec_section, CRVW.title, CRVW.to_vendor, PROJ.company_name, " & _
  "PROJ.job_number, PROJ.project_number, PROJ.project_title FROM CRVW, Item, PROJ, VNMT " & chr(13) &  _  
  "WHERE (ITEM.module_name=CNTE) And (CRVW.project_name=PROJ.project_name) And " & chr(13)  &  _
 " (CRVW.item_type=ITEM.acronym) And (PROJ.company_abbrev=VNMT.vendor_abbrev) And " & chr(13)  &  _
 "(CRVW.project_name=DEMO) And (VNMT.project_name='DEMO') Or (exp_ITEM.module_name Is Null) And " & chr(13) & _ 
 "(CRVW.project_name=PROJ.project_name) And (CRVW.item_type=TEM.acronym) And " & chr(13)  & _
 "(PROJ.company_abbrev=VNMT.vendor_abbrev) And (CRVW.project_name=DEMO) And (VNMT.project_name=DEMO) " _
)

sve ovo pod uslovom da ti je upit ispravan.
[ nensika @ 01.06.2006. 11:59 ] @
Item cannot be found in the collection corresponding to the requested name or ordinal.

u pitanju je sybase, Adaptive Server Anywhere
uspevam da procitam podatke iz tabele jedne,ali da ih spojim ne .....Vec me boli glava od ovoga!!!! probala sam i sa izmenama u Tool\References,ali ne ide!!!!!
[ nensika @ 01.06.2006. 13:26 ] @
to je error 3265
[ Jpeca @ 01.06.2006. 14:45 ] @
Da li si probala neki krajnje jednostavan upit - da vidiš da li uopšte funkcioniše veza sa konkretnom bazom? Možda parametri nisu dobri?

Ako nisi probaj - pa javi.

Ako jesi probaj da debaguješ i vidiš gde je greška.

Uvedi jednu string promenljivu u kojoj ćeš da čuvaš upit - dakle kod bi bio:
Code:

Dim sSQL AS String 
sSQL = "SELECT"SELECT CRVW.project_name, CRVW.item_type, CRVW.approved_date, CRVW.change_date, " & _
  "CRVW.change_issue, CRVW.change_number, exp_CRVW.completion_date, exp_CRVW.cost, "  & _
  "CRVW.from_vendor, CRVW.required_date, CRVW.responded_date, CRVW.start_date, " & _ 
  "CRVW.status, CRVW.spec_section, CRVW.title, CRVW.to_vendor, PROJ.company_name, " & _
  "PROJ.job_number, PROJ.project_number, PROJ.project_title FROM CRVW, Item, PROJ, VNMT " & chr(13) &  _  
  "WHERE (ITEM.module_name=CNTE) And (CRVW.project_name=PROJ.project_name) And " & chr(13)  &  _
 " (CRVW.item_type=ITEM.acronym) And (PROJ.company_abbrev=VNMT.vendor_abbrev) And " & chr(13)  &  _
 "(CRVW.project_name=DEMO) And (VNMT.project_name='DEMO') Or (exp_ITEM.module_name Is Null) And " & chr(13) & _ 
 "(CRVW.project_name=PROJ.project_name) And (CRVW.item_type=TEM.acronym) And " & chr(13)  & _
 "(PROJ.company_abbrev=VNMT.vendor_abbrev) And (CRVW.project_name=DEMO) And (VNMT.project_name=DEMO) "
Set oRS = oConn.Execute(sSQL )  


Stavi breakpoint na liniju Set oRS ... i proveri šta se nalazi u sSQL promenljivoj (najlakše iz Imediate window otkucaj ?sSQL), proveri da li je to OK - probaj da tako dobijeni upit izvršiš iz sqlklijenta da vidiš rezultat.
[ nensika @ 01.06.2006. 15:25 ] @
Veza sa bazom funkcionise,proverila sam to sa NAJJEDNOSTAVNIJIM UPITOM....gresku ne javlja nigde kad sam debagovala,ali kad pokrenem Run, javlja mi ERROR 3265. Ne znam u cemu je problem
[ Jpeca @ 02.06.2006. 07:37 ] @
Kako ne javlja nigde kad si debagovala - da li to znači da je uradio ili je greška na nekoj drugoj liniji?

Da li si probala da izvršiš upit iz sSQL stringa direktno? Koliko sam shvation greška se najčešće javlja kod pogrešno ispisanih ili izostavljenih vrednosti polja. Možeš da probaš da dodaš ; na kraju stringa - ja mislim da ne treba, ali ne bi trebalo da smeta.

Možeš da pogledaš ovde
http://www.experts-exchange.co...bases/Q_21097010.html#11825437
kako da dodaš obradu greške i dobiješ jasniju informaciju o grešci.
[ nensika @ 02.06.2006. 10:58 ] @
kako9 da izvrsim upit iz sSQL direktno?upit je u redu jer je preuzet iz jednog programa koji je povezan sa ovom mojom bazom i funkcionise,ali je najveci problem sto ja to MORAM da uradim u Word-u!!!!!!!!!!!!!!!!!!!
[ Jpeca @ 02.06.2006. 11:26 ] @
Kad se program zaustavi na breakpointu - pre Set oRS = oConn.Execute(sSQL) -
u Immediate window otkucaj ?sSQL

Kopiraj dobijeni SELECT izraz (Copy),

Otvori SQL klijent za tvoju bazu i izvrši taj upit - Paste.

Ako ti jednostavni upiti rade, a imaš mogućnost da kreiraš objekte bazi možeš da napraviš view pa onda jednostavno SELECT .... FROM view

[ nensika @ 02.06.2006. 14:55 ] @
u sql klijentu upit funkcionise,pa sam problem resila sa wiew koji sam napravila u bazi! Ali nista ja bez vase pomoci! treba da uradim neki izvestaj pa mi neki podaci trebaju van tabele(kao sto ovaj program radi),ali ostali treba da ostanu u tabeli.postoji li neka metoda koja vraca tabelu sa podacima koje se nalaze u redu u tabeli gde i podatak koji sam izdvojila?
[ Jpeca @ 05.06.2006. 14:10 ] @
Evo modifikovan kod koji popunjava tabelu umesto bookmarke. Pretpostavlja se da je tabela prethodno kreirana i da je prva tabela u dokumentu. Na osnovu toga nadam se da možeš da iskombinuješ šta ti treba sa bukmarcima i tabelom

Code:

Option Explicit


Private Sub Popuni_Bookmarke()
' Popunjava tabelu iz baze
' U primeru je Access  - promeniti parametre pristupa  za druge baze
' P.Jovanovic   5/6/2006
  
  Dim oConn As ADODB.Connection
  Dim sConn As String
  Dim oRS As ADODB.Recordset
  Dim sFileName As String
  Dim tbl As Word.Table
  Dim r As Integer
' Otvaranje konekcije
  sFileName = "E:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb "  ' Putanja do baze
  sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sFileName & ";Persist Security Info=False"
  Set oConn = New ADODB.Connection
  oConn.ConnectionString = sConn
  oConn.Open
' Ucitavanje podataka za upit
  Set oRS = oConn.Execute( _
    "SELECT ContactName, Phone, Fax  FROM Customers")

 Set tbl = ThisDocument.Tables(1)  ' Prva tabela u dokumentu
 r = 2                                        '  Preskace se prvi red tabele sa zaglavljem
' Petlja za prolazak kroz ucitanje vrednost
  Do While Not oRS.EOF
    tbl.Rows.Add                        ' Dodaje se novi red u tabeli 
    ' Upisuju se polja ako nisu null
    If Not IsNull(oRS("ContactName").Value) Then tbl.Cell(r, 1).Range.Text = oRS("ContactName").Value
    If Not IsNull(oRS("Phone").Value) Then tbl.Cell(r, 2).Range.Text = oRS("Phone").Value
    If Not IsNull(oRS("Fax").Value) Then tbl.Cell(r, 3).Range.Text = oRS("Fax").Value
    r = r + 1
' Sledeci
   oRS.MoveNext
 Loop

 ' Zatvaranje konekcije
 oRS.Close
 Set oRS = Nothing
 oConn.Close
 Set oConn = Nothing
 
End Sub

[ nensika @ 06.06.2006. 11:26 ] @
sve sam lepo u sql upitu uspela da skockam! Konacno sam dobila ono sto mi treba za posao!!!! Hvala do neba! Programiranje mi je losa strana!
[ nensika @ 12.06.2006. 10:52 ] @
mogu li umesto bookmarka da koristim field,da ne bi svaki cas postavljala bookmarkove u Word
[ Jpeca @ 12.06.2006. 11:41 ] @
Može i polje ili običan tekst ako imaš tačnu poziciju gde ćeš da smestiš. Bookmarkovi i jesu polja koja služe da označe poziciju nekog teksta. Pretpostavljam da imaš problem da se bookmark izbriše posle popunjavanja .

Probaj da Bookmark bude prazan - samo pozicija bez ikakvog teksta. U tom slučaju bookmark neće biti obrisan nakon popunjvanja ali ćeš morati da ručno obrišeš tekst koji je dodat iz baze.
Rešenje je da koristiš Template na osnovu koga se generiše dokument ili da se doradi kod tako da se menja tekst unutar bookmarka a ne popunjava ceo bukmark .