Transfert d'une BD de Access vers SQLite en utilisant Excel

Bonjour à tous !

Je sollicite votre aide pour un problème qui dépasse mes (maigres !) compétences Excel/Access et qui concerne la migration d’une base de données Access vers SQLite.

Cette base de données recense les appareils photo du marché avec leurs principales caractéristiques techniques. Elle comporte plusieurs tables dont une principale (nommée « Base ») comportant elle-même de nombreuses colonnes renseignant les caractéristiques desdits appareil, certaines avec des valeurs multiples. Ainsi, la colonne « Image_Size » de cette table « Base » recense l’ensemble des tailles d’images que peut réaliser un appareil photo, renseignées par le biais d’une table secondaire recensant toutes les tailles d’images existantes.

Cette colonne apparaît donc sous Access par des valeurs séparées par des points-virgules.

En aparté, pour travailler sur ma base de données version SQLite j’utilise DB Browser qui me paraît simple et ergonomique, avec une fonction import de table depuis un fichier CSV.

Je dois donc au préalable exporter la partie concernée de ma table Access en CSV (ce que ne propose pas en passant le système d’export d’Access, mais c’est un détail que je contourne en exportant en xlsx et en convertissant après).

Or, comme SQL n’accepte pas les champs à valeurs multiples, je dois « découpler » toutes ces valeurs pour chaque ligne d’appareil pour me retrouver dans SQLite avec une table intermédiaire/jointure faisant la jonction entre la table importée recensant toutes les tailles possibles d’images (facile, car un champ = une valeur) et la table « Base » sous SQLite (qui correspond grosso modo à la table « Base » sous Access).

Bref, l’import en CSV dans DB Browser est facile, à condition que le CSV soit bien formaté au départ et c’est là que les ennuis commencent, en particulier pour cette fameuse table intermédiaire/jointure.

Je me retrouve avec, dans mon fichier xlsx, mes trois colonnes : « ID SQLite» identifiant l’appareil dans la BD SQLite, « ID Access » identifiant l’appareil dans la BD Access et « ImageSize » regroupant sur une colonne toutes les valeurs possibles séparées par des points-virgules.

Pour plus de lisibilité, j’ai mis en 1 un extrait de ce fichier.

Je voudrais arriver au résultat suivant : une ligne par taille d’image possible pour chaque appareil, pour importer le tout facilement ensuite dans DB Browser. J’ai fait manuellement quelques lignes, dans le fichier 2. La colonne « ID Access » répétera autant de fois son identifiant qu’il y a de taille d’image. On aura donc par exemple répété 4 fois l’identifiant 1 puisqu’il y a 4 tailles d’images possibles pour l’appareil auquel cet identifiant renvoie.

Un détail qui a son importance : je ne peux pas changer le format qui doit rester sous la forme Lxl avec L= Longueur de l’image et l= largeur de l’image, car cette base de données est ensuite exploitée par un logiciel écrit en C++ et qui a déjà ses jointures formées depuis longtemps et qui sont très complexes à modifier, en tous les cas plus complexes que pour mes tables!

Une formule Excel est-elle envisageable pour transposer le fichier 1 en fichier 2?

Merci d’avance pour vos lumières !

111.xlsx (9.68 Ko)
102.xlsx (10.47 Ko)

Bonsoir à tous !

Je pense que Power Query va devenir votre ami :

30onzeaout.xlsx (27.01 Ko)

Bonjour à tous

Access exporte en txt avec des possibilités de paramétrage donc il ne reste qu'à changer l'extension.

Tous ceux qui savent se servir d'une BD ont trouvé débile que Microsoft implémente les champs multivalués dans Access et ne l'ont pas utilisé...

Il ne faut surtout pas créer une ligne par taille d'image, encore moins une colonne, mais créer une table secondaire en relation 1 à N avec la table principale en respectant les règles des bases de données relationnelles.

Utiliser PowerQuery en traitant directement la table Access sans l'importer dans un onglet mais a priori peut être fait directement par requête Access, donc passer par Excel

Voir si SQLite accepte les clés multivaluées comme ID appareil/ID taille pour la création de la table secondaire qui doit faire le lien entre table principale et table des tailles

Quelle est ta version Office ?

Merci à vous deux pour vos réponses.

Je ne connais pas du tout PowerQuery, mais quand je vois le temps "infinitésimal" qu'il a fallu à JFL pour me convertir ma table, je ne me sens pas de passer des heures à apprendre le fonctionnement de PowerQuery juste pour un problème ponctuel qui ne se reproduira jamais (on ne migre pas tout les jours d'Access à SQLite), mais je peux changer d'avis si ce n'est pas trop complexe :)

