# Glom-Benutzerhandbuch V0.2

für glom v1.6
2004
Murray Cumming
2008, 2010
Mario Blättermann (mariobl@gnome.org)
Glom Entwickler-Team

Das vorliegende Dokument kann gemäß den Bedingungen der GNU Free Documentation License (GFDL), Version 1.1 oder jeder späteren, von der Free Software Foundation veröffentlichten Version ohne unveränderbare Abschnitte sowie ohne Texte auf dem vorderen und hinteren Buchdeckel kopiert, verteilt und/oder modifiziert werden. Eine Kopie der GFDL finden Sie unter diesem Link oder in der mit diesem Handbuch gelieferten Datei COPYING-DOCS.

Dieses Handbuch ist Teil einer Sammlung von GNOME-Handbüchern, die unter der GFDL veröffentlicht werden. Wenn Sie dieses Handbuch getrennt von der Sammlung weiterverbreiten möchten, können Sie das tun, indem Sie eine Kopie der Lizenz zum Handbuch hinzufügen, wie es in Abschnitt 6 der Lizenz beschrieben ist.

Viele der Namen, die von Unternehmen verwendet werden, um ihre Produkte und Dienstleistungen von anderen zu unterscheiden, sind eingetragene Warenzeichen. An den Stellen, an denen diese Namen in einer GNOME-Dokumentation erscheinen, werden die Namen in Großbuchstaben oder mit einem großen Anfangsbuchstaben geschrieben, wenn das GNOME-Dokumentationsprojekt auf diese Warenzeichen hingewiesen wird.

DAS DOKUMENT UND VERÄNDERTE FASSUNGEN DES DOKUMENTS WERDEN UNTER DEN BEDINGUNGEN DER GNU FREE DOCUMENTATION LICENSE ZUR VERFÜGUNG GESTELLT MIT DEM WEITERGEHENDEN VERSTÄNDNIS, DASS:

1. DIESES DOKUMENT WIRD »WIE VORLIEGEND« GELIEFERT, OHNE GARANTIEN IRGENDEINER ART, SOWOHL AUSDRÜCKLICH GENANNTE ALS AUCH ANGEDEUTETE. DIES BEZIEHT SICH AUCH OHNE EINSCHRÄNKUNG AUF GARANTIEN, DASS DIESES DOKUMENT ODER VERÄNDERTE FASSUNGEN DIESES DOKUMENTS FREI VON HANDELSDEFEKTEN, FÜR EINEN BESTIMMTEN ZWECK GEEIGNET IST ODER DASS ES KEINE RECHTE DRITTER VERLETZT. DAS VOLLE RISIKO WAS QUALITÄT, GENAUIGKEIT UND LEISTUNG DES DOKUMENTS ODER VERÄNDERTE FASSUNGEN DES DOKUMENTS LIEGT BEI IHNEN. SOLLTE EIN DOKUMENT ODER EINE VERÄNDERTE FASSUNG DAVON FEHLER IRGENDEINER ART BEINHALTEN, TRAGEN SIE (NICHT DER URSPRUNGSAUTOR, DER AUTOR ODER EIN MITWIRKENDER) DIE KOSTEN FÜR NOTWENDIGE DIENSTLEISTUNGEN, REPARATUREN ODER FEHLERKORREKTUREN. DIESER HAFTUNGSAUSSCHLUSS IST EIN ESSENZIELLER TEIL DIESER LIZENZ. DIE VERWENDUNG EINES DOKUMENTS ODER EINER VERÄNDERTEN VERSION DES DOKUMENTS IST NICHT GESTATTET AUßER UNTER BEACHTUNG DIESES HAFTUNGSAUSSCHLUSSES UND

