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 Daten sichern (https://www.delphipraxis.net/119723-query-daten-sichern.html)

Neutral General 30. Aug 2008 15:31

Datenbank: MySQL • Zugriff über: Zeos

Query Daten sichern
 
Hi,

Wenn ich eine Query öffne, z.B. ganz einfach sowas:

SQL-Code:
SELECT
  *
FROM tabelle;
dann läuft das ganze ja meistens so ab:

Delphi-Quellcode:
Query.Open;
  // Mit den Daten arbeiten.
Query.Close;
Gibt es eine Möglichkeit, das ganze so ablaufen zu lassen:

Delphi-Quellcode:
Query.Open;
  // DatenSicherung anlegen
Query.Close;
  // Mit Daten Arbeiten.
  // Datensicherung freigeben
:?:

Ich habe ja noch nicht viel Ahnung davon. Hab versucht es über ein TDataset zu lösen. Allerdings weiß ich gar nicht, ob TDataset dafür gedacht ist, bzw wofür TDataset überhaupt gedacht ist :mrgreen:

Gruß
Neutral General

Bernhard Geyer 30. Aug 2008 15:58

Re: Query Daten sichern
 
Was versprichst du dir davon?
Da MySQL keine serverseitige Curser unterstützt belastest du den Server mit einer offenen Query nicht.
Möglichkeit wäre mit TClientdataset zu arbeiten.

Neutral General 30. Aug 2008 16:13

Re: Query Daten sichern
 
Hi,

Also das ganz brauche ich wegen folgender rekursiver procedure:

Delphi-Quellcode:
procedure GetProjects(ParentID: Integer; Projects: TProjectManager);
var i: Integer;
begin
  with Database.Query.SQL do
  begin
    Clear;
    Add('SELECT');
    Add(' *');
    Add('FROM projects');
    Add('WHERE projects.ParentID = :pid');
  end;
  Database.Query.ParamByName('pid').AsInteger := ParentID;

  with Database.Query do
  begin
    Open;
      for i := 0 to RecordCount - 1 do
      begin
        with Projects.AddProject(Projects.Parent) do
        begin
          Name := FieldByName('NAME').AsString;
          GetProjects(FieldByName('ID').AsInteger, SubProjects); //*
        end;
        Next;
      end;
    Close;
  end;
end;
Vielleicht brauche ich da gar nichts zu erklären. Das Problem ist halt: Wenn ich sagen wir 5 Projekte unter einer gewissen ParentID habe, dann läuft die for-Schleife 5 mal durch. und jedes mal wird GetProjects erneut aufgerufen, wo die Query dann geändert und geöffnet wird usw, wodurch ja die Daten verloren gehen, die in der ersten Instanz mit der 5er-for-Schleife noch gebraucht werden.

Ich hoffe ich konnte das Problem verständlich erklären.

Bernhard Geyer 30. Aug 2008 16:23

Re: Query Daten sichern
 
Dann nimm doch eine lokale Query-Instanz

Delphi-Quellcode:
var
  qry: TZQuery;
begin
  qry := TZQuery.Create(nil)
  qry."Database" := MyDatabase;
  try
    qry.sql.add(...);
    ...
  finally
    qry.Free;
  end;
end;

Neutral General 30. Aug 2008 16:35

Re: Query Daten sichern
 
Hi,

Ja das würde funktionieren. Allerdings ist das ganze verdammt langsam. Umso öfter ich das Programm starte, desto schneller geht es :shock:

Ok danke.. :) Ich wollte das zuerst nicht machen, weil ich evtl befürchtet hatte, das die DB dann überfordert ist oder so :mrgreen:

omata 30. Aug 2008 16:41

Re: Query Daten sichern
 
...

Bernhard Geyer 30. Aug 2008 16:47

Re: Query Daten sichern
 
Zitat:

Zitat von Neutral General
Ok danke.. :) Ich wollte das zuerst nicht machen, weil ich evtl befürchtet hatte, das die DB dann überfordert ist oder so :mrgreen:

Wie schon gesagt. Da MySQL keine Serverseitigen Curser besitzt hat die DB deine Abfrage schon vergessen sobald du Zugriff auf die Daten hast. Die verwendung einer Instanz hätte schon performancevorteile wenn du prepared Statements verwendest bzw. das in einer SP erledigen läst (ok, das geht wieder ohne das man eine spezielle Query-Instanz verwendet).

Neutral General 30. Aug 2008 17:04

Re: Query Daten sichern
 
Was genau sind prepared Statements?

Bernhard Geyer 30. Aug 2008 17:08

Re: Query Daten sichern
 
Prepared Statements.
Oder einfach mal im Forum nach "Prepared Statements" für Beispiele suchen ...

mkinzler 30. Aug 2008 19:24

Re: Query Daten sichern
 
Oder die suche nach SQL-Parameter


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:54 Uhr.
Seite 1 von 2  1 2      

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