Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Bases de données
Bases de données Vos questions concernant les bases de données (BDE, Access, SqlServer...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 03/12/2012, 15h11   #1
castorcharly
Membre habitué
 
Avatar de castorcharly
 
Homme
Chef de projet
Inscription : février 2009
Messages : 204
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 57

Informations professionnelles :
Activité : Chef de projet
Secteur : Biens de consommation

Informations forums :
Inscription : février 2009
Messages : 204
Points : 120
Points : 120
Par défaut Base access et Rav

Bonjour,

Je rencontre un problème avec une base de données Access, que je ne maitrise pas bien du tout.

Dans D2006 je crée une table dynamiquement qui est pourvue d'un champ de type memo.

L'objectif étant d'afficher le contenu de ce memo dans un champ DataMemo d'un RAV.

Le problème que je rencontre est sur l'affichage des données dans le RAV,
j'ai entre chaque charactère de mon champ un petit char carré, que nous connaissons bien indiquant un char de controle.

Quand j'ouvre ma base dans Access, mes lignes sont correctes.
Quand je regarde mes données dans un Dbgrid, le champ mémo indique WIDEMEMO...

J'imagine donc que c'est le fait que les données sont stockées en WIDE qui provoque cet affichage.

Je ne sais si je dois modifier qq. chose sur ma base ou sur ma manière de stocker les données.

Pour implémenter mon champ je fais une SQL de type INSERT et via des params sous ADO en lui passant une chaine tel que:

Code :
1
2
3
4
5
6
 
Parameters.paramByname('MonchampMemo').value:= TmpStr;
 
ou
Parameters.paramByname('MonchampMemo').value:= LstString.text;
en sachant que ce dernier est un Tstringlist.
J'espère être assez clair pour que vous puissiez m'aider.
castorcharly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2012, 21h07   #2
BuzzLeclaire
Membre Expert
 
Avatar de BuzzLeclaire
 
Homme
Dev/For/Vte/Ass
Inscription : août 2008
Messages : 1 499
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Dev/For/Vte/Ass

Informations forums :
Inscription : août 2008
Messages : 1 499
Points : 1 059
Points : 1 059
Citation:
Envoyé par castorcharly Voir le message
Bonjour,

Je rencontre un problème avec une base de données Access, que je ne maitrise pas bien du tout.

Dans D2006 je crée une table dynamiquement qui est pourvue d'un champ de type memo.

L'objectif étant d'afficher le contenu de ce memo dans un champ DataMemo d'un RAV.
Pour le rav, tu peux utiliser ceci

Code :
1
2
3
4
5
6
7
8
9
Procedure ...
Var
MyMemo : TRaveMemo;
begin
//...
    MyMemo:=TRaveMemo.Create(myPage);
    MyMemo.Parent:=MyBand;
//...
end;
Pour cette partie @Sergio saura mieux t'aiguiller que moi


Citation:
Envoyé par castorcharly Voir le message
Quand j'ouvre ma base dans Access, mes lignes sont correctes.
Quand je regarde mes données dans un Dbgrid, le champ mémo indique WIDEMEMO...
C'est normal, un champ mémo ne peut pas être directement visible dans un Dbgrid, il faut utiliser une fonction pour transformer le memo en string.

Par exemple sur un ADOTbl tu peux faire ce genre de chose :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TFData.TblRequeteAfterOpen(DataSet: TDataSet);
Var
  i : integer;
Begin
  // on redirige les zones memo vers memoGetText
  for i := 0 to DataSet.FieldCount - 1 do
    if (DataSet.Fields[i] is TWideMemoField) or (DataSet.Fields[i] is TMemoField) then
        DataSet.Fields[i].OnGetText := MemoGetText
    else
      if (DataSet.Fields[i] is TFloatField) or (DataSet.Fields[i] is TCurrencyField) then
        {MISE EN FORME Numérique}
        TFloatField(Dataset.Fields[I]).DisplayFormat :='#0.00'
      else
        if (DataSet.Fields[i].FieldName = 'Duree')  then
          TDateTimeField(DataSet.Fields[i]).DisplayFormat := 'hh:mm:ss';
end;
 
Procedure TFData.MemoGetText(Sender: TField; var Text: String; DisplayText: Boolean);
begin
  Text := Sender.AsString;
end;
A plus
BuzzLeclaire est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2012, 07h56   #3
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 217
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 4 217
Points : 7 284
Points : 7 284
Citation:
Envoyé par BuzzLeclaire Voir le message
Pour le rav, tu peux utiliser ceci

Code :
1
2
3
4
5
6
7
8
9
Procedure ...
Var
MyMemo : TRaveMemo;
begin
//...
    MyMemo:=TRaveMemo.Create(myPage);
    MyMemo.Parent:=MyBand;
//...
end;
Joli, mais .... non , là tu indiques un moyen de créer un rvMemo à l'exécution alors que Castorchaly l'a déjà dans son RaveReport .

Citation:
Pour cette partie @Sergio saura mieux t'aiguiller que moi
Souvenons nous que je ne suis pas un fan d'Access .
Bon première piste ACCESS , selon la version , ne pourrait-il pas être UNICODE ? contrairement a D2006 ?

La connexion avec Rave est faite comment :
par un rvDatasetConnection ou par un rvCustomConnection ?

Comme j'ai D2006 (mais pas access) , j'essaierai bien pour peu d'avoir une petite BDD
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2012, 00h22   #4
castorcharly
Membre habitué
 
Avatar de castorcharly
 
Homme
Chef de projet
Inscription : février 2009
Messages : 204
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 57

Informations professionnelles :
Activité : Chef de projet
Secteur : Biens de consommation

Informations forums :
Inscription : février 2009
Messages : 204
Points : 120
Points : 120
Désolé pour le temps de réponse,

Merci d'avoir pris le temps de répondre et donc effectivement il s'agit d'un DataMemo qui est posé sur une page. Le Rav est connecté via Database Connection sur ADO, dans Delphi je n'ai aucun composant, je crée un jeu d'object
RvProject : TRvProject;
RvSystem : TRvSystem;
Database : TRaveDatabase;

La base est créée avec un moteur Jet4.

Pour ce qui est de l'affichage des datas du mémo, dans une dbgrid, access ou autre, c'était juste pour signaler l'info wideMemo que je n'avais jamais vu...fuyant comme la peste ce type de base.

SergioMaster Je vais te préparer une petite base de test pour que tu puisses voir ce que ça donne...si ça marche chez toi je me pends avec ma souris.

P.S. J'ai fait un test avec XE2, version entreprise SVP, et rav 10, grosso modo même résultat sauf que ce n'est pas des carré mais du japonais que je vois à la fin de chaque memo !!!
J'avais fait cet essai en me disant que je pourrai faire une DLL sous XE2 en 32bit et bin nada.
castorcharly est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h25.


 
 
 
 
Partenaires

Hébergement Web