datensätze zählen mit select count(*)...
Odium
- asp.net
0 Daniela Koller0 Odium
0 Christian0 Odium0 Michael Schröpl
Hallo,
hab da ein kleines Problem.
Um die Anzahl der ausgewählten datensätze zu beginn der seite anzeigen zu können tue ich dies:
rs_c = cn.Execute("SELECT COUNT(*) FROM tblEintraege")
das bringt mir auch eine zahl, aber natürlich die gesamtanzahl der datensätze in der db (MS SQL-Server 7)
die wirkliche anzahl ist aber geringer, da das auslesende sql-statment mit einer umfangreichen WHERE - Klausel ausgestattet ist.
wenn ich diese where-klausel in die obere abfrage einbaue läuft aber gar nichts mehr...:
-------------------
Microsoft OLE DB Provider for ODBC Drivers- Fehler '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Spaltenname 'tblEintraege.bereich' ist in der ORDER BY-Klausel ungültig, da er nicht in einer Aggregatfunktion enthalten und keine GROUP BY-Klausel vorhanden ist.
-------------------
auch die betreffenden felder statt des * einzutragen bringt einen syntaxfehler...obwohl alles korrekt aussieht
was ist zu tun?
ich muss halt die suchtreffer am anfang der seite anzeigen können, um die suchergebnisse auf mehrere seiten zu verteilen...
stimmt es eigenlich das die sql-syntax des ms-sql server keine limit anweisung kennt?
das ist zwar nicht sehr schön, kann man aber umgehen...
Danke
Odium
Hi Odium
die wirkliche anzahl ist aber geringer, da das auslesende sql-statment
mit einer umfangreichen WHERE - Klausel ausgestattet ist.
wenn ich diese where-klausel in die obere abfrage einbaue läuft aber gar nichts mehr...:Microsoft OLE DB Provider for ODBC Drivers- Fehler '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Spaltenname 'tblEintraege.bereich'
ist in der ORDER BY-Klausel ungültig, da er nicht in einer Aggregatfunktion
enthalten und keine GROUP BY-Klausel vorhanden ist.auch die betreffenden felder statt des * einzutragen bringt einen
syntaxfehler...obwohl alles korrekt aussieht
Dein Order by ist ein Problem, er kann nicht nach etwas sortieren,
das gar nicht zum Resultat gehört sondern nur eine einzelne Spalte
deren Name (korrigiere mich wenns bei MS-SQL nicht so ist, den
kenn ich nicht gut) du mit select count(*) as xyz vergeben könntest,
wenn du das nicht tust aber zufällig vom DBMS vergeben wird.
Wenn die Where clause auch noch andere Probleme macht, bitte hier
posten.
ich muss halt die suchtreffer am anfang der seite anzeigen können,
um die suchergebnisse auf mehrere seiten zu verteilen...
Du wirst kaum um zwei Abfragen herumkommen da du zwei völlig verschiedene
Dinge von der Datenbank haben willst. Unter Umständen kannst du deine
zwei Queries mit Union verknüpfen, ich weis jedoch nicht, wie UNION
darauf reagiert, zwei völlig unterschiedliche Zeilentypen (einen mit
nur deinem Countfeld, und einen mit deinen Daten) zu verknüpfen.
Oder hab ich da was falsch verstanden und das ist gar nicht das
Problem sondern nur, das deine erste Abfrage Syntaxfehler hat?
Gruss Daniela
Hallo,
danke für deine Antwort. Nachdem ich das Order by rausgeschmissen hatte, läuft es.
Odium
Hi,
schreib doch einfach Dein Statement mit Deiner Where-Bedingung...
in rs_c.recordcount hast Du dann das gewünschte ERgebnis stehen.
Gruss
Christian
Hallo,
hab da ein kleines Problem.
Um die Anzahl der ausgewählten datensätze zu beginn der seite anzeigen zu können tue ich dies:
rs_c = cn.Execute("SELECT COUNT(*) FROM tblEintraege")
das bringt mir auch eine zahl, aber natürlich die gesamtanzahl der datensätze in der db (MS SQL-Server 7)
die wirkliche anzahl ist aber geringer, da das auslesende sql-statment mit einer umfangreichen WHERE - Klausel ausgestattet ist.
wenn ich diese where-klausel in die obere abfrage einbaue läuft aber gar nichts mehr...:Microsoft OLE DB Provider for ODBC Drivers- Fehler '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Spaltenname 'tblEintraege.bereich' ist in der ORDER BY-Klausel ungültig, da er nicht in einer Aggregatfunktion enthalten und keine GROUP BY-Klausel vorhanden ist.
auch die betreffenden felder statt des * einzutragen bringt einen syntaxfehler...obwohl alles korrekt aussieht
was ist zu tun?
ich muss halt die suchtreffer am anfang der seite anzeigen können, um die suchergebnisse auf mehrere seiten zu verteilen...
stimmt es eigenlich das die sql-syntax des ms-sql server keine limit anweisung kennt?
das ist zwar nicht sehr schön, kann man aber umgehen...
Danke
Odium
Hallo,
schreib doch einfach Dein Statement mit Deiner Where-Bedingung...
in rs_c.recordcount hast Du dann das gewünschte ERgebnis stehen.
das geht aber auch nur, wenn ich den datensatzcursor entsprechend vorbereite, dazu hatte ich mal was gelesen, aber die variable blieb trotzdem leer bzw. war immer -1
Naja...
jetzt gehts ja
Odium
Hi Christian,
schreib doch einfach Dein Statement mit Deiner
Where-Bedingung... in rs_c.recordcount hast Du
dann das gewünschte ERgebnis stehen.
das ist aber hochgradig inperformant, weil die Datenbank dann sämtliche angeforderten Felder für die Abholung bereit stellen muß - selbst wenn diese Abholung durch die ASP-Anwendung dann nie erfolgt.
SELECT COUNT(*) ist für das RDBMS viel weniger Arbeit, also viel weniger Last für die Maschine.
Viele Grüße
Michael