2. UNTER KEINEN UMSTÄNDEN UND AUF BASIS KEINER RECHTSGRUNDLAGE, EGAL OB DURCH UNERLAUBTEN HANDLUNGEN (EINSCHLIEßLICH FAHRLÄSSIGKEIT), VERTRAG ODER ANDERWEITIG KANN DER AUTOR, URSPRUNGSAUTOR, EIN MITWIRKENDER ODER EIN VERTRIEBSPARTNER DIESES DOKUMENTS ODER EINER VERÄNDERTEN FASSUNG DES DOKUMENTS ODER EIN ZULIEFERER EINER DIESER PARTEIEN, HAFTBAR GEMACHT WERDEN FÜR DIREKTE, INDIREKTE, SPEZIELLE, VERSEHENTLICHE ODER FOLGESCHÄDEN JEGLICHER ART, EINSCHLIEßLICH UND OHNE EINSCHRÄNKUNGEN SCHÄDEN DURCH VERLUST VON KULANZ, ARBEITSAUSFALL, COMPUTERVERSAGEN ODER COMPUTERFEHLFUNKTIONEN ODER ALLE ANDEREN SCHÄDEN ODER VERLUSTE, DIE SICH AUS ODER IN VERBINDUNG MIT DER VERWENDUNG DES DOKUMENTS UND VERÄNDERTER FASSUNGEN DES DOKUMENTS ERGEBEN, AUCH WENN DIE OBEN GENANNTEN PARTEIEN ÜBER DIE MÖGLICHKEIT SOLCHER SCHÄDEN INFORMIERT WAREN.

Murray
Cumming
Glom Entwickler-Team

     murrayc@murrayc.com

Glom 1.6
20. juni 2004

Murray Cumming

Murray Cumming

Dieses Handbuch beschreibt Version 1.6 von Glom

## Rückmeldungen

Um einen Fehler zu melden oder einen Vorschlag zu Glom oder zu diesem Handbuch zu machen, können Sie das Fehlererfassungssystem von GNOME verwenden, in welchem Sie als Produkt Glom auswählen. Bitte durchsuchen Sie zunächst die Fehlerdatenbank, um sicher zu gehen, dass über Ihr Anliegen nicht bereits berichtet wurde.

User manual for Glom.

## Einführung

Glom erlaubt Ihnen das Erstellen und Benutzen von Datenbanksystemen.

## Erste Schritte

### Glom starten

Sie können Glom auf folgende Arten starten:

Menü Anwendungen

  Wählen Sie Büroprogramme Glom.

### Beim Start von Glom

Wenn Sie Glom starten, wird folgendes Fenster angezeigt.

#### Glom-Startfenster

Zeigt das Hauptfenster von Glom.

## Using Glom as an Operator

To open an existing Glom document, either open that document from the File Manager, or choose Glom from the Applications menu, and then choose the document when asked. Glom will ask you for a user name and password to access the database. Your administrator will provide your user name and password.

When you open an existing document, Glom will be in `Operator` `user level`. This user level allows you to find and edit records, but does not allow you to change the fundamental structure of the database.

### Navigation

Each database has several tables. To look at a different table, choose `Tables` from the `Navigate` menu. Then double-click on the table, or select it and click the `Open` button.

#### Navigating to a Table

Navigating to a Table.

### Betrachten und Eingeben von Daten

When in `Data Mode`, you can view or enter information in either the `List` or `Details` view.

#### Die Listenansicht

Die Listenansicht zeigt sehr viele Datensätze gleichzeitig und zeigt üblicherweise nur die wichtigsten Felder an.

Wenn Sie in ein Feld Daten eingeben, werden diese unmittelbar in der Datenbank gespeichert, sobald Sie die Eingabe in diesem Feld beendet haben. Falls es sich um ein Feld mit Datums-oder Zeitangaben handelt, werden diese Daten für Sie überprüft.

Um einen neuen Datensatz zu erstellen, klicken Sie auf den Knopf Neu, oder beginnen Sie mit der Eingabe in einem Feld in der letzten leeren Zeile. Eine Zeile mit leeren Feldern für einen neuen Datensatz wird erstellt, die Sie nun ausfüllen können.

##### Die Listenansicht

Die Listenansicht.

Um die Datensätze zu sortieren, klicken Sie einfach auf den Spaltenkopf. Beispielsweise könnten Sie auf eine Datumsspalte klicken, um die Liste der Eingänge nach Datum zu sortieren. Wenn Sie anschließend erneut darauf klicken, wird die Reihenfolge der Liste umgekehrt.

#### Die Detailansicht

Die Detailansicht zeigt nur einen Datensatz und stellt alle Felder in sinnvoller Anordnung dar.

