Difference between revisions of "Vprašanja pri prehodu MSA-Base"

From Apache OpenOffice Wiki
Jump to: navigation, search
(Deleted link to category 'Quality Assurance')
 
(14 intermediate revisions by one other user not shown)
Line 34: Line 34:
 
Ne. Base ne more ustvariti nove datoteke zbirke podatkov Access niti novih tabel, poizvedb, obrazcev itn. v okviru obstoječe datoteke mdb.
 
Ne. Base ne more ustvariti nove datoteke zbirke podatkov Access niti novih tabel, poizvedb, obrazcev itn. v okviru obstoječe datoteke mdb.
  
== Lahko z Base ustvarim Switchboard? ==
+
== Lahko z Base ustvarim stikalno ploščo? ==
  
Base trenutno nima čarovnika za obrazce v slogu switchboard. Vendar je mogoče doseči zelo podoben učinek z eno izmed treh spodnjih tehnik.
+
Base trenutno nima čarovnika za obrazce v slogu stikalne plošče. Vendar je mogoče doseči zelo podoben učinek z eno izmed treh spodnjih tehnik.
  
 
=== Kako odprem privzeti obrazec prek makra ===
 
=== Kako odprem privzeti obrazec prek makra ===
Line 42: Line 42:
 
=== Uporaba samostojnega obrazca za zagon zbirke podatkov Base ===
 
=== Uporaba samostojnega obrazca za zagon zbirke podatkov Base ===
  
