Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Tabelle/Query, die ihre Daten aus einer anderen Query bezieht (https://www.delphipraxis.net/164799-tabelle-query-die-ihre-daten-aus-einer-anderen-query-bezieht.html)

DeddyH 30. Nov 2011 14:50

AW: Tabelle/Query, die ihre Daten aus einer anderen Query bezieht
 
Und mit FIRST statt TOP?

RSE 30. Nov 2011 15:55

AW: Tabelle/Query, die ihre Daten aus einer anderen Query bezieht
 
Mit FIRST auch nicht, und LIMIT kann er auch nicht. Auszug aus der mir vorliegenden Hilfedatei:
Code:
SELECT [TRANSACTION transaction]
   [DISTINCT | ALL]
   {* | <val> [, <val> …]}
   [INTO :var [, :var …]]
   FROM <tableref> [, <tableref> …]
   [WHERE <search_condition>]
   [GROUP BY col [COLLATE collation] [, col [COLLATE collation] …]
   [HAVING <search_condition>]
   [UNION <select_expr> [ALL]]
   [PLAN <plan_expr>]
   [ORDER BY <order_list>]
   [FOR UPDATE [OF col [, col …]]];

<val> = {
   col [<array_dim>] | :variable
   | <constant> | <expr> | <function>
   | udf ([<val> [, <val> …]])
   | NULL | USER | RDB$DB_KEY | ? 
   } [COLLATE collation] [AS alias]
<array_dim> = [[x:]y [, [x:]y …]]
<constant> = num | 'string' | charsetname 'string'
<function> = COUNT (* | [ALL] <val> | DISTINCT <val>)
   | SUM ([ALL] <val> | DISTINCT <val>)
   | AVG ([ALL] <val> | DISTINCT <val>)
   | MAX ([ALL] <val> | DISTINCT <val>)
   | MIN ([ALL] <val> | DISTINCT <val>)
   | CAST (<val> AS <datatype>)
   | UPPER (<val>)
   | GEN_ID (generator, <val>)

<tableref> = <joined_table> | table | view | procedure
   [(<val> [, <val> …])] [alias]
<joined_table> = <tableref> <join_type> JOIN <tableref>
   ON <search_condition> | (<joined_table>)
<join_type> = [INNER] JOIN
   | {LEFT | RIGHT | FULL } [OUTER]} JOIN

<search_condition> = <val> <operator> {<val> | (
<select_one>)} 
   | <val> [NOT] BETWEEN <val> AND <val>
   | <val> [NOT] LIKE <val> [ESCAPE <val>]
   | <val> [NOT] IN (<val> [, <val> …] | <select_list>)
   | <val> IS [NOT] NULL
   | <val> {>= | <=} 
   | <val> [NOT] {= | < | >} 
   | {ALL | SOME | ANY} (<select_list>)
   | EXISTS (<select_expr>)

| SINGULAR (<select_expr>)
   | <val> [NOT] CONTAINING <val>
   | <val> [NOT] STARTING [WITH] <val>
   | (<search_condition>)
   | NOT <search_condition>
   | <search_condition> OR <search_condition>

| <search_condition> AND <search_condition>
<operator> = {= | < | > | <= | >= | !< | !> | <> | !=}
<plan_expr> =
   [JOIN | [SORT] [MERGE]] ({<plan_item> | <plan_expr>}
   [, {<plan_item> | <plan_expr>} …])

<plan_item> = {table | alias} 

{NATURAL | INDEX (<index> [, <index> …])| ORDER <index
>}
<order_list> =
   {col | int} [COLLATE collation]
      [ASC[ENDING] | DESC[ENDING]]
      [, <order_list> …]

RSE 30. Nov 2011 17:36

AW: Tabelle/Query, die ihre Daten aus einer anderen Query bezieht
 
Wenn ich einen Filter setze, gibt es eine Exception sobald ich FindFirst aufrufe (Filtered = False!). Er zerschießt das SQL irgendwo innerhalb von FindFirst, daher habe ich noch nicht einmal das zerschossene SQL als Text zur Analyse. Ich werde morgen noch den OnFilterRecord Event ausprobieren.

IBO Version 3.4.Ce auf Delphi 5

hoika 30. Nov 2011 21:17

AW: Tabelle/Query, die ihre Daten aus einer anderen Query bezieht
 
Hallo,

wenn es sich nur um die Daten einer Tabelle/Query handelt,
kannst du das TOP/LIMIT mit einer Stored Procedure nachbauen,
und ja, dass kann IB seit Version 4.2 ;)


