AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Temporäres TDataset
Thema durchsuchen
Ansicht
Themen-Optionen

Temporäres TDataset

Ein Thema von Fellmer Lloyd · begonnen am 6. Apr 2004 · letzter Beitrag vom 8. Apr 2004
Antwort Antwort
Seite 1 von 2  1 2      
Fellmer Lloyd
(Gast)

n/a Beiträge
 
#1

Temporäres TDataset

  Alt 6. Apr 2004, 15:27
Hallo!

Ich will eine Datenbank etwa so abfragen (Vereinfacht):
Code:
{Query ist vom Typ TQuery}

Query.Sql:= 'SELECT ID, Abteilung FROM Abteilungen';
Query.ExecSql;

Query.First;
While not Query.EOF do
begin
  Query.Sql:= 'SELECT Name, idAbteilung FROM Arbeiter WHERE idAbteilung='+Query.FielByName('ID').AsString;
  Query.ExecSql;

  { Werte benutzen }

  Query.Next;
end;
Ich bin mir im klaren das:
-Dieses beispiel mit Join gelöst werden könnte,
-Die Prozedur nicht funktioniert, weil die Datenmenge des Querys in der Schlaufe geändert wird.

Jetzt meine Frage: Wie kann ich ein "Temporäres" TDataset erzeugen?
Denn so würde die Abfrage ja funktionieren:
Code:
{Query ist vom Typ TQuery}
{Dataset ist vom Typ TDataset}

Query.Sql:= 'SELECT ID, Abteilung FROM Abteilungen';
Query.ExecSql;

Dataset.Assign(Query); //<-- Geht nicht!

Query.First;
While not Dataset.EOF do
begin
  Query.Sql:= 'SELECT Name, idAbteilung FROM Arbeiter WHERE idAbteilung='+Query.FielByName('ID').AsInteger;
  Query.ExecSql;

  { Werte benutzen }

  Dataset.Next;
end;
Wie ist das zu realisieren?
Oder gehe ich das Problem ganz falsch an?

Hoffe wieder mal auf gute Tips
  Mit Zitat antworten Zitat
Benutzerbild von Domo Sokrat
Domo Sokrat

Registriert seit: 14. Mai 2003
Ort: Wehrheim / Ts.
235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Temporäres TDataset

  Alt 6. Apr 2004, 16:10
Hallo Fellmer LLoyd!

Funktioniert es nicht, wenn Du Dir eine neues (temporäres) TQuery erstellst und diesem das TQuery "Query" zuweist und das temporäre TQuery nach Gebrauch wieder freigibst? Etwa so:

Code:
   MyQuery := TQuery.Create(..);

   :
   // Query vorbereiten und ausführen
   :

   MyQuery := Query;

   :
   // Deine Verarbeitung i. d. Schleife -> "Dataset" entspricht "MyQuery"
   :

   MyQuery.Free;
Oder hab' ich trotz Planhirn das Thema verfehlt? Wenn nicht, und mein Vorschlag Dich weiter bringt, dann freut es mich, einem Alt-Mutanten geholfen zu haben...

Ad Astra!
Michael Seeger
Vergesst nicht: Es wird überall nur mit Wasser gekocht
ZEOSLib - Admin-Team
ZeosLib-Forum
  Mit Zitat antworten Zitat
Fellmer Lloyd
(Gast)

n/a Beiträge
 
#3

Re: Temporäres TDataset

  Alt 6. Apr 2004, 16:28
Hmm... wird nicht einfach der Zeiger auf die selbe Adresse "gesetzt"?
Und müssen da unbedingt 10 Query's im Speicher liegen?

Danke für den Tip!

Fellmer
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Temporäres TDataset

  Alt 6. Apr 2004, 17:08
Zitat von Fellmer Lloyd:
Ich bin mir im klaren das:
-Dieses beispiel mit Join gelöst werden könnte,
-Die Prozedur nicht funktioniert, weil die Datenmenge des Querys in der Schlaufe geändert wird.
Jetzt meine Frage: Wie kann ich ein "Temporäres" TDataset erzeugen?
Oder gehe ich das Problem ganz falsch an?
Du brauchst für dein Beispiel lediglich 2 Queries; eine für Tabelle Abteilungen
und eine für Tabelle Arbeiter.
Es gibt keinen vernünftigen Grund hier eine temporäre Query zu verwenden,
denn dann verzichtest auf alle Vorteile der "Klickedi-Klick" Programmierung.

