Entwickler-Ecke

Datenbanken - MS-Access: TQuery ->"Tabelle ist schreibgeschützt".


Pott - Mo 21.11.05 17:20
Titel: MS-Access: TQuery ->"Tabelle ist schreibgeschützt".
Ich bin von Paradox auf Access umgestiegen und jetzt bekomme ich bei einigen Tabellen
bei dynamischen TQuery


Delphi-Quelltext
1:
2:
3:
4:
    qryRENTENSTAAT.Active:=False;
    qryRENTENSTAAT.SQL.Clear();
    qryRENTENSTAAT.SQL.Add(s);
    qryRENTENSTAAT.Active:=True; <= hier.



die Fehlermeldung: "Tabelle ist schreibgeschützt". Obwohl Db zu usw.

Ein einfaches "SELECT * FROM... " funktioniert noch.
Jedoch ein JOIN mit einer 2. Tabelle geht nicht mehr,
und ein "SELECT FeldX As X, ..." geht auch nicht mehr.

Mit einigen Tabellen geht's mit, mit anderen nicht mehr.
Kann mir da jemand helfen.

Peter

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.


grayfox - Mo 21.11.05 23:23

hallo peter!

poste den string, der sich hinter 's' verbirgt.
vermutlich liegt dort der hund begraben ;)


Pott - Di 22.11.05 10:19
Titel: Verschiedene Abfragen versucht.
Vorhin hatte ich falsch geschrieben, dass es mit einigen Tabellen geht.
Joins gehen mit keiner Access Tabelle.

Hier nun einfache Joins mit 2 Tabellen.

SQL-Anweisung
1:
2:
3:
4:
5:
// Im Explorer zus. gestellt.
SELECT Haushalte.Stand, HhId, Familien.Anrede, Titel, Familien.Id, Status, Familien.Name, Familien.Vorname, Geschl, Gebdat, Gebort, Arbeitsort  
FROM Familien, Haushalte 
WHERE HhId = Haushalte.Id  
  AND HhId = 1



Delphi-Quelltext
1:
2:
3:
4:
5:
// oder mit Access-Abfrage zusammengestellt und in Delphi probiert. 
s:='SELECT Haushalte.Stand, Familien.Anrede, Familien.Titel,  Familien.Status, '
   '                         Familien.Vorname, Familien.Name, Familien.Gebdat '+
   'FROM Haushalte INNER JOIN Familien '+
   '  ON Haushalte.Id = Familien.HhId';


Beide Abfragen funktionieren im Db-Explorer, aber mit TQuery nicht mehr: "Tabelle ist schreibgeschützt."

Habe auch schon Odbc-Treiber und -Driver versucht.
Ist Delphi5 vielleicht schon zu alt? Oder kann Delphi5 noch nicht mit Access Dbs.

Peter

Moderiert von user profile iconraziel: Sql-Tags hinzugefügt.
Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.


Pott - Di 22.11.05 18:42
Titel: Keine JOINs, wenn man Daten ändern will?!?!
Die Antwort auf mein Problem oben scheint zu sein, dass man bei Joins in der TQuery keine
Daten im DBGrid ändern kann.

Angeblich soll sich in Delphi bei TQuery.RequestLive dann automatisch auf False setzen.

Peter


didiwerdau - Mi 11.10.06 13:14

Hallo, habe ein ähnliches Problem. Deshalb schreibe ich es gleich mal hier mit rein.

Ich habe eine Sybase Datenbank und wollte gerade einen Join auf eine zweite Tabelle in ein bestehendes TQuery einfügen.

alter SQL-String:


Delphi-Quelltext
1:
2:
3:
4:
5:
Select 
*
from T_DL
where ID_Unternehmen = :ID_Unternehmen
order by Key_DL


wenn ich den String so abändere ... :


Delphi-Quelltext
1:
2:
3:
4:
5:
Select 
*
from T_DL dl join T_Erloeskontierung ek on dl.ID_Erloeskontierung = ek.ID_Erloeskontierung
where ID_Unternehmen = :ID_Unternehmen
order by Key_DL


... dann bekomme ich auch den Fehler "Tabelle ist schreibgeschützt".

Scheint irgendwie doch was mit den joins zu tun zu haben, oder?


sirwitti - Do 12.10.06 14:14

hallo!
ich habe dasselbe problem.
ich glaub ich habs gefunden. in der hilfe steht beim parameter requestlive von tquery, dass multi table select immer ein readonly-dataset zurückliefern.
und der parameter requestlive bestimmt, ob das dataset upgedated also geändert werden kann.
d.h. wenn requestlive auf true ist, dann gibts die exception.

interessanterweise ist bei meiner tquery (wird zur laufzeit erzeugt) requestlive auf true gesetzt. bei den komponenten zur designtime is requestlive standardmäßig aber auf false.


ich hab jetzt einfach "manuell" requestlive auf false gesetzt, bevor ich die query ausführe und es dürfte funktionieren.

vlt bringt euch das auch ein stück weiter.

beste grüße, witti


didiwerdau - Fr 13.10.06 10:18

Ist auf alle fälle mal auszuprobieren.

Danke.