ZQuery

Erzeugt mit SQL-Anweisungen eine Datenmenge und stellt diese mittels einer TDataSource Komponente zur Verarbeitung zur Verfügung. Die visuellen Komponenten befinden sich in DataControls, zum Beispiel das DBGrid. Die Datenänderungen werden auf diesem zurück übertragen und in die Datenbank geschrieben.

TSQLQuery von Lazarus ist nicht konform mit ZQuery, aber die Funktionsweise ist sehr ähnlich.. Der eine oder andere Tipp ist auch hier zu holen.

SqlDBHowto von Lazarus Wiki, eine gute Einführung zur Arbeit mit den Datenbankkomponenten. Aber nicht vergessen, die Komponenten und Properties bzw. Eigenschaften sind bei Zeos und Lazarus nicht dieselben. Was die Hintergrundinformationen über die Datenbankentwicklung mit Unterstützung von Komponenten in Lazarus angeht, ist dieser Text sehr aufschlussreich:
deutsch englisch

Properties

Active
Wenn Active auf True gesetzt ist, dann ist die Verbindung zur Datenbank(tabelle) aktiv. ZQuery. Active:= True ist das selbe wie ZQuery.Open. ZQuery. Active:= False ist das selbe wie ZQuery.Close.


AutoCalcFields

Das Property AutoCalcFields legt fest, wann OnCalcFields aufgerufen wird. Bei Wert True wird OnCalcFields in den folgenden Fällen aufgerufen:

 

CachedUpdates
Die Daten werden in einem Cache des Programmes gehalten und können dann mit ApplyUpdates und anschließendem Aufruf von CommitUpdates endgültig an die Datenbank übertragen werden. Mit CancelUpdates werden Änderungen rückgängig gemacht und nicht in die Datenbank geschrieben.

Connection
Stellt die Verbindung zu ZConnection (=Datenbank) her. Durch Click auf > ganz links werden die ZConnection Properties angezeigt.

DataSource
Bei Parametern einer Abfrage, die nicht bereits zur Entwurfszeit an Werte gebunden
worden sind, wird die Eigenschaft DataSource der Abfrage überprüft. Ist DataSource gesetzt und passt der Namen des ungebundenen Parameters zu einem Spaltennamen in der spezifizierten DataSource, so wird  der aktuelle Wert an den entsprechenden Parameter gebunden. Diese Möglichkeit befähigt Anwendungen, verknüpfte Abfragen zu haben. 

FetchRow
Soweit ich in Erfahrung bringen konnte ist dieses Property für die Paginierung (Nummerierung) von Abfrageergebnissen. Wenn FetchRow auf 10 gesetzt ist, und  eine Abfrage hat beispielsweise 1000 Zeilen, dann werden bei Bedarf 10 Zeilen gleichzeitig abgerufen. (The SQL query for returning a current record after it has been updated or inserted—“RefreshSQL” )

 

Filter
Mit Filter könnte eine SQL Datenmenge noch einmal gefiltert werden, zum Beispiel
zQuery.Filter:= 'NAME LIKE '+#39+'Joh%'+#39'. Ich würde es vorziehen dies gleich in die SQL Abfrage einzubauen.


Filtered
Bei True wird das in Filter eingesetzte Filter verwendet, bei False nicht verwendet.


IndexFieldNames

Es können Feldnamen zur Indexierung verwendet werden. Diese sollten einem Index in der Tabell entsprechen, weil sonst die Performance leidet.


LinkedFields
Das Feld oder die Felder dieser Tabelle, welche als Verknüpfung zu den MasterFields der übergeordneten Tabelle verwendet werden.


MasterFields
Das Feld oder die Felder der übergeordneten Tabelle, welche als Verknüpfung zu den LinkedFields verwendet werden.


MasterSource
Verweist auf die übergeordnete Tabelle einer Verknüpfung von 2 Tabellen, welche dann mit MasterFields (MasterSource Felder) und LinkedFields (Felder der Query selbst) verknüpft werden


Name
Der Name der ZQuery Komponente


Options

