Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Query.sql aber keinen (Schreib)-Zugriff? (https://www.delphipraxis.net/7302-query-sql-aber-keinen-schreib-zugriff.html)

Taladan 8. Aug 2003 15:14


Query.sql aber keinen (Schreib)-Zugriff?
 
hallo. Hab da ein Problem mit meinen Query. Ich weise meinen Query wie folgt während der Laufzeit seinen SQL-String zu. Dies funktioniert auch ohne Probleme.

Delphi-Quellcode:
     query1.sql.clear;
     query1.sql.add('select * from verteilungen where datumderverteilung = '+'"'+combobox1.text+'"');
     query1.sql.add('order by hauptgebiet,nebengebiet');
     query1.active := true;
     query1.RequestLive := true;
     query1.open;
Wenn ich jetzt über ein Query1.delete einen Datensatz lösche, bekomme ich immer folgende Fehlermeldung. "Query1. Eine Datenmenge die nur zum Lesen ist, kann nicht geändert werden." Selbe komme auch bei einen query1.append oder query1.edit. Bei einer anderen Anwendung kann ich über das Query.delete ohne probleme löschen. Warum hier nicht?

r_kerber 8. Aug 2003 15:41

Re: Query.sql aber keinen (Schreib)-Zugriff?
 
Streiche doch mal die Zeile:
Delphi-Quellcode:
     query1.active := true;
raus! Ansonsten solltest Du vielleicht die Änderung von Daten (DELETE, UPDATE, INSERT) über TUpdateSQL durchführen!

MrSpock 8. Aug 2003 15:42

Re: Query.sql aber keinen (Schreib)-Zugriff?
 
Hallo Taladan,

mit

Delphi-Quellcode:
Query1.Active := True;
wird die Query ja schon ausgeführt. Deshalb ist die anschließende Anweisung "RequestLive := True" hier zu spät. Lösche einmal die Zeile Query1.Active := True;

Taladan 8. Aug 2003 16:09

Re: Query.sql aber keinen (Schreib)-Zugriff?
 
Ich kann jetzt zwar über query1.delete den datensatz löschen, aber dies ist leider nur im Query der Fall. Nicht der Reelle datensatz. d.h. sobalt ich mir die daten neu anzeigen lasse, sind sie wieder da.
Das query.edit und query.append funktioniert immer noch nicht. :wall:

Taladan 8. Aug 2003 16:14

Re: Query.sql aber keinen (Schreib)-Zugriff?
 
Ich kann jetzt zwar über query1.delete den datensatz löschen, aber die löschung wird nicht ausgeführt. sie verschwindet zwar im query, aber sobald ich den filter neu setze, sind alle wieder da. query.edit funktioniert immer noch nicht.

JoelH 8. Aug 2003 16:24

Re: Query.sql aber keinen (Schreib)-Zugriff?
 
hmm,
mit SELECT kannste nix löschen, dazu musst du
Code:
 DELETE xyz FROM database WHERE lala = 'unfug'
machen.

du speicherst ja auch kein file mit Load oder ?

theomega 8. Aug 2003 16:48

Re: Query.sql aber keinen (Schreib)-Zugriff?
 
Also, ihr redet alle um den heißen Brei herum :D

query1.open verwendest du, wenn dein Query ein Ergebniss zurückliefert (also bei SELECT), query1.execute verwendest du, wenn dein Query kein (!) Ergebniss zurückliefert (DELETE,INSERT)

Also jetzt sollte alles klar sein!

MrSpock 8. Aug 2003 17:01

Re: Query.sql aber keinen (Schreib)-Zugriff?
 
Hallo Taladan,

ich hab gerade noch einmal nachgeschaut: eine Query, die eine QRDER BY Klausel enthält ist nicht editierbar! Es gibt zwar auch Ausnahmen, aber grundsätzlich ist die Datenmenge in einem solchen Fall nicht "live", auch wenn RequestLive auf True gesetzt wird.

Du kannst aber eine TUpdateSQL Komponente nutzen, die diese Beschränkung wieder aufhebt.

Taladan 8. Aug 2003 17:02

Re: Query.sql aber keinen (Schreib)-Zugriff?
 
Juhu. Ich, das mit dem Order By stimmt. Nur wie ordne ich jetzt meine Tabelle?

Edit: Bzw wie benutze ich ein updatesql

MrSpock 9. Aug 2003 19:11

Re: Query.sql aber keinen (Schreib)-Zugriff?
 
Hallo Taladan,

wenn du mit SELECT * FROM ... arbeitest, kannst du in der Regel auch mit einem TTable Objekt arbeiten. Dort kannst du einen (Sekundär)Index erzeugen und diesen auswählen, dann werden die Daten nach dieser Spalte sortiert.

Ein UpdateSQL Objekt funktioniert so: Zunächst ziehst du das Objekt in dein Formular. In deiner Query gibt es eine Eigenschaft UpdateObject, die du auf das neue UpdateSQL Objekt einstellst.

Über das UpdateSQL Objekt teilst du jetzt deiner Query mit, wie Daten der zugrundeliegenden Datenmenge geändert, gelöscht und in diese eingefügt werden. Dazu definierst du einfach die 3 entsprechenden SQL Kommandos und speicherst sie in den Eigenschaften ModifySQL, DeleteSQL und InsertSQL. Schau dir zu diesen 3 Eigenschaften am besten noch einmal die OH an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:50 Uhr.
Seite 1 von 2  1 2      

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