bd avec a lib de droopy
-
- Messages : 8
- Inscription : lun. 16/oct./2006 14:14
bd avec a lib de droopy
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 .
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 .
-
- Messages : 8
- Inscription : lun. 16/oct./2006 14:14
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Es tu sur que droppy a mis à jour sa lib pour la V4 de PB ?
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
-
- Messages : 8
- Inscription : lun. 16/oct./2006 14:14
-
- Messages : 8
- Inscription : lun. 16/oct./2006 14:14
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.
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.
-
- Messages : 8
- Inscription : lun. 16/oct./2006 14:14
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.
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.