Zapis v access tabelo

Pomoč pri izdelavi makrov
JozeS
Prispevkov: 8
Pridružen: Če Dec 29, 2005 10:30 am

Zapis v access tabelo

Odgovor Napisal/-a JozeS »

Kako bi v VB zapisal, da mi neki podatek zapiše v tabelo, brez uporab subforum?
Na formi imam več polj v obliki razpredelnice, ki jih morem napolniti v različne tabele.

LP Jože
admin
Site Admin
Prispevkov: 3691
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

Moram reči, da ne razumem natančno, kaj želite. Spodaj imate primer, ki iz podatkovne baze Northwind.mdb (dobite jo ob instalaciji MS Pisarne) izpiše imena vseh kupcev. Napisal sem tako, da je koda čimbolj samoopisljiva. S to kodo vidite, kako brati iz baze. Ko se boste to naučili pa vam pokažem še pisanje, če je to seveda tisto kar vas muči!

Da bo koda delovala morate v projekru obvezno dodati referenco na 'Microsoft DAO (čim večje številka) Object Library'.

Koda: Izberi vse

Sub IzpisiKupce()
  Dim Baza As Database
  Dim Kupci As Recordset

' Odprem bazo
  Set Baza = DBEngine.Workspaces(0).OpenDatabase _
   ("c:\Program Files\...\Samples\Northwind.mdb")
     
  If Err.Number <> 0 Then
    MsgBox Err.Description, vbExclamation
    Exit Sub
  End If

' Odprem tabelo
  Set Kupci = Baza.OpenRecordset("Customers", dbOpenTable)
    
  If Err.Number <> 0 Then
    MsgBox Err.Description, vbExclamation
    Err.Clear
  End If

' izpišem imena podjetij
  While (Not Kupci.EOF())
    Debug.Print Kupci.Fields("CompanyName")
    Kupci.MoveNext
  Wend
  
' sprostim kazalce
  Set Kupci = Nothing
  Set Baza = Nothing
End Sub
lp,
Matjaž Prtenjak
Administrator
Stenly
Prispevkov: 223
Pridružen: Sr Jul 27, 2005 11:29 pm

Odgovor Napisal/-a Stenly »

Pozdravljen Matjaž

Pri omenjeni temi, bi še jaz pristavil piskerček.
Zanima me še malo naprej.
Torej:
1. Kako bi v Excelovi formi (UserForm1), v (TextBox1) dobil podatek ("Hanna Moos") iz omenjene baze podatkov "Northwind.mdb", v tabeli "Customers", stolpca "ContactName". Podatek bi iskal po "CustomerID" npr. vrednost "BLAUS". Iskani podatek je "Hanna Moos".
2. Ta popdatek v bazi bi rad zamenjal s podatkom "Yane Moss"

Za odgovor se lepo zahvaljujem.
admin
Site Admin
Prispevkov: 3691
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

Nisem vam pisal v obliki obazca, to boste že sami :). Spodaj pa je funkcija, ki izbere iskanega kupca in mu zamenja ime. (Po vaših navodilih!).

Kode je veliko, ker izvajam vse teste (v splošnem to ni potrebno...). V glavnem napisano je tako, pravilno, šolsko.

Koda: Izberi vse

' www.matjazev.net
' 06.04.2006
Sub Primer()
  Dim Baza As Database
  Dim Kupci As Recordset

' Odprem bazo
  Set Baza = DBEngine.Workspaces(0).OpenDatabase _
   ("C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb")
     
  If Err.Number <> 0 Then
    MsgBox Err.Description, vbExclamation
    Exit Sub
  End If

' Najdem zapis
  Set Kupci = Baza.OpenRecordset("SELECT ContactName FROM Customers WHERE CustomerID = 'BLAUS';")
   
  If Err.Number <> 0 Then
    MsgBox Err.Description, vbExclamation
    Err.Clear
  End If

' Izpišem prebran zapis
  Debug.Print Kupci.Fields("ContactName")
  
' popravim zapis
  Kupci.Edit
    Kupci.Fields("ContactName") = "Yane Moss"
  Kupci.Update
 
' sprostim kazalce
  Set Kupci = Nothing
  Set Baza = Nothing
End Sub
lp,
Matjaž Prtenjak
Administrator
Stenly
Prispevkov: 223
Pridružen: Sr Jul 27, 2005 11:29 pm

Odgovor Napisal/-a Stenly »

Tematika mi je zanimiva, ker sem do sedaj podatke spravljal v navadno excelovo datoteko.
Rad bi prešaltal na bolj profesionalno shranjevanje podatkov in tu je bila ideja.
Prvo moram osvojiti to, kasneje pa bom še potreboval pomoč na to temo.
Hvala za trud in lp.
Stenly
Prispevkov: 223
Pridružen: Sr Jul 27, 2005 11:29 pm

Odgovor Napisal/-a Stenly »

Ponovno pozdrav

Do tu mi je približno jasno, za nadaljevanje pa potrebujem pomoč.

Na omenjeni bazi: »C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb«, bi vzel tabelo »Order Details«

1. V tabelo bi želel vstaviti novo vrstico:

Order ID: 11077 npr. podatek je v UF_1.TB_ Order ID.Value
Product: Chai itd...
Until Price: 5 itd...
Quantity: 2 itd...
Discount: 0,5 itd...

2. Kako bi to(celotno) vrstico zbrisal?

Lep pozdrav
admin
Site Admin
Prispevkov: 3691
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

