AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Query in Thread wie Datenrückgabe realisieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Query in Thread wie Datenrückgabe realisieren

Ein Thema von stOrM · begonnen am 11. Okt 2016 · letzter Beitrag vom 14. Okt 2016
Antwort Antwort
nahpets
(Gast)

n/a Beiträge
 
#1

AW: SQL Query in Thread wie Datenrückgabe realisieren

  Alt 13. Okt 2016, 15:08
Ich hab die Änderungen jetzt soweit eingebaut, ändert aber nichts an der Fehlermeldung mit dem Canvas.
Teilweise bekomme ich sogar noch folgendes: VCL.Grids stop in Zeile 888 GridIndex ausserhalb des gültigen Bereichs (mal was neues)
Das erinnert mit an den ungültigen Gitterindex bei StringGrids.
Das passiert, wenn man auf 'ne Zelle, Spalte, Zeile zugfreift, die es nicht (mehr) gibt.

Kann in dem Zusammenhang mit DBGrids passieren, wenn die Spaltenzahl der aktuellen Datenmenge nicht mit der der vorherigen übereinstimmt, das Grid aber trotzdem versucht die Daten einzulesen.

Schau mal bitte, ob Dein Grid sowas in der Art kennt:
Delphi-Quellcode:
DBGrid.Fields.Clear;
DBGrid.Columns.Clear;
(Eigentlich braucht man sowas ja nicht, aber manchmal doch )
Wenn ja, bau das nach dem Entfernen der Datasource noch ein oder vor der Zuweisung der Datasource, wenn Du die befüllte VT bekommst.
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: SQL Query in Thread wie Datenrückgabe realisieren

  Alt 13. Okt 2016, 15:13
Ich hab die Änderungen jetzt soweit eingebaut, ändert aber nichts an der Fehlermeldung mit dem Canvas.
Teilweise bekomme ich sogar noch folgendes: VCL.Grids stop in Zeile 888 GridIndex ausserhalb des gültigen Bereichs (mal was neues)
Das erinnert mit an den ungültigen Gitterindex bei StringGrids.
Das passiert, wenn man auf 'ne Zelle, Spalte, Zeile zugfreift, die es nicht (mehr) gibt.

Kann in dem Zusammenhang mit DBGrids passieren, wenn die Spaltenzahl der aktuellen Datenmenge nicht mit der der vorherigen übereinstimmt, das Grid aber trotzdem versucht die Daten einzulesen.

Schau mal bitte, ob Dein Grid sowas in der Art kennt:
Delphi-Quellcode:
DBGrid.Fields.Clear;
DBGrid.Columns.Clear;
(Eigentlich braucht man sowas ja nicht, aber manchmal doch )
Wenn ja, bau das nach dem Entfernen der Datasource noch ein oder vor der Zuweisung der Datasource, wenn Du die befüllte VT bekommst.
Jep Columns.Clear gibt es bau ich mal ein, dass Canvas Problem bleibt aber wie gehabt komischerweise tritt es eher Random ein.

Also keine Ahnung was das Problem ist, ich hab jetzt im ButtonClick noch extra folgendes eingebaut zur Sicherheit, ändert weiterhin nichts an den Exceptions:

Code:
  DBGrid1.Columns.Clear;
  VirtualTable1.Open;
  VirtualTable1.Edit;
  VirtualTable1.ClearFields;
  VirtualTable1.Close;
  DBGrid1.DataSource := Nil;

