Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

urgent ! mysql4wd taille des buffers

9 réponses
Avatar
Roumégou Eric
Bonjour,

un pb que nous avons déjà eu avec cette classe; on est limité avec la
taille des buffers.

Ce que nous avions réglé avec un double stockage dans un fichier HF
pour les contenus trop longs. Or JE NE VEUX PLUS DE HF (j'ai fait un
voeu)

Donc mon pb c'est que je récupère du contenu dans des champs text de
mysql. C'est du contenu HTML, donc ça peut prendre vite bcp de place.
Or cette fn

FONCTION mySQLColLong(requestNumber is int, numField is int)

LOCAL
myRequestNumber is int
myNumField is unsigned int
myBuffer is ASCIIZ string on 65535

myNumField = numField - 1
myRequestNumber = requestNumber

AppelDLL32("mySQL4WD", "mySQLLitCol", :myMaxConnectionNumber,
myRequestNumber, myNumField, &myBuffer)

RENVOYER(myBuffer)


comme on le voit récupere un buffer de 64k0.
J'ai essayé de faire une autre fn en multipliant le buffer par 3, mais
ça coupe toujours au même endroit. j'en déduit donc que c'est la dll en
C qui taille ce buffer à 65535.

Pour ceux qui utilisent cette classe mysql4wd (sqlmanagerX par ex),
avez vous le même problème ? avez vous une solution ?

Merci de vos réponses; c'est très urgent car on est bloqué là dessus.

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)

9 réponses

Avatar
farplus
Le 08/04/2011 15:40, Roumégou Eric a écrit :
Bonjour,

un pb que nous avons déjà eu avec cette classe; on est limité avec la
taille des buffers.

Ce que nous avions réglé avec un double stockage dans un fichier HF pour
les contenus trop longs. Or JE NE VEUX PLUS DE HF (j'ai fait un voeu)

Donc mon pb c'est que je récupère du contenu dans des champs text de
mysql. C'est du contenu HTML, donc ça peut prendre vite bcp de place.
Or cette fn

FONCTION mySQLColLong(requestNumber is int, numField is int)

LOCAL
myRequestNumber is int
myNumField is unsigned int
myBuffer is ASCIIZ string on 65535

myNumField = numField - 1
myRequestNumber = requestNumber

AppelDLL32("mySQL4WD", "mySQLLitCol", :myMaxConnectionNumber,
myRequestNumber, myNumField, &myBuffer)

RENVOYER(myBuffer)


comme on le voit récupere un buffer de 64k0.
J'ai essayé de faire une autre fn en multipliant le buffer par 3, mais
ça coupe toujours au même endroit. j'en déduit donc que c'est la dll en
C qui taille ce buffer à 65535.

Pour ceux qui utilisent cette classe mysql4wd (sqlmanagerX par ex), avez
vous le même problème ? avez vous une solution ?

Merci de vos réponses; c'est très urgent car on est bloqué là dessus.



Je ne sais pas quelle version de WD tu utilises.
Il se peut cependant que ton pb vienne de ta déclaration "unsigned int"
qui jusqu'au WD15 était sur 2 octets correspondant au unsigned smallint
en sql (donc de 0 à 65535); essaie donc en wd unsigned int on 4 octets
(mediumint en sql) et modifie la longueur de la chaine en conséquence.
Tiens nous au courant

bon courage
Avatar
farplus
Le 08/04/2011 15:40, Roumégou Eric a écrit :
Bonjour,

un pb que nous avons déjà eu avec cette classe; on est limité avec la
taille des buffers.

Ce que nous avions réglé avec un double stockage dans un fichier HF pour
les contenus trop longs. Or JE NE VEUX PLUS DE HF (j'ai fait un voeu)

Donc mon pb c'est que je récupère du contenu dans des champs text de
mysql. C'est du contenu HTML, donc ça peut prendre vite bcp de place.
Or cette fn

FONCTION mySQLColLong(requestNumber is int, numField is int)

LOCAL
myRequestNumber is int
myNumField is unsigned int
myBuffer is ASCIIZ string on 65535

myNumField = numField - 1
myRequestNumber = requestNumber

AppelDLL32("mySQL4WD", "mySQLLitCol", :myMaxConnectionNumber,
myRequestNumber, myNumField, &myBuffer)

RENVOYER(myBuffer)


comme on le voit récupere un buffer de 64k0.
J'ai essayé de faire une autre fn en multipliant le buffer par 3, mais
ça coupe toujours au même endroit. j'en déduit donc que c'est la dll en
C qui taille ce buffer à 65535.

Pour ceux qui utilisent cette classe mysql4wd (sqlmanagerX par ex), avez
vous le même problème ? avez vous une solution ?

Merci de vos réponses; c'est très urgent car on est bloqué là dessus.



En complément, valeur des int et taille des zones "text" en SQL

unsigned smallint 0-65535 text
unsigned mediumint 0-16777215 mediumtext
unsigned int 0-4294967295 longtext

dans la définition en sql le mot blob peut être utilisé au lieu de text
(blob,mediumblob,longblob) et alors les zones deviennent sensibles à la
casse.
Avatar
Roumégou Eric
Le 09/04/2011, farplus a supposé :
Le 08/04/2011 15:40, Roumégou Eric a écrit :
Bonjour,

un pb que nous avons déjà eu avec cette classe; on est limité avec la
taille des buffers.

Ce que nous avions réglé avec un double stockage dans un fichier HF pour
les contenus trop longs. Or JE NE VEUX PLUS DE HF (j'ai fait un voeu)

Donc mon pb c'est que je récupère du contenu dans des champs text de
mysql. C'est du contenu HTML, donc ça peut prendre vite bcp de place.
Or cette fn

FONCTION mySQLColLong(requestNumber is int, numField is int)

LOCAL
myRequestNumber is int
myNumField is unsigned int
myBuffer is ASCIIZ string on 65535

myNumField = numField - 1
myRequestNumber = requestNumber

AppelDLL32("mySQL4WD", "mySQLLitCol", :myMaxConnectionNumber,
myRequestNumber, myNumField, &myBuffer)

RENVOYER(myBuffer)


comme on le voit récupere un buffer de 64k0.
J'ai essayé de faire une autre fn en multipliant le buffer par 3, mais
ça coupe toujours au même endroit. j'en déduit donc que c'est la dll en
C qui taille ce buffer à 65535.

Pour ceux qui utilisent cette classe mysql4wd (sqlmanagerX par ex), avez
vous le même problème ? avez vous une solution ?

Merci de vos réponses; c'est très urgent car on est bloqué là dessus.



Je ne sais pas quelle version de WD tu utilises.
Il se peut cependant que ton pb vienne de ta déclaration "unsigned int" qui
jusqu'au WD15 était sur 2 octets correspondant au unsigned smallint en sql
(donc de 0 à 65535); essaie donc en wd unsigned int on 4 octets (mediumint en
sql) et modifie la longueur de la chaine en conséquence.
Tiens nous au courant

bon courage



Merci beaucoup de ta réponse.

Pour la vs, c'est en vs 15 (Webdev) mais cela est vrai pour toutes mes
applis (mini WD14 jusqu'à WB16)
Pour le unsigned int
myNumField is unsigned int

je ne crois pas que cela vienne de là car myNumField dans cette classe
permet juste de gerer le n° de champs ds la requête (donc peu de chance
que cela aille au delà de 999)

je ferais tout de même des essais.

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Daniel
Le 10/04/2011 09:44, Roumégou Eric a écrit :

Merci beaucoup de ta réponse.

Pour la vs, c'est en vs 15 (Webdev) mais cela est vrai pour toutes mes
applis (mini WD14 jusqu'à WB16)
Pour le unsigned int
myNumField is unsigned int

je ne crois pas que cela vienne de là car myNumField dans cette classe
permet juste de gerer le n° de champs ds la requête (donc peu de chance
que cela aille au delà de 999)

je ferais tout de même des essais.



La limite de 65535 vient de Windev (voir le changelog.txt). Si tu veux
dépasser cette limite, il va falloir revoir la fonction dans la DLL et
la classe.

--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)
Avatar
farplus
Le 10/04/2011 12:14, Daniel a écrit :
Le 10/04/2011 09:44, Roumégou Eric a écrit :

Merci beaucoup de ta réponse.

Pour la vs, c'est en vs 15 (Webdev) mais cela est vrai pour toutes mes
applis (mini WD14 jusqu'à WB16)
Pour le unsigned int
myNumField is unsigned int

je ne crois pas que cela vienne de là car myNumField dans cette classe
permet juste de gerer le n° de champs ds la requête (donc peu de chance
que cela aille au delà de 999)

je ferais tout de même des essais.



La limite de 65535 vient de Windev (voir le changelog.txt). Si tu veux
dépasser cette limite, il va falloir revoir la fonction dans la DLL et
la classe.



je pensais que ton int donnait la longueur du buffer;
Daniel a raison;
avec cette dll tu ne peux LIRE qu'une colonne de 64k (écrire plus long oui);
je ne connais évidemment pas ton programme ni ses contraintes,
je t'indique donc qq solutions de contournement,(au fait pour remplacer
ton HF) il y a en peut être une qui te convient:

1) ajouter une ou plusieurs colonnes de type TEXT (longueur variable max
64k) à ta base
2) créer une deuxième base indexée par ton numéro de ligne (clé avec
doublon) avec une seule colonne TEXT.
3) puisque le nombre max de tes lignes est inférieur à 1000, tu pourrais
stocker aisément la portion dépassant les 64k dans un fichier texte au
nom de ton numéro de ligne L001.txt ... L999.txt) dans un répertoire ad
hoc. La lecture d'un fichier texte est ultrarapide.
Avatar
JeAn-PhI
Après mûre réflexion, Roumégou Eric a écrit :
Bonjour,

un pb que nous avons déjà eu avec cette classe; on est limité avec la taille
des buffers.

Ce que nous avions réglé avec un double stockage dans un fichier HF pour les
contenus trop longs. Or JE NE VEUX PLUS DE HF (j'ai fait un voeu)

Donc mon pb c'est que je récupère du contenu dans des champs text de mysql.
C'est du contenu HTML, donc ça peut prendre vite bcp de place.
Or cette fn

FONCTION mySQLColLong(requestNumber is int, numField is int)

LOCAL
myRequestNumber is int
myNumField is unsigned int
myBuffer is ASCIIZ string on 65535

myNumField = numField - 1
myRequestNumber = requestNumber

AppelDLL32("mySQL4WD", "mySQLLitCol", :myMaxConnectionNumber,
myRequestNumber, myNumField, &myBuffer)

RENVOYER(myBuffer)


comme on le voit récupere un buffer de 64k0.
J'ai essayé de faire une autre fn en multipliant le buffer par 3, mais ça
coupe toujours au même endroit. j'en déduit donc que c'est la dll en C qui
taille ce buffer à 65535.


oui

Pour ceux qui utilisent cette classe mysql4wd (sqlmanagerX par ex), avez vous
le même problème ? avez vous une solution ?


mySQLLitMemo

Merci de vos réponses; c'est très urgent car on est bloqué là dessus.


de rien

--
Cordialement JeAn-PhI
Avatar
Daniel
Le 11/04/2011 09:20, JeAn-PhI a écrit :


Pour ceux qui utilisent cette classe mysql4wd (sqlmanagerX par ex),
avez vous le même problème ? avez vous une solution ?


mySQLLitMemo





C'est effectivement la fonction qu'il faut utiliser.


--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)
Avatar
Roumégou Eric
Daniel avait soumis l'idée :
Le 11/04/2011 09:20, JeAn-PhI a écrit :


Pour ceux qui utilisent cette classe mysql4wd (sqlmanagerX par ex),
avez vous le même problème ? avez vous une solution ?


mySQLLitMemo





C'est effectivement la fonction qu'il faut utiliser.



Merci de vos réponses. J'étais absent cette semaine et n'ai pu répondre
avant.
Je vais tester avec la fn sqllitmemo

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Roumégou Eric
Roumégou Eric avait prétendu :
Daniel avait soumis l'idée :
Le 11/04/2011 09:20, JeAn-PhI a écrit :


Pour ceux qui utilisent cette classe mysql4wd (sqlmanagerX par ex),
avez vous le même problème ? avez vous une solution ?


mySQLLitMemo





C'est effectivement la fonction qu'il faut utiliser.



Merci de vos réponses. J'étais absent cette semaine et n'ai pu répondre
avant.
Je vais tester avec la fn sqllitmemo



bon ce soir je me couche moins con mais ça a été dur.

En fait en prenant le fmt text de mysql, je suis limité à 65535
caractère soit 2 puissance 16. (et ça je ne le savais pas vraiment et
c'est d'ailleurs pas évident à trouver ds la doc mysql)

J'ai donc passé la colonne en longtext (2 puissance 32 donc là ça va)

et créé une fn dérivée du mysllitmemo

Dans mon système j'ai un flag qui me dit si le contenu est >65535 et
selon ce flag je lit avec mysSqllitcol ou avec ma fn mySQLLitBig qui
passe par ce fichier de travail.

Car je n'ai pas envie de passer par ce fichier wrk dans 100 % des cas
alors que depuis 7 ans que j'utilise ces fns, je n'ai été confronté que
3 ou 4 fois à des contenus trop longs.

Donc ça marche impec. Merci encore de vos aides précieuses.

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)