DBGRID, SAUVER LE VISUEL DEFINIT PAR VOS UTILISATEURS

Signaler
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
-
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/28179-dbgrid-sauver-le-visuel-definit-par-vos-utilisateurs

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 ...
Afficher les 13 commentaires