AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TAdoDataSet und OnFetchProgress ASync
Thema durchsuchen
Ansicht
Themen-Optionen

TAdoDataSet und OnFetchProgress ASync

Offene Frage von "bate"
Ein Thema von bate · begonnen am 29. Mär 2005 · letzter Beitrag vom 5. Apr 2005
Antwort Antwort
bate

Registriert seit: 28. Jul 2004
Ort: Kahla
32 Beiträge
 
Delphi 7 Professional
 
#1

TAdoDataSet und OnFetchProgress ASync

  Alt 29. Mär 2005, 15:47
Datenbank: MSSQL • Version: 2000 • Zugriff über: ADO
Hallo,

habe das problem das bei meiner Connection zu einem MS SQL 2000 Server das OnFetchProgress Ereigniss komische
Daten liefert. Evtl. hat jemand ne Lösung für das Problem.

Delphi-Quellcode:
object DataSet: TADODataSet
  AutoCalcFields = False
  Connection = DBConnection
  ExecuteOptions = [eoAsyncExecute, eoAsyncFetch, eoAsyncFetchNonBlocking]
  OnFetchProgress = DataSetFetchProgress
  Parameters = <>
  Left = 8
  Top = 16
end
Delphi-Quellcode:
procedure TfMain.DataSetFetchProgress(DataSet: TCustomADODataSet; Progress,
  MaxProgress: Integer; var EventStatus: TEventStatus);
begin
end;
 ProgressBar1.Max := MaxProgress;
 ProgressBar1.Position := Progress;
 Application.ProcessMessages;
end;
Progress und MaxProgress liefern aber irgend wie komische werte.
So das wenn ich die Bar Aktuallisiere ich einen sprung auf 99% habe und irgend wann 100%.

Zitat:
Progress MaxProgress
80 95
95 110
110 125
125 140
140 155
155 170
170 185
185 200
200 215
215 230
230 245
245 260
260 275
275 290
290 305
305 320
320 335
335 350
350 365
365 380
380 395
395 410
410 425
425 440
440 455
455 470
470 485
485 500
500 515
515 530
530 545
545 560
560 575
575 590
590 605
605 620
620 635
635 650
650 665
665 680
680 695
695 710
710 725
725 740
740 755
755 770
770 785
785 800
800 815
815 830
830 845
845 860
860 875
875 890
890 905
905 920
920 935
935 950
950 965
965 980
980 995
995 1010
1010 1025
1025 1040
1040 1055
1055 1070
1070 1085
1085 1100
1100 1115
1115 1130
1130 1145
1145 1160
1160 1175
1175 1190
1190 1205
1205 1220
1220 1235
1235 1250
1250 1265
1265 1280
1280 1295
1295 1310
1310 1325
1325 1340
1340 1355
1355 1370
1370 1385
1385 1400
1400 1415
1415 1430
1430 1445
1445 1460
1460 1475
1475 1490
1490 1505
1505 1520
1520 1535
1535 1550
1550 1565
1565 1580
1580 1595
1595 1610
1610 1625
1625 1640
1640 1655
1655 1670
1670 1685
1685 1700
1700 1715
1715 1730
1730 1745
1745 1760
1760 1775
1775 1790
1790 1805
1805 1820
1820 1835
1835 1850
1850 1865
1865 1880
1880 1895
1895 1910
1910 1925
1925 1940
1940 1955
1955 1970
1970 1985
1985 2000
2000 2015
2000 2000
Für mich schaut es so aus als würde der SQL Server wärend des fetchens den SQL Query noch ausführen und entsprechende die Werte anpassen. Die Delphi Hilfe stimmt in diesem fall absolut nicht.

Hat irgend jemand das Problem schonmal gelöst?
  Mit Zitat antworten Zitat
bate

Registriert seit: 28. Jul 2004
Ort: Kahla
32 Beiträge
 
Delphi 7 Professional
 
#2

Re: TAdoDataSet und OnFetchProgress ASync

  Alt 4. Apr 2005, 16:03
Hmm hat hier keiner eine Idee oder das selbe Problem schonmal gehabt?
  Mit Zitat antworten Zitat
shmia

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

Re: TAdoDataSet und OnFetchProgress ASync

  Alt 4. Apr 2005, 16:15
