[ 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 |
[ nensika @ 25.05.2006. 12:31 ] @
[ 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 . Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|