Dbgrid, sauver le visuel definit par vos utilisateurs

Soyez le premier à donner votre avis sur cette source.

Vue 7 112 fois - Téléchargée 3 641 fois

Description

Voilà une fonction qui est pas compliquée.
Si vous en avez marre de changer la taille des colonnes en Desin Time parce que sinon ça enregistre pas, ce code est fait pour vous. D' ailleurs, ça fait bien plus encore :-)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
J' ai déjà essayé déja:
Pour tous les Floats, la valeur est la même alors que j' ai des floats de taille differente par ex:
Champ TVA 3N1
Champ Valeur 7N2

Donc, dans cet exemple, la colonne TVA dans une DBGrid n' a besoin de montrer que de 5 caracteres (avec la virgule) alors que la colonne Valeur a besoin de montrer 10 caracteres. Donc, la colonne valeur a besoin d' etre 2 fois plus grande.
C' est un probleme qui me hante depuis quelques années déjà et personne ne sait comment récupérer la structure d' un float alors que Database Desktop te montre ça ...

Aller continuons de chercher :-)
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
7
Eh sinon je viens de trouver ça :
Showmessage(TableCalculs1.Fields.Fields[13].FieldName + ' = ' + IntToStr(TableCalculs1.Fields.Fields[13].DisplayWidth));

Quand penserais tu?
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
7
Ouais je comprens bien le souci. Je viens de regarder un peu dans l'aide et il précise bien que la propriété size n'est valable que pour ces types de champs :
ftBCD Size indique le nombre de chiffres après le séparateur décimal.
ftString Size indique le nombre maximum de caractères dans la chaîne.
ftVarBytes Size indique le nombre maximum d'octets de données sans compter les deux premiers octets indiquant le nombre réel d'octets utilisés.
ftBytes Size indique le nombre maximum d'octets de données.
ftBlob Size indique le nombre d'octets du BLOB stockés dans le tampon de l'enregistrement.
ftDBaseOle Size indique le nombre d'octets du champ OLE BLOB dBASE stockés dans le tampon de l'enregistrement.

ftFMTBCD Size indique le nombre de chiffres après le séparateur décimal.
ftFmtMemo Size indique le nombre d'octets du mémo stockés dans le tampon de l'enregistrement.
ftGraphic Size indique le nombre d'octets de l'image stockés dans le tampon de l'enregistrement.
ftMemo Size indique le nombre d'octets du mémo stockés dans le tampon de l'enregistrement.
ftParadoxOle Size indique le nombre d'octets du champ OLE BLOB Paradox stockés dans le tampon de l'enregistrement.

ftTypedBinary Size indique le nombre d'octets du BLOB stockés dans le tampon de l'enregistrement.
ftADT Size indique le nombre total de champs contenus dans le champ ADT, y compris les champs des champs enfant de type ADT.
ftArray Size est le nombre d'éléments du tableau.

Maintenant peut etre que la propriété datasize pourrait fonctionner pour les autres types de champs?
Qu'en penses tu Mauricio?
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
Merci à toi jmp77 !
Voilà un petit coup de mains:

procedure PROPRIEDADES_TABELA(Tabela: TTable; CamposParaIndexo: TStrings);
var _Inc, i: Integer;
Tipo: String;
begin
FrmProp := TFrmProp.Create(Nil);
FrmProp.LBIndex.Items.Clear;
FrmProp.TabProp := Tabela;

FrmProp.LBCamposParaIndexo.Items := CamposParaIndexo;

FrmProp.TabProp.IndexDefs.Update;
for i := 0 To FrmProp.TabProp.IndexDefs.Count - 1 Do
If FrmProp.TabProp.IndexDefs[i].Name <> ''
Then TStringAdd(FrmProp.LBIndex.Items, FrmProp.TabProp.IndexDefs[i].Name, False, True)
Else TStringAdd(FrmProp.LBIndex.Items, FrmProp.TabProp.IndexDefs[i].FieldExpression, False, True);

_Inc := 0;
FrmProp.StringGrid1.Cells[0, 0] := 'Campo';
FrmProp.StringGrid1.Cells[1, 0] := 'Tipo';
FrmProp.StringGrid1.Cells[2, 0] := 'Tam.';
FrmProp.StringGrid1.Cells[3, 0] := 'Dec.';

for i := 0 to FrmProp.TabProp.FieldCount-1 do
begin
FrmProp.StringGrid1.RowCount := FrmProp.StringGrid1.RowCount + _Inc;
_Inc := 1;

Case FrmProp.TabProp.Fields[i].DataType Of
ftString: Tipo := 'String';
ftSmallint: Tipo := 'Smallint';
ftInteger: Tipo := 'Integer';
ftWord: Tipo := 'Word';
ftAutoInc: Tipo := 'AutoInc';
ftBoolean: Tipo := 'Boolean';
ftFloat: Tipo := 'Float';
ftCurrency: Tipo := 'Currency';
ftTime: Tipo := 'Time';
ftDate: Tipo := 'Date';
ftDateTime: Tipo := 'DateTime';
ftBytes: Tipo := 'Bytes';
ftVarBytes: Tipo := 'VarBytes';
ftBlob: Tipo := 'Blob';
ftMemo: Tipo := 'Memo';
ftFmtMemo: Tipo := 'FmtMemo';
ftGraphic: Tipo := 'Graphic';
ftWideString: Tipo := 'WideString';
ftLargeint: Tipo := 'Largeint';
Else Tipo := 'sconhecido';
End;

FrmProp.StringGrid1.Cells[0, FrmProp.StringGrid1.RowCount - 1] := FrmProp.TabProp.Fields[i].FieldName;
FrmProp.StringGrid1.Cells[1, FrmProp.StringGrid1.RowCount - 1] := Tipo;

Case FrmProp.TabProp.Fields[i].DataType Of
ftString : FrmProp.StringGrid1.Cells[2, FrmProp.StringGrid1.RowCount - 1] := IntToStr(FrmProp.TabProp.Fields[i].Size);
ftFloat : begin
FrmProp.StringGrid1.Cells[2, FrmProp.StringGrid1.RowCount - 1] := IntToStr(FrmProp.TabProp.Fields[i].Size);
// FrmProp.StringGrid1.Cells[2, FrmProp.StringGrid1.RowCount - 1] := IntToStr(FrmProp.TabProp.FieldList[i].Size);
end;
End;
end;

FrmProp.ShowModal;
FrmProp.Release;
end;

Comme tu peux le voir, pas moyen de récupérer la taille des floats genre 7N2 ou 4N1 etc ...
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
7
Effectivement je suis daccord avec toi Mauricio c'est d'ailleurs mon cas j'ai des bases avec 200 colonnes et plus de 5000 enregistrements et je n'utilise pas cette fonction à cause du temps d'execution. Cette solution est viable pour une petite base. Enfin si quelqu'un trouve une solution plus rapide ca pourrais etre sympa. Je vais essayer de regarder la question.

Allez bonne prog,
JMP77.
Afficher les 13 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.