ich kämpfe schon zwei Tage mit einem eigenartigen Phänomen. Hier erstmal der Code:
Code: Alles auswählen
Procedure TForm2.Die_m_loeschen;
begin
form1.ZConn1.ExecuteDirect('UPDATE tText SET Y1 = 0 ');
end;
Code: Alles auswählen
Procedure TForm2.Selektion_fixieren;
var
mmm : string;
begin
Form2.Die_m_loeschen; // Habe dies im Laufe meiner Fehlersuche auch in eine extra Prozdur geschrieben, (nicht nötig)
Form1.QText.First;
while not Form1.QText.EOF do
begin
Form1.QText.Edit;
Form1.DB_Y1.Text:='m'; // DB_Y1 ist ein Edit-Feld der Datenbank "TDBEdit"
Form1.QText.Post;
Form1.QText.Next;
end;
end;
Code: Alles auswählen
procedure TForm2.ausgabeClick(Sender: TObject);
begin
Form2.Selektion_Zeigen (2) ; // 0:Sortierung nach Namen 1: nach Alter 2: nach Datum der Änderung
Form2.Lb_Anzahl_DS_gezeigt.Caption := IntToStr(Form1.QText.RecordCount);
end;
Procedure TForm2.Selektion_Zeigen (aFlag : integer) ; // 0:Sortierung nach Namen 1: nach Alter 2: nach Datum der Änderung
var
sss: string;
begin
sss := 'Select * from tText WHERE Y1 = "m" ';
if aFlag = 0 then sss := sss + 'ORDER BY UPPER(RTitel)' ;
if aFlag = 1 then sss := sss + 'ORDER BY rDatumerstellt DESC' ;
if aFlag = 2 then sss := sss + 'ORDER BY rDatumgeaendert DESC' ;
Form1.QText.SQL.Clear;
Form1.QText.SQL.Text := sss;
Form1.QText.Open;
end;
Ich habe das Ergebnis einer etwas komplizierteren Datenbankabfrage in einer Tabellenaufstellung (TDBGrid). Diese Selektion möchte ich aber später im Programm nochmal abrufen, wobei zu diesem späteren Zeitpunkt es aber nicht mehr so ohne weiteres möglich ist, diese Selektion nochmal zu generieren.
Deshalb folgendes Vorgehen. Es gibt in der benötigten Tabelle eine Spalte (column) "Y1". Zunächst schreibe ich in die gesamte Spalte "Y1" den Wert "0" rein. Dann gehe ich Schritt für Schritt die Tabellenaufstellung, die ich später nochmal aufrufen möchte, durch und schreibe in die Tabelle in die Spalte den Buchstaben "m" rein. Damit habe ich es später sehr leicht, meine exakte Selektion wieder aufzurufen.
Wenn ich nun schön der Reihe nach die obigen Prozeduren einzeln aufrufe, dann funktioniert alles prima.
Also:
1. Diese Procedur aufrufen: "Procedure TForm2.Selektion_fixieren;" Im SQLite-Studio sieht man sehr schön, dass überall da das "m" eingetragen wird, wo ich es hinhaben möchte.
2. Wenn ich nun beliebig später im Programm die Prozedur "procedure TForm2.ausgabeClick(Sender: TObject);" aufrufe, dann werden mir auch ganz wunderbar meine gewünschten Datenbankeinträge aufgelistet.
Seltsam ist nun folgendes: Wenn ich unmittelbar nach dem "'m'-Eintrag" in die Datenbank und innerhalb derselben Prozedur die Abfrage mache, dann funktioniert diese Abfrage nicht. Warum?
Also so:
Code: Alles auswählen
Procedure TForm2.Selektion_fixieren;
var
mmm : string;
begin
Form2.Die_m_loeschen;
Form1.QText.First;
while not Form1.QText.EOF do
begin
Form1.QText.Edit;
Form1.DB_Y1.Text:='m';
Form1.QText.Post;
Form1.QText.Next;
end;
Form2.Selektion_Zeigen ( 2 ) ; // Hier also erfolgt der sofortige Aufruf, der oben per separater Prozedur erfolgt.
Form2.Lb_Anzahl_DS_gezeigt.Caption := IntToStr(Form1.QText.RecordCount);
end;
Aliobaba
Die verwendete Datenbank ist SQLite.