Wenn Sie in ein Feld Daten eingeben, werden diese unmittelbar in der Datenbank gespeichert, sobald Sie die Eingabe in diesem Feld beendet haben. Falls es sich um ein Feld mit Datums-oder Zeitangaben handelt, werden diese Daten für Sie überprüft.

To create a new record just click the `New` button. A new record will be created with blank fields for you to fill in.

##### Die Detailansicht

Die Detailansicht.

### Daten suchen

Choose `Find Mode` from the Mode menu. The fields in the List and Details views will now be empty, and a Find button will appear at the bottom of the window.

Enter information, or part of the information, into a field to find records with that information in that field. For instance, enter Jim into a name field to find records with "Jim" or "Jimmy" in the name.

When you press the `Find` button, Glom will search for records and then display them. If only one record is found then it will show you that record in the Details view. If several records are found then it will show you those records in the List view.

### Drucken von Berichten

If your database developer has defined some reports for a table then you will seem them listed in the `Reports` menu. Just choose the report from the menu to create the report. If you have previously performed a search then the report will contain only the currently-found data. Otherwise it will contain all data in the current report. Remember that each table has its own reports so you may need to switch to the relevant table to use a particular report.

#### Ein Bericht

Ein Bericht.

## Glom als Entwickler benutzen

When you create a new document, Glom will be in the `Developer` `user level`. You can also change to the Developer user level after opening an existing document, with the `User Level` menu. Glom will only allow this if the administrator has allowed it.

### Tabellen hinzufügen

You can see the list of existing tables by choosing `Tables` from the `Navigate` menu. You will also see this window after connecting to a database server, after creating a new document. To create a new table, click the `Add` button and enter the name for the new table. Glom will suggest a human-readable title for this table. `Operators` will see this title instead of the actual table name. You can also mark a tables as `hidden` from Operators. For instance, Operators should see "Invoice Lines" as related records from the "Invoices" table, but they should never be able to navigate directly to the "Invoice Lines" table.

You can also specify one table as the `default table`. This table will be shown whenever an operator opens an existing document, without asking him to select a table from the list.

You can also use this window to rename an existing table.

Click the `Open` button to look at the selected table.

### Bearbeiten von Feldern

Choose `Fields` from the `Developer` menu. This shows the list of fields in the table. New tables automatically have a primary key field, but you can change this field if necessary.

Click the `Add` button to add a new field, then enter the name of the new field. Glom will guess an appropriate human-readable title for this field, but you can edit this. `Operators` will see this title instead of the actual field name.

To specify more field details, select the field and click the `Details` button.

#### Bearbeiten von Feldern

Editing the table's fields.

#### Primärschlüssel

Each table must have one, and only one, `Primary Key`. The value in this field will be unique, meaning that each value in this field will appear in only one record in the table. For instance, each record in a "Customers" table would have a "Customer ID". This value will be used to refer to that customer from other tables, such as "Projects" and "Invoices" records. See the Creating Relationships section to see how you can relate tables together.

#### Feldtypen

Glom offers a few simple field types:

1. Nummer

2. Text

3. Datum

4. Zeit

5. Boolean - either true or false

6. Bild

#### Calculated Fields

Field values can be calculated in terms of other fields, using the Python programming language. This calculation should be the implementation of a python function, which should return a value. The return value will be used as the value of the field. This value will be recalculated every time one of the source fields changes. TODO: This only works for default values at the moment, and you can not use field values in the calculation yet.

You can also use calculations to specify a default value for fields, by selecting the `Default Value` tab in the `Field Details` window, clicking on the `Calculate Value` check box, and then entering a Python calculation. You can test this calculation in the `Edit` window.

### Erzeugung von Layouts

Jede Tabelle hat eine `Listenansicht` und eine `Detailansicht`. Als Vorgabe zeigen diese alle Felder in einer Tabelle an, in der Reihenfolge, wie sie angelegt wurden. Sie können dieses Layout ändern, indem Sie Layout aus dem Menü Entwickler wählen.

#### Anordnen der Listenansicht

Für die `Listenansicht` können Sie die Reihenfolge der angezeigten Spalten angeben, sowie ob einige Felder verborgen werden sollen.

