IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

[XE Berlin] Migration de MySQL vers SQLite : copier les structures de tables


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de der§en
    Homme Profil pro
    Bretagne
    Inscrit en
    Septembre 2005
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bretagne
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 082
    Par défaut [XE Berlin] Migration de MySQL vers SQLite : copier les structures de tables
    Bonjour,

    Je maîtrise la migration des données des tables de MySQL vers SQLite en utilisant l'excellent TFDBatchMove quand les structures des tables existent dans la base SQLITE, avec un TFDQuery de chaque côté.

    Mon problème est que j'aurais voulu créer de toute piéce une base Sqlite et du coup, je me trouve devant la question de comment recréer les structures.

    Avez-vous une idée ?

  2. #2
    Membre chevronné Avatar de der§en
    Homme Profil pro
    Bretagne
    Inscrit en
    Septembre 2005
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bretagne
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 082
    Par défaut
    J'ai bien fait une tentative avec TFDQuery.CopyDataset mais visiblement ce n'est pas la bonne approche…

    Une idée ?

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 619
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    sur d'autres SGBD, je me suis déjà posé la même question sans toutefois aller trop loin (faute de temps). La clé : métadonnées

  4. #4
    Membre chevronné Avatar de der§en
    Homme Profil pro
    Bretagne
    Inscrit en
    Septembre 2005
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bretagne
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 082
    Par défaut
    J'utilise déjà GetTableNames pour lister les tables, pour recréer les structures de tables je n'ai pas trouver de méthode exploitable hélas…

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 619
    Billets dans le blog
    65
    Par défaut
    Si tu as déjà trouvé GetTableNames alors tu as aussi trouvé GetFieldNames
    ensuite (théoriquement car j'en était rendu là) on peut obtenir les informations sur la colonne.
    Solution SQL :
    Reste (et quand je dit reste il y a du boulot ) à établir une correspondance type de champ de la source vers type de champ de la destination (dans une liste d'objets par exemple ?) et à partir de ça reconstruire la table
    Solution Code :
    AMHA, dans les sources de Firedac il y a déjà cette liste, une autre solution serait peut être de créer des tables vides puis d'utiliser la création de champs (j'utilise ce nom à dessein pour distinguer des colonnes SQL) et laisser Firedac gérer les équivalence de type. en fouillant du coté de FieldDefList coté source et FieldDefs.Add coté destination. Cela ne fera pas tout il y aura encore les index, les contraintes etc... mais c'est un début

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 934
    Billets dans le blog
    6
    Par défaut
    Dans les bases SQLite, on retrouve les requêtes créant les tables. Je ne connais pas MySQL et ne suis pas sûr que la même chose, bien pratique, existe.
    Pour SQLite : https://sqlite.org/fileformat2.html au 2.6 :
    The sqlite_master.sql column stores SQL text that describes the object. This SQL text is a CREATE TABLE, CREATE VIRTUAL TABLE, CREATE INDEX, CREATE VIEW, or CREATE TRIGGER statement that if evaluated against the database file when it is the main database of a database connection would recreate the object. The text is usually a copy of the original statement used to create the object but with normalizations applied so that the text conforms to the following rules:
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 619
    Billets dans le blog
    65
    Par défaut
    @Tourlourou
    Bonjour,
    je pense que tu n'as pas saisi le besoin : On a une base Mysql et on veut transférer son contenu dans une base créée (ou pas d'ailleurs), mais totalement vide (pas de table).
    L'objectif est donc de créer les tables et donc les colonnes de celle-ci à partir des éléments de la base MySQL. Le hic c'est que la syntaxe entre les deux SGBD n'étant pas forcément le même on court assez vite droit dans le mur en extrayant (avec un GUI quelconque) les métadonnées de la base source pour appliquer le script obtenu avec le SGBD cible. D'où le recours à Firedac et les métadonnées obtenues grâce à ces composants.

    @der§en
    j'ai retrouvé mes essais pour listé les colonnes via Firedac et un FDMetaInfoQuery (fdMetaInfoQuery.ObjectName:=<nom de la table>,fdMetaInfoQuery.metainfokind:=mkTableFields)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm8.FDMetaInfoQuery1FilterRecord(DataSet: TDataSet;
      var Accept: Boolean);
    var i : Integer;
        eAttr : TFDDataAttributes;
    begin
    i:=FDMetaInfoQuery1.FieldByName('COLUMN_ATTRIBUTES').asInteger;
    eAttr:=TFDDataAttributes(Pointer(@i)^);
    Accept:=not  (caCalculated in eattr);  // ne prend pas en compte les champs calculés 
    end;
    pour obtenir cela j'avais beaucoup fouillé dans le source Firec.Stan.intf. Je m'étais arrêté là en fait.
    Une question, car je n'ai jamais essayé :
    Citation Envoyé par der§en
    Je maîtrise la migration des données des tables de MySQL vers SQLite en utilisant l'excellent TFDBatchMove
    même les blobs ?

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/03/2007, 10h53
  2. Migration de Mysql vers Sql Server
    Par bluecurve dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 06/02/2007, 00h21
  3. Migration MySQL vers SQLite
    Par fadeninev dans le forum Outils
    Réponses: 14
    Dernier message: 24/11/2006, 09h25
  4. Re besoin de vous pour migration de mysql vers dsl server
    Par scaleo dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/11/2006, 13h45
  5. [SGBD] Migration de mysql vers PostgreSQL ?
    Par haffouff dans le forum SQL Procédural
    Réponses: 12
    Dernier message: 25/05/2006, 15h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo