Seite 1 von 1

ODBCDBE MySQL Count(*) liefert 0

Verfasst: Mi, 27. Apr 2011 13:50
von klammerauf
Xbase 1.82.294, ODBCDBE, MySQL

Kann mir jemand sagen, warum folgender Programmcode bei Lastrec() eine 1 und bei nLastRec eine 0 zurückliefert?

Danke
Sebastian

Code: Alles auswählen

#pragma Library( "Adac20b.lib" )

PROCEDURE Main()
	LOCAL cConnect
	LOCAL oSession
	LOCAL nLastrec

   cConnect := "DBE=ODBCDBE"
   cConnect += ";DSN=localhost"
   cConnect += ";UID=root"
   cConnect += ";PWD=root"

   oSession := DacSession():New( cConnect )

   DBUSEAREA( TRUE,, "stat_job",,TRUE )
   ? "Lastrec: ", stat_job->( LASTREC() )
   
   SQL "SELECT COUNT(*) FROM stat_job" INTO nLastRec
   ? "SQL-Count: ", nLastRec
   
   oSession:Disconnect()

RETURN

PROCEDURE DbeSys
   DbeLoad( "ODBCDBE" )
   DbeSetDefault( "ODBCDBE" )
RETURN


Re: ODBCDBE MySQL Count(*) liefert 0

Verfasst: Mi, 27. Apr 2011 14:48
von urbi
Hallo Sebastian,

ich benutze hier den Funktionsaufruf und bekomme korrektes Ergebnis

SQL("SELECT COUNT(*) FROM stat_job") INTO nLastRec

Gruss
Rainer

Re: ODBCDBE MySQL Count(*) liefert 0

Verfasst: Mi, 27. Apr 2011 15:26
von Tom
Hallo, Sebastian.

Schau mal in die Doku zu "LastRec()". Da steht unter anderem:

Bei anderen Dateiformaten (Anm. also nicht bei DBF) kann das z.B. ein Wert für den Primärschlüssel sein, der nicht numerisch sein muß.

Kann es sein, dass die Tabelle einen Autoincrement-Primärschlüssel hat? Und dass es schon einmal mindestens einen Datensatz gab?

Re: ODBCDBE MySQL Count(*) liefert 0

Verfasst: Mi, 27. Apr 2011 20:17
von klammerauf
Tom,

Danke für die Antwort.

Bei der Mutmaßung ein Volltreffer. Oder doch nicht ganz?

Ich habe einen AutoInc Primärschlüssel, es gibt einen (einzelnen) Datensatz.

phpMyAdmin liefert bei der gleichen Abfrage aber eine 1 zurück. Und entgegen deiner Vermutung ist der Rückgabewert von LastRec() durchaus numerisch und entspricht in diesem Fall ja auch den Tatsachen.

Lastrec() -> 1
ODBCDBE SQL Count(*) -> 0
MySQL Count(*) -> 1

Danke auch urbi, ich werds noch mit dem Funktionsaufruf probieren, bin mir aber irgendwie ziemlich sicher, dass der Precompiler mein Statement im PPO-Code eh schon in einen Funktionsaufruf umwandelt. Ach ja, ich sehe grade dass du irgendwo in Durlach oder Umgebung wohnst. Kann das sein?

Sebastian

Re: ODBCDBE MySQL Count(*) liefert 0

Verfasst: Do, 28. Apr 2011 8:29
von urbi
Hallo Sebastian,

wenn ich richtig vermute möchtest du die Anzahl der Datensätze ermitteln

versuchs mal so über AutoIncrement (Feld ID):

// erst auf Verbindung prüfen oSession ist STATIC
IF oSession=NIL .or. !oSession:isconnected()
oSession := SQLTEST()
ENDIF
SQL("SELECT ID FROM adres1 WHERE ID=(SELECT MAX(ID) FROM adres1)") VIA oSession
nTotal:=FIELD->ID

Gruss Rainer
ps Wir sind ja fast Nachbarn, bietet sich an sich mal zu treffen.