##### Bearbeiten der Listenansicht

Bearbeiten der Listenansicht.

#### Festlegen der Anordnung der Detailansicht

Für die `Detailansicht` können Sie Gruppen von Feldern anlegen und diese mit einem Titel versehen. Sie können Felder in diesen Gruppen platzieren und die Abfolge der Felder in diesen Gruppen angeben. Sie können auch die Reihenfolge dieser Gruppen festlegen. Sie könnten beispielsweise in einer Tabelle namens »Kontakte« eine Gruppe »Name« anlegen und die Felder »Titel«, »Vorname« und »Nachname« in diese Gruppe einfügen. Für die »Adresse«-Felder könnten Sie dann wiederum andere Gruppen verwenden.

##### Bearbeiten der Detailansicht

Bearbeiten der Detailansicht.

### Erstellen von Beziehungen

Tables in the Database are often related together. For instance, an "Invoices" table might have a "Customer ID" field. A value in this field would specify a record in the "Customers" table with the same value. Glom can show extra information, such as the customer name, from that related record. Or it can show a list of several related records - for instance, several related "Invoice Lines" that are related to a record in the "Invoice" record.

To create relationships, choose `Relationships` from the `Developer` menu. This will show the list of existing relationships. Click the `Add` button to create a new relationship, and enter a name for it. You should then choose a field in the current table, and a field in another table to which it should be related. This relationship will find any records in the other table for which the values in both fields are equal.

You can use the relationship in the following places.

1. To show a related field on the List or Details view.

2. To show a list of related records on the Details view.

3. To lookup a value from a field in a related record. For instance, to copy the current price of a "Product" into the "Price" field of an "Invoice Line" record.

4. To calculate a field value.

### Benutzer-Administration

To define the `Operators` who can use your database, and to specify what access they have to the various tables, choose `Users` from the `Developer` menu.

### Übersetzungen

Glom's user interface (and this document) is translated into several languages, as you should see already if you are using your computer with a non-English user interface. In addition, Glom automatically shows and understands numbers and dates according to the current user's local conventions. For instance, a user in the USA might enter a price as 1.99 and a date as 1/13/2008, but a German user of the same database will later see that as 1,99 and 13.1.2008.

However, the Glom system that you create also contains text that must be translated if it will be used by people who speak different languages. For instance, you must provide translations for the titles of your tables, fields, and reports. All of these text items can be seen in a list when you choose `Translations` from the `Developer` menu. In this window you can specify the language that you used for the original text, and enter translations for each text item for additional languages. When the Glom system is opened by a user of that language then these text items will be shown in the user interface.

#### Übersetzungen

Übersetzungen.

Experienced translators may be more familiar with the .po file format, or you might wish to use the many tools that work with the .po file format. By using the `Export` button you can create a .po file to use in a separate tool or to send to a translator. You can then import the resulting translation by using the `Import` button.

### Anfertigen von Berichten

#### Hinzufügen oder Bearbeiten von Berichten

Glom can produce reports to show specific fields for sets of records, sorted and grouped. For instance, a shop might need a report listing all products sold in one month, grouped by product type, and sorted by price inside each group. Each table has its own reports, which are available to the operator from the `Reports` menu.

To define a report, or to change the definition of an existing report, choose `Reports` from the `Developer` menu.

##### Erzeugen oder Bearbeiten von Berichten

Erstellen oder Bearbeiten von Berichten.

Notice that each report has an ID as well as a human-readable name. This allows your report to have a translated title when used on a computer that uses a different language.

#### Bearbeiten eines Berichts

Ein Glom-Bericht gliedert sich in drei Bereiche:

1. The Header, which appears at the start of the report

2. The Main area, in which the records and summary lines are shown, with the actual data from the database.

3. The Footer, which appears at the end of the report.

Inside an area, such as the Main part, you may add report `Parts`, such as fields, text, or images. These will usually appear in a row on the printed report, with one row for each record. In the simple case, this will look much like Glom's list view. You can add parts to your report by selecting them from the `Available Parts` list and then clicking the `Add` button. The part will then be added to the `Parts` list, in the selected area.

