Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Sauvegarder une table memoire en base

2 réponses
Avatar
Roumegou Eric
Bonsoir,
Demande peut-être bizarre mais ...

J'ai un programme qui est une sorte de générateur de requête et qui
pour cela passe par un affichage de 2 tables mémoires et d'un champs
texte multiligne.

Le remplissage de ces tables résulte des choix et manips de
l'utilisateur.
J'aimerais sauvegarder ces manips pour que l'utilisateur puisse les
modifier ou en créer de nouvelles (à partir de)

L'idéal serait de pouvoir sauvegarder ma table1 et ma table2 en base.
Dans un champs mémo par exemple. Et de pouvoir lire le fichier et de
recharger automatiquement ces tables.

Pas possible hein ?

faites moi une réponse à la SNCF svp lol


Bien sûr : je pourrais memoriser le déatil des colonnes sous un fmt xml
et le recharger ensuite. Mais j'aimerais bien un truc qui s'absoudrait
de la stucture de la table.

Merci de vos réponses.

2 réponses

Avatar
TLB
On 31 oct, 20:09, Roumegou Eric wrote:
Bonsoir,
Demande peut-être bizarre mais ...

J'ai un programme qui est une sorte de générateur de requête et qui
pour cela passe par un affichage de 2 tables mémoires et d'un champs
texte multiligne.

Le remplissage de ces tables résulte des choix et manips de
l'utilisateur.
J'aimerais sauvegarder ces manips pour que l'utilisateur puisse les
modifier ou en créer de nouvelles (à partir de)

L'idéal serait de pouvoir sauvegarder ma table1 et ma table2 en base.
Dans un champs mémo par exemple. Et de pouvoir lire le fichier et de
recharger automatiquement ces tables.

Pas possible hein ?

faites moi une réponse à la SNCF svp lol

Bien sûr : je pourrais memoriser le déatil des colonnes sous un fmt x ml
et le recharger ensuite. Mais j'aimerais bien un truc qui s'absoudrait
de la stucture de la table.

Merci de vos réponses.


D'abord, désolé mais je ne sais pas ce qu'est une réponse à la SNCF :)
contrairement au sandwich du même nom :)))

Deux possibilités selon moi par fichier texte, adaptation en mémo en
fin de message:
1) Créer un fichier et mettre les lignes de la table
maligne=matbletable[i] et insérer maligne ds le fichier
fEcritLigne(numfic, maligne). Ne pas oublier pour chaque table de
préciser le nombre de lignes à lire (matable..occurrence)
En lecture du fichier, récupérer la ligne (fLitLigne(numfic, maligne)
et ajouter la table (tableAjoute(matable, maligne)). Cette méthode est
simple mais à l'inconvénient de figer le programme.
Une simple modif et le fichier de sauvegarde ne sera plus compatible
ou alors il faut gérer les séparateurs tab.
2) Quitte à gérer les tab, autant le faire au début et utiliser les
fonctions IniEcrit() et IniLit() en structurant le fichier avec des
mots clés. Plus de code, mais plus fiable et plus souple et
maintenance plus facile. Cette méthode est complètement indépendante
de la structure de la table et vous permet même d'imprimer un source
de la requête compréhensible par l'utilisateur.
J'ai fait ce genre de travail en windev 5.5. Je peux vous envoyer un
fichier de requête construit sur ce principe.
Pour adapter et stocker ds des champs mémo, je ferais 2 champs mémo
par table. Le premier contiendrait le mot cle+tab+rc+num ordre
séparateur du deuxième memo. Les deux chaines se construisent donc en
même temps et sont insérées ds les mémos en fin de procédure. En
lecture il suffit de faire l'inverse. Lire ds une boucle tantque le
permier memo et chercher la donnée ds le deuxième par extraitchaine.
Je vous conseillerai d'éviter les séparateurs tab et rc ds les mémos
mais plutôt ESC et EOT qui n'ont aucune chance de se retrouver en
temps que données.
De cette manière vous êtes complètement indépendant de la structure
des tables et vous pouvez ajouter ou enlever des colonnes sans avoir à
revoir tt le code, gérer des num de version etc ...

En espérant vous avoir aidé.
Avatar
Roumegou Eric
TLB avait écrit le 31/10/2007 :
On 31 oct, 20:09, Roumegou Eric wrote:
Bonsoir,
Demande peut-être bizarre mais ...

J'ai un programme qui est une sorte de générateur de requête et qui
pour cela passe par un affichage de 2 tables mémoires et d'un champs
texte multiligne.

