Comment définir une valeur par defaut dans une cellule d'un DbGrid, lors d'un nouveau enrégistrement ( click sur le "+" du dbNavigator), j'aimerais qu'une colonne donnée ait deja une valeur. Merci.
Version imprimable
Comment définir une valeur par defaut dans une cellule d'un DbGrid, lors d'un nouveau enrégistrement ( click sur le "+" du dbNavigator), j'aimerais qu'une colonne donnée ait deja une valeur. Merci.
salut
c'est dans le dataset sous jacent que la valeur doit être inscrite le dbgrid ne fait que de l'affichage
Les colones ou les cellules ne possedent pas de dataset dans propriétés. La meme question est posée précedement et la réponse etait d'implémenter une valeur dans l'evenement OnNewRecord, mais je ne sais pas comment.
Un peu de sérieux, j'ai hésité à mettre un :moinsser: à votre dernier post.
Un dbgrid a bien un dataset (une table ou une query) associé, or une table ou une query a un évènement onnewrecord donc, avec ces informations vous devez pouvoir faire vos initialisations sans soucis
Les colones d'un dbgrid ne possedent pas de dataset dans leurs propriétés. dans dbgrid et datasource dataset existe. Et ma question est comment implémenter la valeur par defaut.
Vous avez TField.DefaultExpression pour une valeur plutôt SQL, je ne crois pas qu'elle s'affiche, elle doit être utilisé lors du Apply Updates \ Commit
Avec l'IDE, dans le DataSet lié au DataSource qui est lié au DbGrid, il y un OnNewRecord, comme vous l'avez vu, suffit de faire un double-clic, cela va créer automatiquement un gestionnaire d'évènement et le code est ensuite très simple :
Mais ce code est tellement simple que je suppose qu'il y a un problème plus complexe dans votre question :Code:
1
2
3
4
5 procedure TForm1.Table1NewRecord(DataSet: TDataSet); begin DataSet.FieldByName('ChampChaine').AsString := 'toto'; DataSet.FieldByName('ChampDate').AsDateTime := Date(); end;
Je suppose que vous souhaitez utiliser dynamiquement les valeurs par défaut du SGBD, selon votre bibliothèque il faudra lire les méta-data manuellement si vous souhaitez les voir par défaut.
Pour vous aider à récupérer les valeurs par défaut via un équivalent d'un DESCRIBE , USER_TAB_COLUMNS en ORACLE, INFORMATION_SCHEMA.COLUMNS en SQL Server ... il faut nous préciser votre SGBD
A savoir qu'un champ laissé à NULL sera remplacé par une valeur par défaut par le SGBD lors du INSERT sans qu'il soit nécessaire de les afficher.
Je savais que je l'avais dans un coin, je n'utilise quasiment jamais de TTable.Append\Post, je préfère tout faire en SQL mais si l'on part sur un OnNewRecord et un TDBNavigator
Exemple pour ORACLE pour récupérer la valeur par défaut de la table et pouvoir ainsi l'afficher en amont à l'utilisateur
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 procedure TForm1.Table1NewRecord(DataSet: TDataSet); begin if DataSet is TOraQuery then begin with TOraQuery.Create() do try Session := TOraQuery(DataSet).Session; SQL.Text := Format('SELECT COLUMN_NAME, DATA_DEFAULT FROM USER_TAB_COLUMNS WHERE TABLE_NAME = ''%s'' AND COLUMN_NAME IN (''XX_XX_XXXXXX'', ''XX_XX_YYYYYYY'') ', [TOraQuery(DataSet).UpdatingTable]); Open(); while not EOF do begin DataSet.FieldByName(FieldByName('COLUMN_NAME').AsString).AsString := AnsiDequotedStr(FieldByName('DATA_DEFAULT').AsString, ''''); Next(); end; Close(); finally Free(); end; end; end;
Comme vous le voyez, la gestion des valeurs par défaut issu du SGBD est assez triviale :mouarf::ptdr:
Le premier code marche Nickel. Merci beaucoup, ma base de sonnées est en access.
Le premier code a résolu votre problème, ah oui :roll:, bon courage alors ... Pensez donc au :resolu:
ACCESS :aie: