Der Advantage Database Server und seine bescheuerten Fehler
Unbeschränkte Abfragelänge bedeutet nicht wirklich unbeschränkt...
Laut den Help-Files kann der ADS beliebig lange Abfragen ausführen, doch bei bei skalaren IN-Listen ist schnell Schluss. Folgendes Beispiel zeigt das Problem: Ich hab eine menge Zeilen ausgelassen, aber insgesamt sind es ungefähr 80kb (Textgröße, Bytes!), die da fehlen. Leider steigt der ADS da mit
[Extended Systems][Advantage SQL][ASA] Error 7207: Unexpected error from Advantage Server Agent. Check Advantage error log for details.
Error 5005: The supplied buffer was insufficient for the information returned. The data may have been truncated.
aus. Kürz' ich eine signifikante Menge von Sucheinträgen aus, läuft die Abfrage. Und dabei steht in der Doku (Quelle)
*SQL Statement Limits*
Maximum character literal length
No Limit*
Maximum SQL statement length
No Limit*
* In versions 7.0 and earlier, the maximum character literal length was 1024 characters, and the total maximum length for an SQL statement was 65535 bytes. In versions 7.1 or greater, character literals and SQL statements can be arbitrarily long.
Und wir setzen definitiv kein 7.0 oder älter mehr ein (weder als Server noch als Client)
Auf meine Anfrage in der ADS/PHP-Newsgroup, wo sich auch Entwickler rumtreiben kam keine Antwort.
(PHP)
Ein Datensatz ist manchmal auch kein Datensatz
Das MoveFirst sollte doch kein Problem sein, oder? Ist es leider. Hatte jetzt leider das Problem, das er angeblich zwar einen Datensatz hatte, aber bei dem MoveFirst mit einen Error direkt ausstieg.
Und ich könnte schwören, ich hätte früher mal dieses (rs.recordcount > 0) eingeführt weil Not rs.eof() auch nicht so richtig wollte...
(Visual Basic & AdoDB)
Kein Datensatz ist manchmal auch ein Datensatz und manchmal sogar noch mehr..
Als ich vor über 4 Jahren mit PHP & ADS anfing hatte ich ein Problem mit der Funktion ads_num_rows(), die die Anzahl der zurückgegebenen Datensätze liefert. Tat sie nicht. Seit 7.0 steht in der Hilfe
Remarks
For SELECT statements or EXECUTE PROCEDURE statements with a result set, the number of rows will be –1 until the last row has been fetched. For INSERT, UPDATE, and DELETE statements, the number of rows affected by the statement is returned. In the event of an error, –1 will be returned.
Probieren wir das doch mal aus:
";
$ergebnis = $ads->query("SELECT code FROM qs_icd27");
echo "Anzahl Datensätze: " . ads_num_rows($ergebnis)."\n";
$anzahl = 0;
while (ads_fetch_array($ergebnis)) //Zieh alle Datensätze
$anzahl++;
echo "Richtige Anzahl Datensätze: ". $anzahl ."\n";
echo "Neue Anzahl Datensätze: ". ads_num_rows($ergebnis) ."\n";
die();
?>
Ausgabe:
Hm, passt nicht so ganz. Selbst wenn die Funktion richtig funktionieren würde, ist sie doch recht überflüssig.
Hat noch jemand ADS/PHP prä-7.0 Dokumentation? Ich könnte schwören da stand das nicht drin und die Funktion gab damals 0 zurück.
(PHP)
Recent comments