■
Principe.
-Ouvrir la base de données Source #Database1
-Créer un alias de la base de données Cible #Database2.
Exemple :
ReqSql = "ATTACH DATABASE 'Database2.db' AS database2"
Copier Table de Source vers Table de Cible après suppression des enregistrement de Table de Cible.
Exemple :
ReqSql = "Delete FROM database2.produits; INSERT INTO database2.produits SELECT * FROM produits"
Fermer la base de données Source.
■
En pratique avec ce petit exemple.
- Création des deux bases de données pour l'exemples (Une source et une cible).
Code : Tout sélectionner
Enumeration
#DataBase1
#Database2
EndEnumeration
If CreateFile(#DataBase1, "Database1.db") : CloseFile(#DataBase1) : EndIf
If CreateFile(#DataBase2, "Database2.db") : CloseFile(#DataBase2) : EndIf
UseSQLiteDatabase()
Global ReqSql.s
;1 - Création de la base de données #DataBase1
OpenDatabase(#DataBase1, "Database1.db", "", "", #PB_Database_SQLite)
;Creation de la table produits (trés simplifié)
ReqSql = "CREATE TABLE produits ("
ReqSql + "idauto INTEGER PRIMARY KEY," ;Identification auto
ReqSql + "nom TEXTE," ;Nom du produit
ReqSql + "pu INTEGER" ;Prix unitaire
ReqSql + ");"
DatabaseUpdate(#DataBase1, ReqSql)
;Ajout de deux produits
ReqSql = "INSERT INTO produits (nom, pu) values ("
ReqSql + Chr(34) + "Règle" + Chr(34)+Chr(44) ;Nom du produit
ReqSql + Chr(34) + 10 + Chr(34)+")" ;Montant
DatabaseUpdate(#Database1, ReqSql)
ReqSql = "INSERT INTO produits (nom, pu) values ("
ReqSql + Chr(34) + "Poêle" + Chr(34)+Chr(44) ;Nom du produit
ReqSql + Chr(34) + 9 + Chr(34)+")" ;Montant
DatabaseUpdate(#Database1, ReqSql)
;2 - Création de la base de données #DataBase2
OpenDatabase(#DataBase2, "Database2.db", "", "", #PB_Database_SQLite)
;Creation de la table produits (trés simplifié)
ReqSql = "CREATE TABLE produits ("
ReqSql + "idauto INTEGER PRIMARY KEY," ;Identification auto
ReqSql + "nom TEXTE," ;Nom du produit
ReqSql + "pu INTEGER" ;Prix unitaire
ReqSql + ");"
DatabaseUpdate(#DataBase2, ReqSql)
CloseDatabase(#DataBase1)
CloseDatabase(#Database2)
Pas grand chose à dire. On crée une base source et une base cible ayant le même schéma structurel.
■
Attaquons le vif du sujet avec ce code suffisamment commenté en deux parties.
- Première partie : Copie de la table produits de la base #Database1 vers la table produits de la base #Database2
- Deuxième partie : Debug de la table produits de la base #Database2
Code : Tout sélectionner
Enumeration
#DataBase1
#Database2
EndEnumeration
Define.s ReqSql
UseSQLiteDatabase()
;Ouverture de la base de données #DataBase1
OpenDatabase(#DataBase1, "Database1.db", "", "", #PB_Database_SQLite)
;Ajouter un alias à #DataBase2
ReqSql = "ATTACH DATABASE 'Database2.db' AS database2"
DatabaseUpdate(#DataBase1, ReqSql)
;Copie de la table produit de #Database1 to #Database2
ReqSql = "Delete FROM database2.produits; INSERT INTO database2.produits SELECT * FROM produits"
DatabaseUpdate(#DataBase1, ReqSql)
Debug DatabaseError()
CloseDatabase(#DataBase1)
;Vérification : Liste des produits base de donnée #Database2
OpenDatabase(#DataBase2, "Database2.db", "", "", #PB_Database_SQLite)
ReqSql = "SELECT idauto, nom, pu FROM produits"
DatabaseQuery(#Database2, ReqSql)
Debug "Liste produits #database2"
While NextDatabaseRow(#Database2)
Debug "Id " + GetDatabaseLong(#Database2, 0) + " Produit : " + GetDatabaseString(#Database2, 1) + " P.U. : " + Str(GetDatabaseLong(#Database2, 2))
Wend
CloseDatabase(#DataBase2)
Tu peux lancer ce deuxième code plusieurs fois de suite, les identifiant auto sont bien les mêmes.
■
Pour finir.Omega a écrit :je souhaiterais le faire en utilisant une commande SQL (2 ou 3 lignes...) je sais que c'est possible mais je ne connais pas la syntaxe.
Delete FROM AliasDatabaseCible.table; INSERT INTO AliasDatabaseCible.produits SELECT * FROM table
On indique pas l'alias de la base de données source car elle est déja ouverte.