[Teilw. Erledigt] Merkwürdiges Verhalten mit TZQuery

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

[Teilw. Erledigt] Merkwürdiges Verhalten mit TZQuery

Beitrag von MacWomble »

Hallo, ich habe mal wieder ein komisches Problem: :oops:

ich habe zwei TZQuery (qryListe, qryEintrag)

qryListe greift auf mehrere Tabellen zu und ist readonly (in einem DBGrid)
qryEintrag greift auf eine, in der ersten Query enthaltene, Tabelle (tblDaten mit key idDaten) zu und ist editierbar. (In DBEdits)

Ich erzeuge in der qryListe einen neuen Eintrag mit Insert Into ... das funktioniert einwandfrei, Datensatz wird gespeichert und angezeigt
Über einen Select_Last_Record() Hole ich mir die neue idDaten auch das funktioniert

mit qryListe.Refresh; sollte ja nun die Liste mit dem neuen Datensatz angezeigt werden - was aber nicht funktioniert, obwohl der Befehl wohl ausgeführt wird.

verwende ich anstelle von
qryListe.Refresh;
aber:
qryListe.Close;
qryListe.Open;

geht alles :shock: und ich kann den aktuellen Record mit locate anspringen.

In einem vergleichbaren Programmmodul funktioniert das aber mit Refresh - woran könnte das liegen?

Code: Alles auswählen

procedure TfraAkte.acVorgangNeuExecute(Sender: TObject);
var
  Suchtext: string;
  LastRec: integer;
begin
  with dtmAkte do
  begin
    Suchtext := 'Insert Into Historien (fk_akte, fk_adresse) Values (' + qryAktenliste.FieldByName('idakte').AsString + ',0)';
    if ExecInsertSQL(dtmBasis.qrySQL, Suchtext, LastRec) then
    begin
      WriteLn('refresh Historienliste idhistorie=' + IntToStr(LastRec));
      qryHistorienliste.Refresh;
 
      //Workaround
      qryHistorienliste.Close;
      qryHistorienliste.Open;
 
      qryHistorienliste.Locate('idhistorie', LastRec, []);
    end;
    pcAkten.ActivePage := SeiteVorgang;
    pcAkten.Page[pcAkten.ActivePageIndex].TabVisible := True;
  end;
end;     


Obiger Code hat das Problem, der untere funktioniert

Code: Alles auswählen

procedure TfraArtikel.acArtikelNeuExecute(Sender: TObject);
var
  Suchtext: string;
  LastRec: integer;
begin
  with dtmArtikel do
  begin
    Suchtext := 'Insert Into Artikel (fk_artikelgruppe, fk_steuersatz) Values (0,1)';
    if ExecInsertSQL(dtmBasis.qrySQL, Suchtext, LastRec) then
    begin
      qryArtikelliste.Refresh;
      qryArtikelliste.Locate('idartikel', LastRec, []);
    end;
  end;
  pcArtikel.ActivePage := SeiteArtikel;
end;       
Zuletzt geändert von MacWomble am Di 19. Sep 2017, 19:01, insgesamt 2-mal geändert.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Merkwürdiges Refresh TZQuery

Beitrag von af0815 »

Wenn du mit ZeOS arbeitest, so verwende den SQLMONITOR damit du siehst was den Unterschied ausmacht. Vor allen was wirklich an Statements an den Server geschickt werden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Merkwürdiges Refresh TZQuery

Beitrag von MacWomble »

Danke für den Tipp, werde ich versuchen.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Merkwürdiges Refresh TZQuery

Beitrag von MacWomble »

Der SQL-Monitor zeigt keinerlei Unterschiede.

Inzwischen habe ich ein neues Problem auf einer anderen frame. Hier lässt sich überhaupt nichts editieren.
Die Verbindung zur Datenbank steht, der query ist offen und die Datensätze werden richtig angezigt - allerdings gibt es keinerlei Möglichkeit, diese über die angebundenen Controls (ein dbedit, ein dbmemo) zu editieren. Er reagiert einfach nicht auf Eingaben, aber der blinkende Cursor ist da. :(

dtmBasis ist ein DataModul

Code: Alles auswählen

 
Suchtext := 'Select * from Textbausteine where bst_control "Test" order by bst_textkurz'; // wird gefunden, ist OK
dtmBasis.qryBsp.Close;
dtmBasis.qryBsp.SQL.Clear;
dtmBasis.qryBsp.SQL.Text:=Suchtext;
dtmBasis.qryBsp.Open;
 


bst_textkurz wird in einer DBGrid aufgelistet - funktioniert
Der in der Grid selektierte bst_textkurz wir in einem dbEdit angezeigt, kann aber nicht editiert werden - DBFeld ist varchar(25)

Nirgends ist readonly eingestellt, autoedit ist true. Benutzerrechte der DB stimmen definitiv auch.

An anderer Stelle im Programm habe ich bei einem Datensatz das Problem, dass ich alles ausser einem Memofeld editieren kann.

Ich bin am Verzweifeln ... :oops: :| :o
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

TraumTaenzerDieter
Beiträge: 28
Registriert: So 14. Aug 2011, 09:11

Re: Merkwürdiges Verhalten mit TZQuery

Beitrag von TraumTaenzerDieter »

Wie wär's mit dtmBasis.qryBsp.Edit

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Merkwürdiges Verhalten mit TZQuery

Beitrag von MacWomble »

Das habe ich natürlich auch versucht, obwohl alles auf autoedit steht - keine Veränderung


:shock: Huch, das zweite Problem konnte ich finden !

Da ich in den Querys die Feldlisten eingelesen hatte, konnte das Programm nach einer DB-Anpassung mit dem geänderten Feld (varchar > Mediumtext) nichts mehr anfangen. Das Neu-Einlesen der Feldliste im Query brachte nun die Lösung ! :D
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: [Teilw. Erledigt] Merkwürdiges Verhalten mit TZQuery

Beitrag von af0815 »

Ist der PK in der SQL Menge drinnen ? Weil wenn die "Automatic" versagt, wird die Query automatisch RO. Man sieht es leider nur am Ergebnis - Datenmenge ist nicht editierbar.

Ein zweites Problem habe ich schon gehabt - Ein Frame ist kein Form. In seltenen Fällen habe ich beobachtet das es Komponenten gibt, die unbedingt ein TForm im Vorfahren haben müssen um richtig zu agieren. Das wird es hier aber nicht sein.

ZEOS, ich hoffe du hast den Stand aus dem SVN/Git genommen, mit dem reinen Download habe ich auch so meine Probleme gehabt. Einige Sachen sind im SVN gefixt, besonders falls man mit MS-SQL arbeitet.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten