lumnik. / scenarios All scenarios · Français

Progress, FoxPro, Access: three dinosaurs, one machine register

Goal Read three workshops' machine registers as their old databases export them, without touching a file, and bring them together in one register.

An industrial group has three workshops, and each keeps its machines in its own desktop database, installed twenty or thirty years ago.

export
nord/machines.d (Progress EXPORT, ISO-8859-1):
export
"M-1101" "Presse hydraulique 250 t" 04/02/87 10/02/26 yes 18500.00 "Joint de vérin remplacé"
export
"M-1102" "Tour ""Cazeneuve"" HB 500" 09/17/79 03/11/26 no 4200.00 ""
export
"M-1103" "Centre d'usinage 5 axes" 03/14/19 09/24/26 yes 212000.00 "Broche révisée.
export
Prévoir le changement des courroies en 2027."
export
est/MACHINES.TXT (FoxPro COPY TO DELIMITED, CP850):
export
"M-2201","Fraiseuse Huré",19830208,20260819,T,6500.00
export
"M-2202","Perceuse à colonne",19980601,,F,900.00
export
"M-2203","Rectifieuse plane Géibel",20021014,20260402,T,21000.00
export
sud/Machines.txt (Access text export, windows-1252):
export
"Machine";"Libellé";"Achat";"Révision";"Contrat";"Valeur";"Notes"
export
"M-3301";"Plieuse Amada 100 t";09/07/2012 00:00:00;15/07/2026 00:00:00;-1;47000,00;"RAS"
export
"M-3302";"Scie à ruban";01/06/1998 00:00:00;;0;2300,00;""

evidence: replay.log, sources.txt, nord.txt, runs-est.txt, dlq-est.txt, est-guessed.txt, est-cp850.txt, sud.txt, sud-types.txt, conflicts.txt, parc.txt · transform v1

machines.d
"M-1101" "Presse hydraulique 250 t" 04/02/87 10/02/26 yes 18500.00 "Joint de vérin remplacé"
"M-1102" "Tour ""Cazeneuve"" HB 500" 09/17/79 03/11/26 no 4200.00 ""
"M-1103" "Centre d'usinage 5 axes" 03/14/19 09/24/26 yes 212000.00 "Broche révisée.
Prévoir le changement des courroies en 2027."
"M-1104" "Cisaille guillotine 3 m" 06/01/04 ? ? 9800.00 "Reçue d'un autre site, sans carnet"
"M-1105" "Poinçonneuse CN" 01/20/11 06/30/26 yes 64000.00 ""
"M-1106" "Pont roulant 5 t" 11/05/96 05/06/26 yes 15000.00 "Contrôle VGP annuel"
manifests/20-est-foxpro.yaml
apiVersion: connectors.lumnik.io/v1kind: Connectormetadata:  name: scenario-legacy-est-a  connector_type: csv-file  scopes: [maintenance-a]spec:  transport:    kind: local    path: /tmp/lumnik-scenario/legacy-desktop-exports/a/est/MACHINES.TXT   # FoxPro 2.6 for DOS, COPY TO DELIMITED  parser:    delimiter: ","    has_header: false    columns: [machine, label, bought, serviced, contract, value]  after_process: none  mapping:    cell:      - parse-date: { column: bought, formats: [yyyyMMdd] }      - parse-date: { column: serviced, formats: [yyyyMMdd] }      - parse-boolean: { column: contract }      - parse-number: { column: value }
manifests/21-est-foxpro-cp850.yaml
apiVersion: connectors.lumnik.io/v1kind: Connectormetadata:  name: scenario-legacy-est-a  connector_type: csv-file  scopes: [maintenance-a]spec:  transport:    kind: local    path: /tmp/lumnik-scenario/legacy-desktop-exports/a/est/MACHINES.TXT   # FoxPro 2.6 for DOS, COPY TO DELIMITED  parser:    delimiter: ","    encoding: IBM850                       # the DOS code page, declared    has_header: false    columns: [machine, label, bought, serviced, contract, value]  after_process: none  mapping:    cell:      - parse-date: { column: bought, formats: [yyyyMMdd] }      - parse-date: { column: serviced, formats: [yyyyMMdd] }      - parse-boolean: { column: contract }      - parse-number: { column: value }
Machines.txt
"Machine";"Libellé";"Achat";"Révision";"Contrat";"Valeur";"Notes"
"M-3301";"Plieuse Amada 100 t";09/07/2012 00:00:00;15/07/2026 00:00:00;-1;47000,00;"RAS"
"M-3302";"Scie à ruban";01/06/1998 00:00:00;;0;2300,00;""
"M-3303";"Tour CN Mazak";21/02/2017 00:00:00;08/10/2026 00:00:00;-1;88000,00;"Bruit de roulement côté moteur à chaud, au-delà de 40 minutes de marche. Le technicien a relevé une vibration de 7,1 mm/s au palier arrière, contre 2,8 à la réception de la machine. Roulement commandé chez le fabricant, délai annoncé de six semaines; en a"
"M-3304";"Soudeuse par points";12/04/2001 00:00:00;20/01/2026 00:00:00;0;3500,00;"Électrodes changées.
Pince réglée à 3 kN."
"M-3305";"Compresseur à vis 15 kW";01/10/2009 00:00:00;30/09/2026 00:00:00;-1;12000,00;""
"M-2206";"Rectifieuse cylindrique";03/03/2008 00:00:00;18/09/2026 00:00:00;-1;54000,00;"Arrivée de l'atelier Est en 2025"
manifests/40-machine.yaml
kind: Entityname: ScenarioMachineAdescription: "One machine of the group, as the register of its workshop holds it: Progress at Nord, FoxPro at Est, Access at Sud."scopes: [maintenance-a]sources:  - table: t_scenario_legacy_nord_a    map: { machine: machine, label: label, bought: bought, serviced: serviced, contract: contract, value: value, notes: notes }  - table: t_scenario_legacy_est_a    map: { machine: machine, label: label, bought: bought, serviced: serviced, contract: contract, value: value }  - table: t_scenario_legacy_sud_a    map: { Machine: machine, Libellé: label, Achat: bought, Révision: serviced, Contrat: contract, Valeur: value, Notes: notes }match: [machine]

Limits

  • A memo cut at the source does not show: Access cuts a memo at 255 characters on export (M-3303), FoxPro COPY TO does not export memos. The hub reads what it receives.
  • A guessed code page stays a guess: the hub flags a file that looks like a DOS page read as windows-1252, not every encoding error.
  • After a wrong encoding, the file is read again with lm endpoint reset-cursor; the connector does not read it again on its own.
  • The hub has no jdbc-generic dialect for Progress, FoxPro or Access: only their exports are read.
  • lm entity get's table shifts on a memo over several lines (#1889); the page shows the register through SQL.
  • Machines, dates and values synthetic; the export formats are reproduced, not produced by the software itself.

Maintenance · three workshops

Three workshops, three old databases.

Progress at Nord, FoxPro for DOS at Est, Access at Sud. None will be migrated.

machines.d · MACHINES.TXT · Machines.txt

The problem

FoxPro writes CP850. The hub guessed windows-1252.

  • Huré became Hur‚, without a word.
  • The É of "Électroérosion" stopped the file at line 0.

What is not changed

The three databases stay as they are.

  • Their exports are the ones they can make.
  • No file edited, no ODBC driver.

What had to be written

encoding: IBM850

One line in the FoxPro connector.

  • Then lm endpoint reset-cursor.
  • Est's six machines, accents right.

What was fixed

A guessed encoding is said (#1885).

  • A byte with no character is named, with its line (#1887).
  • 17 machines, one dispute: M-2206.

Try it

The scenario replays locally.

Every step is published with its output.

This scenario runs on lumnik Open, free and open source.

Try lumnik Open →