[Résolu] passer une BdD access sous OOo Base

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
Yaone
Membre OOrganisé
Membre OOrganisé
Messages : 94
Inscription : 04 avr. 2006 13:48

[Résolu] passer une BdD access sous OOo Base

Message par Yaone »

Bonjour,

La question a sûrement du déjà être posée maintes fois mais je n'ai pas vraiment trouvé mon bonheur. Je ne sais pas non plus si c'est possible.

Pour un projet d'entreprise, je dois pouvoir passer une base de données access quelconque (enfin, elle a toujours la même structure) sous openoffice pour qu'elle puisse être utilisée. En sachant que j'ai déjà créé une base sous openoffice avec des formulaires et des requêtes.
Est-il possible de faire passer les tables avec les données sur cette base OpenOffice déjà faite ? (je sais que faire la connexion sur access ne marche pas, enfin, les requêtes qui ont des liaisons plantent)

Merci d'avance pour votre aide.
Dernière modification par Yaone le 30 mai 2006 09:53, modifié 1 fois.
OOo 2.0.1 sous WinXP SP2
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Message par jeanmimi »

bonjour,

Normalement, tu peux créer une base de données dans OOo Base en lui demandant de se connecter, lors de la cration, à la base access déjà existante.

Si ta OOo Base existe déjà, as-tu tenté de faire une copie de la table de la base acces (sélectionner, copier) et de la coller dans ta OOo Base ouverte et l'icone Tables séléctionnée ?
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Yaone
Membre OOrganisé
Membre OOrganisé
Messages : 94
Inscription : 04 avr. 2006 13:48

Message par Yaone »

Non parce que je ne peux pas accéder au contenu de ma base de données access. (il faudrait que je demande le mot de passe)

Et même si ça marche, je ne vais pas demander à l'utilisateur de faire ça manuellement. :?
Il n'y a pas un moyen de le faire automatiquement ? Genre avec des macros ? :?
OOo 2.0.1 sous WinXP SP2
poukram
Membre OOrganisé
Membre OOrganisé
Messages : 93
Inscription : 03 avr. 2006 15:50

Message par poukram »

Salut salut !

J'ai fais qqch d'équivalent avec une macro.
Mais ma base access n'était pas protégé par mot de passe.
(Je suppose que ca ne pose pas de réel problème excepté qu'il apparait en dur ds le code et si tu ne le connais pas ....)

Bref j'ai créer un fichier Base qui est l'import du fichier access et j'ai créer une connexion a cette base de données.
Je récupère les valeurs de tout les champs entrée par entrée j'apporte qq corrections quand c'est faisable
et j'ouvre une autre connexion vers ma nouvelle base de donnée pour chaque entrée de l'ancienne base. Je fais alors autant d'insert que je vise de table dans ma nouvelle base avec les valeurs récupérer dans l'ancienne et le tour est joué :D

Temps d'exécution pour une base de donnée qui contient au total 10 000 entrée environ 12 min.

Si tu veux plus de détails demande ;)
+
OOo 2.0.2 sous windows XP
Yaone
Membre OOrganisé
Membre OOrganisé
Messages : 94
Inscription : 04 avr. 2006 13:48

Message par Yaone »

Ca m'intéresse. :D
C'est peut-être ce que je cherche. Et pour le mot de passe, ça ne devrait pas poser de problème ^^
OOo 2.0.1 sous WinXP SP2
poukram
Membre OOrganisé
Membre OOrganisé
Messages : 93
Inscription : 03 avr. 2006 15:50

Message par poukram »

Code : Tout sélectionner

dim maConnexionNewBase as object
dim maConnexionOldBase as object
'
Sub Main
	dim maRequete as Object, resuQuery as Object
	dim instrSQL as string
	'
	dim maRequeteNewBase as Object
	dim instrSQLNewBase as string
	'
	dim chp1_OLD as string
	dim chp2_OLD as integer
	dim chp3_OLD as string 
	'
	dim chp1New as string
	dim chp2New as integer
	dim chp2New as string
	'
	ConnecterSourceOldBase 
	'
	instrSQL = "SELECT * FROM " &  chr(34) & "tableOLD" & chr(34) 
	maRequete = maConnexionOldBase.createStatement()
	resuQuery = maRequete.executeQuery(instrSQL)
	'
	Do while resuQuery.next
'
		chp1_OLD = resuQuery.Columns.getByName("CHP1").string
		chp2_OLD = resuQuery.Columns.getByName("CHP2").getDouble()
		chp3_OLD = resuQuery.Columns.getByName("CHP3").string
		'j'utilise .string pour récupérer les dates a toi ensuite d'adapter une fonction pour les traiter en fonction de tes besoins 
		' traitement exemple if (chp1_OLD = "truc" ) then ....
		
		' le traitement permet de copier les valeurs
		chp1New = chp1_OLD 'etc etc

		ConnecterSourceNewBase 
		'
		instrSQLNewBase = "INSERT INTO " &  chr(34) & "T_tableNEW" & chr(34) & "Values (" _
		& chr(39) & chp1New & chr(39) & ","_
		& chr(39) & chp2New & chr(39) & ","_
		& chr(39) & chp3New & chr(39) & ")"
		'
		maRequeteNewBase = maConnexionNewBase.createStatement()
		tmp = maRequeteNewBase.executeQuery(instrSQLNewBase)
		DeconnecterSourceNewbase		
	Loop
	'
	DeconnecterSourceOldBase

end sub

Sub ConnecterSourceOldBase
	Dim NomSource As String, login As String, password As String
	Dim maSource As Object, monDbContext As Object
	'Création du contexte
	'
	monDbContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
	maSource=monDbContext.getByName("BaseAnciennementEnPLace")
	'
	'Les paramètres de connexion
	login = ""
	password = ""
	maConnexionOldBase = maSource.getConnection(login, password)
	if IsNull(maConnexion) then
 		 MsgBox("Connexion impossible", 16)
  		Stop
	end if
End Sub

Sub ConnecterSourceNewBase
	Dim NomSource As String, login As String, password As String
	Dim maSource As Object, monDbContext As Object
	'Création du contexte
	'
	monDbContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
	maSource=monDbContext.getByName("NouvelleBase")
	'
	'Les paramètres de connexion
	login = ""
	password = ""
	maConnexionNewBase = maSource.getConnection(login, password)
	if IsNull(maConnexion) then
 		 MsgBox("Connexion impossible", 16)
  		Stop
	end if
End Sub

Sub DeconnecterSourceOldBase()
maConnexionOldBase.close
maConnexionOldBase.dispose
End Sub

Sub DeconnecterSourceNewBase()
maConnexionNewBase.close
maConnexionNewBase.dispose
End Sub
Connection a l'ancienne base récupération et traitement des données pour chaque entrée de la table et l'insert qui va bien en meme tps dans la nouvelle base

voila voila

++
OOo 2.0.2 sous windows XP
Yaone
Membre OOrganisé
Membre OOrganisé
Messages : 94
Inscription : 04 avr. 2006 13:48

Message par Yaone »

Je n'avais pas pensé à faire ça comme ça.
En tout cas merci beaucoup, ça va grandement m'aider. :D
OOo 2.0.1 sous WinXP SP2