doAlignMaxRequiredWideStringFieldSize: Maximal erforderliche WideString Feldgröße
doAlwaysDetailResync: immer eine erneute Synchronisierung durchführen
doCachedLobs: Lobs in Zwischenspeicher ausführen
doCalDefaults: Standardeinstellungen für Cal verwendenn?
doDontSortOnPost: Daten beim Schreiben nicht sortieren
doNoAlignDisplayWidth: Breite der Anzeige nicht ausrichten
doOemTranslate:  Oem Übersetzung durchführen
doPreferPrepared: Bevorzuge Prepared
doSmartOpen: Verwende Smart Open
doUpdateMasterFirst: Zuerst den Master updaten

 

ParamChar
Die Kennung vor den Parametern. Ist in der Regel ein Doppelpunkt und braucht nicht geändert werden.

 

ParamCheck
Mit ParamCheck wird festgelegt ob die Eigenschaft Params gelöscht und neu generiert wird, wenn die SQL-Eigenschaft der Abfrage zur Laufzeit geändert wird. Standardmäßig ist ParamCheck True. Damit wird garantiert dass die richtige Anzahl von Parametern für die aktuelle SQL-Anweisung generiert werden.

 

Params
Bei der Vorbereitung einer Abfrage wird ein Array Params für die Parameter
einer dynamischen SQL-Anweisung erzeugt. Params ist ein beginnend mit Null indiziertes Array von TParam-Objekten mit einem Element je Parameter der Abfrage; der erste Parameter ist also Parms(0), der zweite Params(1) usw.
Nehmen Sie beispielsweise an, eine Komponente ZQuery namens ZQuery1 habe die
folgende SQL Anweisung:
INSERT INTO ADRESS (NAME, SURNAME, ...)
VALUES (:Name, :Surname, ...)
Params kann dann dazu verwendet werden, die Werte der Parameter wie
folgend zu spezifizieren:
ZQuery1.Params(0).AsString := 'Johann';
ZQuery1.Params(1).AsString := 'Maier';
ZQuery1.Params(2).AsString := ...
Mit diesen Anweisungen wird der Wert 'Johann' an den Parameter :Name
gebunden, 'Maier' an den Parameter :Surname.


Properties

Wahrschenlich zum Setzen zusätzlicher Parameter, welche in den veröffentlichten Porperties nicht enthalten sind


ReadOnly

Wenn True können die Daten nur gelesen, aber nicht geändert werden.


Sequence

Die Komponente Sequence, die für die automatische Nummerierung verwendet wird. TSequence wird ab Firebird 3 anscheinend nicht mehr benötigt.


SequenceField

Das Feld, welches bei Sequence zur automatischen Nummerierung vorgesehen ist.


ShowRecordTypes

SortedFields
Wenn nach bestimmten Feldern sortiert werden soll, können diese hier angeführt werden.


SortType


SQL

Beinhaltet den Text der von einer Abfragekomponenten auszuführenden SQL-Anweisung. Der Eigenschaftstyp ist TStrings.


Tag

Eine Lazarus Standard Property zum Unterscheiden von Komponenten, uws.


UpdateMode

UpdateObject
Wenn ZQuery mit einer ZUpdateSQL Komponente verbunden ist, so ist diese hier angeführt.


WhereMode

 

Ereignisse

AfterApplyUpdates
Wenn Sie ApplyUdates aufrufen, um die Daten in die Datenbank zu schreiben wird AfterApplyUpdates nach der Durchführung von ApplyUpdates aufgerufen und Sie können hier eigene Programmteile einsetzen.

AfterCancel
Wird nach einem Abbruchvorgang ausgelöst.


AfterClose
Wird ausgelöst, nachdem der Datensatz geschlossen wurde


AfterDelete
Wird nach einem erfolgreichen Löschvorgang ausgelöst.


AfterEdit
Wird ausgelöst nachdem der Datensatz in den Bearbeitungsmodus versetzt wurde.


AfterInsert
Wird ausgelöst nachdem der Datensatz in den Einfügemodus versetzt wurde.


AfterOpen
Wird ausgelöst nachdem die Tabelle geöffnet wurde.


AfterPost
Wird ausgelöst nachdem Änderungen in die zugrunde liegende Datenbank geschrieben wurden.


AfterRefresh
Wird nach einem Refresh ausgelöst


AfterScroll
Wird ausgelöst nachdem der Cursor die Position geändert hat.


