Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindung (https://www.delphipraxis.net/104055-tsqlquery-next-gibt-einen-fehler-bei-mssql-odbc-verbindung.html)

Painterxyz 26. Nov 2007 19:49

Datenbank: MS-SQL Server 2005 Express • Zugriff über: ODBC

TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nachdem ich nun eine ODBC_Verbindung zu einer ms sql 2005 Datenbankhergestellt, mit der TSQLConnection-Komponente hergestellt hatte, ist es möglich die Daten auszulesen mit der TSQLQuery-Komponente.

So war ich vorgegangen: http://www.delphipraxis.net/internal...ct.php?t=99598

Beim auslesen in einer While-Schleife kommt es zu Problemen.

Delphi-Quellcode:
procedure TForm1.sqlquery();
var c,r: Integer;
begin
  r:=0;
  with SQLQuery1 do
  begin
    Close;
    Open;
    First;
  end;
  with SQLQuery1 do begin
    if FieldList.Count > 0 then
    begin
      StringGrid1.ColCount := FieldList.Count;
      while not SQLQuery1.Eof do
      begin
        for c := 0 to FieldList.Count - 1 do
        begin
          StringGrid1.Cells[c,r] := Fields.Fields[c].AsString;
        end;
        Inc(r);
        SQLQuery1.Next;
      end;
    end;
  end;
end;
Die Ergebnismenge beträgt 4 Zeilen bei der Abrage, SELECT * FROM dbo.irgendwas

An sich funktioniert es, aber beim 4. SQLQuery1.Next kommt eine Fehlermeldung.

Datenbank-Server-Fehler: dbExpress for ODBC: Failed to get an error message

Weiss jemand, wo der Fehler liegt und wie kann man den beheben?

haentschman 26. Nov 2007 20:10

Re: TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindu
 
Hallo...


als Tip versuche mal folgendes...

ersetze die while Schleife durch
Delphi-Quellcode:

repeat
  ....
until SQLQuery1.FindNext = False
vieleicht kommt er mit dem Eof nicht klar :gruebel:

Painterxyz 26. Nov 2007 20:19

Re: TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindu
 
Danke für deine Antwort.

Jetzt kommt kein Fehler mehr, aber nur ein Datensatz.

mkinzler 26. Nov 2007 20:25

Re: TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindu
 
Ist in der 4. Zeile ein NULL-Wert?

haentschman 26. Nov 2007 20:25

Re: TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindu
 
... :wiejetzt:

ich benutze bei mir immer repeat/until... :roll:
...er müßte normal alle durchlaufen bis er keinen nächsten mehr findet...
...im Prinzip umgekehrt zu Deiner Lösung, welche eigentlich genauso funtionieren müßte.

Find.Next setzt normal immer auf den nächsten Datensatz (sofern vorhanden) ansonsten ist das Result 'False'.

... :gruebel:

[edit]
die Ergebnismenge hat nur 4 Zeilen--> Datensatzzeiger auf Zeile1...
d.h. nach 3 Next ist der Datensatzzeiger schon auf dem letzten.
Zitat:

beim 4. SQLQuery1.Next
... ist einfach ein Next / Schleifendurchlauf zu viel.
[/edit]

alzaimar 26. Nov 2007 20:27

Re: TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindu
 
@haentschman: Wie funktioniert das, wenn die Datenmenge komplett leer ist?

haentschman 26. Nov 2007 20:30

Re: TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindu
 
mit einer Überprüfung vorher... :-D
...hast ja Recht...

PS: Fehler suchen heißt Fehlerquellen ausschließen...oder ? :-D

mkinzler 26. Nov 2007 20:33

Re: TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindu
 
das Problem schreit deshalb nach einer While-Schleife

Painterxyz 26. Nov 2007 20:34

Re: TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindu
 
In der 4. Zeile steht kein NULL-Wert.

Im Quelltext beim FindNext ist mir eine Merkwüridkeit aufgefallen.

Bei TDataSet.FindNext steht:
Delphi-Quellcode:
Result := FindRecord(False, True);
und in FindRecord steht:
Delphi-Quellcode:
Result := false;
:shock: was ist das für ein murks?

alzaimar 26. Nov 2007 20:36

Re: TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindu
 
@haentschman: In der Kürz' liegt die Würz'.

@mkinzler: Deine Ein-Satz-Antworten sind immer wieder zum Schmunzeln. :thumb:

mkinzler 26. Nov 2007 20:39

Re: TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindu
 
Wenn man es in einem Satz Ausdrückem kann, warum nicht. Außerdem bin ich schreibfaul :mrgreen:

haentschman 26. Nov 2007 20:41

Re: TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindu
 
if not Query.IsEmpty then

ist auch nicht viel länger als

while not Query.EoF then

...so viel zum Thema Stil beim Programmieren...jeder hat seine Macke :-D

[edit]
...das alles hilft aber dem Thema nicht. Ich denke immer noch, das die Schleife zu oft durchlaufen wird ( warum auch immer )
und der Fehler durch das Next aufläuft weil der Datensatzzeiger nicht positioniert werden kann.
[/edit]

mkinzler 26. Nov 2007 20:44

Re: TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindu
 
Zitat:

Zitat von haentschman
if not Query.IsEmpty then

ist auch nicht viel länger als

while not Query.EoF then ...

Dazu kommt aber noch das Repeat..Until.

Painterxyz 26. Nov 2007 20:55

Re: TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindu
 
Mit einer zusätzlichen WHERE-Klausel, die für eine leere Datenmenge sorgt, gab es einen Fehler. Abfrage eingegeben und die TSQLQuery-Komponente auf aktiv gesetzt, da kam sie, die gleiche Fehlermeldung.
Wenn mindestens ein Datensatz zurückgegeben wird, kommt keine Fehlermeldung.

haentschman 26. Nov 2007 21:05

Re: TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindu
 
Zitat:

Die Ergebnismenge beträgt 4 Zeilen bei der Abrage, SELECT * FROM dbo.irgendwas

An sich funktioniert es, aber beim 4. SQLQuery1.Next kommt eine Fehlermeldung.
...falsche Vorraussetzungen für eine Fehlersuche :???:

:?: muß mit der Überprüfung mit Eof nicht mindestens ein Datensatz vorhanden sein ? :gruebel:

...ich meine mich erinnern zu können und habe dann auf repeat/until mit Überprüfung auf leere Datenmenge (IsEmpty) gewechselt.

...aber du hast ja den Fehler gefunden. :thumb:

mkinzler 26. Nov 2007 21:09

Re: TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindu
 
Zitat:

muß mit der Überprüfung mit Eof nicht mindestens ein Datensatz vorhanden sein ? Grübelnd...
Eigentlich nicht. EOF sollte bei einer leeren Datenmenge von Anfang an True sein

Painterxyz 26. Nov 2007 21:17

Re: TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindu
 
Schön wärs ja wenn das Programm soweit kommen würde. Es scheitert aber gleich am Anfang wenn man im Quelltext SQLQuery1.Open schreibt oder die query-Komp. in der IDE auf aktiv setzt, bei einer leeren Datenmenge.

mkinzler 26. Nov 2007 21:23

Re: TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindu
 
Sind irgendwelche Komponenten mit dem DataSet verknüpft?

Painterxyz 26. Nov 2007 21:27

Re: TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindu
 
Nein, es sind nur die TSQLConnection- und die TSQLQuery-Komponente auf dem Formular.

Painterxyz 26. Nov 2007 22:03

Re: TSQLQuery.Next gibt einen Fehler bei MSSQL-ODBC-Verbindu
 
Liste der Anhänge anzeigen (Anzahl: 1)
Um das ganze besser zu veranschaulichen, gibt es jetzt ein Zip-Archiv mit den Projektdateien.

Ich weiß es ist umständlich, aber es wird noch eine ODBC-Verbindung und eine beliebige MSSQL-Datenbank benötigt.
Das Delphi-Projekt wurde so eingerichtet: http://www.delphipraxis.net/internal...ct.php?t=99598

Danke schon im vorraus für jede Hilfe, zu diesem schwierigen Problem. Es muss doch einen Weg geben es zu lösen. :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 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 by Thomas Breitkreuz