Es kommt sicher darauf an, ob der SQL Server eine Ahnung hat, wieviele Datensätze in der Datenmenge enthalten sind.
Bei SELECT * FROM Tabelle kann der Server diese Anzahl vorher ermitteln.
Bei JOINs oder Abfragen mit Where-Bedingungen ist dies nicht möglich, denn der Server fängt an, Datensätze auszuliefern bevor die Abfrage komplett fertig ist.
Das war jetzt alles Spekulation, aber erscheint mir richtig.
Andreas
  Mit Zitat antworten Zitat
bate

Registriert seit: 28. Jul 2004
Ort: Kahla
32 Beiträge
 
Delphi 7 Professional
 
#4

Re: TAdoDataSet und OnFetchProgress ASync

  Alt 4. Apr 2005, 16:27
Zitat von shmia:
Es kommt sicher darauf an, ob der SQL Server eine Ahnung hat, wieviele Datensätze in der Datenmenge enthalten sind.
Bei SELECT * FROM Tabelle kann der Server diese Anzahl vorher ermitteln.
Bei JOINs oder Abfragen mit Where-Bedingungen ist dies nicht möglich, denn der Server fängt an, Datensätze auszuliefern bevor die Abfrage komplett fertig ist.
Das war jetzt alles Spekulation, aber erscheint mir richtig.
Das hab ich ja oben schon erwähnt. Aber der Fehler tritt auch auf wenn ich "SELECT * FROM table_a" mache.
Kann doch nicht sein das dies so nicht funktioniert wie es in der Hilfe steht.
  Mit Zitat antworten Zitat
shmia

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

Re: TAdoDataSet und OnFetchProgress ASync

  Alt 4. Apr 2005, 17:18
Zitat von bate:
Das hab ich ja oben schon erwähnt. Aber der Fehler tritt auch auf wenn ich "SELECT * FROM table_a" mache.
Kann doch nicht sein das dies so nicht funktioniert wie es in der Hilfe steht.
Bei meinen Tests hat sich das gleiche Verhalten wie bei dir gezeigt.
Sowohl bei der JET-Engine als auch beim SQL Server ist Progress um 15 kleiner als MaxProgress.

Es scheint ein Problem von ADO oder dem darunterliegenden OLE-DB Provider (für SQL-Server) zu sein.
Das Event wird in der Unit ADODb.pas unverfälscht weitergereicht.
Andreas
  Mit Zitat antworten Zitat
bate

Registriert seit: 28. Jul 2004
Ort: Kahla
32 Beiträge
 
Delphi 7 Professional
 
#6

Re: TAdoDataSet und OnFetchProgress ASync

  Alt 5. Apr 2005, 07:36
Zitat von shmia:
Bei meinen Tests hat sich das gleiche Verhalten wie bei dir gezeigt.
Sowohl bei der JET-Engine als auch beim SQL Server ist Progress um 15 kleiner als MaxProgress.

Es scheint ein Problem von ADO oder dem darunterliegenden OLE-DB Provider (für SQL-Server) zu sein.
Das Event wird in der Unit ADODb.pas unverfälscht weitergereicht.
Und hast du evtl. noch irgend ne Idee wem ich nun mitteilen kann das es einen Bug gibt?
Microsoft? Borland?
  Mit Zitat antworten Zitat
shmia

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

Re: TAdoDataSet und OnFetchProgress ASync

  Alt 5. Apr 2005, 09:55
Zitat von bate:
Und hast du evtl. noch irgend ne Idee wem ich nun mitteilen kann das es einen Bug gibt?
Microsoft? Borland?
Microsoft wäre wohl richtig. Und die erklären dir vielleicht du sollst ADO.NET verwenden.
Du kannst halt keinen "richtigen" ProgressBar anzeigen, sondern nur die Anzahl der bisher gelesenen Records und das Event OnFetchProgress benützen um irgend einen Indikator zu bewegen.
Der Benutzer sieht dann halt: "es geht was" aber nicht wie lange es noch dauern könnte.
Andreas
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#8

Re: TAdoDataSet und OnFetchProgress ASync

  Alt 5. Apr 2005, 10:20
Ich kann es jetzt nich testen, aber versuch doch mal SELECT TOP 100 PERCENT FROM table_a eventuell bringt das was ...

Schöne Grüße,
Jens
  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 19:05 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