AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Query springt nicht zum ersten Datensatz

Query springt nicht zum ersten Datensatz

Ein Thema von Ykcim · begonnen am 1. Mär 2019 · letzter Beitrag vom 1. Mär 2019
Antwort Antwort
Seite 1 von 3  1 23   
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
639 Beiträge
 
Delphi XE5 Professional
 
#1

Query springt nicht zum ersten Datensatz

  Alt 1. Mär 2019, 09:14
Datenbank: MySQL • Version: 5 • Zugriff über: UniDac
Hallo Zusammen,

ich habe ein für mich nicht erklärbares Problem mit einer UniQuery von UniDac.

Ich habe alle Einstellungen meiner Software in einer Tabelle gespeichert, mit den Spalten:
ID: für den Schlüssel
einstellung: um was für eine Einstellung handelt es sich - danach wird auch gesucht
wert: das ist der eigentliche Wert der Einstellung
kommentar: hier wird die Einstellung die Zusammensetzung der Werte erklärt.

Dann habe ich eine Function geschrieben, um die Einstellung schnell abholen zu können, ohne ständig auf die DB zugreifen zu müssen. Das heißt ich halte die Daten in der Query und hole sie bei Bedarf mit der Function Find_Property(einstellung, spalte: string):string raus. Spalte gibt an, aus welcher Spalte der Einstellungswert zu holen ist. Ich habe auch eine Variante, wo eine Einstellung mehrere werte haben kann...

Delphi-Quellcode:
function TMySQLDB.Find_Property(Einstellung, Spalte: string): string;
var I: integer;
begin
   Result:='';
   FQuery_Einstellungen.First; //das scheint wirkungslos zu sein
   if FQuery_Einstellungen.Bof then begin //zum Testen eingebaut
      while (not FQuery_Einstellungen.Eof) and (FQuery_Einstellungen.FieldByName('Einstellung').AsString<>Einstellung) do begin
         FQuery_Einstellungen.Next;
      end;
      if FQuery_Einstellungen.FieldByName('Einstellung').AsString=Einstellung then begin
         Result:=FQuery_Einstellungen.FieldByName(Spalte).AsString;
      end;
   end;
end;
Eigentlich läuft die Funktion gut, aber auf einmal springt sie nicht mehr zum ersten Datensatz, sondern bleibt auf dem letzten stehen.
Die Query hat 53 Datensätze, was ich geprüft habe.

Hat jemand eine Idee?

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.164 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

AW: Query springt nicht zum ersten Datensatz

  Alt 1. Mär 2019, 09:28
Moin...
Delphi-Quellcode:
while (not FQuery_Einstellungen.Eof) and (FQuery_Einstellungen.FieldByName('Einstellung').AsString<>Einstellung) do begin
// <> heißt, wenn die Einstellung nicht gefunden wird, gehe zum nächsten Datensatz...es fehlt die Abbruch Bedingung. :-)
  FQuery_Einstellungen.Next; // das hast du auch programmiert :-)
end; // Am Ende steht der Datensatz auf dem Letzten
Ich könnte dir das umschreiben...aber du sollst es allein finden.

Geändert von haentschman ( 1. Mär 2019 um 09:59 Uhr)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.552 Beiträge
 
Delphi 6 Enterprise
 
#3

AW: Query springt nicht zum ersten Datensatz

  Alt 1. Mär 2019, 09:35
Ich kenne Unidac nicht, aber gibt es da kein Locate o.ä.?
Ralph
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.090 Beiträge
 
Delphi XE4 Professional
 
#4

AW: Query springt nicht zum ersten Datensatz

  Alt 1. Mär 2019, 09:58
Hallo,
Zitat:
sondern bleibt auf dem letzten stehen
Hast Du mal die Schleife durchdebuggt?