=== Razširitev Base Switchboard ===
+
=== Razširitev Stikalna plošča Base ===
Začel se je razvoj orodja switchboard v OOo, oglejte si razširitev Roberta Beniteza [http://extensions.services.openoffice.org/project/SwitchBoard Base Switchboard].
+
Začel se je razvoj orodja za stikalne plošče v OOo, oglejte si razširitev Roberta Beniteza [http://extensions.services.openoffice.org/project/SwitchBoard Stikalna plošča Base].
  
 
== Naša zbirka podatkov Access uporablja "Varnost delovnih skupin" za nadzor dovoljenj skupin/uporabnikov za ogledovanje/vzdrževanje podatkov? ==
 
== Naša zbirka podatkov Access uporablja "Varnost delovnih skupin" za nadzor dovoljenj skupin/uporabnikov za ogledovanje/vzdrževanje podatkov? ==
  
This question points out what is a fundamental difference between OOoBase and MS Access (MSA). In the case of MSA there is one and only one database engine in use - although you may link tables in MSA to external datasource - MS Jet is still the only database engine actually used by MSA.
+
To vprašanje izpostave temeljno razliko med OOoBase in MS Access (MSA). V primeru MSA je v rabi en sam mehanizem zbirk podatkov - čeprav lahko v MSA povežete tabele na zunanji vir podatkov - MS Jet je še vedno edini mehanizem zbirk podatkov, ki ga MSA dejansko uporablja.
  
In Base (OOoBase) this is not the case at all. The Base database document is simply a front end (client application) to a variety of database engines. In one of these forms it embeds a HSQLDB database into the ODB file itself, many people simply see this as the only Base database format. That is totally mistaken. In this instance of an embedded database there is no support for multiple users and of course no support for groups therefore. However, that is only one of the ways Base can be configured.
+
V Base (OOoBase) je povsem drugače. Dokument zbirke podatkov Base je enostavno pročelje (program odjemalca) za raznovrstne mehanizme zbirk podatkov. V eni variaciji lahko vdela zbirko podatkov HSQLDB v samo datoteko ODB, številni pa enostavno vidijo to kot edino vrsto zbirk podatkov v Base. To je povsem napačno. V tem primeru vdelane zbirke podatkov ne podpira več uporabnikov in seveda zato ne podpira skupin. Vendar je to le en način dela z modulom Base.
  
You are free to use Base as the front end to a HSQLDB database in server mode. HSQLDB is a very small footprint, low administration database engine and in server mode has full support for users / groups. For larger numbers of users you could just as easily configure Base to work with MySQL, PostgreSQL, Firebird, Oracle, or MS SQL Server.
+
Uporabite Base kot pročelje za zbirko podatkov HSQLDB v strežniškem načinu. HSQLDB ima mehanizem zbirke podatkov z zelo majhnimi sistemskimi zahtevami ter nizkim obsegom upravljanja in v strežniškem načinu popolnoma podpira uporabnike / skupine. Pri večjem številu uporabnikov lahko enako enostavno prilagodite Base za delo s strežnikom MySQL, PostgreSQL, Firebird, Oracle ali MS SQL.
  
There is another significant difference between MSA and Base regarding this then. In MSA you would deploy one MDB (or one of its variants ) file, then have each user in the workgroup see this file and open it.
+
Še ena pomembna razlika glede tega je med MSA in Base. V MSA bi vzpostavili eno datoteko MDB (ali eno od njenih različic), nato pa bi jo vsak uporabnik v delovni skupini videl in odprl.
  
In Base each user would have their own ODB file and each of these would be connected to the shared data server. In this way each user would have their own space for custom queries and reports - but it makes distribution of common forms, queries and reports more work.
+
V Base bo imel vsak uporabnik svojo lastno datoteko ODB in vsaka izmed njih se bo povezala s skupnim podatkovnim strežnikom. Na ta način bo imel vsak uporabnik svoj lasten prostor za poizvedbe in poročila po meri - vendar je s tem distribucija skupnih obrazcev, povpraševanj in poročil bolj zapletena.
  
 
== Se obrazec Base razlikuje od obrazca v MSA? ==
 
== Se obrazec Base razlikuje od obrazca v MSA? ==
  
Da. There are very real differences between how Forms are implemented in Access and Base.
+
Da. Obstajajo velike razlike med implementacijo obrazcev v Access in Base.
  
 
=== Navidezni obrazci v obrazcih Base ===
 
=== Navidezni obrazci v obrazcih Base ===
  
Virtual forms in Base are called "subforms". You can manage them opening the form in Edit mode and then clicking on "Form Navigator", in "Form Design" toolbar.
+
Navidezni obrazci so v Base poimenovani "podobrazci". Z njimi ravnate tako, da odprete obrazec v urejevalnem načinu in nato kliknete "Krmar po obrazcih" v orodni vrstici "Oblikovanje obrazca".
  
 
== Kje so poizvedbe Izbriši / Posodobi? ==
 
== Kje so poizvedbe Izbriši / Posodobi? ==
Base does not currently support building delete / insert / update queries in the designer.
+
Base trenutno ne podpira gradnjo poizvedb delete / insert / update v oblikovalcu.
  
 
=== Ekvivalentna dejanja ===  
 
=== Ekvivalentna dejanja ===  
 
==== ''Uporaba oblikovalca poizvedb'' ====
 
==== ''Uporaba oblikovalca poizvedb'' ====
You can achieve the equivalent actions in the GUI using the designer and or SQL commands.
+
Ekvivalentna dejanja lahko dosežete v uporabniškem vmesniku z uporabo oblikovalca in/ali ukazov SQL.
  
 
==== ''Uporaba makra'' ====
 
==== ''Uporaba makra'' ====
Line 80: Line 80:
 
=== Kaj se je zgodilo z me? ===
 
=== Kaj se je zgodilo z me? ===
  
There is no exact duplicate to the ME pseudo variable in VBA.  
+
Noben enak dvojnik psevdo-spremenljivke ME ne obstaja v VBA.  
  
In Access VBA 'me' has attributes of two separate objects in OOoBasic:  
+
V Access VBA ima 'me' atribute dveh ločenih predmetov v OOoBasic:  
TextDocument and DataForm
+
TextDocument in DataForm
  
The TextDocument object would be used for controlling the window size and placement on the screen for instance.  
+
Predmet TextDocument bi npr. uporabljali za nadzor velikosti in postavitve okna na zaslonu.  
  
The DataForm meanwhile supports result set functions, such as First, Filter, InsertRow.
+
DataForm pa podpira funkcije z množico rezultatov, kot so First, Filter, InsertRow.
  
In OOoBasic the pseudo variable thisComponent normally would be the TextDocument, while thisComponent.DrawPage.Forms(0) meanwhile would reference the first DataForm owned by the TextDocument.
+
V OOoBasic bi bila psevdo-spremenljivka thisComponent navadno TextDocument, medtem ko bi se thisComponent.DrawPage.Forms(0) skliceval na prvi DataForm, ki je v lasti TextDocument.
  
Perhaps a still closer equivalent is to use the object ownership hierarchy to get to the form. For example, if we had a single table form with a button, then in the macro called by the 'onClick' (or as OOBase calls it the 'When initializing' event) we would do this: Create a macro in a library named onButtonClick( oEv as object )
+
Najbrž je temu še najbolj podobna raba hierarhije lastništva, s katero pridete do obrazca. Primer: če bi imeli obrazec tabele z gumbom, tedaj bi v makru, ki ga pokliče 'onClick' (ali, kot je to v OOBase, dogodek 'When initializing'), naredili naslednje: ustvarili makro v knjižnici, imenovani onButtonClick( oEv as object )
  
 
     sub onButtonClick( oEv as object )
 
     sub onButtonClick( oEv as object )
       ' oEv is the event object passed automatically
+
       ' oEv je predmet dogodka, samodejno podan
       ' it has a property SOURCE which is the
+
       ' ima lastnost SOURCE, ki je gumb,
       ' button that initiated this call
+
       ' ki je iniciiral ta klic
 
      
 
      
 
       dim oForm as variant
 
       dim oForm as variant
 
      
 
      
 
       oForm = oEv.Source.Model.Parent
 
       oForm = oEv.Source.Model.Parent
       ' oForm is now the virtual form objct
+
       ' oForm je zdaj navidezni predmet obrazca
 
        
 
        
 
       dim oDocument as variant
 
       dim oDocument as variant
 
        
 
        
 
       oDocument = thisComponent
 
       oDocument = thisComponent
       ' oDocument is now the textDocument displayed in
+
       ' oDocument je zdaj textDocument, prikazan
       ' the window on screen
+
       ' v oknu na zaslonu
 
      
 
      
 
     end sub
 
     end sub
Line 113: Line 113:
 
=== Kje je findfirst? ===
 
=== Kje je findfirst? ===
  
Base does not appear to have a FindFirst function on the rowset like MS Access, what is the equivalent Base function?
+
Base na prvi pogled nima funkcije FindFirst za množico vrstic kot MS Access, kaj je torej ekvivalentna funkcija v Base?
  
 
Primer MSAccess VBA:
 
Primer MSAccess VBA:
  
Say there is a VB combo box which lists all the prospects in the database and allows the user to select a particular prospect and then have the form automatically go to that person's data record.
+
Recimo, da imamo kombinirano polje VB, ki izpiše vse stranke v zbirki podatkov in uporabniku ponuja izbor določene stranke in nato obrazec samodejno usmeri na podatkovni zapis te osebe.
  
 
   Private Sub Find_Combo_AfterUpdate()
 
   Private Sub Find_Combo_AfterUpdate()
 
   Dim strCriteria As String
 
   Dim strCriteria As String
 
    
 
    
   strCriteria = "[Prospect_ID] =" & Me.Find_Combo
+
   strCriteria = "[Stranka_ID] =" & Me.Find_Combo
 
    
 
    
 
   Me.recordsetclone.FindFirst (strCriteria)
 
   Me.recordsetclone.FindFirst (strCriteria)
 
   If me.recordsetclone.NoMatch Then
 
   If me.recordsetclone.NoMatch Then
       MsgBox "No entry found"
+
       MsgBox "Zapisa ni mogoče najti"
 
   Else
 
   Else
 
       Form_F_Prospects.Bookmark = me.recordsetclone.Bookmark
 
       Form_F_Prospects.Bookmark = me.recordsetclone.Bookmark
Line 133: Line 133:
 
   End Sub
 
   End Sub
  
For this type of simple single column search it is easy enough to create our own find first equivalent with OOoBasic:
+
Za tovrstna enostavna enostolpčna iskanja je razmeroma enostavno ustvariti naš lasten ekvivalent za iskanje prvega v OOoBasic:
  
 
  Sub Find_Combo_AfterUpdate( OEv as Object)
 
  Sub Find_Combo_AfterUpdate( OEv as Object)
     ' Oev is the event object automatically sent
+
     ' Oev je dogodek, ki ga je predmet samodejno poslal
     ' to sub procedure call
+
     ' klicu pod-procedure
     ' Oev will have a property Source
+
     ' Oev bo imel lastnost Source,
     ' that is the control that triggered
+
     ' ki je kontrolnik, ki je sprožil
     ' the call to this procedure
+
     ' klic te procedure
 
    
 
    
   Dim oForm as variant ' The dataform obejct
+
   Dim oForm as variant ' Predmet dataform
 
    
 
    
   Dim oComboBox as variant ' The combobox control
+
   Dim oComboBox as variant ' Kontrolnik kombiniranega polja
 
    
 
    
 
   Dim oBkMark as variant
 
   Dim oBkMark as variant
Line 153: Line 153:
 
      
 
      
 
   oBkMark = FindFirst( oForm.CreateResultSet(), "Prospect_ID", oComboBox.Text )
 
   oBkMark = FindFirst( oForm.CreateResultSet(), "Prospect_ID", oComboBox.Text )
       ' oForm.CreateResultSet() is equivilant here to me.recordsetclone
+
       ' oForm.CreateResultSet() je tukaj ekvivalenten me.recordsetclone
 
   if not IsEmpty( oBkMark ) then
 
   if not IsEmpty( oBkMark ) then
 
   oForm.moveToBookmark( oBkMark )
 
   oForm.moveToBookmark( oBkMark )
 
   else
 
   else
   msgBox( oComboBox.Text & " not found" )
+
   msgBox( oComboBox.Text & " ni mogoče najti" )
 
   end if
 
   end if
 
    
 
    
Line 163: Line 163:
  
 
  function FindFirst( oRS as variant, ColName as string, SearchVal as string ) as variant
 
  function FindFirst( oRS as variant, ColName as string, SearchVal as string ) as variant
         ' oRS is a resultSet object
+
         ' oRS je predmet resultSet
         ' ColName is the name of a column in the resultset
+
         ' ColName je ime stolpca množice rezultatov
         ' SearchVal is
+
         ' SearchVal je iskana vrednost
 
     dim colIDX as integer
 
     dim colIDX as integer
 
     dim NotFound as variant
 
     dim NotFound as variant
Line 190: Line 190:
 
=== Ali obstaja ekvivalent DoCmd RunSQL ===
 
=== Ali obstaja ekvivalent DoCmd RunSQL ===
  
Yes, in OOoBase you would use either a Statement or PreparedStatement object to achieve the same function. With OOoBase you must also decide between using execute and executeUpdate.
+
Da, v OpenOffice.org Base bi uporabili predmet Statement ali PreparedStatement, s katerim bi dosegli enako funkcijo. Z OpenOffice.org Base se morate tudi odločiti med uporabljanjem execute in executeUpdate.
  
For example if you had the VBA line
+
Primer: če ste imeli vrstico kode VBA:
 
   DoCmd RunSQL( "SELECT * FROM tContacts" )
 
   DoCmd RunSQL( "SELECT * FROM tContacts" )
  
it would become in OOoBase
+
bi v OpenOffice.org Base imeli:
 
    
 
    
 
   Dim oStatement as variant
 
   Dim oStatement as variant
 
    
 
    
 
   oStatement = OForm.ActiveConnection.CreateStatement
 
   oStatement = OForm.ActiveConnection.CreateStatement
     ' Where oForm is a DataForm object
+
     ' Kjer je oForm predmet DataForm
     ' NOTE you could do exactly the same thing with
+
     ' OPOMBA enako bi lahko naredili tudi
     ' a resultSet or rowSet obejct also
+
     ' s predmetoma resultSet in rowSet
 
     ' oStatement = OResultSet.ActiveConnection.CreateStatement
 
     ' oStatement = OResultSet.ActiveConnection.CreateStatement
 
    
 
    
 
   oStatement.execute( "SELECT * FROM ""tContacts"""  )
 
   oStatement.execute( "SELECT * FROM ""tContacts"""  )
 
    
 
    
If on the other hand the VBA line where
+
Če pa bi z druge strani imeli vrstico kode VBA:
 
   DoCmd RunSQL( "DELETE FROM tContacts WHERE Status = 'INACTIVE'" )
 
   DoCmd RunSQL( "DELETE FROM tContacts WHERE Status = 'INACTIVE'" )
  
then we would use the executeUpdate method on a statement
+
potem bi nad izjavo uporabili metodo executeUpdate:
  
 
   oStatement.executeUpdate( "DELETE FROM ""tContacts"" WHERE ""Status"" = 'INACTIVE'"  )
 
   oStatement.executeUpdate( "DELETE FROM ""tContacts"" WHERE ""Status"" = 'INACTIVE'"  )
  
The rule is -  
+
Pravilo se glasi -  
*if your SQL statement will return records you use execute or executeQuery.
+
*če izjava SQL vrne zapise, uporabite execute ali executeQuery.
*if the SQL statement returns no records then you must use executeUpdate.
+
*če izjava SQL ne vrne zapisov, uporabite executeUpdate.
  
 
== Če uporabljam polja/stolpce Lookup v svojih tabelah Access, kaj lahko storim v Base? ==
 
== Če uporabljam polja/stolpce Lookup v svojih tabelah Access, kaj lahko storim v Base? ==
There are two parts to this answer, given that Base does not support Lookup column types in tables.
+
Odgovor na to vprašanje je v dveh delih, ker Base v tabelah ne podpira vrste stolpcev Lookup.
  
When a table is displayed in a custom form use of a bound listbox will give you the same functionality. An example of [[adding a listbox to a form]] and to a grid control on a form is at this page.
+
Če je tabela prikazana v obliki po meri, boste z rabo seznamskega polja bound dobili enako funkcionalnost. Primer [[dodajanja seznamskega polja obrazcu]] in kontrolniku mreže na obrazcu je na tej strani.
  
In a table view ( double clicking on the table name ) there is no equivalent to this.
+
V pogledu tabele ( dvoklik na ime tabele ) ekvivalent ne obstaja.
  
== Kako uporabim funkcije Domain Aggregate v Base? ==
+
== Kako uporabim domensko agregatne funkcije v Base? ==
  
Domain Aggregate functions such as '''DCount''', '''DLookup''', '''DMax''' etc have no direct equivalent in Base. You will have to write or design queries to return these results using the appropriate SQL functions.
+
Domenske agregatne funkcije, kakršne so '''DCount''', '''DLookup''' in '''DMax''', nimajo neposrednih ekvivalentov v Base. Z ustreznimi funkcijami SQL boste morali napisati ali oblikovati poizvedbe, ki vrnejo takšne rezultate.
  
 
== Kako svojim obrazcem in poročilom dodam izračunane kontrolnike?==
 
== Kako svojim obrazcem in poročilom dodam izračunane kontrolnike?==
  
Controls in Base forms and reports cannot be used to perform calculations. There are two methods available to get a calculated result on a form or report.
+
Kontrolnikov obrazcev in poročil Base ni mogoče uporabiti za izvajanje izračunov. Na voljo sta metodi za pridobitev rezultata izračuna z obrazca ali poročila.
  
 
=== Uporaba poizvedb ===
 
=== Uporaba poizvedb ===
Modify the underlying data source of the form or report to perform the calculation for each record and return the result as a (calculated) field.
+
Spremenite podležni vir podatkov obrazca ali poročila, da izvedete izračun za vsak zapis in vrnite rezultat kot (izračunano) polje.
  
 
=== Uporaba makra ===
 
=== Uporaba makra ===
If you need your control to update as data is entered into a form, you will need to write a small macro to perform the calculation and assign it to an appropriate event on one of the data entry controls (e.g. the Text modified event).
+
Če potrebujete posodabljanje kontrolnika ob vsakem vnosu podatkov v obrazec, morate napisati kratek makro, ki izvede izračun in dodeli rezultat ustreznemu dogodku enega od kontrolnikov vnosa podatkov (npr. dogodku Text modified).
  
 
''Avtor: [mailto:atjensen@openoffice.org?subject:OOoWiki MSA-Base Faq] [[User:DrewJensen|Drew]] 21:01, 11. september 2007 (CEST) '<br>
 
''Avtor: [mailto:atjensen@openoffice.org?subject:OOoWiki MSA-Base Faq] [[User:DrewJensen|Drew]] 21:01, 11. september 2007 (CEST) '<br>
''Please do not change the logical content of this site without
+
''Prosimo, da ne spreminjate vsebine tega mesta brez vedenja avtorja ali [http://wiki.services.openoffice.org/wiki/Project_Lead vodij projekta OOo QA].''
acknowledge of the author or the [http://wiki.services.openoffice.org/wiki/Project_Lead OOo QA Project Lead/Co-Leads].''
 
  
[[Category:Quality Assurance]]
 
 
[[Category:Database]]
 
[[Category:Database]]
 
[[Category:Base Documentation]]
 
[[Category:Base Documentation]]
 
[[Category:Documentation/SL]]
 
[[Category:Documentation/SL]]

Latest revision as of 09:21, 30 March 2010

Pogosta vprašanja in odgovori za tiste, ki prehajate iz Microsoft Access (MSA) na OpenOffice.org Base.

To je projekt skupnosti uporabnikov - dodajte znanje, če ga lahko.

Vendar ohranite vprašanja in odgovore splošne. Če je vprašanje, ki zadeva funkcionalno določeno različico MSA, vključite tudi številko različice.

Natančneje, wiki posodobite le, če imate odgovor na vprašanje, ki ga dodajate. ( Če ne morete takoj vnesti odgovora, naj vas to ne ustavi, da ne bi najprej vnesli vprašanja - le ne vrnite se prepozno. )

Če želite zastaviti specifično vprašanje ali za splošno pomoč raje povprašajte na Forumu Base ali na dopisnem seznamu uporabnikov programa Base.

Lahko uporabljam zbirke podatkov Microsoft Access (.mdb) v Base?

V okolju Windows: da. Ne morete jih neposredno odpreti prek Datoteka|Odpri, vendar lahko dostopite do vsebovanih podatkov. Za to potrebujete datoteko zbirke podatkov Open Document (*.odb), ki vsebuje podatke o povezavi. Podrobnosti najdete v Povezovanje z Microsoft Access.

Spreminjate lahko podatke v tabelah, dodajate in odstranjujete lahko zapise. Ustvarjate lahko nove tabele, vendar ne morete spreminjati strukture obstoječih tabel.

Poizvedbe MS Access so prikazane kot pogledi v vsebniku tabele. Rezultate poizvedbe lahko uporabite, vendar nimate dostopa do podležnih definicij in jih ne morete spreminjati.

Obrazcev in poročil MS Access ne morete brati.

Lahko berem svojo zbirko podatkov Base iz programa MS Access?

Ne obstaja noben način, da bi uporabili mehanizem povezovanja s tabelami Access za povezovanje z zbirko podatkov Base.

Z zbirko podatkov Base lahko posodobite podatke v zbirki podatkov Access. Trenutno je za to potrebno, da zbirko podatkov Access odpre in zaklene datoteka Base.

Podatke bi lahko vrnili v zbirko podatkov Access, če bi ustvarili povezano datoteko CSV v zbirki podatkov Base. Nato bi povezali s to datoteko CSV tabelo v zbirki podatkov Access.

Lahko ustvarim zbirko podatkov Access (datoteko mdb) z Base?

Ne. Base ne more ustvariti nove datoteke zbirke podatkov Access niti novih tabel, poizvedb, obrazcev itn. v okviru obstoječe datoteke mdb.

Lahko z Base ustvarim stikalno ploščo?

Base trenutno nima čarovnika za obrazce v slogu stikalne plošče. Vendar je mogoče doseči zelo podoben učinek z eno izmed treh spodnjih tehnik.

Kako odprem privzeti obrazec prek makra

Uporaba samostojnega obrazca za zagon zbirke podatkov Base

Razširitev Stikalna plošča Base

Začel se je razvoj orodja za stikalne plošče v OOo, oglejte si razširitev Roberta Beniteza Stikalna plošča Base.

Naša zbirka podatkov Access uporablja "Varnost delovnih skupin" za nadzor dovoljenj skupin/uporabnikov za ogledovanje/vzdrževanje podatkov?

To vprašanje izpostave temeljno razliko med OOoBase in MS Access (MSA). V primeru MSA je v rabi en sam mehanizem zbirk podatkov - čeprav lahko v MSA povežete tabele na zunanji vir podatkov - MS Jet je še vedno edini mehanizem zbirk podatkov, ki ga MSA dejansko uporablja.

V Base (OOoBase) je povsem drugače. Dokument zbirke podatkov Base je enostavno pročelje (program odjemalca) za raznovrstne mehanizme zbirk podatkov. V eni variaciji lahko vdela zbirko podatkov HSQLDB v samo datoteko ODB, številni pa enostavno vidijo to kot edino vrsto zbirk podatkov v Base. To je povsem napačno. V tem primeru vdelane zbirke podatkov ne podpira več uporabnikov in seveda zato ne podpira skupin. Vendar je to le en način dela z modulom Base.

Uporabite Base kot pročelje za zbirko podatkov HSQLDB v strežniškem načinu. HSQLDB ima mehanizem zbirke podatkov z zelo majhnimi sistemskimi zahtevami ter nizkim obsegom upravljanja in v strežniškem načinu popolnoma podpira uporabnike / skupine. Pri večjem številu uporabnikov lahko enako enostavno prilagodite Base za delo s strežnikom MySQL, PostgreSQL, Firebird, Oracle ali MS SQL.

Še ena pomembna razlika glede tega je med MSA in Base. V MSA bi vzpostavili eno datoteko MDB (ali eno od njenih različic), nato pa bi jo vsak uporabnik v delovni skupini videl in odprl.

V Base bo imel vsak uporabnik svojo lastno datoteko ODB in vsaka izmed njih se bo povezala s skupnim podatkovnim strežnikom. Na ta način bo imel vsak uporabnik svoj lasten prostor za poizvedbe in poročila po meri - vendar je s tem distribucija skupnih obrazcev, povpraševanj in poročil bolj zapletena.

Se obrazec Base razlikuje od obrazca v MSA?

Da. Obstajajo velike razlike med implementacijo obrazcev v Access in Base.

Navidezni obrazci v obrazcih Base

Navidezni obrazci so v Base poimenovani "podobrazci". Z njimi ravnate tako, da odprete obrazec v urejevalnem načinu in nato kliknete "Krmar po obrazcih" v orodni vrstici "Oblikovanje obrazca".

Kje so poizvedbe Izbriši / Posodobi?

Base trenutno ne podpira gradnjo poizvedb delete / insert / update v oblikovalcu.

Ekvivalentna dejanja

Uporaba oblikovalca poizvedb

Ekvivalentna dejanja lahko dosežete v uporabniškem vmesniku z uporabo oblikovalca in/ali ukazov SQL.

Uporaba makra

Želim filtrirati svoj obrazec glede na vsebino kombiniranega polja?

Pretvorba mojih modulov VBA v module Base

Kaj se je zgodilo z me?

Noben enak dvojnik psevdo-spremenljivke ME ne obstaja v VBA.

V Access VBA ima 'me' atribute dveh ločenih predmetov v OOoBasic: TextDocument in DataForm

Predmet TextDocument bi npr. uporabljali za nadzor velikosti in postavitve okna na zaslonu.

DataForm pa podpira funkcije z množico rezultatov, kot so First, Filter, InsertRow.

V OOoBasic bi bila psevdo-spremenljivka thisComponent navadno TextDocument, medtem ko bi se thisComponent.DrawPage.Forms(0) skliceval na prvi DataForm, ki je v lasti TextDocument.

Najbrž je temu še najbolj podobna raba hierarhije lastništva, s katero pridete do obrazca. Primer: če bi imeli obrazec tabele z gumbom, tedaj bi v makru, ki ga pokliče 'onClick' (ali, kot je to v OOBase, dogodek 'When initializing'), naredili naslednje: ustvarili makro v knjižnici, imenovani onButtonClick( oEv as object )

   sub onButtonClick( oEv as object )
     ' oEv je predmet dogodka, samodejno podan
     ' ima lastnost SOURCE, ki je gumb, 
     ' ki je iniciiral ta klic
   
     dim oForm as variant
   
     oForm = oEv.Source.Model.Parent
      ' oForm je zdaj navidezni predmet obrazca
     
     dim oDocument as variant
     
     oDocument = thisComponent
      ' oDocument je zdaj textDocument, prikazan
      ' v oknu na zaslonu
   
   end sub

Kje je findfirst?

Base na prvi pogled nima funkcije FindFirst za množico vrstic kot MS Access, kaj je torej ekvivalentna funkcija v Base?

Primer MSAccess VBA:

Recimo, da imamo kombinirano polje VB, ki izpiše vse stranke v zbirki podatkov in uporabniku ponuja izbor določene stranke in nato obrazec samodejno usmeri na podatkovni zapis te osebe.

 Private Sub Find_Combo_AfterUpdate()
 Dim strCriteria As String
 
 strCriteria = "[Stranka_ID] =" & Me.Find_Combo
 
 Me.recordsetclone.FindFirst (strCriteria)
 If me.recordsetclone.NoMatch Then
     MsgBox "Zapisa ni mogoče najti"
 Else
     Form_F_Prospects.Bookmark = me.recordsetclone.Bookmark
 End If
 
 End Sub

Za tovrstna enostavna enostolpčna iskanja je razmeroma enostavno ustvariti naš lasten ekvivalent za iskanje prvega v OOoBasic:

Sub Find_Combo_AfterUpdate( OEv as Object)
   ' Oev je dogodek, ki ga je predmet samodejno poslal
   ' klicu pod-procedure
   ' Oev bo imel lastnost Source,
   ' ki je kontrolnik, ki je sprožil
   ' klic te procedure
 
 Dim oForm as variant ' Predmet dataform
 
 Dim oComboBox as variant ' Kontrolnik kombiniranega polja
 
 Dim oBkMark as variant
 
 oForm = oEv.Source.Model.Parent
 
 oComboBox = oForm.getByName( "Find_Combo" )
   
 oBkMark = FindFirst( oForm.CreateResultSet(), "Prospect_ID", oComboBox.Text )
     ' oForm.CreateResultSet() je tukaj ekvivalenten me.recordsetclone
 if not IsEmpty( oBkMark ) then
 		oForm.moveToBookmark( oBkMark )
 else
 	msgBox( oComboBox.Text & " ni mogoče najti" )
 end if
 
end sub
function FindFirst( oRS as variant, ColName as string, SearchVal as string ) as variant
       ' oRS je predmet resultSet
       ' ColName je ime stolpca množice rezultatov
       ' SearchVal je iskana vrednost
   dim colIDX as integer
   dim NotFound as variant
 
   FindFirst = notFound
   colIDX = oRS.FindColumn( ColName )
   oRS.First
   do 
     if oRS.getString( colIDX ) <> Searchval
       oRS.Next
       if oRS.isAfterLast then
         exit do
       endif
     else
       FindFirst = oRS.getBookMark
       exit do
     end if
   loop while oRS.isAfterLast <> True
 
end function

Kako nastavim filter le za podobrazec?

Ali obstaja ekvivalent DoCmd RunSQL

Da, v OpenOffice.org Base bi uporabili predmet Statement ali PreparedStatement, s katerim bi dosegli enako funkcijo. Z OpenOffice.org Base se morate tudi odločiti med uporabljanjem execute in executeUpdate.

Primer: če ste imeli vrstico kode VBA:

 DoCmd RunSQL( "SELECT * FROM tContacts" )

bi v OpenOffice.org Base imeli:

 Dim oStatement as variant
 
 oStatement = OForm.ActiveConnection.CreateStatement
   ' Kjer je oForm predmet DataForm
   ' OPOMBA enako bi lahko naredili tudi
   ' s predmetoma resultSet in rowSet
   ' oStatement = OResultSet.ActiveConnection.CreateStatement
 
 oStatement.execute( "SELECT * FROM ""tContacts"""  )
 

Če pa bi z druge strani imeli vrstico kode VBA:

 DoCmd RunSQL( "DELETE FROM tContacts WHERE Status = 'INACTIVE'" )

potem bi nad izjavo uporabili metodo executeUpdate:

 oStatement.executeUpdate( "DELETE FROM ""tContacts"" WHERE ""Status"" = 'INACTIVE'"  )

Pravilo se glasi -

  • če izjava SQL vrne zapise, uporabite execute ali executeQuery.
  • če izjava SQL ne vrne zapisov, uporabite executeUpdate.

Če uporabljam polja/stolpce Lookup v svojih tabelah Access, kaj lahko storim v Base?

Odgovor na to vprašanje je v dveh delih, ker Base v tabelah ne podpira vrste stolpcev Lookup.

Če je tabela prikazana v obliki po meri, boste z rabo seznamskega polja bound dobili enako funkcionalnost. Primer dodajanja seznamskega polja obrazcu in kontrolniku mreže na obrazcu je na tej strani.

V pogledu tabele ( dvoklik na ime tabele ) ekvivalent ne obstaja.

Kako uporabim domensko agregatne funkcije v Base?

Domenske agregatne funkcije, kakršne so DCount, DLookup in DMax, nimajo neposrednih ekvivalentov v Base. Z ustreznimi funkcijami SQL boste morali napisati ali oblikovati poizvedbe, ki vrnejo takšne rezultate.

Kako svojim obrazcem in poročilom dodam izračunane kontrolnike?

Kontrolnikov obrazcev in poročil Base ni mogoče uporabiti za izvajanje izračunov. Na voljo sta metodi za pridobitev rezultata izračuna z obrazca ali poročila.

Uporaba poizvedb

Spremenite podležni vir podatkov obrazca ali poročila, da izvedete izračun za vsak zapis in vrnite rezultat kot (izračunano) polje.

Uporaba makra

Če potrebujete posodabljanje kontrolnika ob vsakem vnosu podatkov v obrazec, morate napisati kratek makro, ki izvede izračun in dodeli rezultat ustreznemu dogodku enega od kontrolnikov vnosa podatkov (npr. dogodku Text modified).

Avtor: MSA-Base Faq Drew 21:01, 11. september 2007 (CEST) '
Prosimo, da ne spreminjate vsebine tega mesta brez vedenja avtorja ali vodij projekta OOo QA.

Personal tools