Heiko

RSE 1. Dez 2011 10:49

AW: Tabelle/Query, die ihre Daten aus einer anderen Query bezieht
 
OnFilterRecord wird bei meiner Version von IBObjects (3.4.Ce) aufgrund eines Bugs nicht/nur manchmal aufgerufen. Da ich aber die Ergebnisse sowieso in ein Stringgrid einlese, kann ich ja auch beim Einlesen selbst aussortieren... Das Einfache liegt so nahe, dass man es übersieht!

Ich lese also ein, bis der nächste Tastenanschlag kommt, dann wird abgebrochen. Durch den neuen Tastenanschlag wird das Einlesen neu gestartet. Während des Einlesens habe ich ein Application.Processmessages eingebaut. Das ermöglicht mir Eingaben im Suchfeld (etwas hakelig, aber geht). DoClose und CloseQuery werden aber komischerweise erst ausgeführt, nachdem das Einlesen beendet ist, so dass ich es nicht abbrechen kann, wenn die Form geschlossen werden soll. Wieso wird das nicht beim nächsten Application.Processmessages aufgerufen?

RSE 1. Dez 2011 11:47

AW: Tabelle/Query, die ihre Daten aus einer anderen Query bezieht
 
Zitat:

Zitat von RSE (Beitrag 1138755)
Wieso wird das nicht beim nächsten Application.Processmessages aufgerufen?

Lösung: Mein Form ist modal, und bei modalen Fenstern wird lediglich ModalResult auf mrCancel gesetzt, alles andere passiert dann in ShowModal:
Delphi-Quellcode:
      repeat
        Application.HandleMessage;
        if Application.FTerminate then ModalResult := mrCancel else
          if ModalResult <> 0 then CloseModal;
      until ModalResult <> 0;
... und das hängt so lange in Application.HandleMessage, bis ich alle Daten eingelesen habe und damit die Prozedur beende.

Iwo Asnet 1. Dez 2011 11:49

AW: Tabelle/Query, die ihre Daten aus einer anderen Query bezieht
 
Eine live-Suche über eine Query lösen zu wollen, ist sportlich. I.a. werden die Daten schon geeignet im Speicher abgelegt, z.B. in einem Baum, Trie o.ä.

Als in-memory Kopie einer Tabelle würde ich eine in-memory Tabelle empfehlen :stupid: z.B. "kbMemTable" oder ein TClientDataset.

Ich würde allerdings würde die Daten wirklich einsaugen und in einer geeigneten Struktur ablegen. Ich kann mir vorstellen, das man alles in einen String klatscht, mit geeigneten Feld/Recordtrennern und dann ein sauschnelles Pos drüber laufen lässt.

Wonach soll denn überhaupt gesucht werden?

RSE 1. Dez 2011 12:22

AW: Tabelle/Query, die ihre Daten aus einer anderen Query bezieht
 
@Iwo Asnet:

Wenn du von Anfang an liest, wirst du feststellen, dass ich TClientDataSet ausgeschlossen habe incl. des Grundes. An die IBObjects als Zugriffmöglichkeit auf die DB bin ich gebunden, die setzen wir im ganzen Programm ein. Mein genannter Ansatz funktioniert inzwischen einwandfrei, damit habe ich meine Lösung gefunden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:14 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz