Page 1 sur 1

bd avec a lib de droopy

Publié : lun. 20/nov./2006 10:47
par globinours
Bonjour à tous,
j'utilse les bd de l'excellente librairie de droopy et j'aimerais savoir s'il est possible de trier plusieurs champs.
Je m'explique, je voudrais trier sur le champs 1 puis sur le champs 3 ...
car avec ldbsortalpha ou num, on ne tri qu'un seul champs.
Merci .

Publié : lun. 20/nov./2006 15:23
par globinours
C'est encore moi... :oops:

Je n'arrive pas à faire fonctionner la fonction ldbaddfield.
elle me crée bien un nouveau champs mais sans le nom.
idem pour ldbsetfieldname : pas de changement de nom.

Quelqu'un aurait-il une explication ?

Publié : lun. 20/nov./2006 15:32
par Progi1984
Es tu sur que droppy a mis à jour sa lib pour la V4 de PB ?

Publié : lun. 20/nov./2006 15:46
par Droopy
Lance deux tri successifs .

Publié : lun. 20/nov./2006 16:02
par globinours
Progi1984 :
Non, j'ai récupérer celle adapté par Demonio Ardente
C'est pas bon?

Droopy:
J'ai déjà essayé de lancer 2 tris successifs mais cela ne tri que sur le deuxième tri sans prendre en compte le premier.

Publié : lun. 20/nov./2006 16:09
par globinours
En adaptant quelque peu l'exemple fourni dans le fichier chm :
LdbCreate("c:\test.txt","Name,Age")
nnb=100
ch=5
For n=1 To nnb
LdbInsertRecord(-1)
a.s=""
For i=1 To ch
zz.s=Chr(Random(25)+65)
If Random(1)=0 : zz=LCase(zz) : EndIf
a.s+zz
Next
LdbWrite(1,a)
LdbWrite(2,Str(Int(n/2)))
Next
LdbSortNum(2)
LdbSortAlpha(1,1)


LdbSaveDatabase()
LdbCloseDatabase()

Cela ne trie que sur le premier champs(name)
le premier tri sur les ages est écrasé apparement.

Publié : lun. 20/nov./2006 21:24
par Droopy
Cela ne trie que sur le premier champs(name)
le premier tri sur les ages est écrasé apparement.
Effectivement, j'aurais parié que ça marchait :oops:

Publié : mar. 21/nov./2006 16:47
par globinours
J'ai trouver les sources de ta lib droopy.
En fait les fonctions ldbaddfield et ldbsetfieldname ne fonctionne pas car lors du ldbwrite pour changer le nom du champs, il y a un if ldbgetpointer()<>0 ..... or c'est forcément le cas pour le pointeur des champs.
J'ai donc pu adapter une solution en adaptant les fonctions ldbaddfield et ldbsetfieldname qui font maintenant appel à ldbwritechamps dans laquelle je zap ce test.

ProcedureDLL LdbWrite(Field,Text.s)
; Verify if trying to overwrite the first record
If LdbGetPointer()<>0
; Replace CRLF by #CRLFSubstitution
Text=ReplaceString(Text,#CRLF$,#CRLFSubstitution)
ClearList(LdbField.s())
For n=1 To LdbFieldCount
AddElement(LdbField.s())
LdbField.s()=StringField(LdbBdd(),n,#Separator)
Next
SelectElement(LdbField.s(),Field-1)
LdbField()=Text
LdbBdd()=""
ForEach LdbField.s()
LdbBdd()+LdbField.s()+#Separator
Next
EndIf
EndProcedure


En ce qui concerne les tri successifs, il n'y a effectivement rien dans les deux fonctions qui permet des tris successifs.
Je bosse dessus.
Merci quand même à progi1984 et à droopy de s'être penché sur mon problème.

Publié : mar. 21/nov./2006 19:51
par Droopy
Je suis content que LDB serve à quelqu'un :D