Ajouter des QRDBText [Résolu]

CharlEm80 66 Messages postés vendredi 1 septembre 2006Date d'inscription 1 août 2012 Dernière intervention - 19 avril 2012 à 15:00 - Dernière réponse : CharlEm80 66 Messages postés vendredi 1 septembre 2006Date d'inscription 1 août 2012 Dernière intervention
- 26 avril 2012 à 13:18
Bonjour,

Pas de chance pour moi, je dois reprendre le code d'un type qui est parti de ma boite dans un langage que je n'ai jamais vu/étudié/pratiqué : Delphi5.

Le projet est un petit programme dans lequel on encode des médicaments et une liste s'imprime. Je dois "juste" ajouter un champ d'une table DBase sur ce rapport.

J'ai trouvé une Form qui est un rapport à imprimer avec des Headers, Detail, Sub Detail. Je vois que les autres champs DB sont des objets QRDBText.
J'ai vu un barre d'onglet tout en haut de l'interface Delphi nommé QReport, j'ai pris là dedans des QRDBText que j'ai placé sur mon rapport. Puis j'ai vu dans l'Object Inspector les properties DataSet et DataField que j'ai rempli avec les champs qu'on me demandait d'ajouter au rapport.

Mais quand je test le programme, les zones que j'ai ajoutées restent à blanc par contre tout ce qui s'affichait continue à fonctionner ouf. Donc je suppose qu'il faut initialiser ou garnir les QRDBText mais comment? Il doit y avoir du code source quelque part qui fait ça?

Quand je vais dans VIEW --> FORMS et que je choisi Form4 (c'est celle dont je vous parle), j'ai en même temps un fichier Unit8.pas qui s'ouvre. Ce fichier contient un peu de code mais là je suis paumé de chez paumé et j'aurais besoin de votre avis.

Merci d'avance

unit Unit8;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
QuickRpt, Qrctrls, Db, DBTables, ExtCtrls,IniFiles, StdCtrls, Mask,
DBCtrls;

type
TForm4 = class(TForm)
QuickRep1: TQuickRep;
DataSource1: TDataSource;
Table1: TTable;
DataSource2: TDataSource;
Table2: TTable;
ColumnHeaderBand1: TQRBand;
DetailBand1: TQRBand;
QRDBText1: TQRDBText;
QRBand1: TQRBand;
QRLabel1: TQRLabel;
QRSysData1: TQRSysData;
QRLabel2: TQRLabel;
QRLabel3: TQRLabel;
QRSubDetail1: TQRSubDetail;
QRDBText2: TQRDBText;
QRDBText3: TQRDBText;
QRDBText4: TQRDBText;
QRDBText5: TQRDBText;
QRDBText6: TQRDBText;
QRDBText7: TQRDBText;
QRDBText8: TQRDBText;
procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
index_voulu:longint;
{ Public declarations }
end;

var
Form4: TForm4;

implementation

{$R *.DFM}

procedure TForm4.FormActivate(Sender: TObject);

begin
table2.filter:='Index='+inttostr(index_voulu);
table2.filtered:=true;
end;

procedure TForm4.FormCreate(Sender: TObject);
var zO_FichierIni:Tinifile;
zS_Service:Char;
begin
zO_FichierIni := Tinifile.Create(ExtractFilePath(Application.ExeName)+'USI.ini');
{Lecture dans fichier ini}
zS_Service := zO_FichierIni.ReadString('USI_PARAMETRES','Unit','')[1];
zO_FichierIni.free;
if UpCase(zS_Service)<>'' then
Qrlabel1.caption:='Relevé contradictoire des quantités de stupéfiants en stock - Service ' + zS_Service
else
Qrlabel1.caption:='Relevé contradictoire des quantités de stupéfiants en stock - ERREUR SERVICE';
end;

end.
Afficher la suite 

5 réponses

Répondre au sujet
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 20 avril 2012 à 10:17
+3
Utile
Salut,

dans le BeforePrint de la bande detail (ou SubDetail), il faut que tu positionnes ta nouvelle table sur le bon enregistrement (qui va alimenter les qrDBTexts).

Pour cela, tu as les
- TTable.Locate() qui fonctionne sans index
- TTable.FindKey() qui fonctionne avec un index

Une autre alternative, est de mettre cette nouvelle table en Master/Detail (proprietes MasterSource et MasterFields je crois).
A+



Composants Cindy pour Delphi
Faites une donation.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_MAURICIO
CharlEm80 66 Messages postés vendredi 1 septembre 2006Date d'inscription 1 août 2012 Dernière intervention - 26 avril 2012 à 13:18
+3
Utile
Chroniques du jour :

J'ai trouvé, il faut faire ceci :
CREATE INDEX ICodeNum ON 'MEDIC.DBF' (CodeNum)

Et fermer le projet avant car dBaseIII+ n'arrête pas dire table busy sinon (alors que Paradox l'accepte ... pas terrible comme évolution )

J'espère que ça pourra servir à quelqu'un un jour qui sait.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de CharlEm80
CharlEm80 66 Messages postés vendredi 1 septembre 2006Date d'inscription 1 août 2012 Dernière intervention - 19 avril 2012 à 16:36
0
Utile
J'ai trouvé que les données de table1 (TTable) et datasource1 (TDataSource) ne pointent pas le DBF que je voulais.

Du coup j'ai ajouté un table3 (TTable) et datasource3 (TDataSource) pour aller chercher le bon DBF.

Maintenant reblocked car comment faire pour relier les PK des deux TDataSource?
Commenter la réponse de CharlEm80
CharlEm80 66 Messages postés vendredi 1 septembre 2006Date d'inscription 1 août 2012 Dernière intervention - 25 avril 2012 à 14:45
0
Utile
Huuuum bien ça, j'avance merci.

J'ai refait un petit schéma de la DB (merci DB-Main) et trouvé les relations dont j'ai besoin. Petit hic je peux remplir MasterSource mais pas MasterFields : tout est grisé.

Mais j'ai découvert une zone fort intéressante dans Database -> Explore.
Ça me montre le schéma sur lequel je travail, mes tables (qui sont des fichiers DB et DBF) et pour chaque table j'ai la liste de fields, indices, ... .

Les tables qui sont déjà reliées entre elles par des MasterFields ont des clés étrangères dans la section "indices". Pas de bol, la table que je dois utiliser pour ajouter les détails à mon Etat n'a rien dans la section "indices" ce qui explique que tout est grisé dans MasterFields à mon avis.
Comment faire pour ajouter des indices, visiblement ça ne se fait pas par l'interface graphique ou alors je n’ai pas compris
Commenter la réponse de CharlEm80
CharlEm80 66 Messages postés vendredi 1 septembre 2006Date d'inscription 1 août 2012 Dernière intervention - 26 avril 2012 à 11:27
0
Utile
Quelques précisions, j'ai des fichiers DB et DBF dans mon projet.

J'ai trouvé ceci:
[list]
les fichiers DB sont des Paradox 5.0, clustered
les fichiers DBF sont des dBaseIII+
/list

Je suis parvenu à créer un indice sur une table/fichier Paradox 5.0
CREATE INDEX IIntitule ON EVENTS (Intitule)
mais j'ai besoin de pouvoir relier un MasterField sur une table dBaseIII+ et là ce n'est pas la même commande et je galère pour trouver des infos.

Si je fais la même chose que pour une table Paradox,
CREATE INDEX ICodeNum ON MEDIC (CodeNum)
j'ai :
Table does not exist.
File or directory does not exist.
File: F:\Db\MEDIC.DB
> le fichier existe bien à cet endroit mais est nommé DBF ce qui me fait penser que cette commande ne fonctionne qu'avec les tables Paradox qui sont en DB.

Toute idée est la bienvenue

Merci d'avance
Commenter la réponse de CharlEm80

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.