Pour te répondre 78chris, dans SQLite, c'est comme ça que j'ai fait, avec des tables secondaires faisant la jonction entre la table principale et celle des tailles d'images. J'ai testé avec d'autres paramètres multivaleurs (débit de trames par exemple pour les vidéos) et ça fonctionne au poil.

Ma version d'Office est Pro plus 2016.

Le fichier intégral des tailles d'images ci-joint.

Merci encore!

Bonjour à tous !

Je vous livre votre fichier transformé via Power Query.

J'ai laissé les éléments vides (ex IDAccess 53). Cela peut se corriger si besoin est.

6onzeaout-v2.xlsx (171.77 Ko)

Bonjour à tous

Dans Acess il suffit de créer la requête suivante qui évite d'utiliser inutilement Excel et PowerQuery

SELECT Data.IDSqlite, Data.IDAccess, Data.ImageSize.Value AS ImageSize INTO destination
FROM Data;

En adaptant les noms des tables Sources et Destination

Exporter ensuite en Txt en paramétrant séparateurs et autres et modifier l'extension du fichier exporté en .csv

Bonsoir et merci pour votre aide avec la requête dans Access et pour le fichier converti avec Power Query.

Sauf que... comme un idiot, je me suis trompé dans l'attribution des valeurs de la colonne "ImageSize", qui, bien entendu, ne doit pas être la valeur elle-même (puisque nous traitons bien une table secondaire faisant le lien entre la table principale "Base" et la table des tailles d'images "Size") comme l'a bien vu 78chris), mais bien l'identifiant renvoyant à la table "Size" recensant toutes les tailles d'images possibles. Par exemple, pour la première ligne, 2784x1856 correspond à l'ID 1.

Je vous joint donc la table "Size" en question en csv.

6size.csv (8.98 Ko)

RE

Joins plutôt un fichier access...

Bonsoir à tous !

Comme ceci ?

6onzeaout-v3.xlsx (36.05 Ko)

Avez-vous testé la proposition de 78chris de passer directement via Access ?

Désolé le fichier csv précédent comportait des erreurs, voilà le bon. Vous êtes super rapides!!

@►78chris: un fichier access, tu veux dire l'ensemble de ma base?

1size.csv (10.80 Ko)

@JLF: merci pour votre patience!

Non, je n'ai pas encore testé, mais lorsque cette dernière table sera convertie et intégrée à ma nouvelle base SQL, je pourrais définitivement me passer de celle sous Access; je n'ai plus que cela à intégrer.

Et hop !

3onzeaout-v3.xlsx (37.06 Ko)

Merci JBL, mais ce n’est pas encore le résultat escompté. En effet, comme je le disais, mon objectif est de créer une table secondaire de jonction qui fait le lien entre la table principale et celle rassemblant toutes les tailles possibles d’images (table « Size ») envoyée dans mon message précédent.

Cette jonction se fait par les ID, donc je dois avoir trois colonnes :

  • IDSqlite pour l’ID de cette table en SQL, en incrémentation automatique de 1
  • IDAccess pour l’ID de l’ancienne base sous Access qui sert de référence pour ma table principale sous SQL
  • ImageSize (mais j’aurais dû la nommer IDImageSize pour être plus cohérent) pour l’ID correspondant à celui de la table « Size »

Donc le fichier que tu m’as généré avec Power Query « onzeaout-v2 » est parfait, sauf que pour la troisième colonne, on ne doit pas avoir les tailles d’images écrites en clair, mais l’ID correspondant à ces tailles d’images en liaison avec la table « Size ».

Je joins le fichier onzeaout-v2.2 avec dans l’onglet Power Query les trois colonnes ainsi formatées en exemple sur les 20 premiers enregistrements.

Merci encore infiniment pour votre aide à tous les deux

2onzeaout-v2-2.xlsx (166.19 Ko)

Bonjour à tous !

Voici la version 4 .....établie à partir de la version 2 mais en tenant compte de votre dernier fichier size.csv

5onzeaout-v4.xlsx (171.21 Ko)

Bonjour à tous et merci JFL,

Tout fonctionne parfaitement dans ma nouvelle BD SQL, grâce à ce dernier fichier et à votre aide précieuse.

Sujet résolu

bonsoir,

je ne sais pas si c'est toujours d'actualité mais bon!

21accestosqlite.xlsm (34.14 Ko)
Rechercher des sujets similaires à "transfert access sqlite utilisant"