Geändert von stOrM (13. Okt 2016 um 15:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
690 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: SQL Query in Thread wie Datenrückgabe realisieren

  Alt 13. Okt 2016, 16:04
Ich habe Dir mal schnell deins umgebaut, so dass es geht.
Die Zwischennachrichten abgeschaltet, wichtig ist ja erstmal, dass es überhaupt fehlerfrei läuft.

Nach dem Start des Threads wird nicht mehr auf die VT zugegriffen bis zum (neu implementierten) OnTerminate event. Die VT ist da noch geschlossen, von daher der Check aufs VirtualTable.Active.

Den Provider musst imm Thread nicht setzen, der ist im ConnectionString.
Musst ihn mal auf MySQL setzen wieder, ich habe nur Firebird installiert.


Ich habe den thread mehrfach ausgeführt ohne Fehler im Grid (nutze Delphi 10.1 Upd1), auch das Programm mehrfach, konte aber den Fehler nicht feststellen, den Du erwähntest.

Viel Spass
Helge
Angehängte Dateien
Dateityp: zip QueryThread_DP.zip (55,7 KB, 19x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: SQL Query in Thread wie Datenrückgabe realisieren

  Alt 13. Okt 2016, 16:07
Ich habe Dir mal schnell deins umgebaut, so dass es geht.
Die Zwischennachrichten abgeschaltet, wichtig ist ja erstmal, dass es überhaupt fehlerfrei läuft.

Nach dem Start des Threads wird nicht mehr auf die VT zugegriffen bis zum (neu implementierten) OnTerminate event. Die VT ist da noch geschlossen, von daher der Check aufs VirtualTable.Active.

Den Provider musst imm Thread nicht setzen, der ist im ConnectionString.
Musst ihn mal auf MySQL setzen wieder, ich habe nur Firebird installiert.


Ich habe den thread mehrfach ausgeführt ohne Fehler im Grid (nutze Delphi 10.1 Upd1), auch das Programm mehrfach, konte aber den Fehler nicht feststellen, den Du erwähntest.

Viel Spass
Helge
Ich check das mal fix aus, Mega Dankeschön für Deine Mühe!
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
690 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: SQL Query in Thread wie Datenrückgabe realisieren

  Alt 13. Okt 2016, 16:09
Was ich nochmal erwähnen wollte zum Thema...

1. Es war so, wie ich sagt : nach dem SQL.Execute ist RecordCount bei 25, nach dem Assign auf der Zahl, was du wirklich an Register hast (Assign zieht alle register und dann kommt das natürlich hin). Der RecordCount der VT wird erst gesetzt, wenn sie offen ist (Active = True), sonst ist er 0.

Das im Thread ausführen bringt dir keinen Geschwindigkeitsvorteil, da das Query immer noch genauso langsam/schnell ist. Dazu müsstest Du die Daten stückeln, also in Blöcken anfordern. Wie ich vorher im Thread schonmal erwähnt hatte.

Helge
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: SQL Query in Thread wie Datenrückgabe realisieren

  Alt 13. Okt 2016, 16:20
Jetzt wirds ganz lustig
Connection Name "Use Unicode" kennt er nicht. "CharacterSet" auch nicht. Wenn ich das raus nehme (ich denke mal liegt an der verschiedenen Version von Unidac die wir wohl haben) bekomm ich keine Daten
Macht aber erst mal nichts, ich werde das noch mal so umbauen mit meiner Version und dann mal schauen ob es dann geht, Ich denk mal Morgen bin ich damit soweit.

Alles klar funktioniert jetzt wunderbar. Nochmals vielen Dank für Deine Mühe!

Geändert von stOrM (13. Okt 2016 um 16:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
690 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: SQL Query in Thread wie Datenrückgabe realisieren

  Alt 13. Okt 2016, 16:22
Nimm einfach deinen ConenctionString, wie Du ihn vorher genutzt hattest. Wenn der den provider nicht hat, dann setz ihn halt im Thread wieder.
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: SQL Query in Thread wie Datenrückgabe realisieren

  Alt 13. Okt 2016, 16:29
Nimm einfach deinen ConenctionString, wie Du ihn vorher genutzt hattest. Wenn der den provider nicht hat, dann setz ihn halt im Thread wieder.
Passt schon ich hatte etwas in der Uses übersehen, klappt alles als hätte es nie Probleme geben
Wenn ich mir genau ansehe was Du gemacht hast, denke ich kenne ich auch das Problem jetzt. Das Grid bei mir sah teilweise von den Spalten her etwas seltsam aus, manchmal waren diese komplett zusammen geschoben. So wie ich das sehe, war mein Zugriff in den Messages also sprich AfterFetch viel zu früh. Dein OnTerminate ist denke ich die Lösung gewesen.

Geändert von stOrM (13. Okt 2016 um 16:31 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 01:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz