OVH Cloud OVH Cloud

DBF - je tente ma chance

4 réponses
Avatar
Dude
J'avais posté un truc du genre sur le forum VBA, mais il m'a l'air bien
moins dynamique que celui-ci. Bref, voilà mon problème :

Je tente de mettre en place une sorte de DataWarehouse sur MySQL.
Excel, dont les ressources sont décidément inépuisables, me permet de faire
la manip : j'établis une connection ODBC avec mes données sources, puis
insère ces mêmes données dans ma base MySQL.

Tout ceci ronronne , sauf pour le format DBF (tables indépendantes) : le
driver fourni par défaut par Crosoft (Visual Foxpro) gère très mal les
accents et les charactères spéciaux. J'ai bien essayé le driver jet, mais
visiblement il se bloque en "read only" sur les fichiers dbf.

Une âme généreuse aurait-elle un driver digne de ce nom à me suggérer ?
Qui sait faire une vraie connection ODBC sur un fichier DBF à l'aide d'Excel
? (défi ?)

Thank's Folks

4 réponses

Avatar
MichDenis
Bonjour Dude,

As-tu essayé avec ADO (activex data objects).

Tu ajoutes à ton projet VBA, la référence suivante :
"Microsoft Activex Data Object 2.0"

Une procédure pourrait ressembler à ceci :
'-----------------------------
Sub MonRecordSet()
Dim Conn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Requete As String

Requete = "Select * From TableX"

Conn.Open "Provider=vfpoledb;" & _
"Data Source=C:vfp8SamplesDatamyVFPDB.dbc;" & _
"Mode=ReadWrite|Share Deny None;" & _
"Collating Sequence=MACHINE;" & _
"Password=''"

Rst.Open Requete, Conn, adOpenStatic, adLockOptimistic, adCmdText
'ce que tu veux faire sur les enregistrements de ton recordset

Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Sub
'-----------------------------


Salutations!



"Dude" a écrit dans le message de news:
J'avais posté un truc du genre sur le forum VBA, mais il m'a l'air bien
moins dynamique que celui-ci. Bref, voilà mon problème :

Je tente de mettre en place une sorte de DataWarehouse sur MySQL.
Excel, dont les ressources sont décidément inépuisables, me permet de faire
la manip : j'établis une connection ODBC avec mes données sources, puis
insère ces mêmes données dans ma base MySQL.

Tout ceci ronronne , sauf pour le format DBF (tables indépendantes) : le
driver fourni par défaut par Crosoft (Visual Foxpro) gère très mal les
accents et les charactères spéciaux. J'ai bien essayé le driver jet, mais
visiblement il se bloque en "read only" sur les fichiers dbf.

Une âme généreuse aurait-elle un driver digne de ce nom à me suggérer ?
Qui sait faire une vraie connection ODBC sur un fichier DBF à l'aide d'Excel
? (défi ?)

Thank's Folks
Avatar
Dude
Merci MichDenis, je ne connaissais pas la propriété "Mode".
Je n'ai pas encore eu le temps de tester mais je sens qu'on touche à la
solution :)

Autre chose (pendant que j'y suis, et si tu suis encore cette ficelle).
Sais-tu s'il est possible d'insérer un RecordSet "en bloc", sans passer par
les instructions SQL ? (quelque chose du genre "dump database" sur les
moteurs SQL classiques). Cela m'éviterait les erreurs usuelles, genre erreur
de format de date, blocage sur les "quotes", etc...

"MichDenis" wrote in message
news:
Bonjour Dude,

As-tu essayé avec ADO (activex data objects).

Tu ajoutes à ton projet VBA, la référence suivante :
"Microsoft Activex Data Object 2.0"

Une procédure pourrait ressembler à ceci :
'-----------------------------
Sub MonRecordSet()
Dim Conn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Requete As String

Requete = "Select * From TableX"

Conn.Open "Provider=vfpoledb;" & _
"Data Source=C:vfp8SamplesDatamyVFPDB.dbc;" & _
"Mode=ReadWrite|Share Deny None;" & _
"Collating Sequence=MACHINE;" & _
"Password=''"

Rst.Open Requete, Conn, adOpenStatic, adLockOptimistic, adCmdText
'ce que tu veux faire sur les enregistrements de ton recordset

Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Sub
'-----------------------------


Salutations!



"Dude" a écrit dans le message de news:

J'avais posté un truc du genre sur le forum VBA, mais il m'a l'air bien
moins dynamique que celui-ci. Bref, voilà mon problème :

Je tente de mettre en place une sorte de DataWarehouse sur MySQL.
Excel, dont les ressources sont décidément inépuisables, me permet de
faire
la manip : j'établis une connection ODBC avec mes données sources, puis
insère ces mêmes données dans ma base MySQL.

Tout ceci ronronne , sauf pour le format DBF (tables indépendantes) : le
driver fourni par défaut par Crosoft (Visual Foxpro) gère très mal les
accents et les charactères spéciaux. J'ai bien essayé le driver jet, mais
visiblement il se bloque en "read only" sur les fichiers dbf.

Une âme généreuse aurait-elle un driver digne de ce nom à me suggérer ?
Qui sait faire une vraie connection ODBC sur un fichier DBF à l'aide
d'Excel
? (défi ?)

Thank's Folks




Avatar
MichDenis
Bonjour Dude,

Je ne connais pas l'environnement d'une base SQL... mais je crois que cela devrait possible.

L'exemple qui suit : Si tu veux créer une nouvelle table avec le Recordset que tu as créer. Ceci s'applique si la
nouvelle table créée est située dans la même base de données.

Dim Conn As New ADODB.ConnectionDim Requete As string
Dim Requete As String

requete = "SELECT Employés.* INTO toto1 FROM Employés"
toto1= Nom de la nouvelle table
Employés.* = Tous les champs de la table Employés

Conn.open ....adapte la chaîne de connexion selon ta base de données... le provider est différent selon le type de base
de données.

Conn.Execute Requete



Salutations!






"Dude" a écrit dans le message de news: ualKd%
Merci MichDenis, je ne connaissais pas la propriété "Mode".
Je n'ai pas encore eu le temps de tester mais je sens qu'on touche à la
solution :)

Autre chose (pendant que j'y suis, et si tu suis encore cette ficelle).
Sais-tu s'il est possible d'insérer un RecordSet "en bloc", sans passer par
les instructions SQL ? (quelque chose du genre "dump database" sur les
moteurs SQL classiques). Cela m'éviterait les erreurs usuelles, genre erreur
de format de date, blocage sur les "quotes", etc...

"MichDenis" wrote in message
news:
Bonjour Dude,

As-tu essayé avec ADO (activex data objects).

Tu ajoutes à ton projet VBA, la référence suivante :
"Microsoft Activex Data Object 2.0"

Une procédure pourrait ressembler à ceci :
'-----------------------------
Sub MonRecordSet()
Dim Conn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Requete As String

Requete = "Select * From TableX"

Conn.Open "Provider=vfpoledb;" & _
"Data Source=C:vfp8SamplesDatamyVFPDB.dbc;" & _
"Mode=ReadWrite|Share Deny None;" & _
"Collating Sequence=MACHINE;" & _
"Password=''"

Rst.Open Requete, Conn, adOpenStatic, adLockOptimistic, adCmdText
'ce que tu veux faire sur les enregistrements de ton recordset

Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Sub
'-----------------------------


Salutations!



"Dude" a écrit dans le message de news:

J'avais posté un truc du genre sur le forum VBA, mais il m'a l'air bien
moins dynamique que celui-ci. Bref, voilà mon problème :

Je tente de mettre en place une sorte de DataWarehouse sur MySQL.
Excel, dont les ressources sont décidément inépuisables, me permet de
faire
la manip : j'établis une connection ODBC avec mes données sources, puis
insère ces mêmes données dans ma base MySQL.

Tout ceci ronronne , sauf pour le format DBF (tables indépendantes) : le
driver fourni par défaut par Crosoft (Visual Foxpro) gère très mal les
accents et les charactères spéciaux. J'ai bien essayé le driver jet, mais
visiblement il se bloque en "read only" sur les fichiers dbf.

Une âme généreuse aurait-elle un driver digne de ce nom à me suggérer ?
Qui sait faire une vraie connection ODBC sur un fichier DBF à l'aide
d'Excel
? (défi ?)

Thank's Folks




Avatar
Dude
Re -

vi effectivement, c'est possible en suivant cette méthode, mais
malheureusement il y a pas mal de charactères usuels qui sont "réservés"
dans SQL : ' par exemple.
Du coup l'instruction "INSERT INTO table values('valeur1', 'valeur2',
'valeur3'...)" suppose que valeur1, valeur2, etc.... ne contiennent pas de
quotes (pour ne partler que des quotes, mais il y a également d'autres
problèmes, sur les dates par exemple), donc il faut "nettoyer" chaque
champs, ce qui ralentit considérablement le taux de transfert.