To specify details for the parts, such as the text or image to display, or to choose the field to display, select the part in the `Parts` list and click the `Edit` button. You may also specify field formatting by clicking the `Formatting` button, just as you would when defining a details or list layout.

##### Bearbeiten eines Berichts

Bearbeiten eines Berichts.

Some parts may contain other parts and have extra properties to control how they present their child parts. For instance, the `Group By` part groups records together by a field. For instance, a products report might group a list of products by product type. You can even add a second sub-grouping inside the main `Group By` part, by selecting your top-level `Group By` part in the `Parts` list while adding a new `Group By` part from the `Available Parts` list. For instance, you might group your products by manufacturer, inside each product type group.

To specify the field by which the records should be grouped, select your `Group By` part in the `Parts` list and click the `Edit` button. You can then choose the field by which the records should be grouped, and select the fields by which these records should be sorted within the group. You may also specify some additional fields to be displayed in the group's title row. For instance, you might want to group products by a manufacturer ID, but also show the manufacturer name.

##### Editing a Group By Part

Bearbeiten eines Berichts.

The `Vertical Group` part may contain other items. For instance, it allows you to arrange fields below each other instead of just one after the other in the horizontal row. This is useful for grouping related fields such as address lines, or just to squeeze more information into the records's row on the report.

##### Ein Bericht mit vertikalen Gruppen

Ein Bericht mit vertikalen Gruppen.

When you have finished, click the `Close` button to save the report's definition. Your report can then be chosen from the `Reports` menu. See the Printing Reports section for more details.

## Dialoge

### Dialog: Startdialog

This dialog allows the user to choose an existing document or create a new document. Existing documents may be selecting from the list of recently opened documents or by select a file with the file chooser dialog. Documents can also be opened via the network if other users are running Glom on the local network. Finally, a new document can be created either by opening a template file which already contains some initial tables and records, or by creating an empty document.

### Dialog: Neue Datenbank

### Dialog: Datenbank anlegen

### Dialog: Verbindung

This dialog requests a user name and password for connection to a database server. This is usually not the same username and password combination with which you log in to your system. All Glom systems require a database server on which the actual data will be stored. If the database server is not running on your local computer ("localhost"), then you must also provide its network hostname, such as "glomserver.openismus.com", though your hostname will be different.

Your system administrator can provide these database login details.

If you are the system administrator, see Glom's Postgres Configuration web page for help with installing and configuring a database server.

### Dialog: Verbindungsfehler

This dialog is shown when Glom could not connect to the specified database server. Either the database server is not running at the specified hostname, or the user name and password were not accepted by the database server. See the Connection Dialog section for more details.

### Dialog: Datenbankeinstellungen

### Dialog: Ändern der Spracheinstellungen

### Fenster: Textobjekt

### Fenster: Bildobjekt

### Dialog: Reitermappen

### Dialog: Data invalid format

### Dialog: Relationship overview

### Fenster: Gruppen

### Dialog: Group by sort fields

### Dialog: Group by secondary fields

### Window: Button script

### Window: Field calculation

### Dialog: Benutzer wählen

### Dialog: Benutzer wählen

### Dialog: Benutzer

### Dialog: Translation identify original

### Dialog: Translation copy

### Dialog: Datum wählen

### Dialog: In Tabelle importieren

This dialog allows the user to import a CSV (comma separated value) file into the current database table. It shows the first few rows of the file to import and allows the user to select the target field in the database for each column in the CSV file. For auto-incremented primary keys, the primary key field cannot be used as a target field, but otherwise one column must be imported into the primary key field.

## Über Glom

Glom wird von Freiwilligen der Glom- und GNOME-Gemeinschaft betreut. Weitere Informationen über Glom finden Sie auf dessen Webseite.

Um einen Fehler zu melden oder einen Vorschlag zu dieser Anwendung oder zu diesem Handbuch zu machen, benutzen Sie bitte das Fehlererfassungssystem von GNOME.

Another excellent source of information are the Glom mailing lists.

Dieses Programm ist freie Software. Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 2 der Lizenz oder (nach Ihrer Option) jeder späteren Version. Eine Kopie der GNU General Public License finden Sie unter diesem Link, oder in der Datei COPYING, die im Quellcode dieses Programms enthalten ist.