Le remplissage de ces tables résulte des choix et manips de
l'utilisateur.
J'aimerais sauvegarder ces manips pour que l'utilisateur puisse les
modifier ou en créer de nouvelles (à partir de)

L'idéal serait de pouvoir sauvegarder ma table1 et ma table2 en base.
Dans un champs mémo par exemple. Et de pouvoir lire le fichier et de
recharger automatiquement ces tables.

Pas possible hein ?

faites moi une réponse à la SNCF svp lol

Bien sûr : je pourrais memoriser le déatil des colonnes sous un fmt xml
et le recharger ensuite. Mais j'aimerais bien un truc qui s'absoudrait
de la stucture de la table.

Merci de vos réponses.


D'abord, désolé mais je ne sais pas ce qu'est une réponse à la SNCF :)
contrairement au sandwich du même nom :)))

Deux possibilités selon moi par fichier texte, adaptation en mémo en
fin de message:
1) Créer un fichier et mettre les lignes de la table
maligne=matbletable[i] et insérer maligne ds le fichier
fEcritLigne(numfic, maligne). Ne pas oublier pour chaque table de
préciser le nombre de lignes à lire (matable..occurrence)
En lecture du fichier, récupérer la ligne (fLitLigne(numfic, maligne)
et ajouter la table (tableAjoute(matable, maligne)). Cette méthode est
simple mais à l'inconvénient de figer le programme.
Une simple modif et le fichier de sauvegarde ne sera plus compatible
ou alors il faut gérer les séparateurs tab.
2) Quitte à gérer les tab, autant le faire au début et utiliser les
fonctions IniEcrit() et IniLit() en structurant le fichier avec des
mots clés. Plus de code, mais plus fiable et plus souple et
maintenance plus facile. Cette méthode est complètement indépendante
de la structure de la table et vous permet même d'imprimer un source
de la requête compréhensible par l'utilisateur.
J'ai fait ce genre de travail en windev 5.5. Je peux vous envoyer un
fichier de requête construit sur ce principe.
Pour adapter et stocker ds des champs mémo, je ferais 2 champs mémo
par table. Le premier contiendrait le mot cle+tab+rc+num ordre
séparateur du deuxième memo. Les deux chaines se construisent donc en
même temps et sont insérées ds les mémos en fin de procédure. En
lecture il suffit de faire l'inverse. Lire ds une boucle tantque le
permier memo et chercher la donnée ds le deuxième par extraitchaine.
Je vous conseillerai d'éviter les séparateurs tab et rc ds les mémos
mais plutôt ESC et EOT qui n'ont aucune chance de se retrouver en
temps que données.
De cette manière vous êtes complètement indépendant de la structure
des tables et vous pouvez ajouter ou enlever des colonnes sans avoir à
revoir tt le code, gérer des num de version etc ...

En espérant vous avoir aidé.



Merci beaucoup de ta réponse détaillée qui m'a orientée vers la
solution suivante : Sauvegarder les contenus des tables en XML.

avec le code suivant
wContent1,wContent2,wtable sont des chaînes
wContent1="";wContent2=""
cmd est une chaîne
wfic est une chaîne
wfic=ComplèteRep(gPrivateRep)+"ficwrk.xml"
TableVersXML(Table1,wfic,taAvecColonnesInvisibles+taSansXSL)
wContent1ühargeTexte(wfic)
TableVersXML(Table2,wfic,taAvecColonnesInvisibles+taSansXSL)
wContent2ühargeTexte(wfic)
SELON ENTITE
CAS 1 : wtable="PEOPLE"
CAS 2 : wtable="PEOPLE_RESULT"
CAS 3 : wtable="PEOPLE_BANK"
AUTRE CAS

FIN
// sauvegarde en base.
cmd="INSERT INTO REQFAVORI
(OPE_ID,FAV_TABLE,FAV_DESC,FAV_COMM,DATE_CREAT,LOGIN_CREAT,SRC_CREAT,FAV_TYPE,LVL_ID,FAV_TABLE1,FAV_TABLE2)
VALUE("+...
gOpe_Id+","+...
Quote(wtable)+","+...
Quote(FAV_DESC)+","+...
Quote(REQU)+","+...
DateSGBD(DateSys(),cToSGBD)+","+...
Quote(gUser)+","+...
Quote(MaFenêtre..Nom)+","+...
2+","+...
LVL_ID+","+...
Quote(wContent1)+","+...
Quote(wContent2)+")"

ExecInsert(cmd)

Cela me fait qq chose de bien propre, me reste plus qu'a développer la
restitution du xml en table.

Merci encore.