BeforeApplyUpdates
Wird ausgelöst, bevor ApplyUpdates aufgerufen wird.


BeforeCancel
Wird vor einem Abbruchvorgang ausgelöst


BeforeClose
Wird ausgelöst bevor die Tabelle/Abfrage geschlossen Wird.


BeforeDelete
Wird vor einem Löschvorgang ausgelöst.


BeforeEdit
Wird ausgelöst bevor der Datensatz in den Bearbeitungsmodus versetzt wird.


BeforeInsert
Wird ausgelöst bevor der Datensatz in den Einfügemodus versetzt wird.


BeforeOpen
Wird ausgelöst bevor eine Tabelle/Abfrage geöffnet wird.


BeforePost
Wird aufgerufen bevor Änderungen in die Datenbank hochgeladen werden


BeforeRefresh
Wird ausgelöst bevor der Refresh Befehl ausgeführt wird


BeforeScroll
Wird ausgelöst bevor der Cursor die Position ändert.


OnApplyUpdateError
Wird ausgelöst wenn bei ApplyUpdate ein Fehler auftritt.


OnCalcFields
Wird ausgelöst wenn Werte für berechnete Felder berechnet werden müssen.


OnDeleteError
Wird ausgelöst wenn ein Löschvorgang fehlschlägt.


OnEditError
Wird ausgelöst wenn ein Bearbeitungsvorgang fehlschlägt.


OnFilterRecord
Wird beim Filtern von Datensätzen ausgelöst.


OnNewRecord
Wird ausgelöst wenn ein neuer Datensatz erstellt wird.


OnPostError
Wird ausgelöst wenn eine Post Operation fehlschlägt.


OnUpdateRecord
Wird ausgelöst wenn ein Update abgesetzt wird.


 

Aktionen mit der Datenbank mittels Query

Insert
Mit Insert wird ein Datensatz in eine Tabelle eingefügt.

Append
Mit Append wird ein Datensatz an die Tabelle angehängt. Meist läuft das Ergebnis auf dasselbe Ergebnis hinaus, unabhängig davon, ob man Insert oder Append verwendet.

Delete
Löscht einen Datensatz.

Edit
Mit dem Befehl Edit kann der Datensatz in den Änderungsmodus versetzt werden.

Cancel
Wenn man den Datensatz editiert hat, die Änderungen noch nicht in die Datenbank geschrieben hat, kann man die Änderungen mit Cancel wieder rückgängig machen.#

Post
Mit dem Aufruf von Post werden die Änderungen im Datensatz in die Datenbank geschrieben.

Refresh
Die Methode Refresh liest den aktuellen Datensatz aus der Datenbank neu ein. Sollten Änderungen im Datensatz durchgeführt worden sein, so werden jetzt die aktuellen Daten angezeigt

Open
Öffnet die Tabelle/Query. Entspricht Active:= true;

Close
Schließt die Tabelle/Query. Entspricht Active:= false;

EnableControls
Ist standardmäßig gesetzt und bedeutet, dass die aktuellen Daten in den Anzeigeelementen im Programm angezeigt werden.

Disable Controls
Bricht die Verbindung zu den Anzeigeelementen im Programm ab. Dies verhindert das Flackern der Anzeige und beschleunigt die Ausführung.


 

Methoden zur Bewegung in Datenmengen

First
Springt auf den ersten Datensatz

Last
Springt auf den letzten Datensatz

Next
Geht zum nächsten Datensatz

Prior
Geht einen Datensatz zurück

MoveBy(n)
Springt x Datensätze zurück oder vor. MoveBy(-3) springt 3 Datensätze zurück und MoveBy(1) hat den gleichen Effekt wie Next.

BOF
Ist True, wenn der Datensatzzeiger sich am Anfang der Tabelle befindet

EOF
Ist True, wenn sich der Datensatzzeiger am Ender der Tabelle befindet

Wenn BOF und EOF gleichzeitig True sind, haben wir es mit einer leeren Tabelle zu tun.

Die Komponente TDBNavigator hat viele dieser Befehle in seine Buttonleiste integiriert.

 

Status der Datenmenge

Der Status der Datenmenge kann mithilfe der Eigenschaft State abgefragt werden.
Dieser kann sein:

 

<>

 

 

© CMBasic.de