## Konzepte

Glom is easy to use, but you must understand the following basic concepts.

1. `Database`: Each Glom document allows access to one database.

2. `Table`: Each database contains several tables, such as "Customers" and "Invoices" tables.

3. `Field`: Each table has several fields, such as "Customer ID", "First Name", and "Date of Birth" fields. In other documents and applications, fields are sometimes called "Columns"

4. `Records`: Each table contains several records, each of which has values for each of the fields. For instance, the "Customers" table will have a record for each customer. In other documents and applications, records are sometimes called `Rows`.

5. `Relationships`: Each table might be related to other tables, via fields in both tables. For instance, a "Customers" table could have a relationship to the "Invoices" table, so that people could see all the invoices for that customer. Only developers need to understand this concept. In other documents and applications, relationships are sometimes called "Joins".

## Calculated fields and button scripts

Calculated fields and button scripts use the Python programming language. The calculation or script is the implementation of a function whose signature is provided for you.

### Editing the definition of a calculated field

Editing the definition of a calculated field.

### Feldwerte

For instance,

    record["name_first"]

is the value of the name_first field in the current record.

### Bezugsdatensätze

For instance,

    record.related["location"]

provides the related records for the current record.

#### Single related records

For relationships that specify a single record, you can get the value of a field in that record. For instance,

    record.related[»Ort«][»Name«]

is the value of the name field in the table indicated by the location relationship (often called location::name).

#### Datensätze mit mehrfachen Bezügen

For relationships that specify multiple records, you can use the aggregate functions (sum, count, average) to get overall values. For instance,

    record.related["invoice_lines"].sum("total_price")

.

### Prüfen auf leere Werte

How you test for empty values depends on the type of field:

#### Nicht-Text-Felder

Non-text fields may be empty, indicating that the user has not entered any value in the field. For instance, Glom does not assume that an empty value in a numeric field should mean 0.

Sie können testen, ob ein Feld leer ist, indem Sie »None« aus Python verwenden. Zum Beispiel:

      if(record["contact_id"] == None):
        return "No Contact"
      else:
        return record.related["contacts"]["name_full"]

You might also test whether there are any related records. For instance:

      if(record.related["contacts"] == None):
        return "No Contact"
      else:
        return record.related["contacts"]["name_full"]

#### Textfelder

In Textfeldern sollten Sie prüfen, ob Zeichenketten der Länge Null vorhanden sind. Glom kann nicht zwischen Zeichenketten der Länge Null und fehlenden Zeichenketten unterscheiden, weil dies keinerlei Vorteile hätte. Zum Beispiel:

      if(record["name_full"] == ""):
        return "No Name"
      else:
        return record["name_full"]

### Benutzung der vollen Pygda-API

pygda is a python API for the libgda API. The record's `connection` attribute provides a gda.connection that can be used to access the current database directly. This allows you to run any SQL query, for instance to read data from the database with a SELECT, or to change values in the database with an UPDATE. Note that the connection is already open so you can avoid the difficult work of specifying the connection details.

Das Attribut `table_name` des Datensatzes stellt auch den Namen der aktuellen Tabelle zur Verfügung.

Dieses Beispiel liest alle Daten aus der aktuellen Tabelle und gibt deren Werte im Terminal aus:

    # Use the current database's connection
    # to get all the data for the current table.
    #
    # record.connection is an already-open gda.connection object,
    # saving us the bother of opening the connection,
    # or even knowing the name of the database.

    query = "SELECT * FROM %s" % record.table_name
    data_model = gda.gda_execute_select_command(record.connection, query)

    rows = data_model.get_n_rows()
    columns = data_model.get_n_columns()
    print "    Number of columns: ", columns

    for i in range(columns):
        print "      column ", i;
        print "        name=", data_model.get_column_title(i)

        # Find out whether it's the primary key:
        field = data_model.describe_column(i)
        if field.get_primary_key():
            print "        (primary key)"

        print "\n";

    print "    Number of rows: ", rows

    for row_index in range(rows):
        print "      row ", row_index;

        for col_index in range(columns):
            print "        value=", data_model.get_value_at(col_index, row_index).get()

        print "\n";