J'aurais donc bien aimé livrer le Recordset en bloc, si ça avait été
possible.

Merci pour ton aide en tout cas :)

"MichDenis" wrote in message
news:eFwihZ%
Bonjour Dude,

Je ne connais pas l'environnement d'une base SQL... mais je crois que cela
devrait possible.

L'exemple qui suit : Si tu veux créer une nouvelle table avec le
Recordset que tu as créer. Ceci s'applique si la
nouvelle table créée est située dans la même base de données.

Dim Conn As New ADODB.ConnectionDim Requete As string
Dim Requete As String

requete = "SELECT Employés.* INTO toto1 FROM Employés"
toto1= Nom de la nouvelle table
Employés.* = Tous les champs de la table Employés

Conn.open ....adapte la chaîne de connexion selon ta base de données... le
provider est différent selon le type de base
de données.

Conn.Execute Requete



Salutations!






"Dude" a écrit dans le message de news:
ualKd%
Merci MichDenis, je ne connaissais pas la propriété "Mode".
Je n'ai pas encore eu le temps de tester mais je sens qu'on touche à la
solution :)

Autre chose (pendant que j'y suis, et si tu suis encore cette ficelle).
Sais-tu s'il est possible d'insérer un RecordSet "en bloc", sans passer
par
les instructions SQL ? (quelque chose du genre "dump database" sur les
moteurs SQL classiques). Cela m'éviterait les erreurs usuelles, genre
erreur
de format de date, blocage sur les "quotes", etc...

"MichDenis" wrote in message
news:
Bonjour Dude,

As-tu essayé avec ADO (activex data objects).

Tu ajoutes à ton projet VBA, la référence suivante :
"Microsoft Activex Data Object 2.0"

Une procédure pourrait ressembler à ceci :
'-----------------------------
Sub MonRecordSet()
Dim Conn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Requete As String

Requete = "Select * From TableX"

Conn.Open "Provider=vfpoledb;" & _
"Data Source=C:vfp8SamplesDatamyVFPDB.dbc;" & _
"Mode=ReadWrite|Share Deny None;" & _
"Collating Sequence=MACHINE;" & _
"Password=''"

Rst.Open Requete, Conn, adOpenStatic, adLockOptimistic, adCmdText
'ce que tu veux faire sur les enregistrements de ton recordset

Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Sub
'-----------------------------


Salutations!



"Dude" a écrit dans le message de news:

J'avais posté un truc du genre sur le forum VBA, mais il m'a l'air bien
moins dynamique que celui-ci. Bref, voilà mon problème :

Je tente de mettre en place une sorte de DataWarehouse sur MySQL.
Excel, dont les ressources sont décidément inépuisables, me permet de
faire
la manip : j'établis une connection ODBC avec mes données sources, puis
insère ces mêmes données dans ma base MySQL.

Tout ceci ronronne , sauf pour le format DBF (tables indépendantes) : le
driver fourni par défaut par Crosoft (Visual Foxpro) gère très mal les
accents et les charactères spéciaux. J'ai bien essayé le driver jet, mais
visiblement il se bloque en "read only" sur les fichiers dbf.

Une âme généreuse aurait-elle un driver digne de ce nom à me suggérer ?
Qui sait faire une vraie connection ODBC sur un fichier DBF à l'aide
d'Excel
? (défi ?)

Thank's Folks