AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi UniDac Query Daten ohne schleife lesen
Thema durchsuchen
Ansicht
Themen-Optionen

UniDac Query Daten ohne schleife lesen

Ein Thema von DelTurbo · begonnen am 11. Jan 2020 · letzter Beitrag vom 11. Jan 2020
Antwort Antwort
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.193 Beiträge
 
Delphi 2007 Architect
 
#1

UniDac Query Daten ohne schleife lesen

  Alt 11. Jan 2020, 12:16
Datenbank: MySql • Version: 5.x • Zugriff über: UniDac 5.3.8
Hallo,
ich habe eine Frage. Ich hole viele Datensätze aus einer MySql. Diese Daten sind Strings und sollen in eine TStringliste.
Nun mache ich das so wie eigentlich immer. In einer schleife Datenstatz holen und mit .Add(Query.fieldByName('xx').Asstring) hinzufügen. Dann Query.Next bis Query.Eof erreicht ist.

Nun habe ich mich gefragt ob es nicht etwas gibt, damit ich z.b. entweder mit TStringlist.AddStrings oder TStringlist.Assign arbeiten kann.
Also ich möchte die Schleife los werden.

Leider finde ich da nix. Gibt es da eine Möglichkeit?

Vielen dank im Voraus
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: UniDac Query Daten ohne schleife lesen

  Alt 11. Jan 2020, 13:00
Zunähst einmal nein, da das ergebnis einer Query eine Menge ist.
U.u gibt es eine Möglichkeit tiefer aufzusetzen und aus den indizierten Feldern, also nicht byName etwas zu basteln. Vorraussetzung ist dafür aber, das alle Datensätze, also das vollständige Dataset vorliegen. Das .Next ist ja nicht nur für das iterieren durch die Daten zuständig sondern fordert auch ggf den nächsten/die nächsten Datensätze von der DB an.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#3

AW: UniDac Query Daten ohne schleife lesen

  Alt 11. Jan 2020, 13:05
also die Schleife muss irgendwo geschehen, aber eine elegante Möglichkeit dürfte eine Aggregatfunktion in der Abfrage sein.
Je nach mysql kann man mit group_concat anfangen und einen "fetten" String auslesen, den man dann mit add anfügt. Das simpelste ist dabei die reinen Einzelwerte abzugreifen ohne ID oder Zuordnung.
Ab mysql 8 kann man auch mit json aggregat Funktionen etwas aufwendigere Strukturen auf diese Weise einsammeln. Bin nicht uptodate, wie elegant es damit in Delphi weitergehen kann ..

z.B.
Code:
SELECT
  tableid AS id,
  JSON_ARRAYAGG(tablevalue) AS values
FROM mytable
WHERE ..
GROUP BY tableid;
Gruß, Jo

Geändert von jobo (11. Jan 2020 um 13:19 Uhr)
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.193 Beiträge
 
Delphi 2007 Architect
 
#4

AW: UniDac Query Daten ohne schleife lesen

  Alt 11. Jan 2020, 13:08
Ja, aber er (UniDac) hat ja alle Daten irgenwo im Speicher. Ich dachte dort kommt man dran.
Ich würde, wenn ich wüsste das es schneller ist, sogar auf den Index gehen. Also Query.Fields.Field[0]. Dann muss man zwar wissen wo was ist, und es ist nicht flexible.

Aber für geschweindigkeit mache ich ja fast alles.

@jobo,
hast du da mal eine abfrage beispiel. Meine Daten hole ich im moment so.
Beispiel: Select Datenfeld FROM tabelle WHERE is_used;
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: UniDac Query Daten ohne schleife lesen

  Alt 11. Jan 2020, 13:09
s.o. sorry, hab das nachträglich ergänzt

also das wären natürlich noch mehrere Datensätze
Code:
SELECT
  tableid AS id,
  JSON_ARRAYAGG(tablevalue) AS values
FROM mytable
WHERE ..
GROUP BY tableid;
Nimmt man die ID raus, kommt natürlich nur noch eine Zeile raus.
Gruß, Jo

Geändert von jobo (11. Jan 2020 um 13:20 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:34 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