Gibt es bei der Query ein Property UniDirectional?
Wenn ja, setze das mal auf False.
(Müßte es geben: https://forums.devart.com/viewtopic.php?t=17738)

Zitat:
Das heißt ich halte die Daten in der Query
Das könntest Du ach mit einem TClientDataSet hinbekommen.
Heiko

Geändert von hoika ( 1. Mär 2019 um 10:01 Uhr)
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
639 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Query springt nicht zum ersten Datensatz

  Alt 1. Mär 2019, 10:06
Die Bedingungin der while-Schleife soll eigentlich heißen:
Solange Du nicht am Ende angekommen bist (eof) und Du die Einstellung nicht gefunden hast, dann Query.Next. Damit wird der nächste Datensatz angesprochen.

Aber die Query bleibt auf dem letzten Datensatz stehen...
Patrick
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.490 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: Query springt nicht zum ersten Datensatz

  Alt 1. Mär 2019, 10:10
Wie kommst Du darauf, das First sei wirkungslos?
Wenn man nur Next macht und am Ende angekommen ist, gibt es die Einstellung, die Du suchst halt nicht.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.164 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

AW: Query springt nicht zum ersten Datensatz

  Alt 1. Mär 2019, 10:11
Zitat:
dann Query.Next. Damit wird der nächste Datensatz angesprochen.
...und was passiert mit NEXT? Der Datensatzzeiger wird verschoben...und wo sitzt der Datensatzzeiger nach der Schleife?

Zitat:
Das könntest Du ach mit einem TClientDataSet hinbekommen
Zitat:
Ich kenne Unidac nicht, aber gibt es da kein Locate o.ä.?
...das hilft aber nicht bei offensichtlichen Logikfehlern.

Geändert von haentschman ( 1. Mär 2019 um 10:13 Uhr)
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
639 Beiträge
 
Delphi XE5 Professional
 
#8

AW: Query springt nicht zum ersten Datensatz

  Alt 1. Mär 2019, 10:15
Zitat:
Hast Du mal die Schleife durchdebuggt?
Ja, habe ich versucht. Aber da die Query auf dem letzten Datensatz steht, springt er sofort aus der Schleife heraus...

Zitat:
Gibt es bei der Query ein Property UniDirectional?
Wenn ja, setze das mal auf False.
Ja, gibt es, hatte aber leider keinen Effekt...

Zitat:
...und was passiert mit NEXT? Der Datensatzzeiger wird verschoben...und wo sitzt der Datensatzzeiger nach der Schleife?
Der Datenzeiger steht auf dem letzten Datensatz.

Deshalb wollte ich FQuery_Einstellungen.First nutzen, um zum ersten zu springen und dann die Schleife laufen zu lassen. Aber das bleibt ohne Effekt. Bei debuggen kann ich sehen, dass der Wert des letzten Datensatzes ausgegeben wird....
Patrick
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.159 Beiträge
 
Delphi 7 Professional
 
#9

AW: Query springt nicht zum ersten Datensatz

  Alt 1. Mär 2019, 10:34
keine Lösung, dafür Fragen...

wie sieht der Wert von FQuery_Einstellungen.FieldByName('Einstellung').As String vor und nach FQuery_Einstellungen.First; aus? das schon geprüft? Oder wie stellst Du fest, dass First keine Wirkung hat?

Wie ist der Wert von FQuery.SQL.Text beim Eintritt in die Methode?
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.490 Beiträge
 
Delphi 2010 Enterprise
 
#10

AW: Query springt nicht zum ersten Datensatz

  Alt 1. Mär 2019, 10:36
Und wenn schon dynamisch per Query, warum machst du nicht gleich eine Query, die genau den gesuchten Wert holt, statt dieses "Gehampel" (zum Glück jetzt nur max. 53 Mal nachschauen und weiterschalten). Wenn es tausende Einstellungen wären, würde man wahrscheinlich gar nicht ert auf die Idee kommen, jeden lokal abzurufen und nachzuschauen, ob es die Einstellung ist, die man eigentlich braucht.

Query.sql.add('where <spalte> = :Einstellung')
Ergebnis: Leere Menge = Einstellung gibt's nicht in <spalte> bzw. Tippfehler im Parameter
Ergebnis: Ein Datensatz = Treffer
Ergebnis: Mehr = nicht eindeutig... > Fehler im Datenmodell
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 22:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf