Pb avec le netfiledir d'un Tsession

Signaler
Messages postés
15
Date d'inscription
vendredi 1 mars 2002
Statut
Membre
Dernière intervention
28 juin 2002
-
Messages postés
15
Date d'inscription
vendredi 1 mars 2002
Statut
Membre
Dernière intervention
28 juin 2002
-
Bonjour,

j'ai spécifié le chemin pour le fichier de partage (PDOXUSRS.NET) dans le netfiledir d'un Tsession.
Au 1er accès bases le fichier est crée à l'endroit spécifié mais au 2ème accès il me crée le fichier une fois à l'endroit spécifié + (et c'est là le pb!!) une fois dans le chemin du net dir spécifié pour paradox dans le bde!!
il faut que je trouve une solution sans modifier la config du bde.

Merci d'avance,

Mikael

8 réponses

Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
La première fois, est-ce que tu crées l'alias dynamiqement au niveau de l'application puis tu le sauvegardes de manière permanente dans idapi.cfg ?
Ou alors, aurais-tu des tables qui utilisent un alias donné puis d'autres tables utilisant un autre alias pointant sur le même dossier de ton disque avec les 2 alias d'ortographe très voisine ?
Messages postés
15
Date d'inscription
vendredi 1 mars 2002
Statut
Membre
Dernière intervention
28 juin 2002

J'ai essayé les 2 manières! (en dur et dynamique)
C'est en accedant 2 fois a la même base avec le meme code.

Tu peux reproduire ce pb avec un Tsession et un Ttable et 3 ligne de codes.

Cordialement

Mikael
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Aurais-tu lancé plusieurs instances de ton application ?
Utilises-tu un composant TDataBase ?
Messages postés
15
Date d'inscription
vendredi 1 mars 2002
Statut
Membre
Dernière intervention
28 juin 2002

Pas deTdatabase.
Un Tsession, un Ttable.(tout ca a une base paradox)
Tu poses un bouton :
Session1.AutoSessionName:=true;
Session1.NetFileDir:='d:\';
Session1.PrivateDir:='d:\';
Session1.Active:=true;
Table1.Active:=true;
session1.Active:=false;
table1.Active:=false;
table1.Close;

Une seule instance de ton application.
La premiere fois que tu cliques le fichier se crée sur D (tu l'effaces) et au 2ème clique il s'en crée 1 sur D et 1 sur C !!
Malheureusement on n'a pas les sources du bde.pas.

Mikael
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Il manque :
Table1.SessionName:= Session1.SessionName;

En effet, à quoi celà servirait-il de mettre un composant session pour ne pas l'utiliser; résultat, deux sessions pointent sur le même répertoire.
Explication : par défaut, Delphi crée un objet Session par défaut et qui utilise la base de données déclarée dans Table1.DataBaseName.
Puis, dans ton code, tu déclares un eutre objet Session pointant sur le même dossier, il y a donc conflit.
Avant d'ouvrir la table Table1, affectes lui la session que tu viens d'ouvrir quelques lignes auparavant.
Sinon, utilises l'objet Session créé par défaut avec Delphi si tu n'as pas d'utilisation particulière à faire avec ce type de composant.
En résumé :
Session1.AutoSessionName:=true;
Session1.NetFileDir:='c:\';
Session1.PrivateDir:='c:\';
Session1.Active:=true;
Table1.SessionName:=Session1.SessionName;
Table1.Active: =true;
session1.Active:=false;
table1.Active:=false;
table1.Close;

A+
Messages postés
15
Date d'inscription
vendredi 1 mars 2002
Statut
Membre
Dernière intervention
28 juin 2002

Tout d'abord merci beaucoup du mal que tu te donnes.
Je lis ce mesage sur un poste qui n'a pas delphi donc je ne peux essayer.
Cette ligne de code je l'avais pas mis car je l'avait renseigné dans l'inspecteur d'objet.
As-tu essayer??

Merci,

Mikael
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Le composant TSession que tu déposes sur la fiche est-il actif au démarrage de l'appli ?
Si oui, effectivement, tu plantes. Par défaut, le fichier pdoxusrs.net est créé sur C:. Or tu ne fermes pas la session avant avant de lui affecter d'autres valeurs. Le code devient donc :

Session1.Close;
Session1.AutoSessionName:= true;
Session1.NetFileDir:='D:\';
Session1.PrivateDir:='D:\';
Session1.Active:=true;
Table1.SessionName:=Session1.SessionName;
Table1.Active:=true;
table1.Active:=false;
session1.Active: =false;
//table1.Close;

Pour être plus clean, je te recommande de fermer la table Table1 avant de fermer la session...
Notes bien aussi que :
Table1.Active := False
est strictement équivalent à :
Table1.Close
Il est donc inutile d'effectuer DEUX fois le même opération.
Messages postés
15
Date d'inscription
vendredi 1 mars 2002
Statut
Membre
Dernière intervention
28 juin 2002

Salut,

Le Tsession n'est pas actif au démarrage et d'ailleurs je l'active par code.
Si tu as essayé ton code tu t'apercevras que la première fois il le crée sur D et la 2ème sur les C et D.
Merci quand même,

Mikael