Vse kar počnete z DAO (to so objekti, o katerih je tu govora), počnete preko SQL standarda, zato se pač morate najprej naučiti SQL-a. Ko boste SQL znali, boste vedeli, da se zapisi dodajajo z ukazom:

Koda: Izberi vse

INSERT INTO <tabala> (<seznam kolon>) VALUES (<vrednosti kolon>)
brišejo pa z ukazom

Koda: Izberi vse

DELETE FROM <tabala> WHERE <pogoj, katere vrstice naj se izbrišejo>
Glede na zapisano je potem koda za dodajanje in brisanje praktično enaka, razlika je le v SQL stavku:

Koda: Izberi vse

' www.matjazev.net
' 10.04.2006
Sub DodajZapis_primer()
  Dim Baza As Database

' Odprem bazo
  Set Baza = DBEngine.Workspaces(0).OpenDatabase _
   ("C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb")
   
' pripravim SKL stavek za vnos novega zapisa
  Dim SQLStavek
  SQLStavek = "INSERT INTO Customers (CustomerID, CompanyName,ContactName) VALUES ('MATJ', 'www.matjazev.net', 'Matjaž Prtenjak')"
     
' izvedem SQL stavek
  Baza.Execute SQLStavek
  If Err.Number <> 0 Then
    MsgBox Err.Description, vbExclamation
    Err.Clear
  End If
  
 
' sprostim kazalce
  Set Baza = Nothing
End Sub

' www.matjazev.net
' 10.04.2006
Sub BrisiZapis_primer()
  Dim Baza As Database

' Odprem bazo
  Set Baza = DBEngine.Workspaces(0).OpenDatabase _
   ("C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb")
   
' pripravim SKL stavek za brisanja zapisa
  Dim SQLStavek
  SQLStavek = "DELETE FROM Customers WHERE CustomerID='MATJ'"
     
' izvedem SQL stavek
  Baza.Execute SQLStavek
  If Err.Number <> 0 Then
    MsgBox Err.Description, vbExclamation
    Err.Clear
  End If
  
 
' sprostim kazalce
  Set Baza = Nothing
End Sub
lp,
Matjaž Prtenjak
Administrator
Stenly
Prispevkov: 223
Pridružen: Sr Jul 27, 2005 11:29 pm

Odgovor Napisal/-a Stenly »

Hvala za nasvet :idea: . Odgovor je bil res hiter.

Lp
Stenly
Prispevkov: 223
Pridružen: Sr Jul 27, 2005 11:29 pm

Odgovor Napisal/-a Stenly »

Pozdravljeni

Ponovno mi je zmanjkalo znanja.
V Excelu imam Formo, na njej ComboBox1. Je možno kazalec (RowSource) CB-a pokazati direktno na bazo (npr. "C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb", tabela "Customers" stolpec "Address").

Lp
admin
Site Admin
Prispevkov: 3691
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Ne, RowSource definira področje v Excelovi tabeli in nima neposredne zveze s podatkovno bazo.
Zadnjič spremenil admin, dne Pe Apr 14, 2006 9:18 am, skupaj popravljeno 1 krat.
lp,
Matjaž Prtenjak
Administrator
Stenly
Prispevkov: 223
Pridružen: Sr Jul 27, 2005 11:29 pm

Odgovor Napisal/-a Stenly »

Hvala za odgovor.
Stenly
Prispevkov: 223
Pridružen: Sr Jul 27, 2005 11:29 pm

Odgovor Napisal/-a Stenly »

Lep pozdrav

Se trudim, pa mi ne gre najbolje.
Imam programček v Excelu bazo, pa v Accessu.
Želel bi izvedeti max vrednost v nekem stolpcu.
Znal bi tako, da vse vrednosti prepišem v Excelov stolpec in potegnem max. vrednost - samo se mi ne zdi prav dobra rešitev.
Prosil bi za krajšo rešitev na bazi: Northwind.mdb, tabeli Products in stolpcu UntilPrice.

Hvala za odgovor
admin
Site Admin
Prispevkov: 3691
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

kot sem vam že svetoval, se morate najprej naučiti SQL-a. Vaše vprašanje namreč nima nobene neposredne zveze z Excelom, ne z Accessom in ne z VBA-jem. Gre za povsem osnoven SQL ukaz:

Koda: Izberi vse

SELECT max(UnitPrice)  FROM Products;
lp,
Matjaž Prtenjak
Administrator
Stenly
Prispevkov: 223
Pridružen: Sr Jul 27, 2005 11:29 pm

Odgovor Napisal/-a Stenly »

:oops: ...ja, se trudim, pa ne gre tako hitro.
Se pa zahvaljujem za odgovor.

Lp
Stenly
Prispevkov: 223
Pridružen: Sr Jul 27, 2005 11:29 pm

Odgovor Napisal/-a Stenly »

:oops: :oops: :oops:
Žal mi ne gre.
Napako mi vrže pri msg-ju.

Koda: Izberi vse

Sub Max_vrednost()
'
  Dim Baza As Database
  Dim Max_vrednost As Recordset
' Odprem bazo
  Set Baza = DBEngine.Workspaces(0).OpenDatabase _
   ("C:\Northwind.mdb")
' Najdem zapis
  Set Max_vrednost = Baza.OpenRecordset("SELECT max(UnitPrice) FROM Products;")
' Izpišem prebran zapis
 MsgBox Max_vrednost.Fields("UnitPrice")
' sprostim kazalce
  Set Max_vrednost = Nothing
  Set Baza = Nothing

End Sub
Odgovori