Also einfach 2 Queries (QryAbteilungen & QryArbeiter) aufs Formular/Datenmodul.
Die QryArbeiter in der Schleife kannst du ja immer wieder neu verwenden oder
noch besser mit einem Parameter versehen, den Parameter befüllen und erneut öffnen.
Andreas
  Mit Zitat antworten Zitat
Fellmer Lloyd
(Gast)

n/a Beiträge
 
#5

Re: Temporäres TDataset

  Alt 7. Apr 2004, 08:34
Das Beispiel ist stark vereinfacht.

Es ist also für jede "unterschlaufe" ein Query notwendig.
Hmm, schade.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Temporäres TDataset

  Alt 7. Apr 2004, 09:49
Zitat von Fellmer Lloyd:
Es ist also für jede "unterschlaufe" ein Query notwendig.
Hmm, schade.
Das ist doch OK.
Deine Queries spiegeln die Struktur und Beziehungen deiner Datenbank wieder.
In "meiner" Datenbank gibt es z.B. eine Mastertabelle mit 6 weiteren Detailtabellen.
Also brauche ich 7 Queries, die in einander verschachtelt durchlaufen werden, um
z.B. eine Ausgabedatei im XML oder EDIFACT Format zu erzeugen.

Falls du mehrere Tabellen mit gleicher (oder fast gleicher) Struktur in deiner Datenbank hast,
dann müssen bei dir allerdings die Alarmglocken läuten, da dein DB-Design dann falsch wäre.
Andreas
  Mit Zitat antworten Zitat
Fellmer Lloyd
(Gast)

n/a Beiträge
 
#7

Re: Temporäres TDataset

  Alt 7. Apr 2004, 11:27
Hmm...ich dachte nur der Geschwindigkeit wegen ginge es schneller
Da ich endlich einen anständigen DB-Server einsetze (MySQL), will ich auch alles richtig machen

Aber wenn das^der richtige Weg ist OK!
  Mit Zitat antworten Zitat
Fellmer Lloyd
(Gast)

n/a Beiträge
 
#8

Re: Temporäres TDataset

  Alt 7. Apr 2004, 15:38
Etwas ist mir immer noch nicht ganz klar.
Funktioniert das so? (Das Query der Prozedur wird freigegeben)

Delphi-Quellcode:
{ Abfrageprozedur }
function Abfrageirgendwas: TDataSet;
var
  Query: TQuery;
begin
  Query:= TQuery.Create(Nil);
  try
    //Abfrage ausführen
    Result:= Query;
  finally
    Query.Free;
  end;
end;

procedure TFormMain.ButtonAbfrageClick(Sender: TObject);
var
  Query: TQuery;
begin
  Query:= TQuery.Create(Nil);
  try
    Query:= Abfrageirgendwas;
    { Enthält das Query immenoch die Daten? }
  finally
    Query.Free;
  end;
end;
Hoffe auf Aufklärung
  Mit Zitat antworten Zitat
Benutzerbild von Domo Sokrat
Domo Sokrat

Registriert seit: 14. Mai 2003
Ort: Wehrheim / Ts.
235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Temporäres TDataset

  Alt 8. Apr 2004, 10:20
Hi Fellmer,

sorry für die Verspätung, mir kam 'ne Drangwäsche dazwischen Zu Deiner letzten Frage: Ich denke, nein, denn das Result der Funktion ist zum Ersten lokal in der Funktion definiert und zum Zweiten schießt Du's ja im finally weg! Wäre es nicht besser, die temporären Queries global zu halten? Ich weiß: globale Definitionen sind immer wenig elegant, aber in diesem Fall (denke ich) angebracht.
Michael Seeger
Vergesst nicht: Es wird überall nur mit Wasser gekocht
ZEOSLib - Admin-Team
ZeosLib-Forum
  Mit Zitat antworten Zitat
Fellmer Lloyd
(Gast)

n/a Beiträge
 
#10

Re: Temporäres TDataset

  Alt 8. Apr 2004, 10:48
Dann bräuchte ich ja ein dynamisches, globales Array von TQuerys, dass noch über mehrere Units

Wibt es keine Möglichkeit das Query zu "kopieren"?
Query.Assign funktioniert ja auch nicht

{ Och ned schon wieder Drangwäsche, Tolotos }
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:46 Uhr.
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