bd avec a lib de droopy

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
globinours
Messages : 8
Inscription : lun. 16/oct./2006 14:14

bd avec a lib de droopy

Message 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 .
globinours
Messages : 8
Inscription : lun. 16/oct./2006 14:14

Message 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 ?
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Es tu sur que droppy a mis à jour sa lib pour la V4 de PB ?
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Lance deux tri successifs .
globinours
Messages : 8
Inscription : lun. 16/oct./2006 14:14

Message 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.
globinours
Messages : 8
Inscription : lun. 16/oct./2006 14:14

Message 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.
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message 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:
globinours
Messages : 8
Inscription : lun. 16/oct./2006 14:14

Message 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.
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Je suis content que LDB serve à quelqu'un :D
Répondre